емCMD_PORT, E ; Піднімаємо стробR16, R17 ; Ховаємо старшу тетраду R16
R17, DATA_PIN ; Беремо ще один байтCMD_PORT, E ; Кидаємо стрибає
R17, 0xF0 ; отдавлівает молодшу тетрадуR17, R16 ; Склеюємо результат з старшим байтомR17 ; Разорваічаем байт. Т.к. першій
; виходила старша тетрада
; дозволяємо переривання ; Повернення.
; ========================================= =================================: IN R16, DATA_DDR ; Дані з DDR в регістрR16, 0x0F ; отдавлівает старшу тетраду - нам потрібно
; зберегти молодшу і обнулити старшуюDATA_DDR, R16 ; Видаємо результат в порт.
R16, DATA_PORT ; Беремо дані з портаR16, 0xF0 ​​span> ; Виставляємо всі біти старшої тетради, не чіпаючи молодшу span>
OUT DATA_PORT, R16 ; Видаємо в порт
RET
; ========================================= =================================: IN R16, DATA_DDR ; Дані з ДДР в регістрR16, 0xF0 ​​span> ; Виставляємо всі біти старшої тетради, що не span>
; чіпаючи младшуюDATA_DDR, R16 ; Видаємо дані в порт
LDI R16, SPEED ; Затримка на кілька тактів. Для того щоб
; дісплей_loop: DEC R16 ; Встигав обробляти дані
BRNE L_loop
_macro.inc
; ========================================= =================================
; LCD InitLCD_CLR = 0; DB0: clear displayLCD_HOME = 1; DB1: return to home position
LCD_ENTRY_MODE = 2; DB2: set entry modeLCD_ENTRY_INC = 1; DB1: incrementLCD_ENTRY_SHIFT = 0; DB2: shift
LCD_ON = 3; DB3: turn lcd/cursor onLCD_ON_DISPLAY = 2; DB2: turn display onLCD_ON_CURSOR = 1; DB1: turn cursor onLCD_ON_BLINK = 0; DB0: blinking cursor
LCD_MOVE = 4; DB4: move cursor/displayLCD_MOVE_DISP = 3; DB3: move display (0 -> move cursor) LCD_MOVE_RIGHT = 2; DB2: move right (0 -> left) p>
LCD_F = 5; DB5: function setLCD_F_8B = 4; DB4: set 8BIT mode (0 -> 4BIT mode) LCD_F_2L