历史上的今天
返回首页

历史上的今天

今天是:2024年09月02日(星期一)

正在发生

2021年09月02日 | stc51单片机串口通信程序

2021-09-02 来源:eefocus

51单片机的串口通信,是全双工的,就是可以同时收/发的,互相不影响的。


串口是可以同时收/发的,虽然都是用SBUF,但却是两个独立的寄存器,互不影响,只是都叫一个名,SBUF。


但是,对于接收或发送,确实是接收到一个字节以后才能接收下一个,不可能同时接收几个。对于送,也是同样的,发送一个字节数据后,要等发送完成了,才能再发下一个。


接收和发送,可先定义一两个变量,如,接收用rec变量保存,发送数据在send变量中。


发送时,SBUF=send;while(TI==0);TI=0;//这是用查询方式发送的。当一个字节的数据发送完成后,就会自动置TI=1,所以,可以查询TI=1时,就说明是发送结束了。如果是允许中断,就是会产生中断,判断TI=1,就是发送中断,要用指令清0,就是TI=0;

接收时, 当收到一个数据后,也会自己置RI=1,通常,接收都是中断方式,所以, 当RI=1, 就会产生中断。而响应中断,执行中断程序,就要用指令清0,即中断中判断是RI=1,说明是接收中断,RI=0; 清除RI。


接 收数据:rec=SBUF; 就行了。如果是接收一组数据,可以定义一个数组,用数组保存接收一组数据就行了。


SBUF中不能存放数据,收到后必须立即读取,否则,下一个数据到了就被替代了。RI和TI置1,是硬件自动的,就是这么设计的,想改也改不了的。


多个字节发送和接收,可以用循环控制次数。

下面附上代码:(具体原理不再讲述可以自己搜一下学一学)


/**************************************************************************************

*串口通信实验*

实现现象:下载程序后打开串口调试助手,将波特率设置为4800,选择发送的数据就可以显示在串口助手上。

注意事项:无。   

***************************************************************************************/


#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器


typedef unsigned int u16;   //对数据类型进行声明定义

typedef unsigned char u8;


/*******************************************************************************

* 函数名         :UsartInit()

* 函数功能    :设置串口

* 输入           : 无

* 输出          : 无

*******************************************************************************/

void UsartInit()

{

SCON=0X50; //设置为工作方式1

TMOD=0X20; //设置计数器工作方式2

PCON=0X80; //波特率加倍

TH1=0XF3; //计数器初始值设置,注意波特率是9600的

TL1=0XF3;

ES=1; //打开接收中断

EA=1; //打开总中断

TR1=1; //打开计数器

}


/*******************************************************************************

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出    : 无

*******************************************************************************/

void main()

{

UsartInit();  // 串口初始化

while(1);

}


/*******************************************************************************

* 函数名         : Usart() interrupt 4

* 函数功能   : 串口通信中断函数

* 输入           : 无

* 输出          : 无

*******************************************************************************/

void Usart() interrupt 4

{

u8 receiveData;


receiveData=SBUF;//出去接收到的数据

RI = 0;//清除接收中断标志位

SBUF=receiveData;//将接收到的数据放入到发送寄存器

while(!TI); //等待发送数据完成

TI=0; //清除发送完成标志位

}


我的单片机是STC90C516RD+属于51系列的,我的晶振频率是11.899MHZ。


对于初值的计算机可以使用如下软件:

在这里插入图片描述

其中注意:(1)计算初值时,波特率是加倍之前(对于SMOD=1时这种情况)的波特率。


(2)软件是51波特率初值计算,还有一个是定时器初值计算,不要下载错误

下面就是烧录程序了,连接好USB线,打开串口助手软件,设置波特率4800

如下图:

在这里插入图片描述

枣红色框框里面是波特率设置的地方,波特率为4800,绿色框框和红色框框(挨着绿色的那个)是模式的设置,文本模式如图,hex模式则是数字(16进制的)。

推荐阅读

史海拾趣

GE Sensing ( Amphenol Advanced Sensors )公司的发展小趣事

对于4h的交流电源定时器(555,BH4024)电路,网友可能会提出一系列问题。以下是一些常见问题及其详细回答:

