如题所示,代码如下:
#include <reg51.h>
#include <stdio.h>
#include <string.h>
typedef unsigned char uchar;
int i;
uchar code info[] = {0x56,0x56,0x56,0x56,0x56,0x56,0x56};
sbit newTXD = P2^1;//
void UartInit()
{
SCON = 0x50; // SCON: serail mode 1, 8-bit UART
TMOD |= 0x21; //
PCON |= 0x80; // SMOD=1;
TH0 = 0xFE; // 2400bps fosc=11.0592MHz
TL0 = 0x7F; //400bps fosc=11.0592MHz
}
void WaitTF0(void)
{
while(!TF0);
TF0=0;
TH0=0xFE; // fosc=11.0592MHz
TL0=0x7F; // fosc=11.0592MHz
}
void WByte(uchar input)
{
//·?????????
uchar j=8;
TR0=1;
newTXD=(bit)0;
WaitTF0();
//·???8??????????
while(j--)
{
newTXD=(bit)(input&0x01); //????????
WaitTF0();
input=input>>1;
}
//·??????é??(??)
//·????á????
newTXD=(bit)1;
WaitTF0();
TR0=0;
}
void Sendata()
{
for(i=0;i<sizeof(info);i++)//???????·??±é?ú??×é
{
WByte(info[i]);
}
}
void main()
{
UartInit();
while(1)
{
Sendata();
}
}
以上发送的串为:uchar code info[] = {0x56,0x56,0x56,0x56,0x56,0x56,0x56};
要是变成一个字符串好像就不对了。。
想发字符串或者数字,怎么办。谢谢
------解决方案--------------------
其实一样的
就是数据格式的问题,,比如你发 0x65,,和 “A” 是一一样的
------解决方案--------------------
发送和接收协议要一致,比如你定义25按照0x02 0x05发送,接收组合成25也行;或者你直接发送16进制的0x19(十进制就是25),接收到0x19就是25,关键看你协议怎么定,你定义成加密的密码也行,按照协议的约定就能还原。
------解决方案--------------------
串口的封包及解包都需要自己编写。
------解决方案--------------------
不是不对,是要处理一下
25是字符,那就按字符处理,,你可以用调试软件,,如果在调试软件上设置HEX格式接受,那就是0x32,35,;如果用字符接受,就显示25