标题: 单片机串口通信传输传输32位数据的问题 [打印本页]

作者: 茶树油    时间: 2018-4-6 22:31
标题: 单片机串口通信传输传输32位数据的问题
请教一下关于:C51单片机怎样通过8位串口寄存器传输32位数据到PC机上显示?

程序如下:
  1. #include "reg52.h"
  2. sbit DOTE=P1^0;
  3. sbit SCOK=P1^3;
  4. unsigned long readpc()
  5. {
  6.   unsigned long count;
  7.   unsigned char i;
  8.   SCOK=0;
  9.   count=0;
  10.   while(DOTE);
  11.   for(i=0;i<24;i++)
  12.   {
  13.    SCOK=1;
  14.    count=count<<1;
  15.    SCOK=0;
  16.    if(DOTE)count++;
  17.   }
  18.   SCOK=1;
  19.   count=count^0x800000;
  20.   return(count);
  21. }
  22. void port()
  23. {
  24.   EA=1;
  25.   ES=1;
  26.   TMOD=0X20;
  27.   TH1=0XF3;
  28.   TL1=0XF3;
  29.   SCON=0X50;
  30.   TCON=0X40;
  31. }
  32. void main()
  33. {
  34.   port();
  35.   while(1);
  36. }
  37. void port1() interrupt 4
  38. {
  39. 这部分不知道怎么用指针编写8位与32位之间的传送???谢谢
  40. }
复制代码



作者: wulin    时间: 2018-4-7 13:38
分解成4个8位数据传输
unsigned long x=0xaabbccdd;
unsigned char a,b,c,d;
        a=x>>24;
        b=x>>16;
        c=x>>8;
        d=x;

作者: 茶树油    时间: 2018-4-7 14:54
请求大神给予解决
作者: QIANLILI    时间: 2018-4-7 15:51
楼主,你的串口收发程序连个框架都不完整的。建议先找个最精简的收发程序研究下。 否则,三言两语很难使你理解程序。wulin  的32位转成8位程序没问题。 如果有一个32位的数值需要发送  可以这么转换成8位  之后调用串口发送函数依次发送即可。 电脑端收到后  再把8位的通过转换函数转换成32位数值就可。 串口传输32位数值  需要定个传输协议。 否则发送了也无法正确接收。
作者: queen123444    时间: 2018-4-7 17:09
按照先低位后高位分解成四位数据 然后再在上位机上进行移位还原
作者: queen123444    时间: 2018-4-7 17:18
就像楼上说的按照先低位后高位分解成四位数据移位发送, 然后再在上位机上进行移位还原再转换成十进制就好了。如果想直接在串口助手上直接显示你可以先转换成十进制(就像给液晶打印数据似的),然后把十进制对应的字符传到串口助手上加上一定的间隔就可以直接看到十进制数据了
作者: ZG11211    时间: 2018-4-7 21:14
union
{
   struct
   {
      unsigned char n0; //低字节
      unsigned char n1; //
      unsigned char n2; //
      unsigned char n3; //高字节
   } bytes;
   unsigned long data;
} Temp;
定义一个联合体,再分别传送高低位数据。
作者: 科技论2    时间: 2018-7-30 16:26
我也想知道,加1
作者: 917106794    时间: 2020-6-15 16:15
大佬们,联合体怎么用的,是定义结构体吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1