CPU = 16F872 MHZ = 16 CONFIG 16383 ''''''''''''''''' ' Vars and Cons ' ''''''''''''''''' LCD_Data var byte LCD_Enable con c5 LCD_RS con c4 LCD_Port var portc.nib0 SER_Tx con B5 SER_Rx con B4 EN_TIME con 10 'us that enable is held high WAIT_TIME con 2 InitLCD1 con %00110011 InitLCD2 con %00100010 LCDFunctionSet con %00100000 LCDClear con %00000001 LCDDisp con %00001000 Disp_ON con %00000100 Disp_OFF con 0 Curs_ON con %00000010 Curs_OFF con 0 Blink_ON con %00000001 Blink_OFF con 0 LCDHome con %00000010 MessageBuffer var byte(40) i var byte Data @0, "MessageLCD v0.1 beta",0 Intro con 0 '''''''' ' Main ' '''''''' Main clear INPUT SER_Rx OUTPUT SER_Tx gosub lcdinit low SER_Tx pause 1000 high SER_Tx pause 1000 LCD_Data = Intro gosub LCDRomMessage mainloop serout SER_Tx, i1200, ["Ready"] serin SER_Rx, i1200, [WAIT("msg:"), str MessageBuffer\20] pause 10 serout SER_Tx, i1200, ["~Received: ", 13, 10, str MessageBuffer\20, 13,10] LCD_Data = LCDClear gosub LCDCommand pause 10 LCD_Data = LCDHome gosub LCDCommand gosub LCDDataMessage pause 500 goto mainloop END ''''''''''''''''''' 'LCD code section ' ''''''''''''''''''' LCDInit PortC = %00111111 TrisC = $00 LOW LCD_RS pause 40 LCD_Port = %0011 High LCD_Enable pauseus EN_TIME LOW LCD_Enable pause 40 LCD_Port = %0011 High LCD_Enable pauseus EN_TIME LOW LCD_Enable pause 5 LCD_Port = %0011 High LCD_Enable pauseus EN_TIME LOW LCD_Enable pauseus 120 LCD_Port = %0010 High LCD_Enable pauseus EN_TIME LOW LCD_Enable pauseus 120 LCD_Data = LCDFunctionSet gosub LCDCommand LCD_Data = %00000110 gosub LCDCommand LCD_Data = LCDClear gosub LCDCommand pause 5 LCD_Data = (LCDDisp | Curs_On | Blink_off | Disp_on) gosub LCDCommand LCD_Data = LCDHome gosub LCDCommand return LCDCommand LOW LCD_RS pause WAIT_TIME high LCD_Enable LCD_Port = LCD_Data.nib1 pauseus EN_TIME low LCD_Enable pauseus EN_TIME high LCD_Enable LCD_Port = LCD_Data.nib0 pauseus EN_TIME low LCD_Enable pause WAIT_TIME return LCDMessage LCDData HIGH LCD_RS pause WAIT_TIME high LCD_Enable LCD_Port = LCD_Data.nib1 pauseus EN_TIME low LCD_Enable pauseus EN_TIME high LCD_Enable LCD_Port = LCD_Data.nib0 pauseus EN_TIME low LCD_Enable pause WAIT_TIME LOW LCD_RS return LCDDataMessage i = 0 messageloop LCD_Data = MessageBuffer(i) i = i + 1 if LCD_Data <> 0 then gosub LCDData pause 100 goto messageloop endif 'end message loop return LCDRomMessage i = LCD_Data messageloop2 read i, LCD_Data i = i + 1 if LCD_Data <> 0 then gosub LCDData pause 100 goto messageloop2 endif 'end messageloop2 return