打印

关于串口通信的数据传送格式

[复制链接]
9222|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yeshaozhu 于 2010-3-25 12:52 编辑

最近在做一个51单片机和pc机的程序(单片机用c,pc机界面用MFC),初学单片机,遇到一些问题想请教一下高手们:
    问题:数据传送格式的问题。通过程序的测试(用接在P0口的流水灯测试),发现数据以ASCII的形式在pc机之间传送,而想要通过P0口输出的时候只能对最低位那个字符进行显示,如发送f0,则P0=49。
    而我想以十六进制的方式进行通信,不知道怎么改进程序。
    注:用串口调试工具对单片机进行调试时能够以十六进制正常通信。
    单片机主程序如:
void main()
{
     TMOD =0x20;
     TL1=0xfd;
     TH1=0xfd;
     SCON =0x50;
     PCON=0x00;     //串口接受字符RI复位,允许串口接收
     TR1=1;
     ES=0;
     while(1)
     {
          while(RI==0);
          RI=0;          //串口接收标志位的软件清零
          ACC=SBUF;
          P0=ACC;  
          SBUF=P0;
          while(!TI);
          TI=0;  
     }
}
      MFC发送字符主要程序(用串口通信的控件编程的,可能相对比较简单一点,初学嘛。。。)如下:
发送按钮函数中:
      UpdateData(TRUE); //读取编辑框内容
      m_ctrlComm.SetOutput(COleVariant(m_TXData));//发送数据,m_TXData为编辑框中获得的数据,类型为CString

相关帖子

沙发
928315| | 2010-3-25 08:19 | 只看该作者
int a=atoi(m_TXData);   //m_TXData类型为CString
??

不知道有问题没有?

我是用CSerial类来实现的

使用特权

评论回复
板凳
wjy1107| | 2010-3-25 09:03 | 只看该作者
你发的F0 如果用ASC来表示是两个字节啦,用一个P0 当然表示不了了。
如果想通讯,就改下单片机的程序吧。就是写个ASC转换成16进制的小程序 就好了

使用特权

评论回复
地板
yeshaozhu|  楼主 | 2010-3-25 12:33 | 只看该作者
3# wjy1107
我想再问一个问题:就是如果我pc机发送F0,那么单片机是分成两次接收还是一次性接收啊?
在单片机程序中怎么样还原成16进制的F0呢?谢谢!

使用特权

评论回复
5
woshidasha| | 2010-3-25 14:56 | 只看该作者
其实就是你在pc上面发送的不是0xf0,而是‘f’,‘0’这两个字符,当然不行。

只要你在发送的时候不是发送英文字母,只是发送数字,那么在数字前面加个‘0x’,就行了

进制等知识没学透

使用特权

评论回复
6
歪 歪| | 2010-3-25 16:24 | 只看该作者
用这个工具抓数据下来和你串口助手数据一比较就知道你程序哪里写错了。

下载地址:
http://download.cnet.com/ComTrac ... 6892.html?tag=mncol

感觉好别忘了给个review(评论),谢谢!

使用特权

评论回复
7
yeshaozhu|  楼主 | 2010-3-25 17:47 | 只看该作者
5# woshidasha
看懂了你的意思,但是现在的问题就是如何通过MFC向单片机发送数字而不是字符串,或者说如何在单片机的程序中多次接收字符以组成原来的字符串并将其转换成16进制或者二进制。
明白原因了,可是我自己试了很久,还是不会。。。。
谢谢!

使用特权

评论回复
8
woshidasha| | 2010-3-26 13:28 | 只看该作者
那你就不要转换成16进制,直接显示

用switch  case语句做一个查表的函数就可以了

比如


switch(i)    //i就是接收到的数据
  {
    case 'A':{...........}break;
    case 'B':{...........}break;
   ..........
   .........
   }

使用特权

评论回复
9
宁静之夜| | 2015-4-12 14:48 | 只看该作者
你好,我在中国电子网看到了你以前发的单片机串口通信帖子,我想问问用十六进制发送,这个问题,你解决了没有,我想请教一下方法,因为我现在也遇到了你遇到的这个问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:菜鸟要有坚定的信念不懈追求,各位高手不吝赐教!邮箱:txyeshaozhu@163.com

5

主题

32

帖子

0

粉丝