- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UART串口通信—控制LED灯(查询法)
项目说明:
1.通过串口来控制 LED灯,发送 1(十六进制)点亮 LED灯(8个 LED蓝灯),
发送 2(十六进制)关闭 LED灯(8个 LED蓝灯)。
2.通信速率:9600bps(即波特率为 9600)。
3.串口通信:采用查询的方法。
此项目练习的目的:(我们应掌握如下知识点)
(1)理解串口是什么。
(2)熟悉串口相关的寄存器。
(3)熟练波特率的计算。
(4)熟悉串口通信的参数:如停止位、奇偶校验位等。
完整代码:
#include reg52.h
/*串口初始化:主要涉及寄存器配置*/
void UartInit(void) //初始化 uart
{
TMOD = 0X20; //定时器 1定时器方式 工作模式 2,可自动重载的 8位计
数器常把定时/计数器1 以模式2 作为串行口波特率发生器
SCON = 0X50; //串口选择工作模式 1使能接收,允许发送,允许接收
PCON = 0X00; //8位自动重载,波特率加倍
TH1 = 0XFD; //用 11.0592MHz波特率 9600
TL1 = 0XFD;
TR1 = 1; //打开中时器
}
void main(void)
{
unsigned char TempDat;
UartInit();/*调用串口初始化函数,进行相应的配置,如波特率等*/
while(1)
{
if (RI)/*查询串口是否接收到一个完整的数据*/
{
RI = 0;/*清除标志,准备下一次判断*/
TempDat = SBUF;/*读取串口数据*/
if (1 == TempDat)/*判断串口接收到的数据*/
{
P1 = 0;/*如果接收到的数据是 1,则点亮 8个 LED蓝灯*/
}} else if (2 == TempDat)
{
P1 = 0xff;/*如果接收到的数据是 2,则关闭 8个 LED蓝灯*/
}} else
{
}
}
}
}
根据“爱普学法:整框图→出步骤→实践中学理论,理解深刻且透彻。”我
们先来整框图(产品设计的时候称为硬件架构):我们需要先看看这个项目和哪
些硬件以及工具有关。
题目中要求我们通过串口控制LED 灯,所以肯定和串口、LED 灯有关。当
然核心永远少不了的,那就是单片机(MCU)STC89C52。看下图1:
当然由于要通过串口向开发板发送数据,所以这里需要用到一个串口调试工
具,这个工具将来我们会经常用到。串口调试工具网上一大堆,我们直接用
STC-ISP 下载软件自带的串口调试工具即可。
这样我们的思路就是:写好串口驱动,通过串口接收的数据来控制LED 灯。
我们的步骤就是:第一步弄好串口配置,第二步看一下如何点亮 LED灯,
第三步根据串口接收的数据来控制 LED灯,即所谓的逻辑实现。
???????? 第一步:串口配置
我们首先需要看一下开发板电路原理图串口的硬件连接方式:
从图3 可以看出,串口的2 个脚RXD(接收),TXD(发送)接到单片机的
第10 脚和第11 脚。由于这两个脚是单片机的固有功能,因此只需要使用串口,
即默认使用这两个引脚。
接下来我们进行串口配置:打开STC89C52 芯片手册:STC89C52RC 中文手
册.pdf 找到串行口通信这一章节:
我们主要了解配置串口需要配置哪些寄存器:
我们仔细看一下数据手册中关于SCON、SBUF、PCON 各自的功能和作用,进
一步理解串口原理:
这边简要介绍下这三个寄存器的各自功能:
SCON:串行控制器(Serial Controller)配置串口工作方式,是 8 位传送还是 9
位传送以及波特率是否可以变;配置是否允许发送和接收。
我们常用方式1:即8 位串口,波特率可变。
在《扬帆起航篇》里面我们知道波特率其实就是通信的速率,在经后我们经常会
看到波特率9600、4800、19200 等。下面我们就会想波特率是如何计算出来的:
如果我们选择常用的方式1:有上面的图5 我们查到:
波特率=(2SMOD / 32)×(定时器1的溢出率)
如果学过了《LED灯闪烁(定时法)》,我们就知道定时器 T1 的溢出率的计
算了,当然图5 里面已经说明了:
那波特率的公式就变为: 2 / 32 SYSclk /12 /(256 TH1) 波特率=( SMOD )× ?
如果系统SYSclk 为11.0592MHz,我们就可以算出来波特率为9600 的时候定时
器1 的初值TH1 了。
9600 = (20 / 32)/12 /(256 ?TH1)
?TH1 = 253
十进制253 表示成16 进制为0xFD。
备注:为什么选择晶振频率为 11.0592MHz,这边就得到了体现,因为波特率刚
好除尽
文档评论(0)