1.MCS-51单片机有几个中断源?各中断标志是如何产生的?又是如何复位的?CPU 响应各中断时,其中断入口地址是多少?
答:(1)5个。
(2) IE0:外部中断0请求标志。
IE0=1表明外部中断0向CPU 申请中断。
IE1:外部中断1请求标志。
IE1=1表明外部中断1向CPU 申请中断。
TF0:定时器T0溢出标志。
当定时器T0计满溢出时,由硬件使TF0置“1”,并且申请中断。
TF1:定时器T1溢出标志。
当定时器T1计满溢出时,由硬件使TF1置“1”,并且申请中断。
TI :发送中断标志。
RI :接收中断标志。
(3)外部中断0,外部中断1请求标志。
又分为两种方式,当电平触发方式时由软件方法复位;为边沿触发方式时,由内部硬件自动复位。
定时器T0、定时器T1溢出标志。
可由内部硬件自动复位。
TI,RI 标志由软件复位。
(4)外部中断有两个,分别是0INT 和1INT ,其入口地址分别是0003H 和0013H 。
内部中断有3个,分别是T0,T1和串行口,它们的入口地址分别为:000BH ,001BH 和0023H 。
2.如何计算计数初值?如何编程送入计数初值?
答:设初值为X ,最大计数值为M 。
初值X 与机器周期T 机及定时时间T 的关系为 (M −X )T 机=T
MOV TL0,#x1 H
MOV TH0,#x2 H
3.外部中断源有电平触发和边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同?怎样设定?
答:IT1:外部中断触发方式选择位。
当IT1=0,外部中断1为电平触发方式。
在这种方式下,CPU 在每个机器周期的S5P2期间对1INT (P3.3)端子采样,若采到低电平,则认为有
中断申请,随即使IE1=1;若采到高电平,则认为无中断申请或中断申请已撤除,随即清除IE1标志。
在电平触发方式中,CPU 响应中断后不能自动清除IE1标志,也不能由软件清除IE1标志,所以在中断返回前必须撤消1INT 端子上的低电平,否则CPU 将再次响应中
断,从而造成出错。
若IT1=1,外部中断1为边沿触发方式,CPU 在每个机器周期的S5P2期间对1INT (P3.3)
端子采样。
若在连续两个机器周期采样到先高电平后低电平(即下跳沿),则认为有中断申请,随即使IE1=1;此标志一直保持到CPU 响应中断时,才由硬件自动清除。
在边沿触发方式中,为保证CPU 在两个机器周期内检测到先高后低的负跳变,输入高低电平的持续时间最少要保持12个时钟周期。
IT0同上。
4.定时/计数器工作于定时和计数方式时有何异同点?
答:16位的定时器/计数器实质上是一个加1计数器,其控制电路受软件控制、切换。
定时器工作于定时前先装入初值,利用送数指令将初值装入TH0和TL0或TH1和TL1,当发出启动命令后,装初值寄存器开始计数,连续加1,每一个机器周期加1一次,定时是对内部的机器周期脉冲计数。
工作于计数方式时,是对外部的脉冲计数,两个机器周期计一个数。
5.定时/计数器的4种工作方式各有何特点?
答:方式0:16位寄存器(TH1和TL1)只用13位。
其中TL1的高3位未用,其余位占整
个13位的低5位,TH1占高8位。
当TL1的低5位溢出时向TH1进位,而TH1溢出时向中断标志TF1进位(称硬件置位TF1),并申请中断。
中断时需用软件重新赋初值。
方式1:其结构与操作与方式0完全相同,唯一的区别是在方式1中,定时器是以全16位二进制数参与操作。
中断时需用软件重新赋初值。
方式2:具有自动重新加载初值的功能。
在这种工作方式下,把16位计数器分为两部分,即以TL作为计数器,以TH作为预置寄存器,初始化时把计数初值分别装入TL和TH中。
方式3:定时器/计数器T0被拆成两个独立的8位计数器TL0和TH0,其中TL0既可以计数使用,又可以定时使用,定时器/计数器T0的各拉制位和引脚信号全归它使用。
TH0,则只能作为简单的定时器使用。
而且由于定时器/计数器0的控制位已被TL0独占,因此只好借用定时器/计数器T1的控制位TR1和TF1,即以计数溢出去置位TF1,而定时的启动和停止则受TR1的状态控制。
在这种情况下,定时器/计数器T1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。
6.简述定时器/计数器初始化的步骤。
答:(1)选择工作方式,即对TMOD 赋初值。
(2)给定时器赋初值,即把初始常数装入TH0 TL0或TH1 TL1。
(3)根据需要设置中断控制字。
直接对中断允许寄存器IE和优先级寄存器IP设置。
(4)启动定时/计数器。
7.当定时/计数器T0用做方式3时,定时/计数器T1可以工作在何种方式下?如何控制T1的开启和关闭?
答:在这种情况下,定时器/计数器T1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。
因为已没有计数溢出标志位TF1可供使用。
因此只能把计数溢出直接送给串行口。
当作为波特率发生器使用时,只需设置好工作方式,便可自动运行。
如要停止工作,只需送入一个把定时器T1设置为方式3的方式控制字即可。
因为定时器/计数器1不能在方式3下使用,如果硬把它设置为方式3,就停止工作。
8.利用定时/计数器T0从P1.0输出周期为1s,脉宽为20ms的正脉冲信号,晶振频率为6MHz。
试设计程序。
答:分析:因为周期是1S为1000ms。
所以低电平为980ms。
采用20ms的定时中断,然后计数49次及实现980ms。
设R5为计数寄存器。
用T0工作在方式1实现20ms定时则:初值为:TH0=D8H,TL0=F0H
参考程序为:
ORG 0000H
LJMP START
ORG 0030H
START: MOV SP, #6FH
MOV TMOD, #01H
MOV R5, #49
CLR P1.0
MOV TH0, #0D8H
MOV TL0, #0F0H
SETB TR0
LOOP1: SETB P1.0
JNB TF0, $
CLR P1.0
LOOP2: MOV TH0, #0D8H
MOV TL0, #0F0H
JNB TF0, $
DJNZ R5, LOOP2
MOV R5, #49
MOV TH0, #0D8H
MOV TL0, #0F0H
LJMP LOOP1
END
9.若晶振频率为12MHz,如何用T0来测量20s~1s的方波周期?又如何测量频率为0.5MHz 左右的脉冲频率?
答:因为用T0时在方式1下最大可计数65536即计65.536ms,而20S就不能只用T0来实现,可以采用让T0工作在门控方式计数,当计满溢出一次就用一个存储单元作为计数器,使之加1,把计数值乘以65536,再乘以2就是周期值。
10.利用定时/计数器T0产生定时时钟,由P1口控制8个指示灯。
编一个程序,使8个指示灯依次一个一个闪动,闪动频率为20次/s(8个灯依次亮一遍为一个周期)。
答:分析:因为闪动频率20次/S,所以一个灯亮用时为1000/20/8=6.25MS。
用T0方式1定时,设晶振频率为12MHZ。
则初值为E796H。
参考程序如下:
ORG 0H
LJMP START
ORG 000BH
LJMP T01
ORG 030H
START: MOV SP, #6FH
MOV TMOD,#01H
MOV TH0,#0E7H
MOV TL0,#96H
MOV A,#0FEH ;设低电平点亮
MOV P1,A
SETB EA
SETB ET0
SETB TR0
SJMP,$
T01: RL A
MOV P1,A
RETI
END。