orMAIN:
SERIN2 DataIn,BdRate,[WAIT("Identifier"),Switch]
IF Switch = $31 THEN TX_ON = 1
IF Switch = $30 THEN TX_ON = 0
GOTO MAIN
END
in serialtool send
Identifier#1
orMAIN:
SERIN2 DataIn,BdRate,[WAIT("Identifier"),Switch]
IF Switch = $31 THEN TX_ON = 1
IF Switch = $30 THEN TX_ON = 0
GOTO MAIN
END
in serialtool send
Identifier#1
Warning I'm not a teacher
You have DEFINCE OSC 8 in your code with HS option in fuse.
This way, chip knows the clk source.Code:OSCCON.0 = 0 ' Clock source defined by FOSC<2:0> of the Configuration Word register
Default OSC value is for Internal 4Mhz clock.
Hope this will solve your issue.
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
Sayzer,
Sorry, i don't understand what I have done wrong with the OSC settings. I'm using an external 8MHz crystal; maybe I should have mentioned it.
I'll give Richard's suggestion (post #10) a try in a little moment and see what it does![]()
Roger
Richard is on it (as usual). Remember that when you're using the serial terminal you're sending ASCII characters. In your original code you're checking if the variable contains the value 1 while you should check if it contains the ASCII character "1".
IF SWITCH = 1
IF SWITCH = "1"
IF SWITCH = $31
IF SWITCH = 49
Do you see (and understand) the difference between the four lines above?
/Henrik.
Hi Roger,
I know you are using external 8Mhz crystal, that is why you need to tell the chip about it.
In your code, there is no OSC setting. You have it in fuse.
Default OSC setting is internal 4Mhz.
You need to manually choose the OSC value for external source by OSCCON.0 = 0
Otherwise, chip will not know you have selected external HS.
To make sure you are running on the correct speed, have a flip flop on a pin for say 5000ms.
Then, you can see the speed.Code:FlipFlop: TX_ON = TX_ON ^ 1 PAUSE 5000 Goto FlipFLop
Last edited by sayzer; - 15th August 2017 at 08:06.
"If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte
Henrik, for my edification is this the correct answer? Please don't roll your eyes too far if this is too much of a NOOB question.
IF SWITCH = 1 checks to see if SWITCH is set to ONIF SWITCH = 1
IF SWITCH = "1"
IF SWITCH = $31
IF SWITCH = 49
IF SWITCH = "1" checks to see if SWITCH is equal to an string value of 1
IF SWITCH = $31 checks to see if SWITCH is an ASCII 1
IF SWITCH = 49 checks to see if SWITCH is an ASCII 1
For the life of me I cannot discern the difference between the last two. $31 = 49 on the ASCII table. How are they different?
Thanks for your patience.
Don't worry about any eyes rolling, this type of thing comes up quite often and hopefully we all learn from it.Henrik, for my edification is this the correct answer? Please don't roll your eyes too far if this is too much of a NOOB question.
All four lines obviously compares the value stored in the variable SWITCH with whatever value is on the right side of the equal sign. But out of the four lines, only the first one would make any difference compared to other ones when put into a program. The other Three would execute exactly the same because they all compare SWTICH to the a value of 49 (while the first line compares SWITCH to a value of 1).
1 is simply the value of 1
"1" however is the ASCII character 1 (which happens to correspond to the value 49 expressed in decimal notation).
49 is the ASCII code, expressed in decimal notation, for ASCII character "1"
$30 is the hexadecimal representation of the decimal value 30 which is the ASCII code for character we know as "1"
%00110001 is the binary representation of the decimal value 30 which is the ASCII code for the character we know as "1"
If, instead of camparing SWITCH to something you'd assign values to it:Only the first line is different, the other four lines all does exactly the same thing - it's just different ways of expressing, or interpreting, the same thing.Code:SWITCH = 1 SWITCH = "1" SWITCH = 49 SWITCH = $30 SWITCH = %00110001
/Henrik.
Thanks Richard. I should have tried this...![]()
Roger
Bookmarks