#include .section .data .section .bss lcdline: .space 32 lcdptr: .space 1 lcdcmd: .space 1 lcdoffset: .space 1 .section .text .org 0x00 .include "ivt.S" LCDline: .ascii "EE308 Board v3.0" .ascii "Keyboard ----> " LookUp: .ascii "0123456789ABCDEF" ; LCD RS : PORTC<6> ; LCD EN : PORTC<4> ; LCD DATA : PORTA ; KBD DATA : PORTB<3:0> ; KBD DA : PORTB<4> VOID: RETI RESET: CALL INIT_DISPLAY LOOP: WAIT0: LDS R16, PINB SBRC R16, 4 RJMP WAIT0 WAIT1: LDS R16, PINB SBRS R16, 4 RJMP WAIT1 LDI ZL, lo8 (LookUp) LDI ZH, hi8 (LookUp) LDS R16, PINB LDI R17, 0x0F AND R16, R17 LDI R17, 0x00 ADD ZL, R16 ADC ZH, R17 LPM R16, Z LDI R17, 0x1F LDI R18, 0x00 LDI XL, lo8 (lcdline) LDI XH, hi8 (lcdline) ADD XL, R17 ADC XH, R18 ST X, R16 NO_KBD: RJMP LOOP INIT_DISPLAY: LDI ZL, lo8 (LCDline) LDI ZH, hi8 (LCDline) LDI XL, lo8 (lcdline) LDI XH, hi8 (lcdline) LDI R17, 32 COPYLOOP: LPM R16, Z+ ST X+, R16 DEC R17 BRNE COPYLOOP LDI R16, 0x81 OUT _SFR_IO_ADDR (PORTB), R16 OUT _SFR_IO_ADDR (PORTC), R16 LDI R16, 0xFF OUT _SFR_IO_ADDR (DDRA), R16 OUT _SFR_IO_ADDR (DDRC), R16 LDI R20, 250 RCALL DELAY_MS LDI R20, 250 RCALL DELAY_MS LDI R16, 0x38 RCALL WRITE_CMD LDI R16, 0x0C RCALL WRITE_CMD LDI R16, 0x01 RCALL WRITE_CMD LDI R20, 2 RCALL DELAY_MS LDI XL, lo8 (lcdline) LDI XH, hi8 (lcdline) LDI R16, 0x00 STS lcdptr, R16 STS lcdoffset, R16 LDI R16, 0xC0 STS lcdcmd, R16 LDI R16, (1<