Составить программу, которая осуществляет последовательную запись и вывод пяти трехбитных чисел. Программа использует переменные, введенные с ключей, и выводит их на цифровую индикацию. Ввод осуществить через выводы PD4…PD6, ввод сигнала внешнего прерывания – PD3 (INT1), а вывод – через PB2…PB5
Если говорить проще, то вводим и записываем последовательно значения PD4, PD5, PD6, после записи выводим на индикаторную панель.
Написал программу, компилирую... Но программа работает не правильно. Ввожу число, происходит запись в контроллер, далее дохожу до первого "reti" (loop11) и вылетает на строку "rjmp start"... так же выводит ошибки:
Раз 40 уже прогонял программу, менял адрес ".org 0x003", но толку нет...AVR Simulator: Uninitialized stack pointer used at 0x001e
AVR Simulator: Invalid opcode 0xffff at address 0x003838
Код: Выделить всё
.cseg
.include "m8def.inc"
.device ATmega8
.org 0x000
rjmp start
.org 0x003
rjmp prer
start:
ldi r16,low(RAMEND)
out SPL,r16
ldi r19,high(RAMEND)
out SPH,r16
ldi r20,0b111100
out DDRB,r20
ldi r20,0b000000
out DDRD,r20
ldi r21,0b11
out mcucr,r21
ldi r21,0b1000000
out gimsk,r21
ldi r20,0b0
sei
main:
sbis pind,3
rjmp prer
prer:
sbis pind,3
reti
inc r20
cpi r20,0b1011
brne loop11
ldi r20,0b1
ldi r21,0b0
rcall podpr2
loop11:
cpi r20,0b1
brne loop1
rcall podpr
mov r23,r21
reti
loop1:
cpi r20,0b10
brne loop2
rcall podpr
mov r24,r21
reti
loop2:
cpi r20,0b11
brne loop3
rcall podpr
mov r25,r21
reti
loop3:
cpi r20,0b100
brne loop4
rcall podpr
mov r26,r21
reti
loop4:
cpi r20,0b101
brne loop5
rcall podpr
mov r27,r21
reti
loop5:
cpi r20,0b110
brne loop6
mov r21,r23
rcall podpr2
reti
loop6:
cpi r20,0b111
brne loop7
mov r21,r24
rcall podpr2
reti
loop7:
cpi r20,0b1000
brne loop8
mov r21,r25
rcall podpr2
reti
loop8:
cpi r20,0b1001
brne loop9
mov r21,r26
rcall podpr2
reti
loop9:
cpi r20,0b1010
brne loop10
mov r21,r27
rcall podpr2
loop10:
reti
podpr:
in r21,PIND
andi r21,0b1110000
lsr r21
lsr r21
lsr r21
lsr r21
ret
podpr2:
lsl r21
lsl r21
out PORTB,r21
ret


