Send_Inst: "My version" LOW RS ' Passed the "Byte" variable "Inst" to sub IF __PARAMCNT = 1 THEN ' passed 4 LSB's to temp4 (the little indian) TEMP3 = __PARAM2 ' and then 4 MSB's to temp3 ELSE TEMP4 = __PARAM1 ' But __PARAMCNT, __PARAM1, __PARAM2 ENDIF ' are "Word" Functions?? and so they RB = TEMP4 ' won't pass just 4 bits?? PULSOUT E, 3 RB = TEMP3 PULSOUT E, 3 GOSUB Wait_Busyflag ' So it never initialized HIGH RS RETURN "These two were experiments with Basme's code example" ==================================================================== Send_Inst: LOW RS TEMP1 = Inst << 4 ' Creates an 8 bit "LOWNIBBLE" variable by ' sending 0000 zeros on pins 0 to 3 RB = TEMP1 ' Sends Low nibble first ?? Thought it was PULSOUT E, 3 ' supposed to be the opposite ?? MSB first RB = Inst ' Outputs the MSB high nibble and LSB values 'RB = Inst ' are sent to ground PULSOUT E,3 GOSUB Wait_Busyflag HIGH RS ' Will initialize, but shows only 4 zero's RETURN ====================================================================== "Basme's" version Send_Inst: LOW RS ' Set Instruction Mode LCD.4 = Inst.4 ' Send High Nibble LCD.5 = Inst.5 ' Send High Nibble LCD.6 = Inst.6 ' Send High Nibble LCD.7 = Inst.7 ' Send High Nibble PULSOUT E,3 GOSUB Wait_Busyflag LCD.4 = Inst.0 ' Send Low Nibble LCD.5 = Inst.1 ' Send Low Nibble LCD.6 = Inst.2 ' Send Low Nibble LCD.7 = Inst.3 ' Send Low Nibble PULSOUT E,3 GOSUB Wait_Busyflag HIGH RS ' Set LCD Back To Text Mode RETURN ====================================================================== "BS2" code example LCD_Out: LcdBus = char.HIGHNIB ' output high nibble PULSOUT E, 3 ' strobe the Enable line LcdBus = char.LOWNIB ' output low nibble PULSOUT E, 3 HIGH RS ' return to character mode RETURN