找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2062|回复: 5
收起左侧

如何将单片机串口通信的数据进行排序?

[复制链接]
ID:835348 发表于 2020-10-27 19:24 | 显示全部楼层 |阅读模式
想把串口通信随机发送的数据排序之后显示在接收区,在网上看了很多冒泡排序,自己用怎么也搞不好求帮助

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit WE = P2^7;
  6. sbit DU = P2^6;
  7. uchar num,num1;
  8. uchar code table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};


  9. void xianshi(uchar num1)
  10. { WE = 1;
  11.   P0 = 0xfe;
  12.   WE = 0;
  13.   P0 = 0xff;
  14.   DU = 1;
  15.   P0 = table[num1];
  16.   DU = 0;
  17. }
  18.         
  19. void UART_init()
  20. {
  21.         TMOD = 0x20;          //T1工作模式2  8位自动重装
  22.         TH1 = 0xfd;
  23.         TL1 = 0xfd;         //比特率9600
  24.         TR1 = 1;                //启动T1定时器
  25.         SM0 = 0;
  26.         SM1 = 1;                 //串口工作方式1 10位异步
  27.         REN = 1;                //串口允许接收
  28.         EA  = 1;                //开总中断
  29.         ES  = 1;                //串口中断打开
  30. }
  31. void main()
  32. {
  33.         UART_init(); //串口初始化
  34.         xianshi();
  35.         while(1);        
  36. }




  37. void UART() interrupt 4
  38. {                        
  39.         if(RI)        //检测是否接收完成
  40.         {
  41.                
  42.                 num1 = SBUF;
  43.                
  44.                   if(num1 > num)
  45.           {        num = num1;
  46.                                  }
  47.                 xianshi(num);        //将数据的最大值显示在数码管上   
  48.                 RI = 0
  49.           SBUF = num1;
  50.                          TI = 0;

  51.                
  52.         }
  53. }
复制代码


回复

使用道具 举报

ID:88256 发表于 2020-10-27 20:55 | 显示全部楼层
什么问题都不说清楚,让我们瞎猜啊
回复

使用道具 举报

ID:213173 发表于 2020-10-28 07:59 | 显示全部楼层
楼主既然要把特定长度的数据串排序,就得把此数据串保存在一个固定地址,通常是定义一个缓存数组来操作。楼主的程序只能显示当前接收到的数值。
回复

使用道具 举报

ID:835348 发表于 2020-10-28 09:17 | 显示全部楼层
hhdsdy 发表于 2020-10-27 20:55
什么问题都不说清楚,让我们瞎猜啊

就是利用串口通信,发送一串数据,比如01 02 04 05 03,接收的数据要排序,从大到小,从小到大都可以01 02 03 04 05
回复

使用道具 举报

ID:414556 发表于 2020-10-28 09:26 | 显示全部楼层
你是要排每一次还是所有的最大,每一次要延迟一段时间后把NUM清0
回复

使用道具 举报

ID:835348 发表于 2020-10-28 09:28 | 显示全部楼层
amandv 发表于 2020-10-28 09:26
你是要排每一次还是所有的最大,每一次要延迟一段时间后把NUM清0

排每一次,不是排最大
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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