首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2014-01-26 
单片机模拟串口发送数据,发送出来的必须是十六进制数吗如题所示,代码如下:#include reg51.h#include st

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



#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

热点排行