I am using PB3 and programming a 18F452. The code I am using waits for a "%" from HSERIN then grabs the next 4 characters and processes them. A "!" is sent and then a numeric value. Then a "?" is sent next followed by another numeric value. So the whole incoming string would look like this %!2?3 for example. Everything seems to work OK as far as receiving the serial data. I just can't process it afterwards using IF THEN statements or CASE statements either. I am only interested in the numeric values of 2 and 3 in the %!2?3 received string. Now as you can see in my posted code the value after I receive the "!" is a 2 and it should be passed to the variable PS_State. Using an LCD I can confirm I am getting 2 passed to PS_State. The problem is the IF THEN statement "IF PS_State = 2 Then" will not process it. It will not update my PORTB and PORTC lines. I tried using a CASE statement to handle this before and it wouldn't work either. IF someone can offer some help or suggestions of what is wrong with this code it would be greatly appreciated. I have been trying to figure this out for several days with no success. I am using Labview to communicate with the 18F452 PIC that seems to be working correctly too. Labview communicates at 9600 baud, 8N1.
Code:Include "modedefs.bas" #CONFIG CONFIG OSC = HS ; XT oscillator CONFIG OSCS = OFF ; Oscillator system clock switch option is disabled (main oscillator is source) CONFIG PWRT = OFF ; PWRT disabled CONFIG BOR = OFF ; Brown-out Reset enabled CONFIG BORV = 20 ; VBOR set to 2.0V CONFIG WDT = OFF ; WDT enabled CONFIG WDTPS = 128 ; 1:128 CONFIG CCP2MUX = OFF ; CCP2 input/output is multiplexed with RC1 CONFIG STVR = ON ; Stack Full/Underflow will cause RESET CONFIG LVP = OFF ; Low Voltage ICSP disabled CONFIG DEBUG = OFF ; Background Debugger disabled. RB6 and RB7 configured as general purpose I/O pins. CONFIG CP0 = OFF ; Block 0 (000200-001FFFh) not code protected CONFIG CP1 = OFF ; Block 1 (002000-003FFFh) not code protected CONFIG CP2 = OFF ; Block 2 (004000-005FFFh) not code protected CONFIG CP3 = OFF ; Block 3 (006000-007FFFh) not code protected CONFIG CPB = OFF ; Boot Block (000000-0001FFh) not code protected CONFIG CPD = OFF ; Data EEPROM not code protected CONFIG WRT0 = OFF ; Block 0 (000200-001FFFh) not write protected CONFIG WRT1 = OFF ; Block 1 (002000-003FFFh) not write protected CONFIG WRT2 = OFF ; Block 2 (004000-005FFFh) not write protected CONFIG WRT3 = OFF ; Block 3 (006000-007FFFh) not write protected CONFIG WRTC = OFF ; Configuration registers (300000-3000FFh) not write protected CONFIG WRTB = OFF ; Boot Block (000000-0001FFh) not write protected CONFIG WRTD = OFF ; Data EEPROM not write protected CONFIG EBTR0 = OFF ; Block 0 (000200-001FFFh) not protected from Table Reads executed in other blocks CONFIG EBTR1 = OFF ; Block 1 (002000-003FFFh) not protected from Table Reads executed in other blocks CONFIG EBTR2 = OFF ; Block 2 (004000-005FFFh) not protected from Table Reads executed in other blocks CONFIG EBTR3 = OFF ; Block 3 (006000-007FFFh) not protected from Table Reads executed in other blocks CONFIG EBTRB = OFF ; Boot Block (000000-0001FFh) not protected from Table Reads executed in other blocks #ENDCONFIG DEFINE OSC 20 DEFINE USE_LFSR 1 DEFINE LCD_DREG PORTD DEFINE LCD_DBIT 0 DEFINE LCD_RSREG PORTA DEFINE LCD_RSBIT 3 DEFINE LCD_EREG PORTA DEFINE LCD_EBIT 1 DEFINE LCD_BITS 4 DEFINE LCD_LINES 2 DEFINE LCD_RWREG PORTA DEFINE LCD_RWBIT 2 DEFINE LCD_COMMANDUS 2000 DEFINE LCD_DATAUS 50 DEFINE HSER_CLROERR 1 DEFINE HSER_BAUD 9600 'DEFINE HSER_SPBRG 129 '9600 Baud @ 20MHz, 0.16% LCDOUT $FE, $01 Pause 100 TRISA = %11111111 TRISB = %11100000 TRISC = %10110000 TRISE = %111 ADCON0=$07 ADCON1=$07 CCP1CON = $0 CCP2CON = $0 RCSTA = $90 TXSTA = $20 INTCON = %00000000 PORTC.2 = 0 PORTB = %00010000 RX_Buff VAR Byte [5] PS_State VAR Byte MainLoop: GOSUB RCVfromPC 'Go wait for data from the PC GOSUB SortData GOSUB Power_Supply GOTO MainLoop RCVfromPC: HSERIN 5000,TimeOut, [WAIT("%"), STR RX_Buff\4] RETURN TimeOut: pause(50) GOTO RCVfromPC SortData: IF RX_Buff(0) = 33 THEN PS_State = RX_Buff(1) RETURN Power_Supply: IF PS_State = 1 Then PORTB.0 = 1 PORTB.1 = 0 PORTB.2 = 0 PORTB.3 = 0 PORTC.2 = 1 EndIf IF PS_State = 2 Then PORTB.0 = 1 PORTB.1 = 1 PORTB.2 = 0 PORTB.3 = 0 PORTC.2 = 1 EndIf IF PS_State = 3 Then PORTB.0 = 1 PORTB.1 = 1 PORTB.2 = 1 PORTB.3 = 0 PORTC.2 = 1 EndIf IF PS_State = 4 Then PORTB.0 = 1 PORTB.1 = 1 PORTB.2 = 1 PORTB.3 = 1 PORTC.2 = 1 EndIf LCDOUT $FE, 1, PS_State Pause(2000) LCDOUT $FE, $01 RETURN




Bookmarks