Me estoy iniciando en la programación pic y he empezado por el 16f84a.
Mi proyecto es controlar un termostato de calefación por medio de un pc (solo encendido y apagado) y además que el pic me devuelva el estado por un mensaje al hyperterminal.
En el circuito de proteus emulo el relé de doble bobina y latching de control del termostato con 2 leds, pero no funciona y no se por qué.
Se que el circuito está bien y el Emsamblador no me dá errores. Os dejo mi asm y el circuito que uso en proteus. Se agradecería una explicación del error para un novato. Gracias adelantadas
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
TeclaPulsada ; Va a guardar el contenido de la tecla pulsada.
MensajeApuntado ; Va a guardar la dirección del mensaje apuntado.
ENDC
#DEFINE SalidaOn PORTB,1 ; Define dónde se sitúan las salidas.
#DEFINE SalidaOff PORTB,0
TECLA_ON EQU 't' ; Código de las teclas utilizadas.
TECLA_OFF EQU 'a'
TECLA_PARADA EQU ' ' ; Código de la tecla espaciadora, (hay un espacio,
; tened cuidado al teclear el programa).
; ZONA DE CÓDIGOS ********************************************************************
ORG 0
Inicio
call RS232_Inicializa
bsf STATUS,RP0 ; Configura como salida la línea del
bcf SalidaOn ; Puerto B respetando la configuración del
bcf SalidaOff ; resto de las líneas.
bcf STATUS,RP0
call Parado ; En principio todas las salidas deben estar
Principal ; apagadas.
call RS232_LeeDato ; Espera a recibir un carácter.
call TesteaTeclado
goto Principal
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeOff
DT "Junkers Ceracontrol Off", 0x00
MensajeOn
DT "Junkers Ceracontrol On", 0x00
MensajeParado
DT "Sistema Parado", 0x00
; Subrutina "TesteaTeclado" -------------------------------------------------------------
;
; Testea el teclado y actúa en consecuencia.
TesteaTeclado
movwf TeclaPulsada ; Guarda el contenido de la tecla pulsada.
xorlw TECLA_ON ; ¿Es la tecla del encendido?
btfsc STATUS,Z
goto On ; Sí, se desea encendido.
;
movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada.
xorlw TECLA_OFF ; ¿Es la tecla del apagado?
btfsc STATUS,Z
goto Off ; Sí, se desea apagado.
;
movf TeclaPulsada,W ; Guarda el contenido de la tecla pulsada.
xorlw TECLA_PARADA ; ¿Es la tecla del apagado?
btfss STATUS,Z
goto Fin ; Sí, se desea apagado.
Parado
bcf SalidaOff
bcf SalidaOn
movlw MensajeParado ;
goto Visualiza
Off
bsf SalidaOff
bcf SalidaOn ;
movlw MensajeOff ;
goto Visualiza
On
bcf SalidaOff
bsf SalidaOn
movlw MensajeOn
goto Visualiza
; Según el estado de las salidas visualiza el
; estado del sistema en el monitor del ordenador.
Visualiza
movwf MensajeApuntado ; Guarda la posición del mensaje.
call RS232_LineasBlanco ; Borra la pantalla del ordenador.
movf MensajeApuntado,W
call RS232_Mensaje ; Lo visualiza en el HyperTerminal.
call RS232_LineasBlanco
Fin return
INCLUDE <RS232.INC>
INCLUDE <RS232MEN.INC>
INCLUDE <RETARDOS.INC>
END