PROCESSOR 16F84A. ;configurazione FUSES: oscillatore XT, WDT disabilitato PWRT abilitato, CP disabilitato config 0x3FF1

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "PROCESSOR 16F84A. ;configurazione FUSES: oscillatore XT, WDT disabilitato PWRT abilitato, CP disabilitato config 0x3FF1"

Transcript

1 ---- ; Programma per ROBOT MDB3F Evolution ; Autore: MICCI Antonello copyright ;Piedino RA0 ingresso fotocellula dx livello basso rilevazione ostacolo ;Piedino RA1 ingresso fotocellula sx livello basso rilevazione ostacolo ;Piedino RA2 ingresso sensore crepuscolare livello alto ambiente buio ;Piedino RB0 uscita comando driver motore sx ;Piedino RB1 uscita comando driver motore sx ;Piedino RB2 uscita comando driver motore dx ;Piedino RB3 uscita comando driver motore dx ;Piedino RB4 uscita comando relè luce ;Configurazione ingressi driver L293DNE motori ;ingressi senso rotazione motore ; 0 0 FERMO ; 0 1 ANTIORARIO ; 1 0 ORARIO ; 1 1 FERMO PROCESSOR 16F84A ;configurazione FUSES: oscillatore XT, WDT disabilitato PWRT abilitato, CP disabilitato config 0x3FF1 RADIX DEC INCLUDE "P16F84A.INC" ORG 0CH Count RES 2 flag RES 1 azione RES 1 ORG 00H ;settaggio PORTI I/O PORTA ingresso e PORTB uscite bsf STATUS,RP0 movlw B movwf TRISA movlw B movwf TRISB bcf STATUS,RP0 clrf PORTB ;attende che le fotocellule all'accensione si stabilizzano

2 ;carica configurazione motori avanti nel file azione movlw b movwf azione ;ciclo di funzionamento ROBOT loop ;azzera flag di controllo per subroutine indietro bcf flag,0 ;carica configurazione azione nel PORTB movf azione,w movwf PORTB ;testa fotocellula destra (ostacolo a DX ROBOT vira a SX) ;viene chiamata la subrutine giradx in quanto sul ROBOT gli ingressi ai driver sono invertiti btfss PORTA,0 call giradx ;testa fotocellula sinistra (ostacolo a SX ROBOT vira a DX) ;viene chiamata la subrutine girasx in quanto sul ROBOT gli ingressi ai driver sono invertiti btfss PORTA,1 call girasx ;testa crepuscolare se 1 il piedino 3 del PORTA ambiente buio btfsc PORTA,2 call luceon ;testa crepuscolare se 0 il piedino 3 del PORTA ambiente illuminato btfss PORTA,2 call luceoff goto loop indietro ;esegue un XOR tra il PORTB e il valore dell'accumulatore ;tale operazione permette di scrivere nel PORTB la configurazione 000X0101 (motori antiorario) ;facendo rimanere immutato il valore del bit 5 che pilota la luce movlw b ;attende che il ROBOT vada indietro per circa 3/4 di secondo

3 ;eseguendo lo XOR con il valore messo nell'accumulatore il ROBOT ;dopo aver percorso un tratto in retromarcia gira a sinistra movlw b ;attende la rotazione ;setta il flag di controllo per evitare che dopo che ha indietreggiato ;entri in un loop infinito con la subrutine chiamante bsf flag,0 giradx ;attende 1/4 di secondo e poi controlla se anche la fotocellula ;collegata al piedino 1 del PORTA sta rilevando l'ostacolo ;in caso affermativo indietreggia in quanto ostacolo di fronte btfss PORTA,1 call indietro ;se il flag di controllo è settato esce dalla subrutine in quanto ;il ROBOT indietreggiando ha gia virato btfsc flag,0 goto escisx ;altrimenti esegue uno XOR tra il PORTB e il walore nell'accumulatore ;caricando nel PORTB la configurazione 000X0110 facendo girare verso sx il ROBOT ;lasciando inalterato il valore bel bit 5 che pilota la luce movlw b ;attende che gira

4 escisx girasx ;attende 1/4 di secondo e poi controlla se anche la fotocellula ;collegata al piedino 0 del PORTA sta rilevando l'ostacolo ;in caso affermativo indietreggia in quanto ostacolo di fronte btfss PORTA,0 call indietro ;se il flag di controllo è settato esce dalla subrutine in quanto ;il ROBOT indietreggiando ha gia virato btfsc flag,0 goto escidx ;altrimenti esegue uno XOR tra il PORTB e il walore nell'accumulatore ;caricando nel PORTB la configurazione 000X1001 facendo girare verso dx il ROBOT ;lasciando inalterato il valore bel bit 5 che pilota la luce movlw b ;attende che gira escidx luceon ;esegue un OR tra il valore caricato nell'accumulatore e il file azione ;settando così il bit 5 del PORTB che pilota il relè luce ;lasciando inalterato la configurazione dei bit che comandano i driver dei motori movlw b iorwf azione,f luceoff ;esegue un AND tra il valore caricato nell'accumulatore e il file azione ;resettando così il bit 5 del PORTB che pilota il relè luce ;lasciando inalterato la configurazione dei bit che comandano i driver dei motori movlw b andwf azione,f

5 ;con due cicli nidificati decrementando x 255 volte un registro a 8 bit ;(255 decrementi eseguiti 255 volte) si ottiene un ritardo software ;di circa 1/4 di secondo Delay clrf Count clrf Count+1 DelayLoop decfsz Count,1 goto DelayLoop decfsz Count+1,1 goto DelayLoop END