这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何将MCU串口通信的数据进行排序?

共5条 1/1 1 跳转至

如何将MCU串口通信的数据进行排序?

工程师
2020-10-28 20:48:29     打赏

我想把串口通信随机发送的数据排序之后显示在接收区,在网上看了很多冒泡排序,但自己是MCU新手,用怎么也搞不好求帮助。。。


我的51单片机源程序如下:


#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint  unsigned int

sbit WE = P2^7;

sbit DU = P2^6;

uchar num,num1;

uchar code table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};



void xianshi(uchar num1)

{ WE = 1;

  P0 = 0xfe;

  WE = 0;

  P0 = 0xff;

  DU = 1;

  P0 = table[num1];

  DU = 0;

}

        

void UART_init()

{

        TMOD = 0x20;          //T1工作模式2  8位自动重装

        TH1 = 0xfd;

        TL1 = 0xfd;         //比特率9600

        TR1 = 1;                //启动T1定时器

        SM0 = 0;

        SM1 = 1;                 //串口工作方式1 10位异步

        REN = 1;                //串口允许接收

        EA  = 1;                //开总中断

        ES  = 1;                //串口中断打开

}

void main()

{

        UART_init(); //串口初始化

        xianshi();

        while(1);        

}





void UART() interrupt 4

{                        

        if(RI)        //检测是否接收完成

        {

               

                num1 = SBUF;

               

                  if(num1 > num)

          {        num = num1;

                                 }

                xianshi(num);        //将数据的最大值显示在数码管上   

                RI = 0

          SBUF = num1;

                         TI = 0;


               

        }

}





关键词: 串口通信     排序    

工程师
2020-10-28 20:58:54     打赏
2楼

楼主既然要把特定长度的数据串排序,就得把此数据串保存在一个固定地址,通常是定义一个缓存数组来操作。楼主的程序只能显示当前接收到的数值。


工程师
2020-10-28 21:01:20     打赏
3楼

你是要排每一次还是所有的最大,每一次要延迟一段时间后把NUM清0!


工程师
2020-10-28 21:20:34     打赏
4楼

收到数据后,放到BUFFER里,然后找个排序算法,应该很简单的啊!网上的排序算法很多,比如冒泡、二分法等等。


工程师
2020-10-28 22:20:29     打赏
5楼

学到了


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]