历史上的今天
返回首页

历史上的今天

今天是:2024年12月06日(星期五)

正在发生

2019年12月06日 | 51单片机串口通信程序,支持自定义协议

2019-12-06 来源:51hei

单片机源程序如下:

#include"reg52.h" /*51串口通信by沸腾的冰块/不拼不活*/

typedef unsigned int u16;

typedef unsigned char u8;

#define Data_SIZE 7     //存入数组RevBuf数据长度==uart_Data_SIZE-2

#define uart_Data_SIZE 5//协议实际长度(一个汉字占两位)

u8 RevBuf[Data_SIZE];       //数据接收缓冲区

u8 indata[uart_Data_SIZE];  //防数据抵消缓冲区

u16 data_count=0;   //数据长度,串口中断自增

u16 temp_length=0;  //数据长度,协议长度中转

u8 flished_flag=0;  //数据接收符合要求标志

u8 uart_flished_flag=0;  //串口成功标志

u8 i=0;//延时用

u16 temp=0,count=0;//temp缓存,count用于判断是否接受到数据

sbit LED1=P1^0;sbit k1=P2^0;

sbit LED2=P1^1;sbit k2=P2^1;

sbit LED3=P1^2;sbit k3=P2^2;

sbit LED4=P1^3;sbit k4=P2^3;

sbit LED5=P1^4;sbit k5=P2^4;

sbit LED6=P1^5;sbit k6=P2^5;

sbit LED7=P1^6;sbit k7=P2^6;

sbit LED8=P1^7;sbit k8=P2^7;

void InitUART(void)

{

        TMOD = 0x20;

        SCON = 0x50;

        TH1 = 0xFA;//在此修改波特率

        TL1 = TH1;

        PCON = 0x80;

        EA = 1;

        ES = 1;

        TR1 = 1;

}

void delay(u16 i)

{

        while(i--);        

}

void keypros()//按键处理

{

        if(k1==0)

        {        

                delay(1000);

                if(k1==0)

                {

                        LED1=~LED1;

                }

                while(!k1);

        }

        if(k2==0)

        {        

                delay(1000);

                if(k2==0)

                {

                        LED2=~LED2;

                }

                while(!k2);

        }

        if(k3==0)

        {        

                delay(1000);

                if(k3==0)

                {

                        LED3=~LED3;

                }

                while(!k3);

        }

        if(k4==0)

        {        

                delay(1000);

                if(k4==0)

                {

                        LED4=~LED4;

                }

                while(!k4);

        }

        if(k5==0)

        {        

                delay(1000);

                if(k5==0)

                {

                        LED5=~LED5;

                }

                while(!k5);

        }

        if(k6==0)

        {        

                delay(1000);

                if(k6==0)

                {

                        LED6=~LED6;

                }

                while(!k6);

        }

        if(k7==0)

        {        

                delay(1000);

                if(k7==0)

                {

                        LED7=~LED7;

                }

                while(!k7);

        }

        if(k8==0)

        {        

                delay(1000);

                if(k8==0)

                {

                        LED8=~LED8;

                }

                while(!k8);

        }

}

void UartSendByte(unsigned char c)//发送一个字符

{

        SBUF = c;

        while(!TI);

        TI = 0;

}

void UartSendString(u8 *string)//发送一个字符串

{

        while(*string)

        {

                 UartSendByte(*string++);

        }

}

void main(void)

