读书人

单片机模拟串口发送数据发送出来的必

发布时间: 2014-01-26 17:50:50 作者: rapoo

单片机模拟串口发送数据,发送出来的必须是十六进制数吗
如题所示,代码如下:



#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????êy?Y??
while(j--)
{
newTXD=(bit)(input&0x01); //?è′?μí??
WaitTF0();
input=input>>1;
}

//¢?íD£?é??(?T)

//¢?í?áê???
newTXD=(bit)1;
WaitTF0();
TR0=0;
}

void Sendata()
{
for(i=0;i<sizeof(info);i++)//ía2??-?£?±éàúêy×é
{
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度。。如何把25转化为16进制发出去。。。。如果直接发25串口工具得到的内容是不对的啊。。


不是不对,是要处理一下

25是字符,那就按字符处理,,你可以用调试软件,,如果在调试软件上设置HEX格式接受,那就是0x32,35,;如果用字符接受,就显示25

读书人网 >单片机

热点推荐