Написал программу по аналогии со статьей из обучалки, где переключаются массивы.
Проблемы:
1) Почему у меня читается только первый элемент массива, а второй игнорируется?
2) Как сделать так, чтобы массив читался только один раз и по прочтении останавливался на последнем значении (то есть не зацикливался)
3)как сделать так, чтобы переключение массивов (при нажатии на кнопку) происходило по заднему фронту?
Листинг программы (прошу сильно не пинать, только начал учиться
.include "2313def.inc"
.def Temp =r16
.def temp1 =r17
.def temp2 =r18 ;
.def knopka=R21
.cseg
.org 0
RESET:
ser temp
out DDRB, temp ;
out PORTB,temp
yvelichenie:
ldi Temp1,0
ldi Temp2,0
l_res:
dec Temp1
brne l_res
dec Temp2
brne l_res
sbis PIND,0x00
inc knopka
SelectArray:
andi knopka,0b00000111
Tst0: cpi knopka,0
brne Tst1
ldi ZH,High(Array0*2)
ldi ZL,Low(Array0*2)
rjmp ReadArray
Tst1: cpi knopka,1
brne Tst2
ldi ZH,High(Array1*2)
ldi ZL,Low(Array1*2)
rjmp ReadArray
Tst2: cpi knopka,2
brne Tst3
ldi ZH,High(Array2*2)
ldi ZL,Low(Array2*2)
rjmp ReadArray
Tst3: cpi knopka,3
brne Tst4
ldi ZH,High(Array3*2)
ldi ZL,Low(Array3*2)
rjmp ReadArray
Tst4: cpi knopka,4
brne Tst5
ldi ZH,High(Array4*2)
ldi ZL,Low(Array4*2)
rjmp ReadArray
Tst5: cpi knopka,5
brne Tst6
ldi ZH,High(Array5*2)
ldi ZL,Low(Array5*2)
rjmp ReadArray
Tst6: cpi knopka,6
brne Tst7
ldi ZH,High(Array6*2)
ldi ZL,Low(Array6*2)
rjmp ReadArray
Tst7: ldi ZH,High(Array7*2)
ldi ZL,Low(Array7*2)
rjmp ReadArray
ReadArray:
ldi Temp,0
add ZL,Temp1
adc ZH,Temp
lpm
mov Temp,R0
inc Temp1
rjmp Output
Init: ldi Temp1,0
rjmp SelectArray
Output: out PortB,Temp
Array0:
.db 0b01111111,0b01111111
Array1:
.db 0b00111111,0b10111111
Array2:
.db 0b10011111,0b11011111
Array3:
.db 0b11001111,0b11101111
Array4:
.db 0b11100111,0b11110111
Array5:
.db 0b11110011,0b11111011
Array6:
.db 0b11111001,0b11111101
Array7:
.db 0b11111100,0b11111110
rjmp yvelichenie



