1.串口配置函数
上一讲的讲解是让大家对《手把手教你学51单片机》文档的第十一章的第一个例程的辅助理解,我们没有写单片机接收电脑端发送回来的数据字节做处理的代码。因为这些都是IO端口模拟的串口通信,由于51单片机本身集成有串口模块,所以我们使用其硬件资源即可,无需在软件方面做过多的细节描写,如有兴趣了解串口更多细节,请反复阅读《手把手教你学51单片机》文档的第十一章。
那么宋老师已经很详细地把串口的相关知识讲解清楚,我们直接模仿他的编程思想来实现我们想实现的功能即可。
串口配置函数我们直接运用宋老师的代码,这里讲解一两处配置的知识。
首先“SCON=0x50;”是让SCON寄存器的第4位和第6位都置1,其他位置0,在文档的表11-2已有讲解。
“TH1 = 256 - (11059200/12/32)/baud;”是波特率设置的计算公式,可不用深究,由于串口的使用要占用定时器1,那么定时器1的定时中断将不能使用,所以必须使“ET1=0;”禁止其产生定时中断,也就是使用了串口,那么“void TIM1_IRQHandler() interrupt 3”将不能再出现在程序书写中。
不过呢,串口也有相应的中断函数,像ET0,ET1一样,这些都是子开关,串口中断的子开关为ES,“ES=1;”和“EA=1;”就开启了串口的中断函数。我们串口发送数据的时候会产生中断,接收到数据的时候也会产生中断,这两个瞬间我们在中断函数里需要执行相关任务。
要知道串口有动作的时候,总会有RI或者TI被置1,前者意为接收到完整的8位的数据,也就是接收到一个字节然后RI就被置1。后者意为单片机发送完一个完整的字节了,TI被置1。这些瞬间都需要我们在串口中断函数中让其清0,以备下次它们能再次被置1。
我们现在要实现的功能很简单,就是电脑端通过串口发送一个数据给单片机,这个数据被单片机接收到之后,让这个数据再加1,然后单片机再通过串口把加1后的数据发送回去给电脑端让它在窗口上显示。
2.代码
#include #include #include u8 RXDBUF;//缓存接收到的数据 void ConfigUART(u16 baud) { SCON = 0x50; //配置串口为模式1 TMOD &= 0x0F; //清零T1的控制位 TMOD |= 0x20; //配置T1为模式2 TH1 = 256 - (11059200/12/32)/baud;//计算T1重载值 TL1 = TH1; //初值等于重载值 ET1 = 0; //禁止T1中断 ES = 1; //使能串口中断 TR1 = 1; //启动T1 } void main() { LED_Init(); //初始化LED硬件模块 EA = 1; //闭合总中断开关 ConfigUART(9600);//串口波特率设置为9600 while(1); } void InterruptUART() interrupt 4 { if (RI) //RI等于1就满足if条件语句,意为接收到字节 { RI = 0; //手动清零接收中断标志位 RXDBUF = SBUF; //接收到的数据保存到接收缓存变量中 SBUF = RXDBUF+1; //发送回去给电脑端的数据 } if (TI) //TI等于1满足if条件语句,意为字节发送完毕 { TI = 0; //手动清零发送中断标志位 } } 这里讲解一下串口中断函数,像“if(RI){RI=0;}”和“if(TI){TI=0;}”这些都是在串口中断函数中必须要去执行的任务,当然如果在其他函数里有清0这两个位,可不用在串口中断函数中书写,但一定要保证每次都要清0。 SBUF是名字相同作用却不同的缓冲区。 “RXDBUF = SBUF;”SBUF在等于号后面意为这个是单片机接收电脑端数据的缓存区。 “SBUF = RXDBUF+1;”SBUF在等于号前面意为这个是单片机发送给电脑端数据的缓存区,一旦出现“SBUF = xxxx”这样的语句,那就是单片机开始通过串口发送数据出去了。 实验现象如下,与上一讲不同,我们这次选用的是“十六进制显示”模式,我们电脑端发送给单片机的数据也是在“十六进制发送”模式,打上7点击发送,电脑端发送的数据其实是0x07,单片机接收到电脑端发来的数据之后加1:0x07+1=0x08。 0x08这个数据再通过单片机发送回去给电脑端,这样电脑端就显示“08”了。
上一篇:51单片机-串口通信入门
下一篇:51单片机-详细理解ASCII码
推荐阅读
史海拾趣
Dymec公司成立的初期,正面临着电子市场快速变革的挑战。为了在市场上立足,公司创始人决定专注于研发高精度电子连接器。经过数月的努力,团队成功开发出了一款具有创新性的连接器产品,这款产品不仅提高了数据传输的效率,还大大增强了设备的稳定性。这一创新为Dymec公司赢得了第一批客户的认可,也为公司后续的发展奠定了坚实的基础。
随着科技的不断进步和市场需求的变化,维峰电子始终将技术创新作为公司发展的核心驱动力。公司投入大量资金和人力,在研发方面取得了显著成果。近年来,公司成功申请并获得了多项国家专利,包括外观设计专利、发明专利和实用新型专利等。这些专利的获得不仅提升了公司的技术竞争力,也为客户提供了更加优质的产品和服务。
Aptiv一直秉持开放合作的理念,积极与产业链上下游企业开展创新合作。公司与多家科技公司、研究机构以及高校建立了战略合作关系,共同推动自动驾驶技术的研发和应用。通过共享资源、优势互补,Aptiv不仅加快了自身的发展步伐,还为整个电子行业的进步做出了积极贡献。
在自动驾驶技术快速发展的同时,AURORA公司也积极寻找商业化突破口。公司创始人认为,自动驾驶卡车商业化是一个具有巨大潜力的市场。因此,AURORA优先瞄准了自动驾驶卡车商业化领域,与FedEx、Paccar、Schneider、Werner和Xpress等多家平台公司建立了试点合作关系。通过在实际场景中测试和验证自动驾驶技术,AURORA不断积累经验和数据,为未来的商业化落地奠定了坚实基础。
这五个故事展示了AURORA公司在电子行业中的发展历程和取得的成就。从初创时期的挑战与机遇到技术实力的不断提升,再到与汽车制造商的深度合作、垂直产业链的整合与布局以及自动驾驶卡车商业化的探索,AURORA公司凭借其卓越的技术实力和前瞻性的战略眼光,在电子行业中逐渐崭露头角。未来,我们有理由相信AURORA将继续在自动驾驶领域取得更多突破和创新。
AURORA公司一直致力于提升自动驾驶技术的安全性和可靠性。通过不断研发和创新,AURORA在自动驾驶算法、传感器融合、数据处理等方面取得了显著进展。公司的技术团队不断攻克技术难题,推动自动驾驶技术向更高等级迈进。同时,AURORA还积极与高校和研究机构合作,共同推动自动驾驶技术的研发和应用。
为了满足不断增长的市场需求,1928年,Belden在印第安纳州里士满开设了一家专为制造电线而设计的新工厂。这家工厂的建立极大地提升了公司的产能和效率,为公司的进一步发展提供了有力保障。在随后的几十年里,随着第二次世界大战的爆发和战后经济的复苏,里士满工厂经历了多次扩建和升级,逐渐成为百通最大的制造工厂之一。
引言: 电源是信息系统及电子产品地心脏,交流电源的质量决定了信息系统及电子产品能否正常地工作。因此了解交流电源的质量问题,才能为其提供有效的解决方案。交流电源存在的质量问题有以下几种。 一、电源质量问题 1. 电压的变化范围过大, ...… 查看全部问答∨ |
|
请教各位大虾,系统线程函数PsCreateSystemThread应该在什么位置创建。我在deviceIoCtrl中创建线程后,安装驱动的时候,电脑回重启,在DriverEntry入口函数末尾创建会出现同样的问题。请各位大虾帮帮忙,这应该如何解决。 我创建的这个线程主要是 ...… 查看全部问答∨ |
vs2003 我刚装上。 开发一般的windows应用程序没有问题。 但在创建一个winCE的windows应用程序时,在“Form1.cs[设计]”这个窗口中显示: “加载文档时出错。修复此错误,然后再重新尝试加载该文档。错误信息如下所示: 文件中的类都不能进行设 ...… 查看全部问答∨ |
Cadence高速电路板设计与仿真第3版,Allegro16.2最全最经典的学习教程。 Allegro_SPB_v16_2市面上最为经典的教材,强烈要求为精华 Cadence高速电路板设计与仿真第3版 好东西,不多说,下了就知道不后悔的;P [ 本帖最后由 43381557 于 2010-9-17 14:57 编辑 ]… 查看全部问答∨ |
|
NXP发布速度高达204MHz的ARM Cortex-M4微控制器 在网上看到 NXP发布速度高达204MHz的ARM Cortex-M4微控制器 原文网址:http://www.eechina.com/viewthread.php?tid=83693 恩智浦半导体(NXP)近日发布LPC4300数字信号控制器(DSC),这是迄今为止业内速度最快的ARM Cortex-M4 ...… 查看全部问答∨ |