{

        InitUART();

        UartSendString("Uart_test  is  OK rn");

        while(1)

  {

                keypros();

                if(count                {

                        count=data_count;

                        if(temp!='n') //判断是否接收到结束符

                        {

                                RevBuf[data_count-1]=temp;// 否,就存到RevBuf【】数组中

                                flished_flag=0;//未接收完

                        }

                        else

                        {

                                temp_length=data_count;//是,记录其数据长度

                                data_count=count=0;

                                flished_flag=1;//接收完

                        }

                }

                if(temp_length == Data_SIZE&&flished_flag==1)   //判断数据长度是否满足要求,是否接收完。

                {

                        for(i=0;i                        {

                          indata[i]=RevBuf[i];  //缓冲区

                        }

                        uart_flished_flag=1;    //数据接收成功标志

                        flished_flag=0;

                }

                if(uart_flished_flag==1)  //数据接收完整成功

                {

                        UartSendString("你发送的是rn");

                        for(i=0;i                        {

                                SBUF = indata[i];

                                while(!TI);

                                TI=0;

                        }

                        UartSendString("rn");

                        uart_flished_flag=0;

                        if(indata[1]=='n')//发送:on :1

                                switch(indata[4])

                                {

推荐阅读

史海拾趣

Analog公司的发展小趣事

Analog Devices Inc.(ADI)是一家全球领先的半导体公司,提供广泛的模拟和数字信号处理技术。以下是Analog Devices公司发展的相关故事:

  1. 创立与初期发展:Analog Devices成立于1965年,由两位前哈佛大学教授Ray Stata和Matt Lorber创立。公司最初的目标是利用集成电路技术开发高性能的模拟信号处理器。在早期,Analog Devices主要专注于生产模拟运算放大器、数据转换器和传感器等产品。

  2. 技术创新与产品扩展:Analog Devices在技术方面取得了多项重要突破,包括模拟信号处理、数据转换和射频技术等领域。公司不断推出新产品,拓展业务领域,涉及到汽车、工业、通信、医疗和消费类电子等多个行业。其中,ADI的高精度数据转换器和惯性传感器在市场上备受推崇。

  3. 全球扩张与市场渗透:Analog Devices通过不断扩大全球市场的覆盖范围,加强了与客户的合作关系。公司在美国、欧洲和亚洲等地设立了办事处和生产基地,以满足不同地区市场的需求。此外,ADI还与众多的合作伙伴建立了长期稳定的合作关系。

  4. 收购与整合:为了加强自身的技术实力和市场竞争力,Analog Devices积极进行并购,以扩大产品组合和提升技术能力。近年来,ADI收购了一系列具有战略意义的公司,如Linear Technology、Hittite Microwave Corporation和Maxim Integrated等,加速了公司在多个领域的布局和发展。

  5. 持续创新与未来展望:作为模拟和数字信号处理领域的领先者之一,Analog Devices继续致力于技术创新和产品研发。公司不断推出新产品和解决方案,以满足日益复杂和多样化的市场需求。未来,Analog Devices将继续围绕智能化、连接性和可持续性等方面开展创新,助力客户在不同行业实现更多的应用和发展。

Compact公司的发展小趣事

在快速发展的过程中,Compact公司始终注重品牌建设和文化传承。公司通过不断提升产品质量和服务水平,树立了良好的品牌形象。同时,公司还注重培养员工的归属感和忠诚度,形成了独特的企业文化。这种文化传承不仅为公司的发展提供了强大的精神动力,还使公司在激烈的市场竞争中保持了独特的竞争力。

FRONTIER公司的发展小趣事

背景:假设FRONTIER公司也涉足绿色能源领域。

发展故事:面对全球气候变化和环境问题的日益严峻,FRONTIER公司积极响应可持续发展号召,开始布局绿色能源产业。公司通过引进先进的光伏技术、储能技术和智能电网技术,成功打造了一系列绿色能源解决方案。这些解决方案不仅有效降低了企业的能耗和碳排放量,还为全球能源转型和环境保护做出了积极贡献。FRONTIER的绿色转型不仅赢得了市场的认可和支持,也为公司未来的可持续发展奠定了坚实基础。

Erocore Enterprise Co Ltd公司的发展小趣事

随着技术实力的提升,Erocore开始积极拓展市场。公司凭借优质的产品和服务,逐渐在电子行业中树立了良好的品牌形象。通过与国内外知名企业的合作,Erocore的产品逐渐进入更广泛的市场领域。同时,公司也加大了市场营销力度,通过参加展会、举办研讨会等方式,提升品牌知名度和影响力。

CP Technology Inc公司的发展小趣事

随着公司规模的不断扩大,CP Technology Inc开始实施全球化战略。公司在海外设立了研发中心和销售网络,以更好地服务全球客户。同时,公司还积极参与国际电子行业的交流与合作,不断提升自身的技术水平和市场竞争力。

BERGQUIST公司的发展小趣事

BERGQUIST公司的故事始于上世纪,当时创始人敏锐地洞察到电子设备热管理的重要性。公司从研发高效热传导材料开始,逐渐在热管理技术领域建立起自己的声誉。初创时期,BERGQUIST面临着资金和技术双重挑战,但团队凭借对技术的执着追求和对市场的深刻洞察,成功开发出了一系列具有创新性的热管理产品,为公司的长远发展奠定了坚实基础。

问答坊 | AI 解惑

跪求电子电路课程设计电子密码锁啊!!。

设计要求,设计一个电子密码锁,在开锁的状态下输入密码,密码共四位,用数据开关k1~k10分别表示0~9,输入密码用数码管显示,最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位,可删除输入的数字,删除的是最 ...…

查看全部问答>

protel99se的一个很好用的补丁。

绝对好用!直接双击使用。按鼠标滚轮能放大缩小原理图,按住鼠标右键能拖动原理图。…

查看全部问答>

Altera将举办系列免费技术巡展,不容错过啊 ~~

Altera公司宣布其将与代理商联手合作在2010年8月至9月期间在中国大陆9个城市举办免费的技术研讨会。很好的机会,不容错过哦在研讨会上可以了解到Altera系列产品是在高端数字系统设计上的应用。还将展示Altera解决方案如何推动视频和图像处理设计实 ...…

查看全部问答>

〖ST网站提供适用于STM32F105/107的USB和以太网函数库下载〗

STM3210C-EVAL评估版演示程序和使用手册。STM32_OTG_LIB —— STM32F105xx和STM32F107xx USB OTG函数库,使用手册STM32_ETH_Lib —— STM32F107xx互联型产品线以太网底层驱动,和基于uIP TCP/IP协议栈的网 ...…

查看全部问答>

求教各位一个问题

大家好,我在做EZ430RF项目,遇到一个问题:怎样把dat文件像头文件一样加入主程序,是有h图标那种哦如图:,啊看不见,麻烦各位去我相册里面看!!谢谢 [ 本帖最后由 lhqalex 于 2012-3-5 16:23 编辑 ]…

查看全部问答>

【聊聊DSP】对DSP如何学习将会影响到你将来的收入

    谈谈我对DSP的了解和学习         可能大家认为这题目怎么不一样?呵呵只是为了让大家更仔细认真的看完我发的帖子,大家提出你的想法,一起讨论。        首先:要感谢TI公司 ...…

查看全部问答>

请问.S43是什么文件啊?

最近拿到一个数据采集器项目的文件,打开里面全是.S43文件,而且是用汇编语言,和我一直用的.C文件有什么不同?而且.S43文件在output里,实在是不懂。。。看图片。。。 另外,最近在针对一个上位机和下位机通讯的协议编程,我觉得很难啊,协议的各 ...…

查看全部问答>

液晶面板反垄断,中国对三星等6家外企开出3.53亿元人民币罚单

本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 中国对境外企业价格垄断开出首张罚单——韩国三星、LG,中国台湾地区奇美、友达等六家国际大型面板生产商,因垄断液晶面板价格,遭到国家发改委经济制裁3.53亿元人民币。这也是迄今为止中国开 ...…

查看全部问答>