找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9893|回复: 21
收起左侧

51单片机如何接收16位数据呢

  [复制链接]
ID:225054 发表于 2017-10-10 10:11 来自触屏版 | 显示全部楼层 |阅读模式
学到串口通信了,现在需要从上位机发送一个16位的数据在数码管上显示出来,接收部分该怎么写呢?(我的思路是建一个数组缓存接收到的数据等16位数据接收完成了后在读取出来,然后数码管显示,但不知道该怎么写缓存数组啊,求大神给个例程)
回复

使用道具 举报

ID:238216 发表于 2017-10-10 11:07 | 显示全部楼层
//′®¿úéèÖà 11.05920M 2¨ìØÂê9600        T11¤×÷·½ê½Îa1 ×÷Îa2¨ìØÂê·¢éúÆ÷
void uart_init_com()          
{
  TMOD=0x20;
  PCON=0x00;
  SCON=0x50;
  TH1=0xfd;
  TH1=0xfd;
  TR1=1;
}
main函数:
unsigned char com_buf[6] ;
while(1)
      {
              com_buf[x] = USART_Receive();
            if(com_buf[x]=='\r')//接收以回车结束
           break;      
       。。。显示函数
        x++;   
      }

评分

参与人数 1黑币 +1 收起 理由
小魔兽哈登 + 1 很给力!

查看全部评分

回复

使用道具 举报

ID:225054 发表于 2017-10-10 12:29 来自触屏版 | 显示全部楼层
egang 发表于 2017-10-10 11:07
//′úéè 11.05920M 2¨ìê9600        T11¤×÷·ê ...

谢谢大神
回复

使用道具 举报

ID:111634 发表于 2017-10-10 14:51 | 显示全部楼层
USART_Receive()?????谢什么?
回复

使用道具 举报

ID:111634 发表于 2017-10-10 14:54 | 显示全部楼层
收就收!收好后就存!存好后就显示!看样子你一点基础都没有,建议先学点基础再说。
回复

使用道具 举报

ID:238305 发表于 2017-10-10 15:33 | 显示全部楼层
接受的时候考虑包头
回复

使用道具 举报

ID:225054 发表于 2017-10-10 17:35 来自触屏版 | 显示全部楼层
zl2168 发表于 2017-10-10 14:54
收就收!收好后就存!存好后就显示!看样子你一点基础都没有,建议先学点基础再说。

请老师指点,谢谢
回复

使用道具 举报

ID:225054 发表于 2017-10-10 17:36 来自触屏版 | 显示全部楼层
wdz 发表于 2017-10-10 15:33
接受的时候考虑包头

能否给个例程,我参考下?谢谢
回复

使用道具 举报

ID:238372 发表于 2017-10-10 19:19 | 显示全部楼层

//′®¿úéèÖà 11.05920M 2¨ìØÂê9600        T11¤×÷·½ê½Îa1 ×÷Îa2¨ìØÂê·¢éúÆ÷
void uart_init_com()         
{
  TMOD=0x20;
  PCON=0x00;
  SCON=0x50;
  TH1=0xfd;
  TH1=0xfd;
  TR1=1;
}
main函数:
unsigned char com_buf[6] ;
while(1)
      {
              com_buf[x] = USART_Receive();
            if(com_buf[x]=='\r')//接收以回车结束
           break;      
       。。。显示函数
        x++;   
      }
回复

使用道具 举报

ID:238216 发表于 2017-10-10 22:37 | 显示全部楼层
unsigned char USART_Receive( void )
{
    uchar buf =0;
        while(!RI);
          RI=0;
        buf=SBUF;
        return buf ;
}

void uart_init_com()         
{
  TMOD=0x20;
  PCON=0x00;
  SCON=0x50;
  TH1=0xfd;
  TH1=0xfd;
  TR1=1;
}
#define N 20
main函数:
...
unsigned char x=0;
unsigned char com_buf[N] ;
...
while(1)
      {
              com_buf[x] = USART_Receive();
            if(com_buf[x]=='\r')//接收以回车结束
           break;
        x++;   
      }
      
       。。。加显示函数

回复

使用道具 举报

ID:154868 发表于 2017-10-11 00:59 | 显示全部楼层
把接收的数据 转存到数组,显示的时候调出来不就行了
回复

使用道具 举报

ID:111634 发表于 2017-10-11 11:05 | 显示全部楼层
w322405 发表于 2017-10-10 17:35
请老师指点,谢谢

80C51串行通信
实例77  双机串行通信方式1
实例77 双机通信方式1.rar (40.4 KB, 下载次数: 13)
串1.jpg

实例78  双机串行通信方式2 实例78 双机通信方式2.rar (46.57 KB, 下载次数: 5) 串2.jpg
实例79  双机串行通信方式3 实例79 双机通信方式3.rar (45.3 KB, 下载次数: 4) 串3.jpg
实例16  单片机与PC机虚拟串行通信 实验16 与PC机虚拟串行通信.rar (151.41 KB, 下载次数: 7) pc.jpg

Proteus仿真一下,确认有效。以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。

回复

使用道具 举报

ID:123289 发表于 2017-10-11 23:04 | 显示全部楼层
收两个字节后拼装一下,不就是16位了吗?
回复

使用道具 举报

ID:225054 发表于 2017-10-11 23:57 来自触屏版 | 显示全部楼层
yzwzfyz 发表于 2017-10-11 23:04
收两个字节后拼装一下,不就是16位了吗?

给个例程好吗?我搞了好久还是没搞明白,高手们给的例程我都看的云里雾里
回复

使用道具 举报

ID:225054 发表于 2017-10-12 08:35 来自触屏版 | 显示全部楼层
yzwzfyz 发表于 2017-10-11 23:04
收两个字节后拼装一下,不就是16位了吗?

我想用串口接收0~65536但是收到的数合并起来后是乱码
回复

使用道具 举报

ID:18297 发表于 2017-10-12 11:16 | 显示全部楼层
1.如附件。
2、功能发送16进制字符,高位在前,低位在后。
3、如发送01 FF,接收后显示01 FF。

仿真说明

仿真说明

aking.rar

155.12 KB, 下载次数: 62

回复

使用道具 举报

ID:238835 发表于 2017-10-12 11:47 | 显示全部楼层
循环就收两个
回复

使用道具 举报

ID:238825 发表于 2017-10-12 13:54 | 显示全部楼层
分段接收
回复

使用道具 举报

ID:144951 发表于 2017-10-12 14:55 | 显示全部楼层
接受的时候考虑包头
回复

使用道具 举报

ID:238928 发表于 2017-10-12 17:12 | 显示全部楼层
感谢分享!
回复

使用道具 举报

ID:238928 发表于 2017-10-12 17:12 | 显示全部楼层
感谢楼主的分享!
回复

使用道具 举报

ID:238974 发表于 2017-10-12 20:19 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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