Nu är det så att jag vill med hjälp av en knapp kunna starta och stoppa Timer1.
Detta är den kode jag använder för det:
Kod: Markera allt
;temp är register R16
;PINbuttonport är I/O port PA
;cmdStartStop = 2
loop:
in temp, PINbuttonport
sbrs temp, cmdStartStop
rcall startStopPressed
rjmp loop
startStopPressed:
in temp, TCCR1B
ldi temp_1, 0x05
;sbrs temp, 0 ;skip if bit is set
cpse temp, temp_1 ;compare, skip if equal
rjmp startT1
rcall stopTimer1
rjmp SP1
startT1:
rcall startTimer1
SP1:
in temp, PINbuttonport
sbrs temp, cmdStartStop
jmp SP1
ret
startTimer1:
cli
ldi temp, 0xE1 ;initiera Timer/Coutner1
out TCNT1H, temp
ldi temp, 0x7B
out TCNT1L, temp
ldi temp, 0b00000101 ;internal clock source with presacaler 1024
out TCCR1B, temp
ldi temp, 0b00000100 ;enable timer/counter1 owerflow interupt
out TIMSK, temp
sei
ret
stopTimer1:
cli
clr temp ;initiera Timer/Coutner1
out TCNT1H, temp
out TCNT1L, temp
out TCCR1B, temp
sei
ret
Grejjen med det hela är att den buggar rätt mycket, t ex så går det att stoppa timern på första försöket första gången (timer aktiveras i början av programmet) men sen när man ska starta den igen så starta den ibland, och ibland måste man trycka på knappen ett par gånger, eller hålla in den för att det ska funka... vad kan detta bero på??
Tack på förhand, Daniel
PS. ni får säga till om ni tröttnar på mina dumma(?) frågor DS.