Witam.
Chcę aby program sprawdzał PORTB pin2 dwa razy w odstępie ok.1s. Mianowicie gdy na PB2 pojawi się stan niski uruchomić ma się timer i przez ok. sekunde będzie sprawdzał PB2 i jeżeli w tym czasie pojawi się stan niski program wraca do LOOP. Jeżeli po odmierzeniu owej sekundy nie pojawi się stan niski na PB2 to program ma odmierzyć czas ok. 1s. i w tym czasie ma czekać na pojawienie się stanu niskiego na PB2 i jeżeli się pojawi program ma skoczyć to podprogramu PODPROGRAM, a jeżeli się nie pojawi w tym czasie stan niski na PB2 to program wraca do LOOP. Myślę, że się jasno wyraziłem. Dopiero zaczynam programować w Asemblerze, i jak narazie nie wiem jak obchodzić się timer'ami. uC jest taktowany wewnętrznym zegarem 1,2MHz (1200000MHz).
Oryginalny opis działania funkcji: ""Jeśli powodem wybudzenia procesora z trybu idle było przepełnienie licznika timera, to nastepuje sprawdzenie stanu klawisza. Jeśli jest on nacisnięty, to program po chwili sprawdza go ponownie, aby wyeliminować ewentualne zakłócenia mogące spowodowac fałszywą zmianę stanu układu. Po upewnieniu się, że klawisz jest dalej nacisnięty wykonywany jest PODPROGRAM" i według tego opisu działa poniższy kod.
Oto oryginał kodu:
Chcę aby program sprawdzał PORTB pin2 dwa razy w odstępie ok.1s. Mianowicie gdy na PB2 pojawi się stan niski uruchomić ma się timer i przez ok. sekunde będzie sprawdzał PB2 i jeżeli w tym czasie pojawi się stan niski program wraca do LOOP. Jeżeli po odmierzeniu owej sekundy nie pojawi się stan niski na PB2 to program ma odmierzyć czas ok. 1s. i w tym czasie ma czekać na pojawienie się stanu niskiego na PB2 i jeżeli się pojawi program ma skoczyć to podprogramu PODPROGRAM, a jeżeli się nie pojawi w tym czasie stan niski na PB2 to program wraca do LOOP. Myślę, że się jasno wyraziłem. Dopiero zaczynam programować w Asemblerze, i jak narazie nie wiem jak obchodzić się timer'ami. uC jest taktowany wewnętrznym zegarem 1,2MHz (1200000MHz).
Oryginalny opis działania funkcji: ""Jeśli powodem wybudzenia procesora z trybu idle było przepełnienie licznika timera, to nastepuje sprawdzenie stanu klawisza. Jeśli jest on nacisnięty, to program po chwili sprawdza go ponownie, aby wyeliminować ewentualne zakłócenia mogące spowodowac fałszywą zmianę stanu układu. Po upewnieniu się, że klawisz jest dalej nacisnięty wykonywany jest PODPROGRAM" i według tego opisu działa poniższy kod.
Oto oryginał kodu:
KEYTEST:sbic PINB,PB2 ; test for keypress
rjmp SDOWN ; not pressed
out TCNT0,r1
ldi r16,2 ; start timer, CK/8
out TCCR0,r16 ; for key debouncing
sleep ; wait for interrupt
nop
sbic PINB,PB2 ; second key test
rjmp LOOP ; not pressed
rjmp PODPROGRAM