1. 电路的基本工作原理是什么?

回答:该电路结合了555定时器(作为时基电路)和BH4024(7级二进制串行计数器/分频器)来实现4小时的定时功能。555定时器用于产生定时信号,而BH4024则负责将定时信号转换成所需的时间间隔。每当按下AN(定时触动按钮)时,电路开始计时,并在4小时后自动切断交流电源。

2. 如何调整定时时间?

回答:直接调整4小时的定时时间可能不直接通过电路中的元件实现,因为定时时间主要由BH4024的分频特性和555定时器的振荡频率决定。然而,可以通过改变555定时器的外部电阻和电容值来调整其振荡频率,但这通常会影响整个电路的定时精度和稳定性。对于精确调整至4小时,可能需要使用微控制器或其他可编程逻辑设备来替代或辅助BH4024和555定时器。

3. 电路中的555定时器具体起到什么作用?

回答:在这个电路中,555定时器作为时基电路,负责产生稳定的振荡信号。这个振荡信号的频率和占空比可以通过调整与555定时器相连的电阻和电容值来改变。然而,在这个特定的应用中,555定时器的输出信号通常被用作BH4024的输入信号,以便控制BH4024的计数和分频过程。

4. BH4024是如何实现定时功能的?

回答:BH4024是一个7级二进制串行计数器/分频器,它能够根据输入的时钟信号进行计数,并在达到预定次数后输出一个翻转信号。在这个电路中,BH4024的计数频率由555定时器的输出信号决定。当计数器达到某个预设值时(这个值决定了4小时的定时长度),BH4024会输出一个信号来切断交流电源。

5. 电路中的电源要求是什么?

回答:电路中的电源要求取决于所使用的555定时器和BH4024的具体型号以及电路中的其他元件。通常情况下,555定时器可以在较宽的电源电压范围内工作(如4.5V至16V),但具体值应参考器件的数据手册。对于BH4024和其他元件,也应遵循类似的电源要求。此外,由于该电路涉及交流电源的控制,因此还需要注意电路的安全性和稳定性问题。

6. 如何确保电路的可靠性和安全性?

回答:为了确保电路的可靠性和安全性,需要采取以下措施:

  • 选择质量可靠的元件和器件,并按照正确的规格和参数进行连接。
  • 在电路设计中考虑适当的保护措施,如过流保护、过压保护等。
  • 在实际使用中,注意避免电路受到外部干扰和损坏。
  • 定期对电路进行检查和维护,以确保其正常运行和延长使用寿命。

7. 电路有哪些潜在的应用场景?

回答:该电路具有广泛的应用场景,包括但不限于:

  • 家庭自动化系统中的定时开关功能。
  • 工业生产线上的自动断电和重启功能。
  • 实验室和测试设备中的定时控制功能。
  • 公共场所的自动照明和节能控制功能等。

总之,对于4h的交流电源定时器(555,BH4024)电路,网友可能会关注其工作原理、定时时间调整、元件作用、电源要求、可靠性和安全性以及潜在应用场景等方面的问题。以上回答旨在提供全面的信息和指导。

敦泰(FOCALTECH)公司的发展小趣事
电冰箱不制冷可能由多种电路问题引起,如电源线路故障(如插头未插紧、插座无电等)、压缩机启动电路故障(如启动器损坏、压缩机线圈断路等)、温控电路故障(如温控器失灵、温度传感器损坏等)或制冷系统电路故障(如制冷剂泄漏、毛细管堵塞等)。建议首先检查电源是否正常,然后逐步排查压缩机、温控器和制冷系统电路。
安碁科技(AKER)公司的发展小趣事

1990年,安碁科技股份有限公司正式成立,标志着其进军石英振荡器领域的起点。公司初创时期,面临着激烈的市场竞争和技术挑战。然而,安碁科技凭借对技术的执着追求和对市场的敏锐洞察,逐步在行业中崭露头角。通过不断的技术研发和产品创新,公司逐渐建立了自己的品牌地位,为后续的发展奠定了坚实的基础。

ABECO公司的发展小趣事

