答:中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因而必须终止原程序的执行,转去完成相应的处理程序,待处理结束之后再返回继续执行被终止原程序的过程。
中断源指向 CPU 提出中断申请的设备,包括中断请求信号的产生及该信号怎样被CPU 有效地识别,要求中断请求信号产生一次,只能被CPU 接收处理一次,即不能一次中断申请被CPU 多次响应。
当 CPU 正在执行中断服务程序时,又有中断优先级更高的中断申请产生,CPU 就会暂停原来的中断处理程序而转去处理优先级更高的中断请求,处理完毕后再返回原低级中断服务程序,这一过程称为中断嵌套.中断优先级指在实际应用系统中往往有多个中断源,且中断申请是随机的,有时还可能会有多个中断源同时提出中断申请,但CPU 一次只能响应一个中断源发出的中断请求,CPU 响应哪个中断请求,就需要用软件或硬件安排一个优先顺序,即中断优先级排队。
6-2 MCS-51 单片机提供了几个中断源有几级中断优先级别各中断标志是如何产生的又如何清除这些中断标志各中断源所对应的中断矢量地址是多少答:(1)MCS-51 单片机提供了5 个中断源: INT0 、INT1 、T0、T1、串行口。
(2)MCS-51 系列单片机有两个中断优先级,每一个中断请求源均可编程为高优先级中断或低优先级中断,从而实现两级中断嵌套。
(3)外部中断可以设置边沿触发或者电平触发,靠软件置位。
边沿触发进入中断程序后硬件自动清中断标志。
电平触发需要软件清除中断标志位,还需在中断响应后把中断请求信号引脚从低电平强制改变为高电平。
(4)定时器T0、T1 计数溢出产生中断,进入中断程序后由硬件自动清除标志位TF0 或TF1。
(5)串行口发送完成或者接收到数据就触发中断,由于是两个中断标志共享一个中断向量,所以需要在中断程序里由软件判断是发送中断还是接受中断,并且只能由软件清除中断标志位。
使用软件清除中断标志位的方法是:CLR TI ;清TI 标志位CLR RI ;清RI 标志位(6)各中断源对应的中断矢量地址分别为:中断源中断矢量外部中断 0 0003H定时器T0 中断000BH外部中断1 0013H定时器T1 中断001BH串行口中断0023H定时器中断T2(仅52 系列有) 002BH6-3 外部中断源有电平触发和边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同怎样设定答:采用中断电平触发方式时,中断请求标志IT0=0,CPU 在每个机器周期的S5P2 期间采样,一旦在( INT0 )引脚上检测到低电平,则有中断申请,使IE0 置位(置1),向CPU 申请中断。
在电平触发方式中,在中断响应后中断标志位IE0 的清0 由硬件自动完成,但由于CPU 对( INT0 )引脚没有控制作用,使中断请求信号的低电平可能继续存在,在以后的机器周期采样时又会把已清0 的IE0 标志位重新置1,所以,在中断响应后必须采用其它方法撤消该引脚上的低电平,来撤除外部中断请求信号,否则有可能再次中断造成出错。
采用边沿触发方式时,IT0=1,CPU 在每个机器的S5P2 期间采样,当检测到前一周期为高电平,后一周期为低电平时,使标志IE0 置1,向CPU 申请中断,此标志位一直保持到CPU 响应中断后,才由硬件自动清除。
在边沿触发方式中,为保证CPU 在两个机器周期内检测到由高到低的负跳变,高电平与低电平的持续时间不得少于一个机器周6-5 MCS-51 中断响应时间是否固定为什么答: MCS-51 中断响应时间不固定。
对一个单一中断系统,MCS-51 单片机对外部中断请求的响应时间在3—8 个机器周期。
外部中断的最短的响应时间为3 个机器周期,其中中断请求标志位查询占1 个机器周期,而这个机器周期恰好又是处于指令的最后一个机器周期,该指令结束后中断即被响应,CPU 接着执行子程序调用指令LCALL 转到相应的中断服务程序入口,需2 个机器周期,所以,外部中断响应最短时间为3 个机器周期。
外部中断响应的最长时间为8 个机器周期:发生在CPU 进行中断标志查询时,刚好是开始执行RETI 或是访问IE 或IP 的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断,最长需2 个机器周期。
接着再执行一条指令,按最长指令(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。
加上硬件子程序调用指令LCALL的执行,需要2 个机器周期。
所以,外部中断响应最长时间为8 个机器周期。
对于多级中断系统,响应时间无法计算。
7-1 定时/计数器有哪些特殊功能寄存器,它们有几种工作方式如何设置答:(1)定时/计数器控制寄存器(TCON)、工作方式寄存器(TMOD)。
(2)定时/计数器T0 和T1 有四种不同的工作方式:方式0、方式1、方式2、方式3。
(3)4 种工作方式由TMOD 中的M1 和M0 两位决定。
当 TMOD 中M1M0=00 时,定时/计数器选定方式0 进行工作。
当 TMOD 中M1M0=01 时,定时/计数器选定方式1 进行工作。
当 TMOD 中M1M0=10 时,定时/计数器选定方式2 进行工作。
当 TMOD 中M1M0=11 时,定时/计数器选定方式3 进行工作。
7-2 如果采用晶振的频率为3 MHz,在定时/计数器工作方式0,1,2 下,其最大的定时时间分别为多少答:晶振的频率f OSC=3MHz时,机器周期为T cy=12×(1/3MHz)=4μs。
(1)方式0 为13 位定时/计数器,计数值N = 213 –x = 8 192 x。
计数初值x是由TH0 和TL0设定的初值。
x = 0 时为最大计数值8 192,即计数范围为1~8 192(213)。
定时时间为T d =(8 192 x) × T cy。
最大定时时间为x=0 时,T d =32768μs=。
(2)方式1 为16 位定时/计数器,计数值N = 216 –x = 65536 x。
计数初值x是由TH0 和TL0设定的初值。
x = 0 时为最大计数值65 536,即计数范围为1~65 536(216)。
定时时间为T d = (65536 x) × T cy。
最大定时时间为x=0 时,T d =262144μs=。
(3)方式2 为8 位自动重装初值定时/计数器,计数值N = 28 –x = 256 x。
计数初值x 是由TH0 和TL0 设定的初值。
x = 0 时为最大计数值256,即计数范围为1~256(28)。
定时时间为T d = (256 x) × T cy。
最大定时时间为x=0 时,T d =1024μs=。
7-5 采用定时/计数器T0 对外部脉冲进行计数,每计数100 个脉冲后,T0 转为定时工作方式。
定时1 ms 后,又转为计数方式,如此循环不止。
假定MCS-51 单片机的晶体振荡器频率为6 MHz,请使用方式1 实现,要求编写出程序。
答:编写程序如下:ORG 0000HSTART: CLR TR0MOV TMOD, #05HMOV TH0, #0FFHMOV TL0, #9CH;计数器初始化S0: JBC TF0, NEXTSJMP S0MOV TMOD, #01HMOV TH0, #0F8HMOV TL0, #30H;定时器初始化SETB TR0S1: JBC TF0, STARTSJMP S1END7-9 利用定时/计数器T0 产生定时时钟,由P1 口控制8 个指示灯。
编一个程序,使8 个指示灯依次一个一个闪动,闪动频率为20 次/秒(8 个灯依次亮一遍为一个周期)。
答:采用晶体振荡器频率为12MHz,每个灯的闪烁周期是50ms,采用工作方式1。
ORG 0000HAJMP STARTORG 000BHAJMP TIME0ORG 0030HSTART: MOV SP, #5FHMOV R7, #0FEHMOV TMOD, #01H ;T0在工作方式1MOV TH0, #3CHMOV TL0, #0B0HSETB EASETB ET0SETB TR0S0: AJMP S0 ;此处放任意程序段TIME0: PUSH ACCPUSH PSWMOV P1, R7MOV A, R7RL AMOV R7, AMOV TH0, #3CHMOV TL0, #0B0HPOP PSWPOP ACCRETIEND7-12 简述特殊功能寄存器SCON,TCON,TMOD 功能。
答:(1)SCON 是MCS-51 的一个可位寻址的特殊功能寄存器,用于串行数据通信的控制、监视串行口的工作状态。
(2)TCON(定时/计数器控制寄存器)是1 个8 位寄存器,它不仅参与定时/计数器控制,还参与中断请求控制。
(3)TMOD(工作方式寄存器)用来设定定时/计数器T0 和T1 的工作方式和选定定时还是计数以及门控INT0 非信号。
7-19 若晶体振荡器为 MHz,串行口工作于方式1,波特率为4 800 bps,写出用T1作为波特率发生器的工作方式控制字和计数初值。
答:(1)T1 的工作方式控制字按照定时/计数器的工作方式寄存器(TMOD)定义,TMOD 的D7~D4 位是定时/计数器T1 的工作方式控制位。
T1 作为波特率发生器时,其工作方式应为定时器方式2(8 位自动再装入方式)模式。
即,TMOD 的D7~D4 位设置应为:D7 位(GATE):应为0。
即T1 定时/计数时间到(TR1=1)就可重新启动T1 工作,与INT1 无关。
D6 位(C/T):应为0。
将T1 设为定时器功能。
D5~D4 位(M1M0):应为10。
M1M0=10,T1 工作在方式2,即8 位自动再装入方式。
因此,TMOD 的D7~D4 设置应为:0010B。
而 TMOD 的D3~D0 位是定时/计数器T0 的工作方式控制位,与本题无关,设为:0000B。
所以,定时/计数器的工作方式寄存器(TMOD)控制字应为:0010 0000 B,即:20H。
(2)T1 的计数初值依题意,晶体振荡器为 MHz,串行口工作于方式1,波特率为4 800 bps。
查表7-6 知:T1 作为波特率发生器,应采用工作方式2,计数初值为:FAH。
(3)可用如下代码实现上述初始化。
MOV TMOD, #20H ;置定时/计数器工作方式MOV TH1, #0FAH ;装入定时/计数初始预置值MOV TL1, #0FAH ;装入定时/计数初值SETB TR1 ;启动T1 定时/计数MOV SCON, #50H ;设置串行口控制字其中,SCON 是串行口控制寄存器,串行口控制字设为50H 的结果是:串行口工作方式为方式2,9 位通用异步接收器/发送器,固定波特率,允许串行接收。