中断定时器串口通信.docx
- 文档编号:24467109
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:12
- 大小:66.48KB
中断定时器串口通信.docx
《中断定时器串口通信.docx》由会员分享,可在线阅读,更多相关《中断定时器串口通信.docx(12页珍藏版)》请在冰豆网上搜索。
中断定时器串口通信
总结
51单片机
一.中断
一、中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
二、80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套。
1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。
当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。
当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。
当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。
当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。
当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
中断请求标志位
51单片机的这5个中断源的6个中断标志位和2个中断触发方式控制位分别由特殊功能的寄存器TCON和SCON的相应位锁存。
1、TCON的中断标志
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
TR0(TCON.4),定时器T0运行控制位。
TR0=1,开定时器0
TR1(TCON.6),定时器T1运行控制位。
TR1=1,开
2.SCON的中断标志
RI(SCON.0),串行口接收中断标志位。
当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。
注意,RI必须由软件清除。
TI(SCON.1),串行口发送中断标志位。
当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。
每发送完一个串行帧,由硬件置位TI。
CPU响应中断时,不能自动清除TI,TI必须由软件清除。
三.CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断1允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA(IE.7),CPU中断允许(总允许)位。
四、中断响应条件
1.中断源有中断请求;
2.此中断源的中断允许位为1;
3.CPU开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断。
例如:
外部中断0响应条件:
EA=1;//开全中断(允许位)
EX0=1;//开外部中断0中断(允许位)
IT0=1;//触发方式(0:
低电平触发,1:
边沿触发)
voidexter0()interrupt0
{
…
}
二.定时器
一、定时/计数器的结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。
TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
1、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。
其格式如下:
GATE:
门控位。
GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。
即此时定时器的启动多了一条件。
C/T:
定时/计数模式选择位。
C/T=0为定时模式;C/T=1为计数模式。
M1M0:
工作方式设置位。
定时/计数器有四种工作方式,由M1M0进行设置。
主要用方式1!
TCON的低4位用于控制外部中断,已在前面介绍。
TCON的高4位用于控制定时/计数器的启动和中断申请。
其格式如下:
1.TF1(TCON.7):
T1溢出中断请求标志位。
T1计数溢出时由硬件自动置TF1为1。
CPU响应中断后TF1由硬件自动清0。
T1工作时,CPU可随时查询TF1的状态。
所以,TF1可用作查询测试的标志。
TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
2.TR1(TCON.6):
T1运行控制位。
TR1置1时,T1开始工作;TR1置0时,T1停止工作。
TR1由软件置1或清0。
所以,用软件可控制定时/计数器的启动与停止。
3.TF0(TCON.5):
T0溢出中断请求标志位,其功能与TF1类同。
4.TR0(TCON.4):
T0运行控制位,其功能与TR1类同。
定时器/计数器初始化程序应完成如下工作:
1、对TMOD赋值,以确定T0和T1的工作方式。
2、计算初值,并将其写入TH0、TL0或TH1、TL1。
3、中断方式时,则对IE赋值,开放中断。
4、使TR0或TR1置位,启动定时/计数器定时或计数。
三.串口
一.80C51串行口的结构
有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H;接收器是双缓冲结构;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。
二.80C51串行口的控制寄存器
SCON是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:
SM0和SM1为工作方式选择位,可选择四种工作方式:
SM2,多机通信控制位,主要用于方式2和方式3。
当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。
当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。
通过控制SM2,可以实现多机通信。
在方式0时,SM2必须是0。
在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。
●REN,允许串行接收位。
由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。
可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
在方式0和方式1中,该位未用。
●RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。
在方式1时,若SM2=0,则RB8是接收到的停止位。
●TI,发送中断标志位。
在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。
在中断服务程序中,必须用软件将其清0,取消此中断申请。
●RI,接收中断标志位。
在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。
也必须在中断服务程序中,用软件将其清0,取消此中断申请。
PCON中只有一位SMOD与串行口工作有关:
SMOD(PCON.7)波特率倍增位。
在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。
复位时,SMOD=0。
四、波特率的计算
在串行通信中,收发双方对发送或接收数据的速率要有约定。
通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。
串行口的四种工作方式对应三种波特率。
由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。
方式0的波特率=fosc/12
方式2的波特率=(2SMOD/64)·fosc
方式1的波特率=(2SMOD/32)·(T1溢出率)
方式3的波特率=(2SMOD/32)·(T1溢出率)
当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。
这时溢出率取决于TH1中的计数值。
T1溢出率=fosc/{12×[256-(TH1)]}
在单片机的应用中,常用的晶振频率为:
12MHz和11.0592MHz。
所以,选用的波特率也相对固定。
常用的串行口波特率以及各参数的关系如表所示。
串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。
具体步骤如下:
1、确定T1的工作方式(编程TMOD寄存器);
2、计算T1的初值,装载TH1、TL1;
3、启动T1(编程TCON中的TR1位);
4、确定串行口控制(编程SCON寄存器);
串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
TMOD=0X20;//T1方式2
TH1=FDH;//9600
TL1=FDH;//9600
TR1=1;//开定时器1
MOM1=01;//串口工作方式1
REN=1;//允许串口接收
EA=1;//开全局中断
ES=1;//开串口中断
例1:
外部中断0响应条件:
EA=1;//开全中断(允许位)
EX0=1;//开外部中断0中断(允许位)
IT0=1;//触发方式(0:
低电平触发,1:
边沿触发)
voidexter0()interrupt0
{
。
。
。
。
。
}
例2:
外部中断1响应条件:
EA=1;//开全中断(允许位)
EX1=1;//开外部中断1中断(允许位)
IT1=1;//触发方式(0:
低电平触发,1:
边沿触发)
voidexter1()interrupt2
{
。
。
。
。
。
}
例3:
定时器0中断响应条件:
TMOD=0x01H;//选择定时器0为工作方式1
TH0=//初始化
TL0=//初始化
EA=1;//开全中断(允许位)
ET0=1;//开定时器/计数器0中断中断(允许位)
TR0=1;//开定时器0
voidtimer0()interrupt1
{
。
。
。
。
。
}
例4:
定时器1中断响应条件:
TMOD=0x10H;//选择定时器1为工作方式1
TH1=//初始化
TL1=//初始化
EA=1;//开全中断(允许位)
ET1=1;//开定时器/计数器1中断中断(允许位)
TR1=1;//开定时器1
voidtimer1()interrupt3
{
。
。
。
。
。
}
例5:
串口中断响应条件:
#include
unsignedchara;
voidmain()
{
TMOD=0X20;//T1方式2
TH1=FDH;//9600
TL1=FDH;//9600
TR1=1;//开定时器1
MOM1=01;//串口工作方式1
REN=1;//允许串口接收
EA=1;//开全局中断
ES=1;//开串口中断
while
(1)
{
if(RI==1)
{
RI=0;
P1=SBUF;
}
}
}
voidser()interrupt4
{
RI=0;
P1=SBUF;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中断 定时器 串口 通信