内容正文:
项目4 电子时钟控制系统
任务4.2 秒表计
明确任务
在项目三中定时时间采用查询方式,不能及时的处理定时器溢出,特别是程序较大时会出现很大的计时误差。并且查询会占用CPU宝贵的系统资源。单片机内部中断系统可以能够及时的解决类似的突发事件,把CPU解放出来,只有在突发事件到来的时候才去处理相应事件。
工作任务:设计制作一个秒表计。利用单片机中断系统,配合3个按键1位共阳数码管,实现一位数秒表计功能。3个按键分别为启动功能,停止功能,清零功能。
知识链接
一 中断概念
什么是中断,我们从生活中的例子引入。
某人看书 执行主程序 中断过程
电话铃响 中断信号INTx=0 中断请求
暂停看书 暂停执行主程序 中断响应
书中作记号 当前PC值入栈 保护断点
电话谈话 执行中断程序 中断服务
继续看书 返回主程序 中断返回
某人看书 执行主程序 中断过程
电话铃响 中断信号INTx=0 中断请求
暂停看书 暂停执行主程序 中断响应
书中作记号 当前PC值入栈 保护断点
电话谈话 执行中断程序 中断服务
继续看书 返回主程序 中断返回
中断源——中断的申请方
中断控制寄存器——中断的控制“工具”
中断响应——中断的“内容”
中断返回——中断结束
中断发生或中断请:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理
中断响应和中断服务:CPU暂时中断当前的工作,转去处理事件B
中断返回:待CPU将事件B处理完毕,再回到原来事件A被中断的地方继续处理事件A
二 AT89S51单片机中断系统
定时器控制寄存器TCON (88H)
TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。
=0:定时器未溢出;
=1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。
TR0/TR1:定时器运行启停控制位(用户通过软件设置 )。
=0:定时器停止运行;
=1:定时器启动运行。
IE0/IE1:外部中断申请标志位(由硬件自动置位 ,中断响应后转向中断服务程序时,由硬件自动清0 )。
=0:没有外部中断申请;
=1:有外部中断申请。
IT0/IT1:外部中断请求的触发方式控制位(用户通过软件设置 )。
=0:在INT0/INT1端申请中断的信号低电平有效;
=1:在INT0/INT1端申请中断的信号负跳变有效。
TI/RI:串行口发送/接收中断申请标志位
=0:没有串行口发送/接收中断申请
=1:有串行口发送/接收中断申请。
SCON的高6位用于串行口工作方式设置和串行口发送/接收控制。
由硬件自动置位,必须由用户在中断服务程序中用软件清
串行口控制寄存器SCON
位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
EA (Enable All)总中断允许标志
ES (Enable Series)串行口允许标志
ET0、ET1(Enable Timer)定时器/计数器溢出中断标志
EX0、EX1(Enable eXternal)外部中断允许标志
上述中:“1”表示允许中断,“0”表示屏蔽中断。
IE (Interrupt Enable)中断允许寄存器
IP (Interrupt priority)中断优先权控制寄存器(B8H)
PS:串行口中断优先级控制位
PT0、PT1:定时器/计数器中断优先级控制位
PX0、PX1:外部中断优先级控制位
上述中:“1”表示高优先级,“0”表示低优先级。
CPU响应中断必须首先满足以下三个基本条件。
①有中断源发出中断请求。
②中断总允许位EA=1。
③请求中断的中断源的中断允许位为1。
在满足以上条件的基础上,若有下列任何一种情况存在,中断响应都会受到阻断。
①CPU正在执行一个同级或高优先级的中断服务程序。
②正在执行的指令尚未执行完。
③正在执行中断返回指令 RETI或者对专用寄存器IE、IP进行读/写的指令。CPU在执行完上述指令之后,要再执行一条指令,才能响应中断请求。
三 中断处理过程
中断过程包括中断请求、中断响应、中断服务、中断返回四个阶段。
中断请求:中断源将相应请求中断的标志位置 “1”,表示发出请求,并由CPU 查询。
中断响应:在中断允许条件下相应中断。断点入栈→撤除中断标志→关闭低同级中断允许→中断入口地址送PC。 这些工作都是由硬件自动完成的。
中断服务:根据入口地址转中断服务程序,包含保护现场、执行中断主体、恢复现场。
中断返回:执行中断返回RETI指令→断点出栈→开放中断允许→返回原程序。
中断请求的撤除
定时器溢出中断请求的撤除
CPU在响应中断后,硬件会自动清除中断请求标志TF0或TFl。
串行口中断的撤除
在CPU响应中断后,硬件不能清除中断请求标志TI和RI,而要由软件来清除相应的标志。
外部中断的撤除
外部中断为边沿触发方式时,CPU响应中断后,硬件会自动清除中断请求标志IE0或IEl。
外部中断为电平触发方式时,CPU响应中断后,硬件会自动清除中断请求标志IE0或IEl,但由于加到INT0或INT1引脚的外部中断请求信号并未撤除,中断请求标志IE0或IEl会再次被置1,所以在CPU响应中断后应立即撤除INT0或INT1引脚上的低电平。
一般采用加一个D触发器和几条指令的方法来解决这个问题。
四 单片机中断应用
定时计数器在应用中往往采用中断方式进行处理,常常作为一个时间基,通过中断提供不同时间分割,提供不同定时需求。对定时计数器的应用初始化除了需要最基本的定时相关工作配置,还需要对定时中断进行配置。具体步骤:
①定时计数器工作模式配置。根据需要,选择定时计数器及其工作方式。
②计算初始值,并赋值。计算方法详见项目三。
③清除标志位。
④开定时器中断,并开放总中断位。
⑤根据需要开启运行定时计数器。
为了能使单片机在执行主程序过程中能响应中断,就必须先对使用中断的相关寄存器进行初始化。
1. 初始化
TMOD=0x01;
//设置定时器T0,工作模式1,内部控制运行方式
TH0=0x3C; //
TL0=0xB0; //赋初始值
TF0=0; //清标志位
ET0=1; //运行定时器0中断
EA=1; //开总中断
TR0=1; //运行T0
若采用定时器计算1s,那么定时器最大定时65ms,显然不能满足要求,可以通过间接方式显示,20*50ms=1000ms。定时器采用T0,工作方式1.则上述步骤程序对应为
如果一个按键采用外部中断0,则中断初始化程序如下:
IT0=0; //设置INT0为下降沿触发
EX0=1; //允许外部中断0
EA=1; //开发所有中断
2.中断服务程序
(1)中断服务程序入口。
Keil C中规定51单片机每种中断类型所对应的中断服务程序入口编号。
中断源类型 Keil C中断号
外部中断0 0
定时计数器中断0 1
外部中断1 2
定时计数器中断1 3
串行口中断 4
2.中断服务程序
void 中断服务程序名() interrupt 中断号 【using n】
{
//中断服务语句
}
中断服务程序名:自定义名称,一般依据中断服务程序功能命名;“interrupt”是中断服务程序的关键字;“中断号”根据Keil C规定编号;using,定义工作寄存器组;n为寄存器组编号(0-3)。
中断服务语句尽可能的短,基本不用来进行数据处理,大多数置为标志信号。有主程序根据标志信号在进行数据的处理。
若采用定时器中断0,则中断服务程序。
/*定时器中断0中断服务程序*/
void T0_sev( ) interrupt 1
{
//定时器中断0处理语句
}
若要求禁止更高优先级中断源的中断请求,应先用软件关闭CPU中断或屏蔽更高级中断源的中断,在中断返回前再开放被关闭或被屏蔽的中断。
二、硬件电路图
三、软件设计与编程
(1)定时器中断方式实现0-9s时钟显示 。
void T0_sev( ) interrupt 1 //T0中断函数
{
TH0 = 0x3C; //置初始值
TL0 = 0xB0;
count++;
if(count >= 20) //1s到
{ count = 0; //计数器清零
flag_1s = 1; //1s标志位置位
}
}
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
(2)秒表计
按照任务要求添加上3个按键,实现启动、停止、清零功能。
if(START == 0) TR0 = 1; //启动
if(STOP == 0) TR0 = 0; //停止
if(CLR == 0) i = 0; //清零
sbit START=P2^0; //启动
sbit STOP=P2^1; //暂停
sbit CLR=P2^2; //清零
单体按键处理参照任务1所用,先进行位定义。
处理程序
任务实施
1.学生分组,制定方案。
2.查阅资料,设计电路原理图,列出元件清单。
3.准备元件及工具,搭接电路。
4.注意安全。
评价总结
1.学生根据自己实施情况填写任务实施评价单。
2.组间互评,提出问题,解决问题。
3.回收元件及工具,清洁实施现场,6S标准。
4.知识整理总结。
� EMBED Equation.DSMT4 ���
高级中断请求
PC
低级中断请求
PC
硬件查询
源允许
优先级
总允许
各中断
源允许
SCON
中断标志
IP
IE
TCON
RX
TX
� EMBED Equation.DSMT4 ���
T1
T0
RI
TI
≥1
TF1
IT1=0
IT1=1
1
IE1
TF0
IT0=0
IT0=1
自然优先级
中断
矢量地址
自然优先级
1
0
1
0
1
0
1
0
PS
PT1
PX1
PT0
ES
ET1
EX1
ET0
1
0
中断
矢量地址
1
EX0
EA
PX0
IE0
$$