案例6-抢答器设计(外部中断)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void main(void) {
OUTA=1;OUTB=1;OUTC=1;OUTD=1; IT0=1; IT1=1; EX0=1; EX1=1; EA=1; while(1) {
T1 (P3. 5)
+Vcc
中断如何扩充1-定时器
• 定时器中断作为外部中断使用(软件)
定时器T1对外部计数
/*TH1、TL1采用16进制赋值*/
void T1_ISR(void) interrupt 3

/*中断服务程序*/

void main(void)
{ TMOD=(TMOD&0x0f)|0x60;
• 中断嵌套:当CPU正在处理一个优 先级低的中断请求的时,如果发 生另一个优先级比它高的中断请 求,CPU能暂停当前处理的中断, 转去处理优先级高的中断请求, 待处理完以后,再回到原来正在 处理的低级中断程序,这种高级 中断源能中断低级中断源的中断 处理称为中断嵌套。
8051中断系统
• 8051单片机有 – 5个中断源 – 2个中断优先级(2级中断嵌套),优先级可通Байду номын сангаас编程实现
• 中断嵌套
8051中断系统
• 中断:当CPU正处理某项事务时,若外 界或内部发生紧急事件,要求CPU暂停 正在处理的工作转而去处理这个紧急事 件,待处理完以后再回到原来被中断的 地方,继续执行原来被中断了的程序, 这样的过程称为中断。(堆栈)
8051中断系统
• 中断优先级:当几个中断源同时 请求中断时,CPU应优先响应最 需紧急处理的中断请求。为此, 需要规定各个中断源的优先级。 在优先级高的中断请求处理完了 以后。再响应优先级低的中断请 求。
• 问提:中断标志IE0的产生与中断使能是否有关?
8051 INT0相关寄存器与控制位
INT0中断方式执行流程
#include "reg51.h" sbit S0=P3^2; sbit D0=P0^0; void delay(unsigned int n) {
unsigned int i; for(i=0;i<n;i++)
delay(20000);
}
}
主程序
中断响应
初始化中断
中断服务程序
等待中断
自动清中断标志
……
返回中断
中断如何扩充1-定时器
• 定时器中断作为外部中断使用 – 把8051的T0 、T1用作对外部脉冲计数方式。每当P3.4(T0) 或P3.3(T1)引脚上发生负跳变时, T0、T1计数器加1。利 用这个特性,可以把P3.4和P3.5引脚作为外部中断请求输入 线,而定时器的溢出中断作为外部中断请求标志。
案例6-抢答器设计(外部中断)
物理与电子工程学院 2014.11
8051中断系统
• 中断
• 中断源:向CPU提出中断请求的源称为中断源 – 外部中断:INT0、INT1 – 定时/计数器:T0、T1 – 串行口:RXD、TXD
• 中断优先级:同时有两个以上中断提出申请或执行一个中断时又 有一个中断申请 – 默认:中断编号越小,优先级越高 – 自定义:通过中断优先级寄存器设置
0
0003H
T0中断
1
000BH
INT1中断
2
T1中断
3
0013H 001BH
串行口中断
4
T2中断
5
0023H 002BH
中断优先级 高

例1
+5V
+5V
R20
1K P32_INT0
S0
R8
1K
D0
• 如图按下S0,对D0取反 – 查询方式 – 中断方式
P00
GND
独立按键电路
例1-查询方式
+5V
• IE(中断允许寄存器):中断源的中断请求是否能得到响应,受IE 的控制;EX0 ET0 EX1 ET1 ES EA
• IP(中断优先级寄存器):各个中断源的优先级可由IP的各位来确 定;同一优先级中的各中断源同时请求中断时,由内部的查询逻辑 来确定响应的次序。 PX0 PT0 PX1 PT1 PS
D0=~D0;
} pre_S0=S0; } }
• 查询方式存在问题: 实时性
8051 INT0中断原理
• 当INT0引脚输入如下信号: –下降沿(IT0=1)或 –低电平(IT0=0)
• CPU自动(硬件)产生中断标志(IE0=1)
• 此时 – 若INT0中断允许(使能EX0=1,EA=1),则CPU立即停止当前程序, 跳转到INT0对应的中断入口(ROM保留地址0x0003)执行中断服务程 序(中断服务程序后CPU自动对中断标志清零:IE0=0),待INT0中 断服务程序执行完毕后再回原执行程序处; – 若INT0中断未允许,则程序不能跳转到INT0中断入口,不执行中断 服务程序(中断标志IE0不能自动清0)。
8051中断系统
8051中断系统
• 8051五个中断源 – INT0中断(P3.2) – T0中断 (P3.4) – INT1中断(P3.3) – T1中断 (P3.5) – 串行中断(P3.0、P3.1)
8051中断系统-中断号与入口地址
中断源 中断号(n) 中断入口地址(8n+3)
INT0中断
; }
void INT0_ISR(void) interrupt 0 {
D0=~D0; }
void main (void)
{
IT0=1;
//外部中断触发方式:下降沿
EX0 = 1;
//INT0中断使能
EA = 1;
//总中断使能
while(1) //等待中断标志IE0的到来
{
delay(20000);
+5V
R20
1K P32_INT0
S0
R8
1K
D0
P00
GND
独立按键电路
• 查询方式
#include "reg51.h" sbit S0=P3^2; sbit D0=P0^0; void main(void) {
bit pre_S0=1; while(1) {
if(pre_S0==1&&S0==0)//S0按下 {
ET1=1; EA=1; TH1=0xFF; TL1=0xFF;
TR1=1;
T1 (P3. 5)
while(1);

中断如何扩充2-中断查询
• 中断和查询结合的方式
中断如何扩充2-中断查询
#include "reg51.h" sbit INA=P2^0; sbit INB=P2^1; sbit INC=P2^2; sbit IND=P2^3; sbit OUTA=P0^0; sbit OUTB=P0^1; sbit OUTC=P0^2; sbit OUTD=P0^3;
相关文档
最新文档