51单片机精华笔记(下)
(四)单片机串口通信:
TB8:是工作方式2和3要发送的第9位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。
RB8:是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。在工作方式0中RB8不使用。
TI :为发送中断标志位,由硬件置位,软件清除。工作方式0中在发送第8位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1时,申请中断。CPU响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除TI。
RI:为接收中断标志位,由硬件置位,软件清除。工作方式0中在接收第8位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1时,申请中断,要求CPU取走数据。但在工作方式1中,SM2=1且未接收到有效的停止位时,不会对RI置位。在任何工作方式中都必须由软件清除RI。
系统复位时,SCON的所有位都被清除。
REN:允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8,在方式2或方式3中,是发送数据的第九位
RB8,在方式2或方式3中,是接收到数据的第九位
RI:串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。
TI:串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。
SMOD(PCON.7)波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。
通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率 = fosc/12
方式2的波特率 =(2· SMOD/64)· fosc
方式1的波特率 =(2· SMOD/32)·T1溢出率)
方式3的波特率 =(2· SMOD/32)·T1溢出率)
对于方式1的定时器初值计算:
T1溢出率= fosc/(12·(28-X))
波特率=(2·SMOD/32)fosc/(12·(28-X))
其中X为定时器的初始值
串口通信实现过程:
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:
(1)确定T1的工作方式(编程TMOD寄存器);
(2)计算T1的初值,装载TH1、TL1;
(3)启动T1(编程TCON中的TR1位);
(4)确定串行口控制(编程SCON寄存器);
(5)如果串行口在中断方式工作,还要进行中断设置(编程IE、IP寄存器)。
void Serial _init()
{
SCON=0x50; //选择工作方式1,允许串行口接收数据
TMOD=0x20; //选择8位自动重装定时器
PCON=0x80; //波特率增倍
TH1=0xF3; //晶振频率12MHZ,SMOD=1
TL1=0xF3; //波特率为4800时定时器的初值
TR1=1; //开定时器
}
我们通过电脑上的串口调试助手发送一个十六进制的数给单片机,然后单片机又把接收到的这个数发回给电脑,实现电脑与单片机的互相通信。
void main()
{
unsigned char tmp=0;
Serial_Init();
init_lcd1602();
while(1)
{
/*单片机接收数据*/
while(!RI); //等待接收数据完成
tmp=SBUF; //获取接受数据
RI=0; //清除接收标志位
// LCD_write_data(tmp);
while(!TI); //等待发送完毕
TI=0; //清除发送标志位
}
}
51单片机精华笔记(下)相关推荐
- 51单片机精华笔记(上)
单片机概念: 单片机由中央处理器(CPU).随机存储器(RAM).只读储存器(ROM).输入输出(I/O)接口电路组成,集成在一块芯片上面,又称微控制器(MCU). 单片机原理图(89C51): 单片 ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
- 51单片机学习笔记2 仿真器的使用及STC89Cxx简介
51单片机学习笔记2 仿真器的使用及STC89Cxx简介) 一.连接步骤 1. 硬件连接 2. 安装软件驱动 3. 检查是否安装成功 二.仿真步骤 1. 打开一个51工程 2. 选择仿真设备 3. S ...
- [51单片机学习笔记TWO]----蜂鸣器
蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...
- 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版
原标题:[下载资料]<51单片机学习笔记>北航版 如果手机下载有问题,请移步至电脑端,链接:https://forum.mianbaoban.cn/t/topic/36906 内容简介 本 ...
- 51单片机学习笔记5 流水灯实现及蜂鸣器控制
51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...
- 51单片机学习笔记1 简介及开发环境
51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...
- AutoLeaders控制组——51单片机学习笔记(AD/DA、红外遥控)
本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...
最新文章
- hdu 3966( 树链剖分+点权更新)
- Android使用百度地图定位
- sql索引从入门到精通(十亿行数据测试报告)
- python随机数据随概率分布_概率分布及其Python实现
- XSS漏洞原理/方式/防御
- zabbix 客户端自定义端口监控
- html 边距等于父节点,css的百分比margin,padding为什么不是相对于父元素的?
- 使用vue element-ui 打印组件
- html简单实现自动轮播代码怎么写,HTML图片轮播代码怎么写?
- 服务器操作系统 份额,2019年6月全球桌面操作系统市场份额数据:Linux占比1.55%...
- css3复习知识点概括1(根据W3S顺序)
- 量化交易入门阶段——欧奈尔的CANSLIM模型(S 供需关系)
- javabean+servlet+jsp返利网
- dockers-系统学习-docker compose服务编排
- SpringBoot+Redis 实现一个微博热搜!
- Effective Java读书笔记一(Java Tips.Day.1)
- Good Softwares and Tools
- (附源码)ssm经济信息门户网站 毕业设计 141634
- sec 与csc的原函数
- 02_功分器设计及联合式EM仿真
热门文章
- AEG电站用电池充电器PROFITEC SN1
- 无人驾驶的劳斯莱斯轿车_劳斯莱斯的第一款无人驾驶概念车,奢华大气还是丑?...
- Lightwave 3D Character Animation
- 数据结构4:Tire树入门
- 强化学习-让机器自学习
- php 过滤emoji表情
- python递归函数公式_python之内置函数,匿名函数,递归函数
- JVM垃圾回收(GC)原理
- jxl.write.biff.RowsExceededException: The maximum number of rows permitted on a worksheet been exce
- 在Windows 10上观看DVD的两种简便方法