Подскажите как реализовать сдвиг цифр, чтобы получить на индикаторах следующее 1234 2345 3456 4567 5678 6789 789a 89ab 9abc abcd bcde cdef [__]
Имеющийся код выводит только 1234.
В проекте протеуса перепутан катод и анод.
CODE
.include "tn2313def.inc"
.def Temp1=R16
.def Temp2=R17
.def Temp3=R18
.def Temp=R20
.def flag1=r21
.def flag2=r22
.def noga=r23
.def nogga=r24
.def cifra=R25
.def temp6=r19
.def i=r1
.dseg
timer1: .byte 1; 1 ячейку под переменную timer1
timer2: .byte 1
Digit: .byte 4
.cseg
.org 0
rjmp init
.org OVF0addr
rjmp T0_OVF
T0_OVF:
in temp3, SREG
push temp3
;PIND 3 16
lds temp3, timer1
dec temp3
brne t1
ldi temp3,5
ldi flag1, 1
t1: sts timer1, temp3
lds temp3, timer2
dec temp3
brne t2
ldi temp3,255
ldi flag2, 1
t2: sts timer2, temp3
pop temp3
out SREG, temp3
reti
init:
ldi R16,low(RamEnd)
out spl,R16
; настройка портов
ldi R16,0b11111111
out ddrb,R16
ldi R16,0b00001111
out ddrd,R16
ldi temp, 5
sts timer1, temp
ldi temp, 255
sts timer2, temp
ldi flag1, 0
ldi flag2, 0
ldi noga, 1
ldi temp, 0
mov i, temp
; настройка таймера счетчика T0
cli
ldi temp, (1<<1)
out TCCR0B, temp
ldi temp, 1<<TOIE0
out TIMSK, temp
sei
ldi temp,1
sts digit,temp
ldi temp,2
sts digit+1,temp
ldi temp,3
sts digit+2,temp
ldi temp,4
sts digit+3,temp
main:
cpi flag1,1
brne tt1
rcall display
ldi flag1,0
tt1:
cpi flag2,1
brne tt2
rcall sdvig
ldi flag2,0
tt2:
rjmp main
Display:
ldi yh,high(digit)
ldi yl,low(digit)
add yl,i
inc i
;add yl,noga
;dec yl
ld cifra,y
rcall decoder
out portb,cifra
;--------------------
mov nogga,noga
ldi temp,0xFF
eor nogga,temp
out portD,nogga
lsl noga
sbrs noga, 4
rjmp ex1
ldi noga, 1
ldi temp, 0
mov i, temp
ex1: ret
;------------------------
sdvig: inc cifra
cpi cifra,19
breq main
ret
Decoder:;преобразование двоичного числа в код 7-сегментного индикатора
ldi ZL,Low(DcMatrix*2) ;инициализация массива
ldi ZH,High(DcMatrix*2)
ldi Temp6,0 ;прибавление переменной
add ZL,cifra ;к 0-му адресу массива
adc ZH,Temp6
lpm ;загрузка значения
mov cifra,r0
ret
DcMatrix:
;массив - таблица истинности декодера
; hgfedcba hgfedcba
.db 0b11000000,0b11111001;0,1
.db 0b10100100,0b10110000;2,3
.db 0b10011001,0b10010010;4,5
.db 0b10000010,0b11111000;6,7
.db 0b10000000,0b10010000;8,9
.db 0b10001000,0b10000011;a,b
.db 0b11000110,0b10100001;c,d
.db 0b10000110,0b10001110;e,f
.db 0b11000110,0b11110110;c,=
.db 0b11110110,0b11110000;=.э
proteus.rar ( 38.25 килобайт )
Кол-во скачиваний: 58
Сообщение отредактировал IgorKossak - May 11 2013, 20:08
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!