Witam.
Chcę za pomocą Timera1 odmierzyć czas w przybliżeniu 1 s (dokładność do 0,1 s).
Efekt jest taki, że kolejne znaki pobierane są i wyświetlane z większą prędkością niż zadana.
Stwierdziłem również, że zmiana wartości rejestrów TCNT1 nie ma istotnego wpływu na szybkość wyświetlania.
Jedynie zmiana prescalera zmienia szybkość wyświetlania.
Przejrzyjcie listing i powiedzcie co jest źle lub czego brak.
Grzegorz.
Chcę za pomocą Timera1 odmierzyć czas w przybliżeniu 1 s (dokładność do 0,1 s).
- Wprowadzam następującą konfiguracje:
ldi Temp, 0x29 ;załadowanie do r16 wartości
ldi R20, 0x29 ;załadowanie do r17 wartości
out TCNT1H, Temp ;wpisanie do rejestru TCNT1L wartości
out TCNT1L, R20 ;wpisanie do rejestru TCNT1H wartości
out TCCR1A,r29 ;wpisanie do rejestru TCCR1A wartości 0 - zwykły licznik
ldi Temp,0x05 ;;załadowanie do r16 wartości 5
out TCCR1B,Temp ;wpisanie do rejestru TCCR1B wartości 5 - konfiguracja licznika- prescaler
ldi Temp,0x04 ;załadowanie do r16 wartości 5
out TIMSK,Temp ;wpisanie do rejestru TIMSK wartości 4 - uaktywnienie przerwania po przepełnieniu licznika
ldi Temp,0x00 ;załadowanie do r16 wartości 0
out TIFR,Temp ;wpisanie do rejestru TIFR wartości 0 - Flaga przepełnienia licznika
;Obsługa przerwania wygląda zaś następująco:
lpm Tem,Z
out PORTC, Tem ; wyświetl liczbę z tabeli na port C
adiw ZH:ZL,1 ; zwieksz o 1 Z
reti
Efekt jest taki, że kolejne znaki pobierane są i wyświetlane z większą prędkością niż zadana.
Stwierdziłem również, że zmiana wartości rejestrów TCNT1 nie ma istotnego wpływu na szybkość wyświetlania.
Jedynie zmiana prescalera zmienia szybkość wyświetlania.
Przejrzyjcie listing i powiedzcie co jest źle lub czego brak.
Grzegorz.