.include "tn2313def.inc"
.ORG $0000
rjmp RESET
.ORG $0001
rjmp INT_0
.ORG $0002
rjmp INT_1
RESET:
ldi r16,255
out DDRB, r16
ldi r16, 0b01110000
out DDRD, r16
ldi r16,0b00001110
out PORTD,r16
ldi r16,0b11000000
out GIMSK,r16
ldi r16, RAMEND
out SPL, r16
ldi r27,200
rcall nisher
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
SEI
MAIN:
sbi pind,4
out PORTB, r24
cbi pind, 6
rcall timer
sbi pind,6
out PORTB, r25
cbi pind, 5
rcall timer
sbi pind,5
out PORTB, r26
cbi pind, 4
rcall timer
rjmp MAIN
nisher: ;;;;; здесь я разделяю число 200, которое записано в R27 на 3 части и записываю их в R21,R22,R23
push r27
ldi r16,100
rcall n_loop
mov r21,r17
ldi r16,10
rcall n_loop
mov r22, r17
mov r23, r27
pop r27
ret
n_loop:
ldi r17,-1
loop:
inc r17
sub r27,r16
brcc loop
add r27,r16
ret
get_segcode:
cpi r19,0
breq zero
cpi r19,1
breq one
cpi r19,2
breq two
cpi r19, 3
breq three
cpi r19,4
breq four
cpi R19,5
breq five
cpi R19,6
breq six
cpi R19,7
breq seven
cpi R19,8
breq eight
cpi R19,9
breq nine
zero:
ldi r19,0b00111111
ret
one:
ldi r19,0b00000110
ret
two:
ldi r19,0b01011011
ret
three:
ldi r19,0b01001111
ret
four:
ldi r19,0b01100110
ret
five:
ldi r19,0b01101101
ret
six:
ldi r19,0b01111101
ret
seven:
ldi r19,0b00000111
ret
eight:
ldi r19,0b01111111
ret
nine:
ldi r19,0b01101111
ret
INT_0:
sbic portd,1
rcall aaa
dec r27
rcall nisher
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
reti
INT_1:
sbic portd,1
rcall aaa
inc r27
rcall nisher
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
reti
timer:
ldi r16,255
ldi r17, 1
loop_w:
subi r16,1
sbci r17,0
brcc loop_w
ret
aaa: ;;;; Здесь я хочу сделать Шифт с помощью дополнительного регистра R16
mov R16,R23
mov R23,R22
mov R22,r21
mov r21,r23
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
reti
На протеусе у меня три кнопки которые подключены к PIND1,PIND2,PIND3. Когда PIND1 нажато, надо что бы на сегменте делал шифт при каждом нажатии PIND2 или PIND3 , а когда нет просто инкремент или декремент. Но почему то этого не происходит, при любом состоянии PIND1 только прибавляет или наоборот . Помогите буду при много благодарен !!!!!
.ORG $0000
rjmp RESET
.ORG $0001
rjmp INT_0
.ORG $0002
rjmp INT_1
RESET:
ldi r16,255
out DDRB, r16
ldi r16, 0b01110000
out DDRD, r16
ldi r16,0b00001110
out PORTD,r16
ldi r16,0b11000000
out GIMSK,r16
ldi r16, RAMEND
out SPL, r16
ldi r27,200
rcall nisher
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
SEI
MAIN:
sbi pind,4
out PORTB, r24
cbi pind, 6
rcall timer
sbi pind,6
out PORTB, r25
cbi pind, 5
rcall timer
sbi pind,5
out PORTB, r26
cbi pind, 4
rcall timer
rjmp MAIN
nisher: ;;;;; здесь я разделяю число 200, которое записано в R27 на 3 части и записываю их в R21,R22,R23
push r27
ldi r16,100
rcall n_loop
mov r21,r17
ldi r16,10
rcall n_loop
mov r22, r17
mov r23, r27
pop r27
ret
n_loop:
ldi r17,-1
loop:
inc r17
sub r27,r16
brcc loop
add r27,r16
ret
get_segcode:
cpi r19,0
breq zero
cpi r19,1
breq one
cpi r19,2
breq two
cpi r19, 3
breq three
cpi r19,4
breq four
cpi R19,5
breq five
cpi R19,6
breq six
cpi R19,7
breq seven
cpi R19,8
breq eight
cpi R19,9
breq nine
zero:
ldi r19,0b00111111
ret
one:
ldi r19,0b00000110
ret
two:
ldi r19,0b01011011
ret
three:
ldi r19,0b01001111
ret
four:
ldi r19,0b01100110
ret
five:
ldi r19,0b01101101
ret
six:
ldi r19,0b01111101
ret
seven:
ldi r19,0b00000111
ret
eight:
ldi r19,0b01111111
ret
nine:
ldi r19,0b01101111
ret
INT_0:
sbic portd,1
rcall aaa
dec r27
rcall nisher
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
reti
INT_1:
sbic portd,1
rcall aaa
inc r27
rcall nisher
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
reti
timer:
ldi r16,255
ldi r17, 1
loop_w:
subi r16,1
sbci r17,0
brcc loop_w
ret
aaa: ;;;; Здесь я хочу сделать Шифт с помощью дополнительного регистра R16
mov R16,R23
mov R23,R22
mov R22,r21
mov r21,r23
mov r19, r21
rcall get_segcode
mov r24,r19
mov r19, r22
rcall get_segcode
mov r25,r19
mov r19,r23
rcall get_segcode
mov r26,r19
reti
На протеусе у меня три кнопки которые подключены к PIND1,PIND2,PIND3. Когда PIND1 нажато, надо что бы на сегменте делал шифт при каждом нажатии PIND2 или PIND3 , а когда нет просто инкремент или декремент. Но почему то этого не происходит, при любом состоянии PIND1 только прибавляет или наоборот . Помогите буду при много благодарен !!!!!
