Jakie komendy obsługują timer i counter w procku 90s2313 pod Asemblerem?? Proszę o pomoc!
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tam.include "2313def.inc"
.cseg
.def acc = r16
.def zmienna = r17
.def licznik_przerwan = r19
.org 0x00
rjmp start
.org 0x06
rjmp timer0
.org 0x0B
start:
ldi acc,127 ; inicjacja stosu
out SPL,acc ; programowego
ldi acc,0xFF ; cały port B jako wyjściowy
out DDRB,acc ; wszystkie wyjścia portu B
out PORTB,acc ; w stanie wysokim
ldi acc,0b1111011
out DDRD,acc
ldi acc,0b1111100
out PORTD,acc
ldi acc, 0
out TCCR0, acc ; timer0 zatrzymany
sei ; ustaw wskaˇnik globalnego zezwolenia na
; przerwania
ldi acc, 2
out TIMSK, acc ; odblokuj przerwanie od timera 0
ldi zmienna, 1
ldi acc, 15
main:
com zmienna
out portb, zmienna
rcall opoznienie
com zmienna
sbrc zmienna, 0
cbr r18, 1
sbrc zmienna, 7
sbr r18, 1
sbrc r18, 0
lsr zmienna
sbrs r18, 0
lsl zmienna
rjmp main
opoznienie:
ldi acc, 0
out TCNT0, acc ; wpisz wartosć początkową licznika
ldi acc, 2
out TIMSK, acc ; odblokuj przerwanie od timera 0
ldi acc, 4
out TCCR0, acc ;ustaw preskaler timera0 na 256 i wystartuj timer0
odliczaj_czas:
cpi licznik_przerwan, 10 ; odmierzaj czas 0,16384 s
brne odliczaj_czas
ldi acc, 0
out TCCR0, acc ; po uplywie 0,16384 wylacz timer0
clr licznik_przerwan ; wyzeruj licznik przerwan timera0
ret ;wroc do glownej procedury (petli)
timer0: ;procedura obslugi przerwania jest wywolywana co 16,384 ms
inc licznik_przerwan ;zwieksz o 1 licznik przerwan timera0
reti