图3-l Pl口输出波形
② 注释见源程序右边所述。 ORG 0000H
MAIN:MOV DPTR,#TAB ;P1输出参数表首地址 MOV R1,#06H ;P1输出参数有6个 L,P: CLR A
MOVC A,@A+DPTR ;查表输出 MOV P1,A
LCALL DELAY 0.5 s ;软件延时0.5 S INC DPTR
DJNZ R1,LP ;输出参数已有6个 ?
AJMP MAIN ;输出参数已有6个,则重复输出 TAB:DB 01H,03H,02H,06H,04H,05H ;参数表 DELAY0.5 s: ?? ;延时0.5 S子程序 RET
【3—22】读下列程序,然后 ① 画出P I.O~P1.3引脚上的波形图,并标出电压V一时间t坐标。 ② 对源程序加以注释。
ORG 0000H
START: MOV SP,#20H MOV 30H,#01H MOV P1,#01H
MLP0: ACALT, D50ms M07 A,30H
CJNE A,#08H,MLPI MOV A,#01H MOV DPTR,#ITAB
MLP2: MOV 30H,A MOVC A,@A+DPTR MOV P1,A
SJMP Mr,p0 MLPl: INC A SJMP MLP2
ITAB:DB 0,1,2,4,8 . DB 8,4,2,1 D50ms: ······ . 【答】
① 程序功能:P1.O~P1.3引脚上的波形图如图3—2所示。 图3—2 P1.O~P1.3引脚上的波形图
② 注释见源程序右边所述。 ORG 0000H
START: MOV SP,#20H MOV 30H,#01H MOV P1,#01H
MLP0: ACALL ,D50ms ;软件延时50 ms MOV A,30H
CJNE A,#08H,MLPI ;判断表格中数据是否取完? MOV A,#01H ;取完,从表头开始取 MOV DPTR,#ITAB ;表格首地址 MLP2: MOV 30H,A
MOVC A,@A+DPTR ;取表格中数据 MOV P1,A SJMP MLP0
MLPI: INC A ;表格中数据未取完,准备取下一个 SJMP MLP2
ITAB:DB 0,1,2,4,8 ;表 DB 8,4,2,1
D50ms: ?? ;软件延时50 ms子程序 RET
第5章 【单片机的中断系统原理及应用】 思考与练习题解析 【5—1】什么是中断?
【答】单片机在程序执行过程中,允许外部或内部“事件’’通过硬件打断程序的执行.,使其转向执行处理外部或内部“事件’’的中断服务子程序;而在完成中断服务子程序以后,继续执行原来被打断的程序,这种情况称为“中断\,这样的过程称为“中断响应过程\。 【5—2】单片机的中断系统主要应该解决哪几个问题?
【答】单片机的中断系统主要应该解决3个问题,即: ‘
①当单片机内部或外部有中断申请时,能及时响应中断,中止正在执行的任务,转去处理中断服务子程序。中断服务处理以后,能正确回到原来的断点处继续处理原先的任务。 ②当有多个中断源同时申,请中断时,单片机应能首先响应优先级高的中断源,能实现中断优先级的控制。 ‘
③当低优先级中断源正在享用中断服务时,若这时优先级比它高的中断源也申请中断,则要求单片机能中止低优先级中断源的服务程序,转去执行更高优先级中断源的服务程序,实现中断嵌套,并能逐级正确返回原断点处,继续处理原先的任务。 【5—3】说明8 0 C5 1单片机的中断流程。
【答】80C51单片机的中断流程由以下几个方面组成。’ ①中断采样:解中断采样是针对外部中断请求信号进行的,而内部中断请求都发生在芯片内部,可以直接置位TCON或SCON中的中断请求标志。在每个机器周期的S5 P2(笫五状态的第二节拍)期间,各中断标志采样相应的中断源,并置人相应标志。
②中断查询:若查询到某中断标志为1,则按优先级的高低进行处理,即响应中断。 ③中断响应:响应中断后,由硬件自动生成长调用指令LCALL,其格式为“LCALL addrl 6”,而addrl 6就是各中断源的中断矢量地址。首先将程序计数器PC的内容压人堆栈进行保护,先压入PC低8位地址,后压人PC高8位地址,同时堆栈指针SP加2。将对应中断源的中断矢量地址装入程序计数器PC,使程序转向该中断矢量地址,去执行中断服务程序。
④中断服务子程序:由中断矢量地址开始,执行子程序,直到遇到中断返回指令RETI为止。
⑤中断返回:执行指令RETI,撤消中断申请,把断点地址从堆栈弹出送人PC。先弹出PC高8位地址,后弹出PC低8位地址,同时堆栈指针SP减2。程序从断点处恢复执行。 【5-4】什么是单片机的中断优先级?中断优先级处理的原则是什么?
【答】在一个单片机系统中往往允许有多个中断源,通常给每个中断源规定了优先级别,称为“优先权\或“中断优先级’’。
当单片机同时接收到两个或多个不同优先级的中断请求时,先响应高优先级的中断。如果同时接收到的是几个同一优先级的中断请求,则由内部的硬件查询序列确定它们的优先服务次序,当服务结束后,再响应级别较低的中断源。
在80C51单片机中有高、低两个中断优先级,通过中断优先级寄存器IP来设定。 在80C51单片机中存在同一优先级内由内部硬件查询序列确定的第二个优先级结构。 其排列如下:
中断源 中断优先级 外部中断0 最高 定时器T0中断
外部中断1
定时器T1中断 串行口中断
定时器T2中断 最低
【5-5】外部中断请求有哪两种触发方式?对跳变触发和电平触发信号有什么要求?如何选择和设置?
【答】外部中断请求有两种信号触发方式,即电平有效方式和跳变有效方式,可通过设置有关控制位进行定义。
当设定为信号电平有效方式时,若INT0或INT1引脚上采样到有效的低电平,则提出中断请求;当设定为信号跳变有效方式时,若INT0或INT1引脚上采样到有效负跳变,则提出中断请求。 ’
①INT0(P3.2)—一外部中断O。
当IT0(TCON.O)=0 时,信号触发方式为低电平有效;当IT0(TCON.O)=1时,信号触发方式为下降沿有效。
②INTI(P3.3)——外部中断1。
当ITI(TCON.2)=0时,信号触发方式为低电平有效;当ITl(TCON.2)=1时,信号触发方式为下降沿有效。
【5-6】80C51单片机有哪些中断源?对其中断请求如何进行控制? 【答】
1.中断源 80C51.单片机中有5个中断源。80c52中增加了一个中断源--定时器/计数器T2中断,共有6个中断源。每一个中断源都能被单片机程控为高优先级或低优先级。
80c51单片机的5个中断源包括2个外部中断源和3个内部中断源。2个外部中断源为INT0和INT1,外部设备的中断请求信号、掉电等故障信号都可以从INT0或INT1引脚输入。3个内部中断源为定时器/计数器TO、T1的定时/计数溢出中断源和串行口发送或接收中断源。80C5 1的5个中断源可以分为3类,即: (1)外部中断
外部中断是由外部信号引起的,共有两个外部中断,其中断请求信号分别从引脚INT0(P3.2)和INTl(P3.3)上引入。 (2)定时中断
定时中断是为满足定时或计数需要而设置的。当计数器发生计数溢出时,表明设定的定时时间已到或计数值已满,这时可以申请中断。由于定时器/计数器位于单片机芯片内部,所以定时中断属于内部中断。80C51.内部有两个定时器/计数器,所以定时中断有两个源,即:
① FF0(P3.4)一一定时器/计数器TO溢出中断。 ② FFI(P3.5)?定时器/计数器T1溢出中断。 (3)串行中断
串行中断是为串行数据传送的需要而设置的。每当串行口发送或接收一组串行数据时,就产生一个中断请求。 .
TI(SCON.1)和RI(SCON.O)--串行口发送和接收中断源。
2.中断的允许和禁止由中断允许寄存器IE控制 中断允许寄存器IE格式如图5—1所示。
┏━━━━━┳━━━┳━━━┳━━━┳━━━┳━━━━┳━━━━┳━━━━┳━━━━┓ ┃ 位地址 ┃ AFH ┃ AEH ┃ ADH ┃ ACH┃ ABH ┃ AAH ┃ A9H ┃ A8H ┃ ┣━━━━━╋━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━━━╋━━━━┫ ┃ 符 号 ┃ EA ┃ ┃ ┃ ES ┃ ETl ┃ EXl ┃ ETO ┃ EXO ┃ ┗━━━━━┻━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━━━┻━━━━┛
图5—1 中断允许寄存器IE格式
IE寄存器中相应位设置为O时,所对应的中断源被禁止中断;相应位设置为1时,所对应的中断源被允许中断。
系统复位后IE寄存器中各位均为0,即此时禁止所有中断。 与中断有关的控制位共6位,即: EX0 外部中断O中断允许位。
ETO 定时器/计数器T0中断允许位。 EXl 外部中断1中断允许位。
ETl 定时器/计数器T1中断允许位。 ES 串行口中断允许位。
EA CPU中断允许位。当EA=1时,允许所有中断开放,总允许后,各中断的允许或禁止由各中断源的中断允许控制位进行设置;当EA=0时,所有中断屏蔽。
80C51单片机通过中断允许控制寄存器对中断的允许(开放)实行两级控制,即以EA位作为总控制位,以各中断源的中断允许位作为分控制位。只有当总控制位EA有效(即开放中断系统)时,各分控制位才能对相应中断源分别进行开放或禁止。 .