Full Code:
Code:ASM __CONFIG _CONFIG1H, _OSC_HSPLL_1H __CONFIG _CONFIG2L, _PWRT_ON_2L __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H __CONFIG _CONFIG3H, _PBADEN_OFF_3H __CONFIG _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L ENDASM DEFINE OSC 48 ; uses 12Mhz xtal ADCON1 = $0F clear DEFINE LCD_DREG PORTB ' LCD Data port DEFINE LCD_DBIT 0 ' starting Data bit (0 or 4) DEFINE LCD_EREG PORTB ' LCD Enable port DEFINE LCD_EBIT 5 ' Enable bit (on EasyPIC 5 LCD) DEFINE LCD_RSREG PORTB ' LCD Register Select port DEFINE LCD_RSBIT 4 ' Register Select bit (on EasyPIC 5 LCD) DEFINE LCD_BITS 4 ' LCD bus size (4 or 8 bits) DEFINE LCD_LINES 4 ' number of lines on LCD DEFINE LCD_COMMANDUS 2000 ' Command delay time in us DEFINE LCD_DATAUS 50 ' Data delay time in us ;----[Port settings]---------------------------------------------------- TRISA = %11001111 TRISB = %00000000 TRISD = %00001111 CMCON = 7 ' disable Comparators ;----[USART defines]-------------------------------------------------------- DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0 DEFINE HSER_CLROERR 1 ' Clear overflow automatically DEFINE HSER_SPBRG 25 ' 115200 Baud @ 48MHz, 0.16% SPBRGH = 0 BAUDCON.3 = 1 ' Enable 16 bit baudrate generator ColumnWidth CON 10 TempWD VAR WORD RCIF VAR PIR1.5 ' USART receive flag GIE VAR INTCON.7 tr var byte normtemp VAR WORD[4] ' used to store the desired temperature setting normtemp1 VAR normtemp[0] normtemp2 VAR normtemp[1] normtemp3 VAR normtemp[2] normtemp4 VAR normtemp[3] nTest var byte temphold var byte temp var byte TimeoutCount var byte ;--------------------------------------------------------------------- ;set test values normtemp[0]=240 normtemp[1]=250 normtemp[2]=260 normtemp[3]=270 ;______________________________________________________________ gosub FlushBuffer main: FOR TempWD = 0 TO 1000 IF RCIF=1 THEN GOsub Term_RX PAUSE 1 NEXT TempWD pause 200 goto main Term_RX: HSERIN[nTest] SELECT CASE nTest CASE "S" TempWD = 0 HSERIN 1000,RX_Bombed,[DEC3 TempWD] normtemp[0] = TempWD gosub send Goto Term_Rx RX_Bombed: TimeoutCount = TimeOutCount + 1 lcdOUT $FE,1,"all we got was", dec TempWD,", ", DEC TimeOutCount end select Goto Term_Rx Send: HSEROUT [DEC normtemp[0],10] setpoints(0)=normtemp[0] LCDOut $FE,$D4,#setpoints(0)dig 2,#setpoints(0)dig 1,#setpoints(0)dig 0 RETURN FlushBuffer: While PIR1.5 HSERIN [TempWd] WEND TempWd=0 LCDOUT $FE,1,"Buffer flushed" RETURN
I tried this at 2400 baud (having use PIC multicalc to get the Uart setting) and it gave one error and then echoed all the subsequent entry's correctly. I then changed it back to 115200 and it works a treat- even with my friends application.
Henrick thanks for taking the time out to assist me with this, and for explaining the serial function in laymens terms, I have learnt a lot from your posts.
Now just got to amend the code so that it does the same for all the other variables
I think Charles was going to have his application send one long string of all the variables, maybe I should ask him if he can make it user selected so it updates just the one ?


- even with my friends application.


Bookmarks