Цель программы: подключается матричная клавиатура 3х3 с последующим выводом номера кнопки на ЖКИ
Суть проблемы: на ЖКИ выводится не то, что требуется =)
(программирую на Асме в АВРСтудио 5
ЖКИ на контроллере HD44780)
Приведу кусок кода, в котором происходит затык:
Собственно проблема заключается в том, что на ЖКИ выводится не число 3, а символ, соответствующий коду 0хEE, т.е. на участке (***) такое чувство, что команда adiw ZL,7 игнорируется и переход на 7 шагов вперёд не происходит, и соответственно на экран выводится, то, что было загружено командой lpm в R0 до этого, а именно значение 0хЕЕ. Если прогонять в дебаггере, то этой проблемы нет и переход происходит. В реале же, при загрузке прошивки вылезает этот глюк.
Вот, вообщем, в чём проблема. Сам пока решения не нашёл.
Не так давно была у меня проблема с 16-битным таймером и AVRStudio 4, но всё решилось установкой 5-й версии. Тут же даже не знаю... 6-ю что ли ставить?
Жду советов от светил программирования )))
Ну, и на всякий случай, приводу полный код
Суть проблемы: на ЖКИ выводится не то, что требуется =)
(программирую на Асме в АВРСтудио 5
ЖКИ на контроллере HD44780)
Приведу кусок кода, в котором происходит затык:
Код: Выделить всё
t0_comp: ;клава подключена к РА0-7 (PA0-2 - столбцы, PA4-6 строки).
Stolbci: ;пол порта сначала считывает -> сохраняет значение в XL, затем считывает другая часть -> в XH
ldi temp,0xF0
out ddrA,temp
ldi temp,0x0F
out portA,temp
nop
nop
nop
nop
in XL,pinA
Strochki:
ldi temp,0x0F
out ddrA,temp
ldi temp,0xF0
out portA,temp
nop
nop
nop
nop
in XH,pinA
add XH,XL ;обе половинки суммируются
ldi ZH,High(DATA*2)
ldi ZL,Low(DATA*2)
OUTPUT: ;здесь ведётся поиск совпадения значения с порта и значения в DATA (например, кнопка 3 имеет код 0b11101110 или же 0xEE)
V1:
lpm
tst R0
breq exit
cp XH,R0
brne V2
rcall BT_SEL ;если нашли, то идём далее...
rjmp exit
V2:
adiw ZL,1
rjmp V1
BT_SEL: ;здесь позиции в DATA совпавшего значения прибавляется 7, что переносит "маркер" в позицию числа "3", соответствующее совпавшему коду
adiw ZL,7 (***) - пояснение ниже
rjmp OUTPUT2
rjmp exit
DATA:
.db 0b11101011,0b11101101,0b11101110,0b11011011,0x00,"1",0x00,"2",0x00,"3",0x00,"4",0x00
OUTPUT2: ;ну и собственно вывод номера на ЖКИ (значение 0х00 служит меткой для конца вывода на ЖКИ)
lpm
mov PARAM,R0
tst PARAM
brne V9
rjmp exit
V9:
rcall LCD_DATA
adiw ZL,1
rjmp OUTPUT2
ret
exit:
reti
Вот, вообщем, в чём проблема. Сам пока решения не нашёл.
Не так давно была у меня проблема с 16-битным таймером и AVRStudio 4, но всё решилось установкой 5-й версии. Тут же даже не знаю... 6-ю что ли ставить?
Жду советов от светил программирования )))
Ну, и на всякий случай, приводу полный код
- Вложения
-
- Klaviatura 3x3.rar
- (1.59 КБ) 188 скачиваний
