历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2021年08月26日 | 51单片机-简洁式串口通信

发布者:堕落的猫 来源: eefocus关键字:串口通信  51单片机  编程思想 手机看文章 扫描二维码
随时随地手机看文章

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 //详见第六章第8讲

#include    //详见第八章第11讲

   

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”了。

10.03.png

关键字:串口通信  51单片机  编程思想 引用地址:51单片机-简洁式串口通信

上一篇:51单片机-串口通信入门
下一篇:51单片机-详细理解ASCII码

推荐阅读

(1)DS18B20初步认识DS18B20是美国DALLAS半导体公司推出的一种数字化单总线器件,属于新一代适配微处理器的改进型智能温度传感器。我们先来看看DS18B20在芯片手册上的标题——“DS18B20 Programmable Resolution 1-Wire Digital Thermometer”。从这个标题上看我可以获取一些有价值的信息。首先分辨率是可以编程的,也就是我们可以通过程序来修改这...
随着科技的发展以及深度学习技术的成熟,机器人技术正快速拓展至人类生活的各个方面,并且为人类提供协助和服务,日益影响人类及其生活。尤其在教育行业,机器与教育相结合,为现代教育开创一种全新的教学模式。北京可以科技是一家成立于2014年的机器人科技公司,专注于消费级教育娱乐机器人以及机器人平台的开发,致力于将有温度的机器人带入每个人的生活...
络达科技目前成为业界领先的IC设计领导厂商,其致力于开发无线通信的高集成电路以及蓝牙低功耗单芯片与蓝牙无线音频系统解决方案。目前络达的产品已广泛应用在蓝牙音频设备、可穿戴产品等家具设备中。为了实现真TWS与手机的无线连接以及数据传输,同时兼顾TWS蓝牙耳机的音质要求,络达科技在18年7月17日申请了一项名为“无线音讯输出装置”的发明专利(申...
振棒料位开关与音叉料位开关的区别是什么?在论坛上和用户的咨询中,这是一个被提及较多的问题。是的,二者都是利用共振原理进行工作的,那么,二者的区别都有哪些呢?一、工作原理不同  1、音叉料位开关的工作原理是通过安装在音叉基座上的一对压电晶体使音叉在一定共振频率下振动。当音叉料位开关的音叉与被测介质相接触时,音叉的频率和振幅将改变,...

史海拾趣

问答坊 | AI 解惑

家庭电子 教您一招

1.电热水器应勤换镁棒      市售在1000元以下的电热水器的内胆一般采用镀锌铁板卷制而成,其焊缝与管 接头部分虽经涂敷处理,但在长期加热过程中极易腐蚀导致热水器泄漏报废,所以热水器内部一般还采用牺牲阳极型阴极保护,即 ...…

查看全部问答∨

电源质量问题地危害及解决方案

引言: 电源是信息系统及电子产品地心脏,交流电源的质量决定了信息系统及电子产品能否正常地工作。因此了解交流电源的质量问题,才能为其提供有效的解决方案。交流电源存在的质量问题有以下几种。 一、电源质量问题 1. 电压的变化范围过大, ...…

查看全部问答∨

创意水管灯

水管也有它的生命: …

查看全部问答∨

高手进

电脑高手们来我们狼族③(坚韧、顽强、耐性、勇敢、冷酷、孤傲、团结、忠贞、机警、智慧)吧~!群号是12656026 我们将在这里交流网络技术~! 以后我们将用狼的性格统治世界,世界是我们的      我代表狼族欢迎大家来我们狼 ...…

查看全部问答∨

如何使用PsCreateSystemThread

请教各位大虾,系统线程函数PsCreateSystemThread应该在什么位置创建。我在deviceIoCtrl中创建线程后,安装驱动的时候,电脑回重启,在DriverEntry入口函数末尾创建会出现同样的问题。请各位大虾帮帮忙,这应该如何解决。 我创建的这个线程主要是 ...…

查看全部问答∨

为什么在我刚装的vs2003中不能创建 智能设备应用程序?

vs2003 我刚装上。 开发一般的windows应用程序没有问题。 但在创建一个winCE的windows应用程序时,在“Form1.cs[设计]”这个窗口中显示: “加载文档时出错。修复此错误,然后再重新尝试加载该文档。错误信息如下所示: 文件中的类都不能进行设 ...…

查看全部问答∨

Cadence高速电路板设计与仿真第3版,Allegro16.2最全最经典的学习教程。

Allegro_SPB_v16_2市面上最为经典的教材,强烈要求为精华 Cadence高速电路板设计与仿真第3版 好东西,不多说,下了就知道不后悔的;P [ 本帖最后由 43381557 于 2010-9-17 14:57 编辑 ]…

查看全部问答∨

关于外部中断问题

为什么我设置了外部按键中断,在FLASH中调试,在调试时按下会跳转到中断服务程序(闪烁灯翻转),而关掉板子,再打开板子就不运行中断了,而式一直卡在灯亮的地方,这是为什么呢?调试了好几天了,着急啊。 求各位指教。。下面贴代码,开发环境是I ...…

查看全部问答∨

nxp今年怎么不见培训活动

nxp今年怎么不见培训活动…

查看全部问答∨

NXP发布速度高达204MHz的ARM Cortex-M4微控制器

在网上看到   NXP发布速度高达204MHz的ARM Cortex-M4微控制器   原文网址:http://www.eechina.com/viewthread.php?tid=83693 恩智浦半导体(NXP)近日发布LPC4300数字信号控制器(DSC),这是迄今为止业内速度最快的ARM Cortex-M4 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved