Cześć, napisałem taką obsługę wyświetlacza siedmiosegmentowego z przerwaniem od timer0
i mam mały problem... Otóż, na wyświetlaczu pojawiają się albo trzy najstarsze cyfry a na cyfrze jedności jest nie wiadomo co, albo świeci się poprawnie cyfra jedności a pozostałe są zgaszone... i tak na zmianę co jakiś czas:P Mogli byście rzucić okiem na ten kod... Bo nie mogę sam dojść co jest źle;/
i mam mały problem... Otóż, na wyświetlaczu pojawiają się albo trzy najstarsze cyfry a na cyfrze jedności jest nie wiadomo co, albo świeci się poprawnie cyfra jedności a pozostałe są zgaszone... i tak na zmianę co jakiś czas:P Mogli byście rzucić okiem na ten kod... Bo nie mogę sam dojść co jest źle;/
.include "m8def.inc"
.dseg
.org 0x60
mod0: .BYTE 1
mod1: .BYTE 1
mod2: .BYTE 1
mod3: .BYTE 1
wys_mod: .BYTE 1
.cseg
.org 0x00
rjmp start
.org 0x09
rjmp timer0
.org 0x0A
start:
ldi r16, 15
out DDRD, r16 ;cztery piny portu D jako wyjścia, ANODY
ldi r16, 255
out DDRB, r16 ;cały port B jako wyjścia, KATODY
ldi r16, 127
out SPL, r16 ;ustawiam wskaźnik stosu na 127
ldi r16, 3
out TCCR0, r16 ;ustawiam prescaler przez 64
ldi r16, 1
out TIMSK, r16 ; zezwolenie na przerwanie od timera0
ldi r16, 177
out TCNT0, r16 ;licznik timera0 aby zlicza do 78=(255-177)
ldi r16, 0b00000001
sts wys_mod, r16
sei
main:
ldi r16, 48
sts mod0, r16
ldi r16, 36
sts mod1, r16
ldi r16, 120
sts mod2, r16
ldi r16, 16
sts mod3, r16
rjmp main
timer0:
ldi r16, 160
out TCNT0, r16
lds r17, wys_mod
out PORTD, r17
sbic PIND, 0
lds r16, mod0
sbic PIND, 1
lds r16, mod1
sbic PIND, 2
lds r16, mod2
sbic PIND, 3
lds r16, mod3
out PORTB, r16
lsl r17
sbic PIND, 3
ldi r17, 1
sts wys_mod, r17
reti