1、第五章 中断系统及定时/计数器 参考答案1、 80C51有几个中断源?各中断标志是如何产生的?又是如何复位的?CPU响应各中断时,其中断地址入口是多少?答:80C51有5个中断源,具体的名称、产生方式、复位方式和中断入口地址如下:(1) INT0(P302), 外部中断0请求信号输入引脚。当CPU检测到P3.2引脚出现有效的中断信号时,中断标志IE0(TCON.1)置一,向CPU申请中断,中断入口地址为0003H。可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当IT0=0时,中断标志在CPU响应中断时不能自动清零,只能撤除INT0引脚的低电平,IE0才清零;当ITO=1时,由硬件
2、自动清除IE0标志。(2) INT1(P3.3), 外部中断1请求信号输入引脚。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置一,向CPU申请中断,入口地址为000BH。可由IT1(TCON.2)选择其为低电平有效还是下降沿有效,中断标志复位清零与INTO类同。(3) TF0(TCON.5), 片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断,入口地址为0013H。CPU响应中断时,TF0自动清零。(4) TF1(TCON.7), 片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1
3、,并向CPU申请中断,入口地址为001BH。CPU响应中断时,TF1自动清零。(5) RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI, 向CPU申请中断,入口地址为0023H。RI和TI必须由软件清除。2、 某系统有三个外部中断源1、2、3,当某一中断源变低电平时便要求CPU处理,它们的优先处理次序由高到低为3、2、1,处理程序的入口地址分别为2000H、2100H、2200H,试编写主程序及中断服务程序(转至相应的入口即可)。答: ORG 0000H LJMP BOOT ORG 0003H LJMP I
4、NT3 ORG 000BH LJMP INT2 ORG 0013H LJMP INT1 ORG 001BH RETI BOOT:ACALL INT0_0 ;中断启动程序 ACALL T0_0 ACALL INT1_0 SETB EA SJMP $ INT0_0:CLR IT0 ;设置为低电平触发方式 SETB EX0 RET T0_0: MOV TMOD,#06H ;设置为工作方式2,模式为外部计数,GATE=0 MOV TH0,#0FFH MOV TL0,#0FFH SETB TR0 SETB ET0 RET INT1_0:CLR IT1 SETB EX1 RET ORG 2000H INT
5、1:NOP RETI ORG 2100H INT2:NOP RETI ORG 2200H INT3:NOP RETI 3、 外部中断源有电平触发和边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同?怎样设定?答:以外部中断INT0为例,设IT0=0时,INT0为电平触发方式,设IT0=1时,INT0为边沿触发方式。 两者产生中断的不同点: 在电平触发方式下,CPU响应中断时,不能自动清除IE0标志。也就是说,IE0状态完全由INT0状态决定。所以,在中断返回前必须撤除INT0引脚的低电平。 在边沿触发方式下,CPU响应中断时,能由硬件自动清除IE0标志。4、 定时/计数器工作于定时和
6、计数方式时有何异同点?答:定时/计数器工作在定时模式时,加1计数器是对内部机器周期计数,计数值乘以机器周期就是定时时间。工作在计数器模式时,外部事件计数脉冲由T0(P3.4)或T1(P3.5)引脚输入到计数器。5、 定时/计数器的4种工作方式各有何特点?答:定时/计数器的四种工作方式的特点: 方式0:13位定时/计数器。因为只有13位有效,所以计数范围为18192 方式1:16位定时/计数器。计数范围为165535 方式2:8位自动重装定时/计数器。TH0为8位初值寄存器,当TL0计满溢出时,由硬件使TF0置1,向CPU发出中断请求,并将TH0中的计数初值自动送入TL0。TL0从初值重新进行加
7、1计数。周而复始,直至TR0=0才会停止。这样就省去了用户软件中重装常数的程序,特别适合于用作较精确的脉冲信号发生器。 方式3:T0分成两个独立的8位定时/计数器;T2在此方式停止计数。6、 要求定时/计数器的运行控制完全由TR1、TR0确定和完全由、高低电平控制时,其初始化编程应作何处理?答:定时/计数器的运行完全由TR0和TR1控制的初始化程序如下: MOV TOMD,#044H ;GATE=0,模式为定时,工作方式2或者 MOV TOMD,#O66H ;GATE=0,模式为计数,工作方式2等等。 定时/计数器的运行完全由INT0和INT1控制的初始化程序如下: MOV TOMD,#0AA
8、H ;GATE=1,模式为定时,工作方式2 SETB TR0 SETB TR1 ;消除TR0、TR1的控制,定时/计数器的运行完全由INT0和INT1控制或者 MOV TOMD,#0EEH ;GATE=1,模式为计数,工作方式2 SETB TR0 SETB TR1 等等7、 当定时/计数器T0用作方式3时,定时/计数器T1可以工作在何种方式下?如何控制T1的开启和关闭?答:当定时/计数器T0用作方式3时,定时/计数器T1可以工作在方式0,方式1或方式3下。若要关闭T1,只需将T2设为方式3即可。8、 利用定时/计数器T0从P1.0输出周期为1s,脉冲为20ms的正脉冲信号,晶振12MHz。试设
9、计程序。答:设计程序如下: ORG 0000H SJMP BOOT ORG 000BH LJMP ET0_0 BOOT:MOV TMOD,#01H ;置T0为定时方式1 MOV TL0,#0DFH MOV TH0,#0B1H ;X=65535-20000 , 延时20ms,N=20000 SETB P1.0 SETB TR0 SETB EA SETB ET0 HERE:NOP SJMP HEREET0_0:CLR P1.0 MOV R2,#104 ;延时80ms DEL:MOV R3,#0 DJNZ R3,$ DJNZ R2,DEL RETI END9、 要求从P1.1强脚输出频率为1000MHz的方波,晶振频率为12MHz。试设计程序。答: ORG 0000H MAIN: MOV TMOD,#01H MOV TL0,#0BH MOV TH0,#0FEH ;频率为1000HZ的方波,设正负脉冲宽度都为T=0.5ms SETB TR0 HERE: JNB TF0,HERE CLR TF0 CPL P1.1 SJMP MAIN (已验证) 4