Programmazione PIC 16F84A
Salve a tutti, volevo chiedervi un aiuto riguardo la programmazione del PIC 16F84A.
In pratica devo poter comandare 4 LED in uscita attraverso due pulsanti in ingresso. I due pulsanti servono a far spostare l'accensione dei LED a sinistra e a destra. Per esempio nel caso in cui voglio spostarmi con i LED a sinistra, premerò ripetutamente il pulsante di sinistra fino a quando non arriverò al quarto LED. Una volta arrivato al quarto LED devo fare in modo che rimanga acceso nella sua posizione, anche premendo il pulsante. Per spostarmi, dovrò premere il pulsante di destra (per farlo tornare indietro). Dovrò fare lo stesso anche con il primo LED. Devo programmare tutto in Assembler e purtroppo non sono molto bravo
Comunque questo è quello che sono riuscito a tirare fuori :
Fatemi sapere se è tutto sbagliato oppure se qualcosa si può salvare
In pratica devo poter comandare 4 LED in uscita attraverso due pulsanti in ingresso. I due pulsanti servono a far spostare l'accensione dei LED a sinistra e a destra. Per esempio nel caso in cui voglio spostarmi con i LED a sinistra, premerò ripetutamente il pulsante di sinistra fino a quando non arriverò al quarto LED. Una volta arrivato al quarto LED devo fare in modo che rimanga acceso nella sua posizione, anche premendo il pulsante. Per spostarmi, dovrò premere il pulsante di destra (per farlo tornare indietro). Dovrò fare lo stesso anche con il primo LED. Devo programmare tutto in Assembler e purtroppo non sono molto bravo
Comunque questo è quello che sono riuscito a tirare fuori :
- Codice: Seleziona tutto
list p=16f84a
include "p16f84a.inc"
__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
COUNT_1 EQU 0C ;Contatore1
COUNT_2 EQU 0D ;COntatore2
USCITA EQU 0E ;uscita al led usato anche per la rotazione
CARRY EQU 00 ;Bit di riporto C del registro Status
;inizializzazione
INIT ORG 0000H
MOVLW 00 ; muovi 0 in W
TRIS PORTB ; configura PORT B come uscita
MOVLW 00101 ; muovi 00101 in W
TRIS PORTA ; configura RA0 ed RA2 come ingressi
MOVLW 01 ; muovi 1 in W
MOVWF USCITA ; muovi 1 in USCITA
;programma principale
LEFT: BCF STATUS, CARRY ; azzero il bit di carry
BTFSC PORTA,0 ; testiamo RA0, per vedere se il pulsante di rotazione a sinistra è premuto, se è a 1 svolgo l'istruzione sucessiva,se è a 0 salto
GOTO SUB LEFT ; vai alla subroutine di rotazione a sinistra
GOTO RIGHT ; nel caso in cui RA0 è uguale a 0, vado a testare RA2 per vedere se il pulsante di rotazione a destra è premuto
RIGHT: BTFSC PORTA,2 ; testo RA2, se è a 1 svolgo l'istruzione successiva, se è a 0 salto
GOTO SUB RIGHT ; vai alla subroutine di rotazione a destra
GOTO LEFT ; altrimenti torna a testare il pulsante di sinistra
;Subroutine di rotazione a snistra
SUB LEFT: RLF USCITA ; ruota l'uscita a sinistra
BTFSS STATUS, CARRY ; testa il bit di riporto, se è a 0 svolgi l'istruzione successiva, se è a 1 salta
GOTO LEFT ; vai al programma principale, sezione LEFT
MOVLW 01 ; muovi 1 in W
MOVWF USCITA ; muovi 1 in USCITA
GOTO SUB LEFT ; torna all'inizio della subroutine di rotazione sinistra
;Subroutine di rotazione a destra
SUB RIGHT: RRF USCITA ; ruota l'uscita a destra
BTFSS STATUS, CARRY ; testa il bit di riporto, se è a 0 svolgi l'istruzione successiva, se è a 1 salta
GOTO RIGHT ; vai al programma principale, sezione RIGHT
MOVLW 01 ; muovi 1 in W
MOVWF USCITA ; muovi 1 in USCITA
GOTO SUB RIGHT ; torna all'inizio della subroutine di rotazione a destra
Fatemi sapere se è tutto sbagliato oppure se qualcosa si può salvare
Comunque facendo il build per il file HEX MPLAB mi da questi errori: