当前位置: 代码迷 >> 单片机 >> 单片机模拟串口发送数据,发送出来的必须是十六进制数吗解决思路
  详细解决方案

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

热度:78   发布时间:2016-04-28 15:08:10.0
单片机模拟串口发送数据,发送出来的必须是十六进制数吗
如题所示,代码如下:



#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度。。如何把25转化为16进制发出去。。。。如果直接发25串口工具得到的内容是不对的啊。。


不是不对,是要处理一下

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

  相关解决方案