Newsgroup: it.hobby.elettronica.digitale
Titolo: Spiegatemi perchè il led non si Spegne?

;**************************************************
; Pic by example
; LED.ASM
;
; (c) 1999, Sergio Tanzilli
; (
picbye...@picpoint.com
)
; 
http://www.picpoint.com
;**************************************************
        PROCESSOR       16F84
        RADIX           DEC
        INCLUDE         "P16F84.INC"
        ERRORLEVEL      -302
        ;Setup of PIC configuration flags
        ;XT oscillator
        ;Disable watch dog timer
        ;Enable power up timer
        ;Disable code protect
        __CONFIG        3FF1H
LED     EQU     0
        ORG     0CH
Count   RES     2
        ;Reset Vector
        ;Start point at CPU reset
        ORG     00H
        bsf     STATUS,RP0
        movlw   00011111B
        movwf   TRISA
        movlw   11111110B
        movwf   TRISB
        bcf     STATUS,RP0
        bsf     PORTB,LED     ;accende il led
        clrf    Count
DelayLoop
        decfsz  Count,1
        goto    DelayLoop
        bcf     PORTB,LED     ;dovrebbe spegnere il led
        END
Grazie.

Prova ad isolare il problema. Dovresti vedere anzitutto se funziona la linea
di I/O dove hai collegato il led. Compila questo programma,
programma il PIC e vedi se il led rimane acceso.
         PROCESSOR       16F84
         RADIX           DEC
         INCLUDE         "P16F84.INC"
         ERRORLEVEL      -302
         __CONFIG        3FF1H
 LED     EQU     0
         ORG     0CH
         bsf     STATUS,RP0
         movlw   11111110B
         movwf   TRISB
         bcf     STATUS,RP0
          bsf     PORTB,LED     ;accende il led
loop
        goto loop
        END
...quindi compila quest'altro programma (cambia solo a BCF PORTB,LED),
programma il PIC e vedi se il led rimane spento.
         PROCESSOR       16F84
         RADIX           DEC
         INCLUDE         "P16F84.INC"
         ERRORLEVEL      -302
         __CONFIG        3FF1H
 LED     EQU     0
         ORG     0CH
         bsf     STATUS,RP0
         movlw   11111110B
         movwf   TRISB
         bcf     STATUS,RP0
          bcf     PORTB,LED     ;spegne il led
loop
        goto loop
        END
Se i programmi non funzionano le linea di 0 della PORTA B del tuo PIC non
va'. Riprova cambiando linea. Se invece funzionano direi
che il problema e' da ricercare nel fatto che prima della END non hai messo
le istruzioni
loop
        goto loop
che inchiodano il PIC ad eseguire un loop infinito ed a non eseguire altre
instruzioni al di fuiri di quelle esplicitamente inserire.
Ora mi viene un dubbio, ho commesso io questo errore nel corso ? Vado a
verificare.
Ciao
Sergio Tanzilli

Forse ai ragione stasera provo, evidentemente non eseguendo un loop alla
fine chissà quale altra istruzione mi va ad eseguire dopo.
Comunque le linee di I/O funzionano perche il tuo proramma luci in sequenza
funziona e anche led.
L'unica cosa che non capisco ancora ma forse verrà spiegata più avanti nel
corso è perchè ogni volta bisogna fare:
         bsf     STATUS,RP0     ;ok setta il bit 0 ma perchè?
         movlw   11111110B
         movwf   TRISB
         bcf     STATUS,RP0     ; lo mette a zero il bit0 ma perchè?
Grazie di tutto siete molto gentili.


L'istruzione bsf STATUS,RP0 serve per commutare banco di registri. In
pratica i registri del PIC16F84 sono disposti su due banchi di
memoria indirizzabili tramite i flag RP0 ed RP1. Il registro TRISB che serve
si trova sul banco 1 per cui ogni volta che devo definire se una linea e' in
ingresso o in uscita devo poter accedere al banco uno con l'istruzione bsf
STATUS,RP0, quindi scrivere in TRISB il valore che desidero e
reindirizzare il banco 0 con l'istruzione BCF STATUS,RP0.
Effettivamente non ricordo se ho scritto qualcosa a riguardo nel corso. In
caso negativo cerchero' di farlo quanto prima.
Ciao
Sergio