PROCESSOR 16F84 RADIX DEC INCLUDE "P16F84.INC" __CONFIG 3FF3H ORG 0CH Count RES 2 Direz RES 1 ORG 00H bsf STATUS,RP0 movlw 00000000B movwf TRISA movlw 00000000B movwf TRISB bcf STATUS,RP0 movlw 00000001B movwf PORTB clrf PORTA clrf Direz clrf Count clrf Count+1 bcf STATUS,C MainLoop call Delay btfss Direz,0 goto Sali Scendi rrf PORTA,F rrf PORTB,F btfsc PORTB,0 bcf Direz,0 goto MainLoop Delay movlw 40 movwf Count+1 DelayLoop decfsz Count,F goto DelayLoop decfsz Count+1, goto DelayLoop return Sali rlf PORTB,F rlf PORTA,F btfsc PORTA,3 bsf Direz,0 goto MainLoop END |
Direttiva PROCESSOR: dice al programma che stiamo utilizzando il PIC 16F84 Direttiva RADIX: specifica che i numeri sono in formato decimale. Cioè se scrivo 10 significa il numero decimale 10, diverso da 0x10 (esadecimale del numero 16) e 00000010B (binario di 2) Direttiva INCLUDE: specifica al compilatore di caricare quel file, che include le definizioni di alcuni parametri standard. Direttiva CONFIG: setta i fuses del pic. 3FF3 significa NO,YES,NO,RS. Direttiva ORG 0Ch: dice al compilatore che cio che segue fa parte della RAM. Direttiva RES: riserva
'n' bytes di memoria per la variabile (2 bytes per Count e 1 per Direz)
Istruzione BSF: mette
a 1 il bit specificato (RP0) nel registro specificato (STATUS). In realtà
RP0 e STATUS sono dei numeri e sono definiti in quel file .inc che abbiamo
incluso sopra. Ovviamente RP0 sarà un numero che va da 0 a 7 dato
che ogni registro o cella di ram ha 8 bit. Ad esempio: Istruzione MOVLW: carica nell'accumulatore (indicato con 'W' nei PIC) una costante. Nel caso 0. Istruzione MOVWF: mette l'accumulatore nel registro specificato (TRISA) Istruzione BCF: contrario
di BSF, mette a 0 il bit. Istruzione CLRF: mette
a 0 una variabile o registro. Istruzione CALL: chiama una subroutine. In questo caso lancia la funzione 'delay'. Istruzione BTFSS Direz,0:
controlla il bit '0' della variabile 'Direz' e salta l'istruzione successiva
se il bit è uno, mentre l'eseguirà se il bit è zero. Istruzione RRF: ruota
a destra una variabile, inserendo come nuovo bit il carry e ponendo quello
che esce nel carry. Istruzione DECFSZ: Decrementa una variabile e salta l'istruzione successiva se vale zero. Per fare un delay, l'istruzione successiva sarà un goto a questa istruzione, di modo che decrementi ciclicamente la variabile e quando vale 0, esca dal ciclo. Istruzione RETURN: termina
una call, tornando al programma principale dove era stata chiamata la
funzione. |