Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

ritardo software PIC16F84A

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] ritardo software PIC16F84A

Messaggioda Foto UtenteBeccaria » 19 gen 2010, 21:24

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

Avatar utente
Foto UtenteBeccaria
0 2
 
Messaggi: 11
Iscritto il: 9 dic 2009, 21:39

0
voti

[2] Re: ritardo software PIC16F84A

Messaggioda Foto Utentec1b8 » 19 gen 2010, 21:51

Secondo me è invertito il controllo dopo la chiamata alla Delay: non deve essere

btfsc PORTA,Relay ; Controlla lo stato della porta e salta l'istruzione successiva se a 0
ma
btfss PORTA,Relay ; Controlla lo stato della porta e salta l'istruzione successiva se a 0
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[3] Re: ritardo software PIC16F84A

Messaggioda Foto UtenteBeccaria » 19 gen 2010, 22:13

grande !; appena cambiato, riprogrammato e testato, era proprio quello .... continuavo a concentrami sul codice del delay perché pensavo che ci fosse qualcosa di errato che non lo facesse uscire dai loop di ritardo. Grazie.
Avatar utente
Foto UtenteBeccaria
0 2
 
Messaggi: 11
Iscritto il: 9 dic 2009, 21:39


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti