b) 中断允许位EA=1,即CPU开中断
c) 申请中断的中断源的中断允许位为1,即中断没有被屏蔽 d) 无同级或更高级中断正在被服务 e) 当前的指令周期已结束
f) 若现行指令为RETI或访问IE或IP指令时,该指令以及紧接着的另一条指令已被执行完
12、89C51单片机外部中断源有几种触发中断请求的方法?如何实现中断请求?
答:有两种方式:电平触发和边沿触发
电平触发方式:CPU在每个机器周期的S5P2期间采样外部中断引脚的输入电平。若为低电平,使IE1(IE0)置“1”,申请中断;若为高电平,则IE1(IE0)清零。
边沿触发方式:CPU在每个机器周期S5P2期间采样外部中断请求引脚的输入电平。如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下一个机器周期采样到外部中断请求为低电平,则使IE1(IE0)置“1”申请中断;否则,IE1(IE0)置0。 13、89C51单片机有五个中断源,但只能设置两个中断优先级,因此,在中断优先级安排上受到一定的限制。试问以下几种中断优先顺序的安排(级别由高到低)是否可能:若可能,则应如何设置中断源的中断级别:否则,请简述不可能的理由。 ⑴ 定时器0,定时器1,外中断0,外中断1,串行口中断。 可以,MOV IP,#0AH
⑵ 串行口中断,外中断0,定时器0,外中断1,定时器1。 可以,MOV IP,#10H
⑶ 外中断0,定时器1,外中断1,定时器0,串行口中断。
不可以,只能设置一级高级优先级,如果将INT0,T1设置为高级,而T0级别 高于INT1. ⑷ 外中断0,外中断1,串行口中断, 定时器0,定时器1 。 可以,MOV IP,#15H
⑸ 串行口中断,定时器0,外中断0,外中断1,定时器1。 不可以
⑹ 外中断0,外中断1,定时器0,串行口中断,定时器1 。 不可以
⑺ 外中断0,定时器1,定时器0,外中断1,串行口中断。 可以,MOV IP,#09H
14、89C51各中断源的中断标志是如何产生的?又是如何清0的?CPU响应中断时,中断入口地址各是多少?
答:各中断标志的产生和清“0”如下: (1) 外部中断类
外部中断是由外部原因引起的,可以通过两个固定引脚,即外部中断0和外部中断1输入信号。
外部中断0请求信号,由P3.2脚输入。通过IT0来决定中断请求信号是低电平有效还是下跳变有效。一旦输入信号有效,则向CPU申请中断,并且使IE0=1。硬件复位。 外部中断1请求信号,功能与用法类似外部中断0
(2) 定时中断类
定时中断是为满足定时或计数溢出处理需要而设置的。当定时器/计数器中的计数结构发生计数溢出的,即表明定时时间到或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志位。这种中断请求是在单片机芯片内部发生的,无需在芯片上设置引入端,但在计数方式时,中断源可以由外部引入。
TF0:定时器T0溢出中断请求。当定时器T0产生溢出时,定时器T0请求标志TF0=1,请求中断处理。使用中断时由硬件复位,在查询方式下可由软件复位。 TF1:定时器T1溢出中断请求。功能与用法类似定时器T0 (3) 串行口中断类
串行口中断是为串行数据的传送需要而设置的。串行中断请求也是在单片机芯片内部发生的,但当串行口作为接收端时,必须有一完整的串行帧数据从RI端引入芯片,才可能引发中断。
RI或TI:串行口中断请求。当接收或发送一串帧数据时,使内部串行口中断请求标志RI或TI=1,并请求中断。响应后必须软件复位。 CPU响应中断时,中断入口地址如下: 中断源 入口地址 外部中断0 0003H 定时器T0中断 000BH 外部中断1 0013H 定时器T1中断 001BH 串行口中断 0023H
15、中断响应时间是否为确定不变的?为什么? 答:中断响应时间不是确定不变的。由于CPU不是在任何情况下对中断请求都予以响应的;此外,不同的情况对中断响应的时间也是不同的。下面以外部中断为例,说明中断响应的时间。
在每个机器周期的S5P2期间,端的电平被所存到TCON的IE0位,CPU在下一个机器周期才会查询这些值。这时满足中断响应条件,下一条要执行的指令将是一条硬件长调用指令“LCALL”,使程序转入中断矢量入口。调用本身要用2个机器周期,这样,从外部中断请求有效到开始执行中断服务程序的第一条指令,至少需要3个机器周期,这是最短的响应时间。
如果遇到中断受阻的情况,这中断响应时间会更长一些。例如,当一个同级或更高级的中断服务程序正在进行,则附加的等待时间取决于正在进行的中断服务程序:如果正在执行的一条指令还没有进行到最后一个机器周期,附加的等待时间为1~3个机器周期;如果正在执行的是RETI指令或者访问IE或IP的指令,则附加的等待时间在5个机器周期内。 若系统中只有一个中断源,则响应时间为3~8个机器周期。
16、中断响应过程中,为什么通常要保护现场?如何保护?
答:因为一般主程序和中断服务程序都可能会用到累加器,PSW寄存器及其他一些寄存器。CPU在进入中断服务程序后,用到上述寄存器时,就会破坏它原来存在寄存器中的内容;一旦中断返回,将会造成主程序的混乱。因而在进入中断服务程序后,一般要先保护现场,然后再执行中断处理程序,在返回主程序以前再恢复现场。
保护方法一般是把累加器、PSW寄存器及其他一些与主程序有关的寄存器压入堆栈。在保护现场和恢复现场时,为了不使现场受到破坏或者造成混乱,一般规定此时CPU不响应新的中断请求。这就要求在编写中断服务程序时,注意在保护现场之前要关中断,在恢复现场之后开中断。如果在中断处理时允许有更高级的中断打断它,则在保护现场之后再开中断,恢复现场之前关中断。
17、清叙述中断响应的CPU操作过程,为什么说中断操作是一个CPU的微查询过程? 答:在中断响应中,CPU要完成以下自主操作过程:
a) 置位相应的优先级状态触发器,以标明所响应中断的优先级别 b) 中断源标志清零(TI、RI除外)
c) 中断断点地址装入堆栈保护(不保护PSW)
d) 中断入口地址装入PC,以便使程序转到中断入口地址处
在计算机内部,中断表现为CPU的微查询操作。89C51单片机中,CPU在每个机器周期的S6状态,查询中断源,并按优先级管理规则处理同时请求的中断源,且在下一个机器周期的S1状态中,响应最高级中断请求。 但是以下情况除外:
a) CPU正在处理相同或更高优先级中断
b) 多机器周期指令中,还未执行到最后一个机器周期
c) 正在执行中断系统的SFR操作,如RETI指令及访问IE、IP等操作时,要延后一条指令
18、在中断请求有效并开中断状况下,能否保证立即响应中断?有什么条件?
答:在中断请求有效并开中断状况下,并不能保证立即响应中断。这是因为,在计算机内部,中断表现为CPU的微查询操作。89C51单片机中,CPU在每个机器周期的S6状态下,查询中断源,并按优先级管理规则处理同时请求的中断源,且在下一个机器周期的S1状态中,响应最高级中断请求。
在以下情况下,还需要有另外的等待:
a) CPU正在处理相同或更高优先级中断
b) 多机器周期指令中,还未执行到最后一个机器周期
c) 正在执行中断系统的SFR操作,如RETI指令及访问IE、IP等操作时,要延后一条指令
评论这张
第6章习题答案
1、定时器模式2有什么特点?适用于什么场合? 答:
(1) 模式2把TL0(或TL1)配置成一个可以自动重装载的8位定时器/计数器。TL0计数溢出时不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重新装载到TL0中。TL0用作8位计数器,TH0用以保存初值。
(2) 用于定时工作方式时间(TF0溢出周期)为 ,用于计数工作方式时,最大计数长度(TH0初值=0)为28=256个外部脉冲。
这种工作方式可省去用户软件重装初值的语句,并可产生相当精确定时时间,特别适于作串行波特率发生器。 2、单片机内部定时方式产生频率为100KHZ等宽矩形波,假定单片机的晶振频率为12MHZ,请编程实现。 答:
T0低5位:1BH
T0高8位:FFH
MOV TMOD,#00H ;设置定时器T0工作于模式0 MOV TL0,#1BH ;设置5ms定时初值
MOV TH0,#0FFH
SETB TR0 ;启动T0
LOOP:JBC TF0,L1 ;查询到定时时间到?时间到转L1 SJMP LOOP ;时间未到转LOOP,继续查询
L1:MOV TL0,#1BH ;重新置入定时初值 MOV TH0,#0FFH
CPL P1.0 ;输出取反,形成等宽矩形波 SJMP LOOP ;重复循环
3、89C51定时器有哪几种工作模式?有何区别?
答:有四种工作模式:模式0,模式1,模式2,模式3
(1) 模式0:选择定时器的高8位和低5位组成一个13位定时器/计数器。TL低5位溢出时向TH进位,TH溢出时向中断标志位TF进位,并申请中断。
定时时间t=(213-初值)×振荡周期×12;计数长度位213=8192个外部脉冲 (2) 模式1:与模式0的唯一差别是寄存器TH和TL以全部16位参与操作。定时时间t=(216-初值)×振荡周期×12;计数长度位216=65536个外部脉冲
(3) 模式2:把TL0和TL1配置成一个自动重装载的8位定时器/计数器。TL用作8位计数器,TH用以保存初值。TL计数溢出时不仅使TF0置1,而且还自动将TH中的内容重新装载到TL中。
定时时间t=(28-初值)×振荡周期×12;计数长度位28=256个外部脉冲 (4) 模式3:对T0和T1不大相同
若设T0位模式3,TL0和TH0被分为两个相互独立的8位计数器。TL0为8位计数器,功能与模式0和模式1相同,可定时可计数。
TH0仅用作简单的内部定时功能,它占用了定时器T1的控制位TR1和中断标志位TF1,启动和关闭仅受TR1控制。
定时器T1无工作模式3,但T0在工作模式3时T1仍可设置为0~2。
4、89C51内部设有几个定时器/计数器?它们是由哪些特殊功能寄存器组成? 答:89C51单片机内有两个16位定时器/计数器,即T0和T1。
T0由两个8位特殊功能寄存器TH0和TL0组成;T1由TH1和TL1组成。
5、定时器用作定时器时,其定时时间与哪些因素有关?作计数器时,对外界计数频率有何限制?
答:定时时间与定时器的工作模式,初值及振荡周期有关。 作计数器时对外界计数频率要求最高为机器振荡频率的1/24。 6、简述定时器4种工作模式的特点,如何选择设定? 答:
(1) 模式0:选择定时器的高8位和低5位组成一个13位定时器/计数器。TL低5位溢出时向TH进位,TH溢出时向中断标志位TF进位,并申请中断。
定时时间t=(213-初值)×振荡周期×12;计数长度位213=8192个外部脉冲 置TMOD中的M1M0为00
(2) 模式1:与模式0的唯一差别是寄存器TH和TL以全部16位参与操作。定时时间t=(216-初值)×振荡周期×12;计数长度位216=65536个外部脉冲 置TMOD中的M1M0为01
(3) 模式2:把TL0和TL1配置成一个自动重装载的8位定时器/计数器。TL用作8位计数器,TH用以保存初值。TL计数溢出时不仅使TF0置1,而且还自动将TH中的内容重新装载到TL中。
定时时间t=(28-初值)×振荡周期×12;计数长度位28=256个外部脉冲
置TMOD中的M1M0为10
(4) 模式3:对T0和T1不大相同
若设T0位模式3,TL0和TH0被分为两个相互独立的8位计数器。TL0为8位计数器,功
能与模式0和模式1相同,可定时可计数。
TH0仅用作简单的内部定时功能,它占用了定时器T1的控制位TR1和中断标志位TF1,启动和关闭仅受TR1控制。
定时器T1无工作模式3,但T0在工作模式3时T1仍可设置为0~2。 置TMOD中的M1M0为11
7、当T0用作模式3时,由于TR1已被T0占用,如何控制T1的开启和关闭?
答:用T1控制位C/T切换定时器或计数器工作方式就可以使T1运行。定时器T1无工作模式3,将T1设置为工作模式3,就会使T1立即停止计数,关闭。
8、以定时器/计数器1进行外部时间计数,每计数1000个脉冲后,定时器/计数器1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。假定为6WHZ,用模式1编程。 解:T1为定时器时初值: T1为计数器时初值:
所以:
L1:MOV TMOD,#50H ;设置T1为计数方式且工作模式为1 MOV TH1,#0FCH ;置入计数初值 MOV TL1,#18H
SETB TR1 ;启动T1计数器
LOOP1:JBC TF1,L2 ;查询计数溢出?有溢出(计数满1000个)转L2 SJMP LOOP1 ;无溢出转LOOP1,继续查询
L2:CLR TR1 ;关闭T1
MOV TMOD,#10H ;设置T1为定时方式且工作与模式1 MOV TH1,#0ECH ;置入定时10ms初值 MOV TL1,#78H
SETB TR1 ;启动T1定时
LOOP2:JBC TF1,L1 ;查询10ms时间到?时间到,转L1
SJMP LOOP2 ;时间未到,转LOOP2,继续查询 9、一个定时器定时时间有限,如何实现两个定时器的串行定时以满足较长定时时间的要求? 答:当一个定时器溢出时,设置另一个定时器的初值为0开始定时。 10、使用一个定时器,如何通过软硬件结合方法实现较长时间的定时?
答:设定好定时器的定时时间,采用中断方式用软件设置计数次数,进行溢出次数累计,从而得到较长的时间。
11、89C51定时器作定时和计数时其计数脉冲分别由谁提供?
答:作定时器时计数脉冲由89C51片内振荡器输出经12分频后的脉冲提供,作计数时计数脉冲由外部信号通过引脚P3.4和P3.5提供。
12、89C51定时器的门控信号GATE设置为1时定时器如何启动?
答:只有 (或 )引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。 13、已知89C51单片机的fosc=6MHz, 请利用T0和P1.0输出矩形波。矩形波高电平宽50μs,低电平宽300μs。
解:T0采用模式2作为50μs定时时的初值: 所以
作300μs定时时的初值:
所以
MOV TMOD,#02H ;设置定时器T0工作于模式2 L2:CLR P1.0 ;P1.0输出低电平