Hola:
Partiendo de este esquema, es un PIC16F84A escrito en ensamblador y quiero pasarlo a C, sea con el CCS o el XC8. Para ser sencillo a simple vista, me he comido la cabeza en 5 días para acabarlo proque partes del asm se me había olvidado y tuve que practicar y pedir ayuda al foro. Gracias colaboradores.
.
No estoy familiarizado en C ssobre microcontroladores y debo aprenderlo con tutoriales, en mi caso quiero saber su equivalencia, y el que quiera puede ayudar adaptar el código asm a C. No tienes que saber asm pàra pasarlo a C, simplemente explico el circuito, a lo mejor lo saca más rápido que asm.
Se trata de un microcontrolador PIC16F84A que tiene 5 pulsadores en el cual al pulsarlo se activa un temporizado fijo. Un motor DC de 12V de salida, siempre funciona en la misma dirección.
Pulsador 1 = 5 minutos.
Pulsador 2 = 10 minutos.
Pulsador 3 = 20 minutos.
Pulsador 4 = Stop.
Pulsador 5 = Reset del PIC.
Cada Led encensido corresponde a su pulsador.
Su funcioinamiento debe ser así ya que en el asm no me sale.
Al darle fuente alilmentación al PIC, el motor y los Led deben estar apagados. Si pulso el pulador P2, es decir, Pulsador 2, se enciende el motor dc durante 10 minutos y el Led 2. Si pulso el Pulsador 1 cuando esté o no el de 10 minutos activo, simplemente cuenta de nuevo desde cero y dura 5 minutos el motor activado. Espero que se entienda loq ue quiero decir. El Pulsdor 4 es el Stop. Si el motor está activo y Led, detiene el motor y Led. El Reset resetea el PIC y se coporta como si fuera el pulsador de Stop.
¿Parece fácil, verdad?
Les dejo el asm del 16F84A y espero que me ayuden a pasarlo a C queno tengo idea, sea a código y ya compilado.
Para los atrevidos, buena suerte.
En C se que el código es muchísimo menor.
Ánimos y adelante. Luego tengo qu eestudiar el código para analizarlo y entender el concepto.
Saludo.

