Sekundfördröjning med PIC
Sekundfördröjning med PIC
Är ny på det här med PIC programering, men jag undrar hur jag gör en fördröjning på 1 sekund? tex får en lysdiod att blinka en gån i sekunden eller ett värde att räknas up varje sekund. Har för mig att det finns nåt inbyggt för detta eller måste man se hur fort pic:en räknar vid en viss klockfrrekvens och sätta en räknare till detta värdet?
Tyvärr måste veta vad du har för klockfrekvens.
Här har jag lekt pedagog: http://www.geekjoan.com/forum/viewtopic ... c&start=15 kanske kan hjälpa lite iaf.
Edit: Kanske ska säga att det handlar om interrupt, kanske är lite onödigt att använda om du bara ska blinka en lysdiod men inte fel att lära sig. Här kan du se lite olika varianter på hur man gör fördröjningar i mjukvara: http://www.piclist.com/techref/microchi ... eneral.htm
Här har jag lekt pedagog: http://www.geekjoan.com/forum/viewtopic ... c&start=15 kanske kan hjälpa lite iaf.
Edit: Kanske ska säga att det handlar om interrupt, kanske är lite onödigt att använda om du bara ska blinka en lysdiod men inte fel att lära sig. Här kan du se lite olika varianter på hur man gör fördröjningar i mjukvara: http://www.piclist.com/techref/microchi ... eneral.htm
Senast redigerad av mrmike 15 februari 2004, 19:51:13, redigerad totalt 1 gång.
Har du en klockfrekvens på 4MHz så tar varje instruktion (förutom hopp som tar dubbelt så lång tid på sig) 1ns att utföra. Eller: Tiden det tar att utföra en instruktion är 1/(klockfrekvens/4). Så då är det bara att vänta i en miljon instruktioner så har ganska exakt en sekund passerat.
Fast i just detta fallet kan du vänta 1/2s, tända lysdioden, vänta 1/2s till, släcka lysdioden, börja om.
Hur ny är du på PIC? Så man inte försöker förklara nåt du redan vet, tänkte jag.
Fast i just detta fallet kan du vänta 1/2s, tända lysdioden, vänta 1/2s till, släcka lysdioden, börja om.
Hur ny är du på PIC? Så man inte försöker förklara nåt du redan vet, tänkte jag.
Kan säga jag är hyfsat ny, har precis börjat labba med det. Jag har bra grundkunskaper, skall bara omsätta det för PIC. Mycket att hålla reda på nu i början. Jag misstänkte just den förklaringen jag fick, men hur utför jag den enklast rent praktiskt? Finns det nån form av delay ett visst antal instruktioner? Jag vill ju inte skriva 1M NOP instruktioner.....
Annars tänkte jag lösa det med räkna ner en variabel, som när den är noll räknar ner en ny, fast det känns lite omständigt och jag vill ha enklast möjliga lösning.
Annars tänkte jag lösa det med räkna ner en variabel, som när den är noll räknar ner en ny, fast det känns lite omständigt och jag vill ha enklast möjliga lösning.
Hej
Kika in på detta pdf dokument där får de en Led att blinka. Finns lite nyttingt att läsa om du inte redan har gjort det.
http://www.mdh.se/iel/kurser/le1380/jmn ... uide14.pdf
Kika in på detta pdf dokument där får de en Led att blinka. Finns lite nyttingt att läsa om du inte redan har gjort det.
http://www.mdh.se/iel/kurser/le1380/jmn ... uide14.pdf
Jag har ingen tidsloop på 1sek men en på 1ms (1,0008ms), med en krestalls klockfrekvens på 20MHz.
Anroppa bara _Tid med CALL
;-------1ms------- 1,0008ms
_Tid
movlw H'0B'
movwf Tid1
goto _Tid2
_Tid1
nop
decfsz Tid1
goto _Tid2
return
_Tid2
movlw H'95'
movwf Tid2
_Tid3
decfsz Tid2
goto _Tid3
goto _Tid1
;-----------------
END
Anroppa bara _Tid med CALL
;-------1ms------- 1,0008ms
_Tid
movlw H'0B'
movwf Tid1
goto _Tid2
_Tid1
nop
decfsz Tid1
goto _Tid2
return
_Tid2
movlw H'95'
movwf Tid2
_Tid3
decfsz Tid2
goto _Tid3
goto _Tid1
;-----------------
END