内容正文:
第5章
MCS-51单片机有一个全双工通用异步通信接口,可以根据需要实现四种工作模式状态工作,在异步通信模式中还可程控波特率。
本章主要介绍MCS-51单片机的串行通信基本概念和典型应用案例
重点:串口通信的设置与应用;常见通信协议;
难点:通信程序编制。
5.1 串行通信概念
在计算机通信中有两种常见的通信技术,串行通信和并行通信。
并行通信:数据的各位(二进制)同时发送或接收。特点是传送速度快、效率高,但成本高。适用于短距离传送数据。计算机内部的数据传送一般均采用并行方式。
串行通信:数据一位一位(二进制)顺序发送或接收。特点是传送速度慢,但成本低,适用于较长距离传送数据。
5.1 串行通信概念
在串口通信中,根据信息数据流方向其工作方式可以分为单工、半双工和全双工三种方式。
T
R
T
R
T
R
R
T
T
R
单工方式 半双工方式 全双工方式
5.2 51单片机的通信串口
51单片机有一个可编程的全双工通用同步、异步(USART)通信串口,可以同时收发数据。
串口通信特殊功能寄存器 ---SBUF
串行数据缓冲器(SBUF)是串行口的一个专用寄存器,由一个发送缓冲器SBUF和一个接收缓冲器SBUF组成。
两个缓冲器在物理上独立,但共用一个地址(0x99)。
SBUF是用来存放要发送的或已接收的数据。无论何时读SBUF,总是接收缓冲器SBUF的内容;
同样写SBUF,总是操作的发送缓冲器SBUF。
串口通信特殊功能寄存器 ---SCON
SM0、SM1:控制串行口的四种工作方式
SM2:允许方式2和方式3进行多机通信控制位。
REN:允许串行接收控制位。REN=1,允许接收。
TB8:是工作在方式2和方式3时要发送的第9位数据,根据需要由软件置位和复位。
RB8:是工作在方式2和方式3时接收到的第9位数据。
TI:发送中断标志位。必须由软件清零。
RI:接收中断标志位。必须由软件清零。
串口通信特殊功能寄存器 ---PCON
·SMOD:波特率倍增位,在串行通信中使用。
·GF0,GF1:通用标志位,供用户使用。
·PD:掉电保护位,(PD)=1,进入掉电保护方式。
·IDL:待机方式位,(IDL)=1,进入待机方式。
MCS51串行通信—工作方式
SM0 SM1 工作方式 功能 波特率
0 0 方式0 8位同步移位寄存器 fosc/12
0 1 方式1 10位UART* 可变
1 0 方式2 11位UART fosc/64或fosc/32
1 1 方式3 11位UART 可变
5.3 RS232和RS485
RS-232C是异步串行通信中应用最广泛的标准总线,是美国EIA(Electronic Industries Association,电子工业联合会)开发公布的通信协议。适合于数据传输速率在0~20kb/s范围内的通信,包括了按位串行传输的电气和机械方面的规定。在微机通信接口中被广泛采用。其特点为: 采取不平衡传输方式,是为点对点(即只用一对收、发设备)通信而设计的。
RS485协议同RS232协议,也是异步串行通信中应用最广泛的标准总线。特点:平衡发送、平衡接收,抗干扰能力强;多达128对收发器;终端需要匹配电阻2×120Ω;信号不需要调制与解调。
5.4应用案例---串口单纯发送
5.4应用案例---串口单纯接收
5.4应用案例---串口收发
5.4应用案例---同步通信
程序由3个函数组成:
1、主函数main()---负责外部中断和串行通信中断的参数初始化;
2、串口通信中断函数ser_isr()---清除引起串口中断的标记位;
3、外部中断0函数构成---则是将按键按下的次数数值通过串口发送出去。
5.4应用案例---IIC通信 AT24C02
5.4应用案例--- SPI通信
习题---判断题
(1)串口中断请求标志必须由软件清除。
(2)由于MCS-51的串行口的数据发送和接收缓冲器都是SBUF,所以其串行口不能同时发送和接收数据
(3)8051单片机串行中断只有一个,但有2个标志位。
(4)TI 是串行口发送中断标志, RI 是串行口接收中断标志。
(5)波特率反映了串行通讯的速率。
(6)8051单片机的5个中断源相应地在芯片上都有中断请求输入引脚。
(7)在中断开启的情况下,任何中断均能立即得到响应。
(8)8051外部中断0的入口地址是0000H。
(9)C51中,特殊功能寄存器一定需要用大写。
(10)只要读取SBUF就可以完成接收串行数据。
�
�
开始
初始化
18个字符发送完?�
原地循环�
是
否
可以发送?
发送字符
否
是
�
�
入口
是发送中断?�
是接收中断?
清除接收标记
接收是数字?�
显示字符'H’
否
是
否
是
清除发送标记
否
是
显示相应数字
退出
�
�
开始
中断参数初始化
端口初始化
无限循环
否
是
否
是
读键盘
有键值,并允许发送?�
是
否
发送字符'K',清标记BJ
发送中断置位BJ?
发送字符'E',清标记BJ
发送中断置位BJ?�
发送字符'Y',清标记BJ
发送中断置位BJ?�
发送键值字符,清标记BJ
否
是
�
�
开始
初始化24C02
无限循环�
是
否
从零开始
结束了?
指向下一个单元
写24C02,读24C02
�
�
开始�
初始化
无限循环�
获得当前时间 ,显示
$$