From | "Len Gabrielson" <lgabrielson@point360.net> |
Date | Tue, 10 Jul 2001 16:26:10 -0700 |
** High Priority ** Hi Mark, I'm getting desperate. I know what code I am supposed to get, but it's not working, and Im running out of time. As you pointed out, I need to use the software uart because I need: 38400 baud 1Start bit 8 data bits 1 stop bit odd parity I am testing the incoming data with this: $regfile = "8515def.dat" $crystal = 4915200 '$baud = 38400 Ddrd = &B01111111 Ddra = &B11111111 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 Config Lcd = 16 * 2 Dim Status As String * 10 Dim A(20) As Byte Dim B As Byte Dim X As Word Open "comd.0:38400,8,O,1" For Input As #1 Sb1: Status = Waitkey(#1) X = Hexval(status) If X = 118 Then 'look for 118D or 76H Lcd X ; " "; Status = Waitkey(#1) X = Hexval(status) 'should be 32D or 20H Lcd X ; " "; Status = Waitkey(#1) 'first byte of interest X = Hexval(status) Lcd X ; " "; Status = Waitkey(#1) X = Hexval(status) 'second byte of interst Lcd X ; " "; Status = Waitkey(#1) X = Hexval(status) Lcd X ; " "; Wait 2 Cls : Home End If Goto Sb1 If you see a newbie blunder, please point it out. My next posting will be under the heading of NEED CODE--WILL PAY. Thanks, Len G. >>> mark@mcselec.com 07/11/01 12:32AM >>> Hi, The serial buffered input/output is inteded for the hardware uart. When you use INPUT,INKEY or WAITKEY you are doing serial input. Normally this returns info from the serial port. But what happens if you are in an interrupt or performing a time consuming function? The hardware uart can only store 1 byte. So that is why I wrote the buffered routines. The buffered input routine will store the incoming data in the buffer. Then when you use INPUT,WAITKEY etc., this data is pulled out of the serial buffer. The variables mentioned in the sample are only there for completeness. When you want to check the serial input stream try this: -1- open the channel -2- perform some tests if you can receive data with a terminal emulator for example -3- when all is working: dim b as byte,v1 as byte,v2 as byte do b = waitkey() ' get a byte from the serial input if b = &H20 then ' for example value of first byte b=waitkey() ' get next if b = &H78 then ' vaue of next byte ' when you get here it means you can get the next 2 bytes v1 = waitkey() : v2 = waitkey() ' get the values gosub dosomething end if end if loop dosomething: ' do an action here return Best regards, Mark Alberts -----Original Message----- From: owner-bascom@grote.net [mailto:owner-bascom@grote.net]On Behalf Of Len Gabrielson Sent: dinsdag 10 juli 2001 9:13 To: bascom@grote.net Subject: [bascom] BASCOM-AVR Buffered Serial Problems (repeat) Hi again folks, I don't know what happened to that last message, but it came back to me is some weird format, so I'll try again... I'm sorry, but either I better go back to STAMPs or I need some further explaination. Near the bottom of the RS232BUFFER.BAS sample it tells you some variables that are used in the routine. It also says that you won't lose characters, IF YOU EMPTY THE BUFFER, but THE EXAMPLE DOESN'T TELL YOU HOW TO DO THAT! I am monitoring the _WPOINTER and _WCOUNTER bytes, and they always show me a "0", even though there is data coming in. Is there a variable that represents the buffer itself, so that I can go in and look for the byte/s I need? Signed, very confused. >From the RS232BUFFER.BAS sample: This time the chars are received by an interrupt routine and are 'stored in a buffer. This way you will not loose characters providing that 'you empty the buffer 'So when you fast type abcdefg, they will be printed after each other with the '1 second delay 'Using the CONFIG SERIAL=BUFFERED, SIZE = 10 for example will 'use some SRAM memory 'The following internal variables will be generated : '_WPOINTER BYTE , a pointer to the location of the buffer that was written last '_RPOINTER BYTE , a pointer to the location of the buffer that was read last '_WCOUNTER BYTE , a counter that holds the number of chars in the buffer 'calling _recChar0 will decrease this var , when a char is received it will be increased '_RS232INBUF STRING , the actual buffer with the size of SIZEb
Hi Mark,
I'm getting desperate. I know what code I am supposed to get, but
it's not working, and Im running out of time.
As you pointed out, I need to use the software uart because I need:
38400 baud
1Start bit
8 data bits
1 stop bit
odd parity
I am testing the incoming data with this:
$regfile = "8515def.dat"
$crystal = 4915200 '$baud = 38400 Ddrd = &B01111111
Ddra = &B11111111 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 ,
Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 16 * 2 Dim Status As String * 10
Dim A(20) As Byte Dim B As Byte Dim X As Word Open "comd.0:38400,8,O,1" For Input As #1
Sb1: Status =
Waitkey(#1)
X = Hexval(status) If X = 118 Then 'look for 118D or 76H Lcd X ; " "; Status =
Waitkey(#1)
X = Hexval(status) 'should be 32D or 20H Lcd X ; " "; Status =
Waitkey(#1)
'first byte of interest
X = Hexval(status) Lcd X ; " "; Status =
Waitkey(#1)
X = Hexval(status) 'second byte of interst Lcd X ; " "; Status =
Waitkey(#1)
X = Hexval(status) Lcd X ; " "; Wait 2 Cls : Home End If Goto
Sb1
If you see a newbie blunder, please point it out.
My next posting will be under the heading of NEED CODE--WILL PAY.
Thanks,
Len G.
>>> mark@mcselec.com 07/11/01 12:32AM >>> Hi, The serial buffered input/output is inteded for the hardware uart. When you use INPUT,INKEY or WAITKEY you are doing serial input. Normally this returns info from the serial port. But what happens if you are in an interrupt or performing a time consuming function? The hardware uart can only store 1 byte. So that is why I wrote the buffered routines. The buffered input routine will store the incoming data in the buffer. Then when you use INPUT,WAITKEY etc., this data is pulled out of the serial buffer. The variables mentioned in the sample are only there for completeness. When you want to check the serial input stream try this: -1- open the channel -2- perform some tests if you can receive data with a terminal emulator for example -3- when all is working: dim b as byte,v1 as byte,v2 as byte do b = waitkey() ' get a byte from the serial input if b = &H20 then ' for example value of first byte b=waitkey() ' get next if b = &H78 then ' vaue of next byte ' when you get here it means you can get the next 2 bytes v1 = waitkey() : v2 = waitkey() ' get the values gosub dosomething end if end if loop dosomething: ' do an action here return Best regards, Mark Alberts -----Original Message----- From: owner-bascom@grote.net [mailto:owner-bascom@grote.net]On Behalf Of Len Gabrielson Sent: dinsdag 10 juli 2001 9:13 To: bascom@grote.net Subject: [bascom] BASCOM-AVR Buffered Serial Problems (repeat) Hi again folks, I don't know what happened to that last message, but it came back to me is some weird format, so I'll try again... I'm sorry, but either I better go back to STAMPs or I need some further explaination. Near the bottom of the RS232BUFFER.BAS sample it tells you some variables that are used in the routine. It also says that you won't lose characters, IF YOU EMPTY THE BUFFER, but THE EXAMPLE DOESN'T TELL YOU HOW TO DO THAT! I am monitoring the _WPOINTER and _WCOUNTER bytes, and they always show me a "0", even though there is data coming in. Is there a variable that represents the buffer itself, so that I can go in and look for the byte/s I need? Signed, very confused. >From the RS232BUFFER.BAS sample: This time the chars are received by an interrupt routine and are 'stored in a buffer. This way you will not loose characters providing that 'you empty the buffer 'So when you fast type abcdefg, they will be printed after each other with the '1 second delay 'Using the CONFIG SERIAL=BUFFERED, SIZE = 10 for example will 'use some SRAM memory 'The following internal variables will be generated : '_WPOINTER BYTE , a pointer to the location of the buffer that was written last '_RPOINTER BYTE , a pointer to the location of the buffer that was read last '_WCOUNTER BYTE , a counter that holds the number of chars in the buffer 'calling _recChar0 will decrease this var , when a char is received it will be increased '_RS232INBUF STRING , the actual buffer with the size of SIZEb |