Partiendo de este esquema, es un PIC16F84A escrito en ensamblador y quiero pasarlo a C, sea con el CCS o el XC8. Para ser sencillo a simple vista, me he comido la cabeza en 5 días para acabarlo proque partes del asm se me había olvidado y tuve que practicar y pedir ayuda al foro. Gracias colaboradores.
No estoy familiarizado en C ssobre microcontroladores y debo aprenderlo con tutoriales, en mi caso quiero saber su equivalencia, y el que quiera puede ayudar adaptar el código asm a C. No tienes que saber asm pàra pasarlo a C, simplemente explico el circuito, a lo mejor lo saca más rápido que asm.
Se trata de un microcontrolador PIC16F84A que tiene 5 pulsadores en el cual al pulsarlo se activa un temporizado fijo. Un motor DC de 12V de salida, siempre funciona en la misma dirección.
Pulsador 1 = 5 minutos.
Pulsador 2 = 10 minutos.
Pulsador 3 = 20 minutos.
Pulsador 4 = Stop.
Pulsador 5 = Reset del PIC.
Cada Led encensido corresponde a su pulsador.
Su funcioinamiento debe ser así ya que en el asm no me sale.
Al darle fuente alilmentación al PIC, el motor y los Led deben estar apagados. Si pulso el pulador P2, es decir, Pulsador 2, se enciende el motor dc durante 10 minutos y el Led 2. Si pulso el Pulsador 1 cuando esté o no el de 10 minutos activo, simplemente cuenta de nuevo desde cero y dura 5 minutos el motor activado. Espero que se entienda loq ue quiero decir. El Pulsdor 4 es el Stop. Si el motor está activo y Led, detiene el motor y Led. El Reset resetea el PIC y se coporta como si fuera el pulsador de Stop.
¿Parece fácil, verdad?
Les dejo el asm del 16F84A y espero que me ayuden a pasarlo a C queno tengo idea, sea a código y ya compilado.
Para los atrevidos, buena suerte.
Código:
;
;**********http://www.forosdeelectronica.com***********
;
; ZONA DE DATOS **********************************************************************
LIST P=16F84A ; Procesador.
INCLUDE <P16F84A.INC> ; Definición de las etiquetas del PIC.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
__IDlOCS 0001 ; Versión del programa.
Variables UDATA_SHR
RAM RES 1
RAM_1 RES 1
RAM_2 RES 1
RAM_3 RES 1
RAM_4 RES 1
RAM_5 RES 1
RAM_6 RES 1
RAM_7 RES 1
RAM_8 RES 1
RAM_9 RES 1
RAM_10 RES 1
RAM_11 RES 1
RAM_12 RES 1
RAM_13 RES 1
RAM_14 RES 1
RAM_15 RES 1
RAM_16 RES 1
RAM_17 RES 1
#DEFINE Pulsador_1 PORTA,4 ; Pulsador conectado a RA4.
#DEFINE Pulsador_2 PORTA,3 ; Pulsador conectado a RA3.
#DEFINE Pulsador_3 PORTA,2 ; Pulsador conectado a RA2.
#DEFINE Pul_STOP PORTA,1 ; Pulsador de parada del motor.
#DEFINE Motor PORTB,7 ; Línea donde se conecta el motor.
#DEFINE Led_1 PORTB,6 ; Led 1.
#DEFINE Led_2 PORTB,5 ; Led 2.
#DEFINE Led_3 PORTB,4 ; Led 3.
; ZONA DE CÓDIGOS ********************************************************************
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
bsf Pulsador_1 ; La línea RA4 se configura como entrada.
bsf Pulsador_2 ; La línea RA3 se configura como entrada.
bsf Pulsador_3 ; La línea RA2 se configura como entrada.
bsf Pul_STOP ; La línea RA1 se configura como entrada.
bcf Motor ; Se configura como salida.
bcf Led_1 ; Led de aviso 5 minutos en activo.
bcf Led_2 ; Led de aviso 10 minutos en activo.
bcf Led_3 ; Led de aviso 20 minutos en activo.
bcf STATUS,RP0 ; Acceso al Banco 0.
bcf Motor ; En principio Motor apagado igual
bcf Led_1 ; que los Leds.
bcf Led_2
bcf Led_3
Principal
btfsc Pulsador_1 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
goto Fin ; No. Vuelve a leerlo.
call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
btfsc Pulsador_1 ; Comprueba si es un rebote.
goto Fin ; Era un rebote y sale fuera.
bsf Motor ; Activa el motor y
bsf Led_1 ; enciende el Led 1 que significa
call Retardo5m ; los 5 minutos encendido.
bcf Motor ; Apaga el motor y
bcf Led_1 ; el Led 1.
EsperaDejePulsar_1
btfss Pulsador_1 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
goto EsperaDejePulsar_1 ; No. Espera que deje de pulsar.
Fin
btfsc Pulsador_2 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
goto Fin2 ; No. Vuelve a leerlo.
call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
btfsc Pulsador_2 ; Comprueba si es un rebote.
goto Fin2 ; Era un rebote y sale fuera.
bsf Motor ; Activa el motor y
bsf Led_2 ; enciende el Led 2 que significa
call Retardo10m ; los 10 minutos encendido.
bcf Motor ; Apaga el motor y
bcf Led_2 ; el Led 2.
EsperaDejePulsar_2
btfss Pulsador_2 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
goto EsperaDejePulsar_2 ; No. Espera que deje de pulsar.
Fin2
btfsc Pulsador_3 ; ¿Pulsador presionado?, ¿(Pulsador)=0?
goto Fin3 ; No. Vuelve a leerlo.
call Retardo20ms ; Espera que se estabilicen los niveles de tensión.
btfsc Pulsador_3 ; Comprueba si es un rebote.
goto Fin3 ; Era un rebote y sale fuera.
bsf Motor ; Activa el motor y
bsf Led_3 ; enciende el Led 3 que significa
call Retardo20m ; los 10 minutos encendido.
bcf Motor ; Apaga el motor y
bcf Led_3 ; el Led 3.
EsperaDejePulsar_3
btfss Pulsador_3 ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
goto EsperaDejePulsar_3 ; No. Espera que deje de pulsar.
Fin3 goto Principal
; Subrutinas ****************************************************************
Retardo20ms
;199993 cycles
movlw 0x3E
movwf RAM_8
movlw 0x9D
movwf RAM_9
Retardo20ms_0
decfsz RAM_8, f
goto $+2
decfsz RAM_9, f
goto Retardo20ms_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
return
Retardo5m
;299999995 cycles
movlw 0x54
movwf RAM_10
movlw 0xA1
movwf RAM_11
movlw 0xFD
movwf RAM_12
movlw 0x02
movwf RAM_13
Retardo5m_0
decfsz RAM_10, f
goto $+2
decfsz RAM_11, f
goto $+2
decfsz RAM_12, f
goto $+2
decfsz RAM_13, f
goto Retardo5m_0
;1 cycle
nop
;4 cycles (including call)
return
Retardo10m
;599999992 cycles
movlw 0xA9
movwf RAM_4
movlw 0x41
movwf RAM_5
movlw 0xFA
movwf RAM_6
movlw 0x04
movwf RAM_7
Retardo10m_0
decfsz RAM_4, f
goto $+2
decfsz RAM_5, f
goto $+2
decfsz RAM_6, f
goto $+2
decfsz RAM_7, f
goto Retardo10m_0
;4 cycles
goto $+1
goto $+1
;4 cycles (including call)
return
cblock
RAM
RAM_1
RAM_2
RAM_3
endc
Retardo20m
;1199999995 cycles
movlw 0x54
movwf RAM_14
movlw 0x82
movwf RAM_15
movlw 0xF3
movwf RAM_16
movlw 0x08
movwf RAM_17
Retardo20m_0
decfsz RAM_14, f
goto $+2
decfsz RAM_15, f
goto $+2
decfsz RAM_16, f
goto $+2
decfsz RAM_17, f
goto Retardo20m_0
;1 cycle
nop
;4 cycles (including call)
return
END
En C se que el código es muchísimo menor.
Ánimos y adelante. Luego tengo qu eestudiar el código para analizarlo y entender el concepto.
Saludo.