Newsgroup: it.hobby.elettronica.digitale
Titolo: AIUTO PIC 16F84

Ciao ragaggi ho bisogno di un aiuto per un programmino per un 16f84.
Il problema sta nel fatto che ad ogni reset della cpu ed al primo avvio,
viene svolta la parte di interrupt provenienti dalla portaB 5, mentre quelli
INT non vengono svolti.
Ciň nonostante durante l'esecuzione del programma tutto funziona
regolarmente. Posto il codice sperando che qlc mi possa aiutare.
grazie anticipatamente a tutti
Roby
        PROCESSOR       16F84
        RADIX           DEC
        INCLUDE         "P16F84.INC"
        __CONFIG        3FF1H
 Risveglio      EQU 0 ;interrupt di risveglio
 TastoNo      EQU 3 ;A
 TastoYes     EQU 2 ;A
 TastoDue     EQU 1 ;A
 ORG     0CH
Count   RES     2
        ORG     00H  ; da qui riparte dopo reset
 clrf  PORTB ; disattiva tutte le porte B
 clrf  PORTA ; disattiva tutte le porte A
 nop
 goto Start
        ORG     04H ; da qui parte esecuzione interrupt
;**********************************************************************
        ; Interrupt handler
;**********************************************************************
        ;Controllo evento interrupt
        btfsc   INTCON,INTF
        goto    IntINTF
        btfsc   INTCON,RBIF
        goto    IntRBIF
;**********************************************************************
        ; RB4-RB7 interrupt handler
;**********************************************************************
IntRBIF
        ;Interrupt da parte del telecomando
  bsf     PORTA,TastoYes
 call    Delay
 bcf     PORTA,TastoYes
 call    Delay
 bsf     PORTA,TastoYes
 call    Delay
 bcf     PORTA,TastoYes
 call    Delay
 bsf     PORTA,TastoYes
 call    Delay
 bcf     PORTA,TastoYes
 call    Delay
 bsf     PORTA,TastoYes
 call    Delay
 bcf     PORTA,TastoYes
  bcf     INTCON,INTF
  bcf     INTCON,RBIF
 retfie
;**********************************************************************
        ; INTF Interrupt handler
;**********************************************************************
IntINTF
 bsf     PORTA,TastoDue
 call    Delay
 bcf     PORTA,TastoDue
 call    Delay
 bsf     PORTA,TastoDue
 call    Delay
 bcf     PORTA,TastoDue
 call    Delay
 bsf     PORTA,TastoDue
 call    Delay
 bcf     PORTA,TastoDue
 call    Delay
 bsf     PORTA,TastoDue
 call    Delay
 bcf     PORTA,TastoDue
 bcf     INTCON,INTF
        bcf     INTCON,RBIF
 retfie
;**********************************************************************
        ; Main body
;**********************************************************************
Start:
        bsf     STATUS,RP0
        movlw   00000000B       ;Definition of port a
        movwf   TRISA
 movlw   00100000B       ;Definition of port b
        movwf   TRISB
 movlw   00000100B
        movwf   OPTION_REG
 bsf     TRISB,Risveglio
        bcf     OPTION_REG,INTEDG  ;fronte di salita
        bcf     STATUS,RP0         ;Swap to data bank 0
        bsf     INTCON,GIE      ;Abilita interrupts
        bsf     INTCON,INTE     ;Abilita RB0/INT interrupt
 bsf     INTCON,RBIE ;Abilita RB4-RB7 interrupt
MainLoop
 clrf  PORTB ; disattiva tutte le porte B
 clrf  PORTA ; disattiva tutte le porte A
 bsf     PORTA,TastoNo
 call    Delay
 bcf     PORTA,TastoNo
 sleep
      goto MainLoop
Delay
 movlw   6
        movwf   TMR0
        movlw   125
        movwf   Count
DelayLoop
        movf    TMR0,W
        btfss   STATUS,Z
        goto    DelayLoop       ;No, aspetta...
        movlw   6               ;Si, reimposta TMR0 e controlla se
        movwf   TMR0            ;e' passato per 125 volte per lo zero
        decfsz  Count,1
        goto    DelayLoop
        return
        END

 INT non vengono svolti.
Non ho capito ... puoi spiegarti meglio ???

Ti consiglio di aggiungere un RTFIE .... altrimenti la routine successiva č
sempre eseguita ad ogni evento di interrupt che non gestisci (non dovrebbe
accadere) ma non si sa mai.
Un'altra cosa, prima di inziare la gestione INTERRUPT č sempre bene salvare
i registri di uso comune: W, PCLATH, STATUS, FSR, e ripristinarli prima di
uscire dall'ISR.

Fai prima i controlli indicati, e spiega bene qual č il problema.
Ci risentiamo.
Ciao Gabriele.

 ha scritto nel messaggio
news:5VFwc.24975$G%.24792@tornado.fastwebnet.it...


 > Ciò nonostante durante l'esecuzione del programma tutto funziona


 ha scritto nel messaggio
news:TVWwc.25768$G%.18791@tornado.fastwebnet.it...


 ha scritto nel messaggio
news:2iiv6gF...@uni-berlin.de...


 primo avvio, in questo caso, il problema č come prima, continua ad


 > primo avvio, in questo caso, il problema è come prima, continua ad


 > > > primo avvio, in questo caso, il problema č come prima, continua ad


 > > > > primo avvio, in questo caso, il problema è come prima, continua ad


 ha scritto nel messaggio
news:VFixc.27721$G%.20902@tornado.fastwebnet.it...


 Ciò nonostante durante l'esecuzione del programma tutto funziona
