Hello,

Okay so I am having a weird problem, that really isn't a problem as I can work around it. I just think that it shouldn't be working this way as I have seen no code online written that way.

Here is what I am doing, I have a remote control system that transmits the status of nine momentary switches to a receiver that then turns on the corresponding reed relay.

I had the hardest of time getting the serial to "work", I wrote a simple program to turn on a led once com was set to "1" and state to "O", which is received over the hardware port, with AX as the qualifier.

I played with it for a while and no matter what I did I couldn't get the led to turn on. I had a usb to serial cable laying around but I didn't have a converter, so I ended up just ripping the box open and soldering on to the usb to serial chip before the TTL serial to RS-232 Serial converter. After doing that I opened up microcode studio serial terminal and checked the transmitting string, I would receive this AX1O, "AX" qualifier, "1" port one, "O" on. So the transmitter was working, but not the receiver.

I then tried sending AX1O from the terminal but that didn't work either. Finally about six hours over two days later I thought, well lets try sending this, AX,1,O wow it worked . So then I programmed the transmitter to send that like this HSEROUT ["AX",",",DEC 1,",","O"] and sure enough it worked.

My question is, Why do I have to have the commas?

Below is the code for the transmitter and receiver, respectfully:

PS If you know a better way please tell me, thanks.

Code:
'Author: Albert Eardley
'Writen for 16F628A



DEFINE OSC 20
CMCON = %00000111
OPTION_REG = %11000000

HIGH PORTA.2
HIGH PORTA.3

PAUSE 300

DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 255 ' 1200 Baud @ 1.75%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

mytimer VAR BYTE
mytimer = 0

power VAR PORTA.2
switch0 VAR PORTB.0
switch1 VAR PORTA.1
switch2 VAR PORTA.5
switch3 VAR PORTB.3
switch4 VAR PORTB.4
switch5 VAR PORTB.5
switch6 VAR PORTB.6
switch7 VAR PORTB.7
switch8 VAR PORTA.0

INPUT switch0
INPUT switch1
INPUT switch2
INPUT switch3 
INPUT switch4  
INPUT switch5   
INPUT switch6    
INPUT switch7     
INPUT switch8

INCLUDE "DT_INTS-14.bas"     ' Base Interrupt System
'INCLUDE "ReEnterPBP.bas"     ' Include if using PBP interrupts

ASM
INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
        INT_Handler   TMR1_INT,  _mytimercounter,   PBP,  yes
    endm
    INT_CREATE               ; Creates the interrupt processor
ENDASM

T1CON = $31                ; Prescaler = 8, TMR1ON
@ INT_ENABLE  TMR1_INT     ; enable Timer 1 interrupts

MAIN:
iF switch0 = 0 then
   WHILE switch0 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 1,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 1,"I"]
ENDIF

IF switch1 = 0 THEN
    WHILE switch1 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 2,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 2,"I"]
ENDIF

IF switch2 = 0 THEN
    WHILE switch2 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 3,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 3,"I"]
ENDIF

IF switch3 = 0 THEN
    WHILE switch3 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 4,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 4,"I"]
ENDIF

IF switch4 = 0 THEN
    WHILE switch4 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 5,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 5,"I"]
ENDIF

IF switch5 = 0 THEN
    WHILE switch5 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 6,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 6,"I"]
ENDIF

IF switch6 = 0 THEN
    WHILE switch6 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 7,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 7,"I"]
ENDIF

IF switch7 = 0 THEN
    WHILE switch7 = 0
        mytimer = 0             
        HSEROUT ["AX",DEC 8,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 8,"I"]
ENDIF

IF switch8 = 0 THEN
    WHILE switch8 = 0
        mytimer = 0
        HSEROUT ["AX",DEC 9,"O"]
        PAUSE 500
    WEND
    HSEROUT ["AX",DEC 9,"I"]
ENDIF

GOTO MAIN

mytimercounter:
    mytimer = mytimer + 1
    IF mytimer >= 143 THEN
        LOW power
    ENDIF
@ INT_RETURN
Code:
'Author: Albert Eardley
'Writen for 16F628A

DEFINE OSC 20
CMCON = %00000111
OPTION_REG = %11000000

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 255 ' 1200 Baud @ 1.75%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

switch0 VAR PORTB.0
switch1 VAR PORTB.3
switch2 VAR PORTB.4
switch3 VAR PORTB.5
switch4 VAR PORTB.6
switch5 VAR PORTB.7
switch6 VAR PORTA.0
switch7 VAR PORTA.1
switch8 VAR PORTA.2

com VAR BYTE
state VAR BYTE

MAIN:
LOW switch0
LOW switch1
LOW switch2
LOW switch3
LOW switch4
LOW switch5
LOW switch6
LOW switch7
LOW switch8

MAIN1:
HSERIN [WAIT("AX"), DEC com, state]

SELECT CASE com
    CASE 1
        WHILE state = "O"
            HIGH switch0
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 2
        WHILE state = "O"
            HIGH switch1
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 3
        WHILE state = "O"
            HIGH switch2
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 4
        WHILE state = "O"
            HIGH switch3
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 5
        WHILE state = "O"
            HIGH switch4
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 6

        WHILE state = "O"
            HIGH switch5
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 7
        WHILE state = "O"
            HIGH switch6
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 8
        WHILE state = "O"
            HIGH switch7
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE 9
        WHILE state = "O"
            HIGH switch8
            HSERIN 2000,MAIN,[WAIT("AX"), DEC com, state]
            IF com != 1 THEN MAIN
        WEND
        GOTO MAIN

    CASE ELSE
        GOTO MAIN

END SELECT