MCS-51的中断结构与控制
MCS-51的中断源及中断结构
(一)中断源
向CPU发出中断请求的信号称为中断源。在2.1.2节中我们已经了解到MCS-51系列单片机中有5个中断源,其中2个外部中断源,3个内部中断源,具体如下:
:外部中断,由引脚P3.2引入中断请求。
:外部中断,由引脚P3.3引入中断请求。
➢ 定时计数器T0: 内部中断,定时计数器0溢出时发出中断请求。
➢ 定时计数器T1: 内部中断,定时计数器1溢出时发出中断请求。
➢ 串行口中断: 内部中断,包括串行接收中断RI和串行发送中断TI。
MCS-51单片机自然优先级如表4-1所示。
表4-1 优先级的排列
(二)中断结构
MCS-51系列单片机的中断系统结构如图4-2所示。
图4-2 MCS-51中断结构
由图4-2可以看出,中断系统中涉及TCON、SCON、IE以及IP四个特殊功能寄存器,它们主要有以下功能:
➢ 锁存中断请求标志: TCON和SCON锁存各中断源的中断请求标志位。
➢ 中断允许寄存器IE: 控制CPU是否响应中断源的请求。
➢ 中断优先级寄存器IP: 设置各中断源的优先级,每个中断源可编程为高优先级中断或低优先级中断。
1. TCON中的中断标志位
TCON的字节地址为88H,可进行位寻址,其具体的结构、位名称、位地址以及功能如表4-2所示。
表4-2 TCON的结构、位名称、位地址以及功能
IT0(D0位): 外部中断
的触发方式控制位,由软件进行置“1”和清“0”。IT0=1时,为边沿触发方式(即当引脚P3.2出现下降沿脉冲信号时,中断请求有效);IT0=0时,为电平触发方式(即当引脚P3.2为低电平信号时,中断请求有效)。
IE0(D1位): 外部中断
的请求标志位。当CPU检测到外部中断请求时,该标志位置“1”,当CPU转向中断处理子程序时,由硬件自动清“0”(只适用于边沿触发方式)。
注意
在电平触发方式中,CPU转向中断处理子程序时,不能自动清除IE标志位,也不能由软件进行清除。所以在中断返回前需撤销引脚上的低电平,否则就会产生CPU多次响应一次中断的错误。
IT1(D2位)和IE1(D3位): 外部中断
的触发方式控制位和请求标志位,其
含义与IT0和IE0相同。
➢ TR0(D4位): 定时计数器T0的启动停止标志位,由用户编程确定。TR0=1时,定时器开始计数(即从设定的初值作加1计数);TR0=0时,定时器停止。
➢ TF0(D5位): 定时计数器T0的中断溢出标志位。定时器作加1计数,当最高位产生进位时,定时器计数溢出,此时,由硬件置位TF0=1,CPU响应中断后,由硬件清“0”,TF0=0。
➢ TR1(D6位)和TF1(D7位): 定时计数器T0的启动停止标志位和中断溢出标志位,其含义与TR0和TF0相同。
2. SCON中的中断标志位
SCON的字节地址为98H,可进行位寻址,其具体的结构、位名称、位地址以及功能如表4-3所示。
表4-3 SCON的结构、位名称、位地址以及功能
➢ RI: 串行口接收中断标志位,当串行口接收到一帧数据时,RI置1,CPU响应中断后,硬件不能自动清除RI,需要由软件清“0”。
➢ TI: 串行口发送中断标志位,当串行口发送一帧数据时,T1置1,CPU响应中断后,硬件不能自动清除RI,同样需要由软件清“0”。
提示
RI和TI通过一个或门向CPU发中断请求,CPU响应中断请求后,首先需要判断是RI和TI哪一个中断源发出的请求,才能去执行相应的中断子程序。
串行中断的有关内容以及SCON中的其他标志位含义将在项目六中进行详细讲述。
3. 中断允许控制寄存器IE
IE控制所有中断源的开放和屏蔽,字节地址为A8H,可进行位寻址,其具体的结构、位名称、位地址以及控制的相应中断源如表4-4所示。
表4-4 IE的结构、位名称、位地址以及功能
EX0: 外部中断
的中断允许控制位。EX0=1时,
开中断;EX0=0时,
关中断。
➢ ET0: 定时计数器T0中断允许控制位。ET0=1时,T0开中断;ET0=0时,T0关中断。
EX1: 外部中断
的中断允许控制位。EX1=1时,
开中断;EX1=0时,
关中断。
➢ ET1: 定时计数器T1中断允许控制位。ET0=1时,T1开中断;ET0=0时,T1关中断。
➢ ES: 串行口中断允许控制位。ES=1时,串行口开中断;ES=0时,串行口关中断。
➢ EA: CPU中断允许控制位。EA=1时,CPU全部开中断;EA=0时,CPU全部关中断。
提示
CPU复位时,IE各位清0,禁止所有中断。
4. 中断优先级控制寄存器IP
MCS-51单片机中有两个中断优先级,中断优先级控制寄存器IP用来定义每个中断源的中断优先级。IP的结构、位名称、位地址以及控制的中断源如表4-5所示。
表4-5 IP的结构、位名称、位地址以及功能
IP的状态由用户来设定,某位为1,则相应的中断源处于高优先级中断;某位为0,则相应的中断源处于低优先级中断。
提示
单片机复位时,IP各位清0,各中断源处于低优先级中断。
MCS-51的中断处理过程
图4-3 中断处理过程
中断处理过程如图4-3所示,单片机工作时,在每个机器周期中都去查询各个中断标记位,如果某位是“1”,就说明有中断请求了;接下来需要判断中断请求是否满足响应条件;如果满足响应条件,CPU将进行相应的中断处理;中断处理完毕,进行中断返回,继续执行指令。
如果本次查询中没有中断请求或中断请求不能满足响应条件,CPU将继续原来的指令执行操作。
(一)中断响应
CPU检测到中断请求后,需要判断此中断请求是否满足响应条件,中断响应条件如下:
(1)CPU开中断,申请中断请求的中断源开中断。
(2)没有响应同级别或更高级别的中断。
提示
中断二级嵌套的响应原则:
① 同一中断优先级中,有多个中断请求时,按自然优先级进行响应(即查询顺序)。
② 当前进行的中断只能被高优先级的中断所打断(同级别或低优先级的中断请求不予响应)。
(3)当前处在所执行指令的最后一个周期。单片机有单周期指令、双周期指令、三周期指令和两个四周期指令,如果正在执行的是多字节指令,需要等整条指令执行结束,才能响应中断。
(4)如果正执行的指令是返回指令(RETI)或访问IP、IE寄存器的指令,那么CPU将至少再执行一条指令才能响应中断。
满足中断条件的情况下,CPU响应中断过程如下:
① 将IP中相应的优先级控制位置1,以阻断后来的同级和低级的中断请求。
② 撤销该中断源的中断请求标志,否则,中断返回后将重复响应该中断。
③ 保护断点地址,程序转向执行中断服务子程序。
提示
中断响应时间:
以外部中断0为例,INT0的引脚电平在每个机器周期的S5P2时刻经反相器锁存到TCON的IE0标志位,CPU在下一个机器周期查询新置入的IE0和IE1,满足相应条件,CPU将执行一条两个机器周期的长调用指令LCALL,由硬件将中断矢量地址装到PC中,使程序转入中断矢量入口。所以,从产生外部中断到中断执行,至少需要3个机器周期。
若正在处理的程序为RETI或访问IP,IE等,则额外等待的时间不会多于5个机器周期。所以外部中断的响应时间在3~8个机器周期之间。
(二)中断处理
中断处理过程一般可以分为保护现场、执行中断服务程序和恢复现场三个过程。
(1)保护现场
执行中断服务子程序之前,CPU只保护了一个地址(PC的值),如果主程序和中断服务子程序中都用到一些公共存储空间(如A、PSW和DPTR等),那么执行中断服务子程序前需要将这些数据保存起来,以免返回主程序时出现错误。
(2)执行中断服务程序
在MCS-51系列单片机中,五个中断源都有它们各自的中断入口地址。
:0003H
➢ T0: 000BH
:0013H
➢ T1: 001BH
➢ 串口中断: 0023H
可以看出,中断服务程序的存储空间很小,如果我们需要的程序超出了空间的限制,这时可以在中断处安排一条LJMP指令把中断服务程序跳转到其他地址。
提示
中断响应标志的清除:
CPU在响应中断请求后,该中断的中断请求在中断返回前应当清除,以免重复中断,被再次响应。
边沿触发的外部中断,定时器中断,均有硬件自动清除;串行口中断,需由软件清除;电平触发的外部中断需由外接触发器控制清除。
(3)恢复现场
恢复现场和保护现场相对,返回主程序前需要将保护现场过程中压入堆栈的相关数据弹出,以保证程序返回断点时能正确执行。
(三)中断返回
中断返回由中断返回指令RETI来实现。这条指令的功能是把断点地址从堆栈中弹出,送回到程序计数器PC;通知中断系统已完成中断处理,并同时清除优先级状态。
C51中断函数的定义
C51编译器支持在C源程序中直接开发中断过程,C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。中断服务函数的完整语法如下:
函数的返回值 函数名([参数]) interrupt n [using m]
{
函数体;
}
关于函数的使用进行以下说明:
(1)对中断程序而言,函数的返回值和参数一般为void。
(2)interrupt n 中n的取值为0~31的常数,不允许用表达式,表示中断向量的编号。在8051中,一般0代表外部中断0,1代表定时器0,2代表外部中断1,3代表定时器1,4代表串行中断。
(3)using m 中m的取值为0~3的常数,不允许用表达式,表示内部RAM中的第r组工作寄存器。在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。
下面我们看一个使用C51语言编写的中断程序。
【例】 设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。
用C语言编写的中断服务程序如下:
在编写中断服务程序时必须注意不能进行参数传递,不能有返回值。
大学单片机考试试卷及答案
一、填空题(每空1分,共15分)
1、二进制数(11101100)2=___EC____H =___236____D。
2、一个机器周期等于____6____个状态周期,振荡脉冲2分频后产生的时序信号的周期定义为___状态_____周期。
3、一般的计算机系统都是由____地址总线_______、___数据总线_______、_____控制总线____三总线结构组成。
4、89C51片内RAM有___256___字节,其中包含___128___字节用户数据存储单元和__128____字节的特殊功能寄存器单元,片内ROM有___4K___字节。
5、假定(A)=95H,(R0)=20H,(20H)=0BFH。执行指令:ADD A,@R0后,累加器A的内容__54H___,CY的内容__1___,AC的内容__1___,OV的内容__1___。
得分
评卷人
二、选择题(每题2分,共30分)
1、在MCS—51指令中,下列指令中 C 是无条件转移指令。
A.LCALL addr16 B.DJNZ direct,rel C.SJMP rel D.ACALL addr11
2、16.寻址方式就是 C 的方式。
A.查找指令操作码 B.查找指令
C.查找指令操作数 D.查找指令操作码和操作数
3、下列指令判断若P1口最低位为高电平就转LP,否则就执行下一句的是 B 。
A.JNB P1.0,LP B.JB P1.0,LP C.JC P1.0,LP D.JNZ P1.0,LP
4、下列指令能能使累加器A的最高位置1的是 D 。
A.ANL A,#7FH B.ANL A,#80H C.ORL A,#7FH D.ORL A,#80H
5、下列指令能能使P1口的最低位置1的是 B 。
A.ANL P1,#80H B.ORL P1,#01H C.ORL P1,#0FFH D.ORL P1,#80H
6、MCS—51汇编语言指令格式中,唯一不可缺少的部分是 B 。
A.标号 B.操作码 C.操作数 D.注释
7、MCS—51指令包括操作码和操作数,其中操作数是指 D 。
A.参与操作的立即数 B.寄存器 C.操作数 D.操作数或操作数地址
8、设累加器A中为无符号数,B中数为2,下列指令 D 的作用与其它几条不同。
A ADD A,0E0H B MUL AB C RL A D RLC A
9、欲将P1口的高4位保留不变,低4位置1,可用指令 B 。
A ANL P1,#0F0H B ORL P1,#0FH
C XRL P1,#0FH D 以上三句都对
10、8051单片机的位寻址区位于内部RAM的 D 单元。
A 00H~7FH B 20H~7FH
C 00H~1FH D 20H~2FH
11、8051的程序计数器PC为16位计数器,其寻址范围是 D 。
A 8K B 16K C 32K D 64K
12、在单片机算术运算过程中,指令DA A常用于 C 运算。
A.二进制 B.加法 C.BCD码加法 D.十六进制
13、LJMP跳转空间最大可达到 D 。
A 2KB B 256B C 128B D 64KB
14、单片机能直接运行的程序叫 C 。
A 源程序 B 汇编程序 C目标程序 D编译程序
15、将内部数据存储单元的内容传送到累加器A中的指令是 C 。
A MOVX A,@R0 B MOV A, #data C MOV A,@R0 D MOVX A, @DPTR
三、分析下面程序并填空(每空1分,共25分)
1、程序填空
MOV A,#10H (A)=_10H___________MOV B,A (B)=_10H____________MOV A,B (A)=__10H___________ADD A,B (A)=__20H____________MOV 20H,A (20H)=___20H__________INC A (A)=_____21H________MOV 21H,A (21H)=_____21H________INC A (A)=________22H____MOV 22H,A (22H)=_______22H______
2、程序填空
MOV DPTR,#2000H (DPTR)=__2000H___________MOV A,#80H (A)=_______80H_____MOVX @DPTR,A (2000H)=___80H_________INC DPTR (DPTR)=____2001H________MOV A,#90H (A)=____90H________MOVX @DPTR,A (2001H)=___90H__________MOV DPTR,#2000H (DPTR)=____2000H________MOVX A,@DPTR (A)=_____80H________MOV B,A (B)=____80H_______INC DPTR (DPTR)=__2001H________MOVX A,@DPTR (A)=_______90H______
3、改正下列指令
MOV @R3,A MOV @R1,AMOV DPTR,A MOVX @DPTR,AINC @R3 INC R3DEC DPTR DEC R3ADDC #30H,A ADDC A,#30H
四、寻址方式(每题2分,共10分)
(说明8051单片机的下列各条指令中源操作数的寻址方式)
1.ANL A,20H 直接寻址2.ADDC A,#20H 立即寻址3.JZ rel 相对寻址4.CLR C 位寻址5.RR A 寄存器寻址
。
五、综合题(共20分)
1、编程将片内RAM30H单元开始的15个的数据传送到片外RAM3000H开始的单元中去。(10分)
MOV R0,#30H
MOV DPTR,#3000H
MOV R7,#15
LOOP: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R7,LOOP
2、片内RAM40H开始的单元内有10个二进制数,编程找出其中最大值并存于50H单元中。(10分)
START: MOV R0,#40H ;数据块首地址送R0
MOV R7, _#9___ ;比较次数送R7
MOV A,@R0 ;取数送A
LOOP: INC R0
MOV _30H __,@R0 ;取数送30H
CJNE A,30H,NEXT ;(A)与(30H)相比
NEXT: __ JNC NEXT1_ ;(A)≥(30H)转NEXT1
__ MOV A,30H _ ;(A)<(30H),大数送A
NEXT1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较
__MOV 50H,A___ ;比较结束,大数送50H
RET
相关问答
单片机 -8051的 程序计数器PC 有何作用?寻址范围是什么?程序计数器PC始终指向下一条将要执行的指令地址。寻址范围是0000H~FFFFH。其中0000H~0FFFH为64KB片内和片外公共地址,靠EA来区分。0FFFH~FFFFH为外部程序存储...
51 单片机 复位后 pc 值为多少?传统型号51单片机复位之后的PC程序计数器值为0000,也就是程序存储器ROM的起始地址。最新研制的扩展型单片机除了具有硬件复位功能以外,还增加了软件复位功能...
单片机 C语言 计数器程序 ?//timer0设定为计数器模式1TMOD&=0xf0;//清除原来的设定TMOD|=0x05;//T0为计数器模式1TH0=0;TL0=0;//从0开始计数TR0=...
在线等,急急急,求一道 单片机 题目的答案有以下 程序 ORG000FH...[最佳回答]第一问:ORG000FH000FH:MOVA,#08H0011H:MOVB,#76H0013H:ADDA,A0014H:ADDA,B0015H:LJMP2000H第二...
【18.MCS-51 单片机的 最小时序定时单位是()。A.状态B.拍节C....[最佳回答]CDACBBBCC
MCS-51 单片机的程序计数器 有几位?有三种方式:1、16位。加1计数器2、8位。用于较精确的脉冲信号发生器3、8位。此模式将计数器分为:TL0和TH0有三种方式:1、16位。加1计数器2、8位。用于...
单片机的计数器 是干什么的 - 懂得以51单片机16位定时计数器1(T1)来讲,通俗解释:计数是T1是一个能盛65536(十六位时)滴水的水盆,在水龙头下水一滴滴地滴入盆中。如果盆是空的那水在滴...
单片机 ret指令详解?单片机的RET是子程序结束的专用指令,必须放在子程序的出口。如果子程序不是一个出口,那么就可以有多个RET指令。单片机在执行RET指令时,是将程序计数器PC值恢...
单片机计数器 清零-ZOL问答...按键判断/去抖程序...CLRAMOVTH0,AMOVTH1,AMOVTL0,AMOVTL1,A...显示程序...不过如果你的定时器是开的话,你一清完0,定时器马上又计...
51 单片机 如何定义t0为计时器t1为 计数器 ?常规方法测量脉冲的频率,利用51单片机的两个定时器来测量,一个定时器0来定时,一个定时器1作为计数方式voidTimer0Init()//2毫秒@12.000MHz{...常规方法测...