Salve ragazzi, mi trovo davanti ad un problema (una sciocchezza....per voi!).
A scuola ci hanno dato un compito, riguardante i PIC (16F84A nel mio caso), e prevede una semplice accensione del LED, come segue:
Esempio di partenza datoci, ora l'obbiettivo è:
Invece che accendere un singolo LED, accenderne 8, alternando due sequenze diverse, con un ritardo diverso tra una sequenza e l'altra, uguale a 2 secondi(il ritardo fra una sequenza e l'altra).
Le sequenze sono queste:
11110000
00001111
Come giàdetto, l'intervallo fra una sequenza e l'altra è di 2 secondi.
Ci sono state date le seguenti indicazioni:
Per generare il ritardo bisogna intervenire sulle istruzioni del ciclo Delay. Calcolate quanti cicli macchina occorrono per eseguire il ciclo riportato nel file led.asm(il codice riportato all'inizio), tenendo presente che un ciclo macchina impiega un microsecondo, e quindi calcolate quante volte dovete ripetere il ciclo Delay per ottenere il ritrado che vi serve. Un'idea: potete utilizzare qualche byte in più per la variabile Count (che ora occupa solo 2 byte).
Dato che io di assembly non capisco nulla, mi risulta difficile farlo, ergo richiedo cortesemente il vostro aiuto, devo solo sapere come ritardare di 2 secondi, una sequenza dall'altra.
Grazie
A scuola ci hanno dato un compito, riguardante i PIC (16F84A nel mio caso), e prevede una semplice accensione del LED, come segue:
Codice:
PROCESSOR 16F84A
RADIX DEC
INCLUDE "P16F84A.INC"
ERRORLEVEL -302
;Setup of PIC configuration flags
;XT oscillator
;Disable watch dog timer
;Enable power up timer
;Disable code protect
__CONFIG 0x3FF1
LED EQU 0
ORG 0x0C
Count RES 2
;Reset Vector
;Start point at CPU reset
ORG 0x00
goto Vai
ORG 0x0F
Vai
bsf STATUS,RP0
movlw B'00011111'
movwf TRISA
movlw B'11111110'
movwf TRISB
bcf STATUS,RP0
bsf PORTB,LED
MainLoop
call Delay
btfsc PORTB,LED
goto SetToZero
bsf PORTB,LED
goto MainLoop
SetToZero
bcf PORTB,LED
goto MainLoop
;Subroutines
;Software delay
Delay
clrf Count
clrf Count+1
DelayLoop
decfsz Count,1
goto DelayLoop
decfsz Count+1,1
goto DelayLoop
return
END
Esempio di partenza datoci, ora l'obbiettivo è:
Invece che accendere un singolo LED, accenderne 8, alternando due sequenze diverse, con un ritardo diverso tra una sequenza e l'altra, uguale a 2 secondi(il ritardo fra una sequenza e l'altra).
Le sequenze sono queste:
11110000
00001111
Come giàdetto, l'intervallo fra una sequenza e l'altra è di 2 secondi.
Ci sono state date le seguenti indicazioni:
Per generare il ritardo bisogna intervenire sulle istruzioni del ciclo Delay. Calcolate quanti cicli macchina occorrono per eseguire il ciclo riportato nel file led.asm(il codice riportato all'inizio), tenendo presente che un ciclo macchina impiega un microsecondo, e quindi calcolate quante volte dovete ripetere il ciclo Delay per ottenere il ritrado che vi serve. Un'idea: potete utilizzare qualche byte in più per la variabile Count (che ora occupa solo 2 byte).
Dato che io di assembly non capisco nulla, mi risulta difficile farlo, ergo richiedo cortesemente il vostro aiuto, devo solo sapere come ritardare di 2 secondi, una sequenza dall'altra.
Grazie