微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式学习笔记11——51单片机之中断串口通信

嵌入式学习笔记11——51单片机之中断串口通信

时间:11-20 来源:互联网 点击:
1. 计算机通信指计算机与外设或计算机与计算机之间的信息交换,分为两大类:并行通信(控制简单)和串行通信(从低到高,一位一位的传送,长距离传输时成本低)。

2. 异步通信


  1. 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的。
  2. 异步通信的数据格式:
    格式中的校验位通常有3种方式获得:(1)奇偶校验:奇校验——数据中的“1”的个数与校验位“1”的个数之和应为奇数;偶校验——数据中的“1”的个数与校验位“1”的个数之和应为偶数。(2)代码和校验:发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较。(3)循环冗余校验。

3. 串行通信的传输方向

(1)单工是指数据传输仅能沿一个方向,不能实现反向传输。(如遥控器)(2)半双工是指数据传输可以沿两个方向,但需要分时进行。(如对讲机) (3)全双工是指数据可以同时进行双向传输。

4. 比特率是每秒钟传输二进制代码的位数,单位是位/秒(bps)。传输速率越大,传输距离越小。

5. 串行通信接口标准

(1)RS-232C(25针,比较老了;或者9针)

我们通常用到的是TXD、RXD和SGND。RS-232C的缺点是传输速率最高为20Kbps,传输距离不超过15米;要求收发双方共地,通信距离较大时,收发双方的地电位差别较大,在信号地上将有比较大的地电流并产生压降;抗干扰能力差。

(2)针对RS232C的缺点,提出了RS422A接口。其传输速率90Kbps时,传输距离可达1200米,抗干扰能力强。—

(3)RS-485是RS422A的变型:RS-422A用于全双工,而RS-485用于半双工。传输距离可达1200米,传输速率可达1Mbps。一般是一点对多点的通信接口。普通的PC机一般不带RS485接口,因策要使用RS-232C/RS-485转换器

6. 51单片机的串行口

6. 串行口的控制寄存器


SCON是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志。

(1)SM0和SM1为工作方式选择位,可选择4种工作方式:

图中,fosc为晶振频率。 常用的是方式1。

(2)SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时,可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF中读走)。当SM2=0时,不论收到的RB8为0还是1,均可以使收到的数据进入SBUF,并激活RI。在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1;若SM2=0,则RB8是接收到的停止位。

(3)REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。

(4)TB8,在方式2或方式3中,是发送数据的第九位,可用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。

(5)RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。

(6)TI,发送中断标志位。串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将TI清0,取消此中断申请。

(7)RI,接收中断标志位。串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。在中断服务程序中,必须用软件将RI清0,取消此中断申请。

7. PCON中有一位SMOD(PCON.7,波特率倍增位)与串行口工作有关。在串行口方式1~3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。

8. 方式1输出的时序图:

9.方式1输入的时序图:

10. 波特率的计算

在串行通信中,收发双方对发送或接收数据的速率要有约定,否则就会出现乱码。其中方式0和方式2的波特率固定,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。

11. 串口的使用

(1)确定T1的工作方式(编程TMOD寄存器)

(2)计算T1的初始值,装载TH1、TL1

(3)启动T1(编程TCON中的TR1位)

(4)确定串行口控制(编程SCON寄存器、还有PCON中的SMOD位)

(5)设置IE寄存器,打开EA和ES位。

(6)写中断服务程序,记住软件清零RI、TI。

12. 示例程序

unsigned char a,flag;

void main()

{

while(1)

{

if(flag)

{

ES=0;

flag=0;

SBUF=a;

while

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top