随着业务的发展,ABECO在1970年做出了一个大胆的决定——进军马耳他市场。这一决策既带来了挑战,也带来了机遇。公司需要适应新的市场环境,了解当地的需求和文化。经过一段时间的摸索和努力,ABECO凭借其高品质的产品和专业的服务,成功在马耳他市场打开了局面,为后续的发展奠定了坚实的基础。

顺芯(Everest-semi)公司的发展小趣事

顺芯公司成立于XXXX年,初创时期面临着资金短缺、技术壁垒高和市场竞争激烈的挑战。然而,公司的创始人团队凭借对半导体行业的深刻理解和坚定信念,成功吸引了第一轮天使投资。他们夜以继日地研发产品,不断优化技术,终于在XXXX年成功推出了首款高性能的模拟芯片产品,获得了市场的初步认可。

展恒电子(Broadic)公司的发展小趣事

展恒电子始终坚持以品质为核心,严格把控产品质量。在与上海芯北电子科技有限公司的合作中,双方共同保证产品品质的一致性、兼容性和安全性。在合作期间,展恒电子成功向客户供应了数百万片芯片,并得到了客户的高度认可和信任。这种对品质的坚持和追求,使得展恒电子在电子行业中赢得了良好的声誉,也为公司的长期发展奠定了坚实的基础。

这五个故事从不同角度展示了展恒电子(Broadic)在电子行业中的发展历程和成就,体现了其在技术创新、市场拓展、品质保证等方面的实力和努力。通过不断努力和创新,展恒电子已经在电子行业中取得了显著的成果,并将继续为行业的发展贡献自己的力量。

问答坊 | AI 解惑

噪声系数测量的三种方法

摘要:本文介绍了测量噪声系数的三种方法:增益法、Y系数法和噪声系数测试仪法。这三种方法的比较以表格的形式给出。 前言在无线通信系统中,噪声系数(NF)或者相对应的噪声因数(F)定义了噪声性能和对接收机灵敏度的贡献。本篇应用笔记详细阐述这 ...…

查看全部问答>

找手机开发,地点北京

现有手机开发项目,要求有经验的手机开发团队参与。有意可以发:project911@163.com…

查看全部问答>

谁有EVC4.0+PocketPc2003开发PDA反面的电子书?

我刚刚接触EVC4.0+PocketPc2003开发PDA程序,在网上总找不到 相关的电子教程,哪位前辈能提供些教程啊!急 啊!…

查看全部问答>

《程序员面试宝典》 一本很好的面试书籍

《程序员面试宝典》一本很好的面试书籍…

查看全部问答>

制作高频加热设备过程中的一些新感触

开年后,心思都在高频加热设备上,到今天,实验结果比较满意,频率920KHz,已经达到4500W的功率,目前看还有一定的扩展余量,基本满足产品需求,下一步将继续完善,实现产品化。 总的来说,做电源之前有两次经历,一次是03年的电动自行车项目,用a ...…

查看全部问答>

高频无线类要用模块

本帖最后由 paulhyde 于 2014-9-15 09:44 编辑 各位高手,根据刚出的2011清单 高频无线类的应该会有 请问需要准备什么模块啊?能提供一些资料吗?谢谢!  …

查看全部问答>

求摄像头大神指点

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 拆了手头nokiaE66的摄像头...想用STM32 cortex m3驱动它...... 没怎么接触过手机的摄像头...貌似摄像头后有块STv0986... 找到原理图...想知道摄像头引脚:PDATA2P...PDATA2N...PCLK2P...PCLK2 ...…

查看全部问答>

EEWORLD大学堂----MSP430进阶培训—MSP430F5529的使用与开发

MSP430进阶培训—MSP430F5529的使用与开发:https://training.eeworld.com.cn/course/236 ????? MSP430F5529是德州仪器新一代F5xxx系列MCU的典型代表,不但拥有更低的功耗,而且在模拟外设、?数字外设和系统软件开发方面有了很大的改进。本培训课 ...…

查看全部问答>

51单片机产生spwm波

求教为什么TH0=0x216,这样的话对应的二进制不就不止8位了嘛 搜索 复制 …

查看全部问答>