тання!
: SBI CMD_PORT, E ; Підняти стрибає LCD_Delay ; Почекати
R16, DATA_PIN ; Вважати байт
PUSH R16 ; Зберегти його в стек. Справа в тому, що у нас R16
; побивається в LCD_Delay
CMD_PORT, E; Кинути стрибає - перший цикл (старший напівбайт) LCD_Delay ; Почекаємо маленько
CMD_PORT, E ; Піднімемо стрибає LCD_Delay ; ПодождемCMD_PORT, E ; Опустимо стрибає - потрібно для
; пропуску другого напівбайта LCD_Delay ; Затримка сноваR16 ; А тепер дістаємо сниканий байт - в ньому наш флаг.R16, 0x80 ; продавлювати по масці. Є прапор? BusyLoop ; Якщо ні, то перехід
: SEI ; Дозволяємо переривання.
; ========================================= =================================
; Запис команди в дисплей. Код команди в R17_WR: CLI ; Заборона переривань BusyWait ; Чекаємо готовності
CMD_PORT, RS ; Йде команда! WR_END ; Перехід на запис
; Запис даних в дисплей. Код даних у R17_WR: CLI ; Заборона переривань BusyWait ; Чекаємо готовності
CMD_PORT, RS ; Йдуть дані!
WR_END: ​​ CBI CMD_PORT, RW ; Запис!
SBI CMD_PORT, E ; Підняти стрибає
PortOut ; Порт налаштувати на вихід! R17 ; Збережемо дані які будемо виводити в стекеR17, 0xF0 ​​span> ; віддаючи по масці даними молодшу тетраду.
R16, DATA_PORT ; Візьмемо з порту даних старе значеніеR16, 0x0F ; віддаючи йому старшу тетраду
R16 ; Збережемо...