; ; Beim ersten Durchlauf wird das High-Nibble gesendet und beim ; zweiten das Low-Nibble ; LCD_CMD: PUSH PSW MOV temp,A ; Dass zu Sendente Datenbyte sichern MOV R5,#2 ; Zaehler für 2 Dürchläufe LCALL I2C_INIT ; I2C-Bus Initialisieren MOV se_buffer,#_LCD_Adresse ; Adresse des Verwendeten PCF8574 LCALL I2C_WBYTE ; senden. MOV A,temp ; Datenbyte wieder herstellen SWAP A ; High-Low-Nibble vertauschen lcd1: ANL A,#0Fh ; Nur Low-Nibble verwenden. If BIT RS Then ORL A,#_LCD_RS If BIT RW Then ORL A,#_LCD_RW If Not BIT backlight Then ORL A,#_LCD_Backlight_OFF Else ORL A,#_LCD_Backlight_ON ORL A,#_LCD_Enable ; Enable auf High setzen MOV se_buffer,A ; Zu PCF8574 senden. Daten stehen jetzt an. LCALL I2C_WBYTE NOP NOP MOV A,se_buffer ; Daten werden erst vom LCD mit fallender flanke ANL A,#0BFh ; uebernommen. Also Enable zurueck setzen. MOV se_buffer,A ; Das ganze an PCF8574 senden. LCALL I2C_WBYTE MOV A,temp ; Datenbyte wieder herstellen. jetzt im ; im zweiten Durchlauf dass Low-Nibble senden. DJNZ R5,lcd1 LCALL I2C_STOP ; I2C-Bus wider freigeben. CLR RW CLR EN CLR RS POP PSW RET