init_lcd: clr rs mov a, #20h setb nibble_write mov write_pause, #1 acall write_lcd clr nibble_write mov a, #2ch acall write_lcd mov a, #0eh acall write_lcd mov a, #01h acall write_lcd mov r7, #30h acall lwarten mov a, #06h acall write_lcd ret clr_lcd: clr rs mov a, #01h acall write_lcd ret set_home: clr rs clr nibble_write mov a,#02h acall write_lcd ret put_char: setb rs acall write_lcd ret write_lcd: acall set_lcd_data setb en ; mov r7, write_pause : acall lwarten clr en mov r7, write_pause : acall lwarten if bit nibble_write ret end if acall set_lcd_data setb en ; mov r7, write_pause : acall lwarten clr en mov r7, write_pause : acall lwarten ret set_lcd_data: rlc a: if bit c : setb d3: else: clr d3: end if rlc a: if bit c : setb d2: else: clr d2: end if rlc a: if bit c : setb d1: else: clr d1: end if rlc a: if bit c : setb d0: else: clr d0: end if ret lwarten: for r7 for r6=#3ch ; ~40 us next next ret