第 5 章 思考题及习题 5 参考答案 一、填空 1.如果采用晶振的频率为 3MHz,定时器/计数器 Tx(x=0,1)工作在方式 0、1、2 下,其方 式 0 的最大定时时间为 ,方式 1 的最大定时时间为 ,方式 2 的最大定 时时间为 。 答:32.768ms,262.144ms,1024µs 2.定时器/计数器用作计数器模式时,外部输入的计数脉冲的最高频率为系统时钟频率 的 。 答:1/24 3.定时器/计数器用作定时器模式时,其计数脉冲由 提供,定时时间与 有 关。 答:系统时钟信号 12 分频后,定时器初值 4.定时器/计数器 T1 测量某正单脉冲的宽度,采用 方式可得到最大量程?若时钟 频率为 6MHz,求允许测量的最大脉冲宽度为 。 答:方式 1 定时,131.072ms。 5. 定时器 T2 有 3 种工作方式: 、 和 ,可通过对寄存器 中 的相关位进行软件设置来选择。 答:捕捉,重新装载(增计数或减计数),波特率发生器,T2CON 6. AT89S52单片机的晶振为6MHz,若利用定时器T1的方式1定时2ms,则(TH1)= , (TL1)= 。 答:FCH,18H。 二、单选 1.定时器 T0 工作在方式 3 时,定时器 T1 有 种工作方式。 A.1 种 B.2 种 C.3 种 D.4 种 答:C 2. 定时器 T0、T1 工作于方式 1 时,其计数器为 位。 A.8 位 B.16 位 C.14 位 D.13 位 答:B 3. 定时器 T0、T1 的 GATEx=1 时,其计数器是否计数的条件
A. 仅取决于 TRx 状态 B. 仅取决于 GATE 位状态 C. 是由 TRx 和 INT x 两个条件来共同控制 D. 仅取决于 INT x 的状态 答:C 4. 定时器 T2 工作在自动重装载方式时,其计数器为 位。 A.8 位 B. 13 位 C.14 位 D. 16 位 答:D 5. 要想测量 INT 0 引脚上的正单脉冲的宽度,特殊功能寄存器 TMOD 的内容应为 。 A.87H B. 09H C.80H D. 00H 答:B 三、判断对错 1.下列关于 T0、T1 的哪些说法是正确的。 A.特殊功能寄存器 SCON,与定时器/计数器的控制无关。对 B.特殊功能寄存器 TCON,与定时器/计数器的控制无关。错 C.特殊功能寄存器 IE,与定时器/计数器的控制无关。错 D.特殊功能寄存器 TMOD,与定时器/计数器的控制无关。错 2.定时器 T0、T1 对外部脉冲进行计数时,要求输入的计数脉冲的高电平或低电平的持续 时间不小于 1 个机器周期。特殊功能寄存器 SCON 与定时器/计数器的控制无关。错 3.定时器 T0、T1 对外部引脚上的脉冲进行计数时,要求输入的计数脉冲的高电平和低电平 的持续时间均不小于 2 个机器周期。对 四、简答 1.定时器/计数器 T1、T0 的工作方式 2 有什么特点?适用于哪些应用场合? 答:方式 2 为初值自动装入的 8 位定时器/计数器,克服了在循环定时或循环计数应用时 就存在用指令反复装入计数初值影响定时精度的问题。 2.THx 与 TLx(x =0,1)是普通寄存器还是计数器?其内容可以随时用指令更改吗?更改 后的新值是立即刷新还是等当前计数器计满后才能刷新? 答:THx 与 TLx(x = 0,1)是计数器,其内容可以随时用指令更改,但是更改后的新 值要等当前计数器计满后才能刷新。 3.如果系统的晶振的频率为 24MHz,定时器/计数器工作在方式 0、1、2 下,其最大定时时间 各为多少? 答:晶振的频率为 24MHz, 机器周期为 0.5µs
方式 0 最大定时时间=0.5µs×2 13 =0.5µs×8192=4096µs 方式 1 最大定时时间=0.5µs×2 16 =0.5µs×65536=327686µs 方式 2 最大定时时间=0.5µs×2 8 =0.5µs×256=128µs 4.定时器/计数器 Tx(x=0,1)的方式 2 有什么特点?适用于哪些应用场合? 答:定时器/计数器的工作方式 2 具有自动恢复初值的特点,适用于精确定时,例如波特率的 产生。 5.一个定时器的定时时间有限,如何用两个定时器的串行定时来实现较长时间的定时? 答:方法 1,在第一个定时器的中断程序里关闭本定时器的中断程序,设置和打开另一个定时 器;在另一个定时器的中断程序中关闭本定时中断,设置和打开另一个定时器。这种方式的 定时时间为两个定时器定时时间的和。 方法 2,一个作为定时器,在定时中断后产生一个外部计数脉冲(比如由 P1.0 接 INT 0 产 生),另一个定时器工作在计数方式。这样两个定时器的定时时间为一个定时器的定时时间乘 以另一个定时器的计数值。 6.当定时器 T0 用于方式 3 时,应该如何控制定时器 T1 的启动和关闭? 答:由 TMOD 寄存器的 D6 位“C/T*”来控制定时器 T1 的启动和关闭。 7.THx 与 TLx(x=0,1)是普通寄存器还是计数器?其内容可以随时用指令更改吗?更改后 的新值是立即刷新还是等当前计数器计满后才能刷新? 答:THx 与 TLx (x=0,1)是由特殊功能寄存器构成的计数器,其内容可以随时用指令更改,更 改后的新值是立即刷新。但在读 THx、TLx 的值时,应该先读 THx 值,后读 TLx,再读 THx。 若两次读得 THx 相同,则可确定读得的内容正确。若前后两次读得的 THx 有变化,再重复上 述过程。 五、编程 1.采用定时器/计数器 T0 对外部脉冲进行计数,每计数 100 个脉冲后,T0 转为定时工作方 式。定时 1ms 后,又转为计数工作方式,如此循环不止。假定 AT89S51 单片机的晶体振荡器 的频率为 6MHz,请使用方式 1 实现,要求编写程序。 答:定时器/计数器 T0 在计数和定时工作完成后,均采用中断方式工作。除了第一次计数工 作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志位 识别下一轮定时器/计数器 T0 的工作方式。参考程序如下: ORG 0000H
LJMP MAIN ORG 000BH LJMP IT0P MAIN: MOV TMOD,#06H ;定时器/计数器 T0 为计数方式 2 MOV TL0,#156 ;计数 100 个脉冲的初值赋值 MOV TH0,#156 SETB GATE ;打开计数门 SETB TR0 ;启动 T0,开始计数 SETB ET0 ;允许 T0 中断 SETB EA ;CPU 开中断 CLR F0 ;设置下一轮为定时方式的标志位 WAIT: AJMP WAIT IT0P: CLR EA ;CPU 关中断 JB F0,COUNT ;F0=1,转计数方式设置 MOV TMOD,#00H ;定时器/计数器 T0 为定时方式 0 MOV TH0,#0FEH ;定时 1ms 初值赋值 MOV TL0,#0CH SETB EA RETI COUNT: MOV TMOD,#06H MOV TL0,#156 SETB EA RETI 2.编写程序,要求使用 T0,采用方式 2 定时,在 P1.0 输出周期为 400µs,占空比为 10:1 的矩形脉冲。 答:据题意,从 P1.0 输出的矩形脉冲的高低电平的时间为 10:1,则高低电平的时间分别为 363.63μs 和 36.37μs。如果系统采用 6MHz 晶振的话,Tcy=2μs,因此高低电平输出取整, 则约为 364μs 和 36μs。参考程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: MOV TMOD,#02H ;定时器/计数器 T0 为定时方式 2 MOV TL0,#4AH ;定时 364μs 初值赋值 SETB TR0 ;启动 T0,开始计数 SETB ET0 ;允许 T0 中断 SETB EA ;CPU 开中断 SETB P1.0 WAIT: AJMP WAIT IT0P: CLR EA CLR P1.0 ;关中断 MOV R0,#9 DLY: DJNZ R0,DLY ;延时 36μs MOV TL0,#4AH ;定时 364μs 初值赋值 SETB P1.0 SETB EA RETI
3.编写程序要求:当 P1.0 引脚的电平正跳变时,对 P1.1 的输入脉冲进行计数;当 P1.2 引 脚的电平负跳变时,停止计数,并将计数值写入 R0、R1(高位存 R1,低位存 R0)。 答:将 P1.1 的输入脉冲接入 INT0,即使用 T0 计数器完成对 P1.1 口的脉冲计数。参考程序 如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: JNB P1.0,MAIN MOV TMOD,#05H ;定时器/计数器 T0 为计数方式 1 SETB TR0 ;启动 T0,开始计数 SETB ET0 ;允许 T0 中断 SETB EA ;CPU 开中断 WAIT: JB P1.2,WAIT CLR EA CLR TR0 MOV R1,TH0 MOV R0,TL0 AJMP $ IT0P: INC R2 RETI