Hur nollställer man Timer på Atmega168(assembler)?
Postat: 3 juli 2010, 21:01:54
Jag försöker nollställa Timer1 i rutinen "INT1_slut". Den nollställs i AVR Studio men när jag kör det i Atmegan så nollställs den inte. Jag har testat att skriva på olika sätt som alla har fungerat i simuleringen men inte på hårdvaran.
Vad är det för fel?
Måste jag göra något mer än att ladda TCNT1 med noll?
Vad är det för fel?
Måste jag göra något mer än att ladda TCNT1 med noll?
Kod: Markera allt
;===========================================================================================
; AVBROTTSRUTIN EXT_INT0 - Avbrottsrutin INT0, Inträffar en gång per varv på trumman
;===========================================================================================
Varv_INT0:
INTERRUPT ;Börja avbrottsrutinen med MACRO INTERRUPT
sbrc flagga, 2 ;Kolla om flagga3 är nollställd...
rjmp INT0_slut ;...om inte så har Timer1 slagit runt och ingen uppdatering...
;...av tid ska göras
ldsw Z, Tid_nu ;Lägg Tid_nu(som vid detta tillfälle är förra tiden)...
stsw Tid_nyss, Z ;...i Tid_nyss
ldsw Z, TCNT1 ;Spara aktuellt varvs tid i Z och...
stsw Tid_nu, Z ;...ladda Tid_nu med Z
sbr flagga, 0b00000001 ;Flagga1 för att tala om att ny tid finns för beräkning
INT0_slut:
clr ZL ;Nollställ Z...
clr ZH
sts TCNT1L, ZL ;...och flytta till TCNT1 för att nollställa Timer1
sts TCNT1H, ZH
cbr flagga, 0b00000100
INTERRUPT_END ;Avsluta avbrottsrutinen med MACRO INTERRUPT_END