ritardo software PIC16F84A
ho qualche problema con il funzionamento della temporizzazione sul PIC; non riesco a far scattare ad intervalli regolari il relay; in pratica mi sembra che una volta avviato il ciclo di delay non ne esca più. Dove sbaglio?
- Codice: Seleziona tutto
PROCESSOR 16F84A
RADIX DEC
INCLUDE "P16F84A.INC"
ERRORLEVEL -302
#define Banco0 bcf STATUS,RP0
#define Banco1 bsf STATUS,RP0
__CONFIG 3FF1H
RXData EQU 0 ; Pin RA0
TXData EQU 1 ; Pin RA1
Triac EQU 2 ; Pin RA2
Relay EQU 3 ; Pin RA3
LedRosso EQU 4 ; Pin RA4
; ---------------------------------
LedGiallo EQU 0 ; Pin RB0
LedArancione EQU 1 ; Pin RB1
Ingresso1 EQU 2 ; Pin RB2
Ingresso2 EQU 3 ; Pin RB3
Ingresso3 EQU 4 ; Pin RB4
CBLOCK 0x0C
Count: 3
ENDC
ORG 0x00
Banco1
movlw B'00000001'
movwf TRISA
movlw B'11011100'
movwf TRISB
movlw B'00000000'
movwf OPTION_REG
Banco0
bsf PORTA,Relay ; Attiva il Relay
bsf PORTB,LedGiallo ; Accendi il led giallo
bcf PORTB,LedArancione ; Spegni il led arancione
MainLoop
call Delay
btfsc PORTA,Relay ; Controlla lo stato della porta e salta l'istruzione successiva se a 0
goto Fase2
Fase1
bcf PORTA,Relay ; Disattiva il Relay
bcf PORTB,LedGiallo ; Spegni il led giallo
bsf PORTB,LedArancione ; Accendi il led arancione
goto Avanti
Fase2
bsf PORTA,Relay ; Attiva il Relay
bsf PORTB,LedGiallo ; Accendi il led giallo
bcf PORTB,LedArancione ; Spegni il led arancione
goto Avanti
Avanti
goto MainLoop
Delay
clrf Count
clrf Count+1
clrf Count+2
movlw 6
movwf Count+2
DelayLoop
decfsz Count,1
goto DelayLoop
decfsz Count+1,1
goto DelayLoop
btfss PORTA,LedRosso ; Se il led è acceso salta all' istruzione successiva
goto AccendiLed
SpegniLed
bcf PORTA,LedRosso ; Spegni il led
goto Continua
AccendiLed
bsf PORTA,LedRosso ; Accendi il led
goto Continua
Continua
decfsz Count+2,1
goto DelayLoop
return
END