Вобщем ситуация такая, записываю я по адресу $00 какой то символ (число) в DDRAM, он появляется на дисплее, работает как следует вобщем; затем я устанавливаю курсор по этому адресу $00 считываю в регистр temp с помощью "rcall Read" и записываю в DDRAM по другому адресу $01. В итоге всех этих замысловатых манипуляций получаю крокозябру (вывел в порт регистр temp посмотреть, увидел что в нём всегда независимо от выводимого в DDRAM символа (числа) всегда 0b0000111, посмотрел по таблице знакогенератора, этому соответствует x, то есть не задействовано, понятно откуда крокозябра. Только вот остаётся непонятным почему считывать не хочет правильные значения... Я заморочился вставил в те места где "rcall Delay4us" задержку по кнопочке, то есть пока я не нажму на кнопку атмега в этом месте зацикливается, сделал две кнопочки для каждой половины байта, и мультиметром измерил на выходах напряжения. Получилось напряжения правильные (нули и единички), то есть они соответствуют записанному в DDRAM дисплея числу, то есть модуль дисплея выдаёт правильные значения, микроконтроллер не хочет их понять. И вот у меня совсем уже ступор, непонятно почему атмега считывает непонятно что с выходов DB4..DB7. Вобщем нужна ваша помощь.
Вот кусок кода, используемый для чтения
в DB7_PIN адрес DB7 пина дисплея (соответственно в DB6_PIN - 6го и т.д.)
в DB7_BN номер бита куда подключен дисплей, так же и для остальных DB
(в Delay4us используется другой регистр temp1)
CODE
ReadC:
sbi E_PORT,E_BN
rcall Delay4us
clr temp
sbic DB7_PIN,DB7_BN
sbr temp,7
sbic DB6_PIN,DB6_BN
sbr temp,6
sbic DB5_PIN,DB5_BN
sbr temp,5
sbic DB4_PIN,DB4_BN
sbr temp,4
cbi E_PORT,E_BN
nop
sbi E_PORT,E_BN
rcall Delay4us
sbic DB7_PIN,DB7_BN
sbr temp,3
sbic DB6_PIN,DB6_BN
sbr temp,2
sbic DB5_PIN,DB5_BN
sbr temp,1
sbic DB4_PIN,DB4_BN
sbr temp,0
cbi E_PORT,E_BN
ret
;Чтение данных из активной области
Read:
;Пины дисплея - входы Z-состояние
cbi DB4_DDR,DB4_BN
cbi DB5_DDR,DB5_BN
cbi DB6_DDR,DB6_BN
cbi DB7_DDR,DB7_BN
cbi DB4_PORT,DB4_BN
cbi DB5_PORT,DB5_BN
cbi DB6_PORT,DB6_BN
cbi DB7_PORT,DB7_BN
;Переводим дисплей в режим чтения данных
;из активной области
sbi A0_PORT,A0_BN
sbi RW_PORT,RW_BN
rcall ReadC
;Переводим дисплей в режим записи команды
cbi A0_PORT,A0_BN
cbi RW_PORT,RW_BN
;Пины дисплея - выходы, на них еденицы
sbi DB4_DDR,DB4_BN
sbi DB5_DDR,DB5_BN
sbi DB6_DDR,DB6_BN
sbi DB7_DDR,DB7_BN
sbi DB4_PORT,DB4_BN
sbi DB5_PORT,DB5_BN
sbi DB6_PORT,DB6_BN
sbi DB7_PORT,DB7_BN
rcall Delay40us
ret