单片机模拟串口发送数据,发送出来的必须是十六进制数吗

lutao050306 2014-01-22 11:18:47
如题所示,代码如下:



#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};
要是变成一个字符串好像就不对了。。
想发字符串或者数字,怎么办。谢谢

...全文
1063 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lutao050306 2014-01-25
  • 打赏
  • 举报
回复
程序发送字符串是可以的。。谢谢大家了
Binzo 2014-01-25
  • 打赏
  • 举报
回复
char str[16];
int temperature = 25;
sprintf(str, "%d", temperature);
uart_send(str);
色郎中 2014-01-24
  • 打赏
  • 举报
回复
引用 2 楼 lutao050306 的回复:
楼上,我是说,采集到的温度是25度。。如何把25转化为16进制发出去。。。。如果直接发25串口工具得到的内容是不对的啊。。
不是不对,是要处理一下 25是字符,那就按字符处理,,你可以用调试软件,,如果在调试软件上设置HEX格式接受,那就是0x32,35,;如果用字符接受,就显示25
richyhuang 2014-01-23
  • 打赏
  • 举报
回复
串口的封包及解包都需要自己编写。
Mr. Code 2014-01-22
  • 打赏
  • 举报
回复
发送和接收协议要一致,比如你定义25按照0x02 0x05发送,接收组合成25也行;或者你直接发送16进制的0x19(十进制就是25),接收到0x19就是25,关键看你协议怎么定,你定义成加密的密码也行,按照协议的约定就能还原。
lutao050306 2014-01-22
  • 打赏
  • 举报
回复
楼上,我是说,采集到的温度是25度。。如何把25转化为16进制发出去。。。。如果直接发25串口工具得到的内容是不对的啊。。
色郎中 2014-01-22
  • 打赏
  • 举报
回复
其实一样的 就是数据格式的问题,,比如你发 0x65,,和 “A” 是一一样的

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