找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6329|回复: 8
打印 上一主题 下一主题
收起左侧

单片机串口通信传输传输32位数据的问题

[复制链接]
跳转到指定楼层
楼主
ID:288421 发表于 2018-4-6 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一下关于: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. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 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;

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:288421 发表于 2018-4-7 14:54 | 只看该作者
请求大神给予解决
回复

使用道具 举报

地板
ID:160834 发表于 2018-4-7 15:51 | 只看该作者
楼主,你的串口收发程序连个框架都不完整的。建议先找个最精简的收发程序研究下。 否则,三言两语很难使你理解程序。wulin  的32位转成8位程序没问题。 如果有一个32位的数值需要发送  可以这么转换成8位  之后调用串口发送函数依次发送即可。 电脑端收到后  再把8位的通过转换函数转换成32位数值就可。 串口传输32位数值  需要定个传输协议。 否则发送了也无法正确接收。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:160713 发表于 2018-4-7 17:09 | 只看该作者
按照先低位后高位分解成四位数据 然后再在上位机上进行移位还原
回复

使用道具 举报

6#
ID:160713 发表于 2018-4-7 17:18 | 只看该作者
就像楼上说的按照先低位后高位分解成四位数据移位发送, 然后再在上位机上进行移位还原再转换成十进制就好了。如果想直接在串口助手上直接显示你可以先转换成十进制(就像给液晶打印数据似的),然后把十进制对应的字符传到串口助手上加上一定的间隔就可以直接看到十进制数据了

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:303129 发表于 2018-4-7 21:14 | 只看该作者
union
{
   struct
   {
      unsigned char n0; //低字节
      unsigned char n1; //
      unsigned char n2; //
      unsigned char n3; //高字节
   } bytes;
   unsigned long data;
} Temp;
定义一个联合体,再分别传送高低位数据。
回复

使用道具 举报

8#
ID:239318 发表于 2018-7-30 16:26 | 只看该作者
我也想知道,加1
回复

使用道具 举报

9#
ID:94642 发表于 2020-6-15 16:15 | 只看该作者
大佬们,联合体怎么用的,是定义结构体吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表