PDA

View Full Version : Can serial transfer binary data?



TurboLS
- 10th March 2005, 15:01
Can the PIC send out true binary serially or just ASCII representation of it?

mat janssen
- 10th March 2005, 17:26
Yes, It is always binairy data what you sent. ASCII is also binairy.
The recieving unit could be a problem. Don't forget to sent 8 bits.

TurboLS
- 10th March 2005, 18:53
Well, like if I use the BIN8 operator, i do get 10110111 in the serial command window, but Matlab reads it as 49, 48, 49, 49, 48, 49, 49, 49 (which is the decimal value of the ascii characters, 0 and 1. So instead of each bit being sent in 1 bit, each bit requires 5 bits b/c 2^5 is 64. Basically, is there a way to send binary and not ascii?

NavMicroSystems
- 10th March 2005, 22:15
TurboLS,

A "standard terminal" displays the ASCII representation of each byte received.

So if you would like to see "BINARY" on your terminal screen you have got to send the (8bit) ASCII value for the every single "1" and "0"

or

choose a "terminal-program" that is capable of displaying the binary values of received data.

TurboLS
- 10th March 2005, 23:30
what is the command to send binary values if I have a terminal program that can view them?

TurboLS
- 12th March 2005, 03:31
Is the PIC capable of sending RAW binary data?? ASCII characters take longer to send, so if I can send RAW binary data, that would be optimum. Does anyone know?

Bruce
- 12th March 2005, 08:27
Is the PIC capable of sending RAW binary data??
I think if you just send the value without any formatting, it's in raw format.
I.E. X = 10 : HSEROUT [X].

You can send whatever value's in X directly to the USART TXREG like this,
and I'm fairly sure the PIC doesn't automatically convert bytes placed in
TXREG to ASCII;


SPBRG = 64 ' 19200 bps @20MHz
RCSTA = $90 ' Serial port enable
TXSTA = $24 ' Transmit enable, BRGH = 1 for high-speed
X VAR BYTE
TRISC.6=0

MAIN:
FOR X = 0 to 255
GOSUB ENCODE
PAUSE 50
NEXT X
X = $0D ' Carriage return
GOSUB ENCODE
X = $0A ' Line feed
GOSUB ENCODE
PAUSE 100
GOTO Main

ENCODE:
ASM
movf _X, W ; Load X into W reg
btfss PIR1,4 ; Wait for TXREG to be empty after last byte
goto $-1 ; Not empty, wait
movwf TXREG ; Empty, so send next byte
ENDASM
RETURN

I don't have MATLAB to test this, but I can't see why it wouldn't work. I get
the same results from either method with a standard terminal program.