器
的优先级状态。
5.14 某系统有 3 个外部中断源 1、2、3,当某一中断源变为低电平时,便要求 CPU 进行处 理,它们的优先处理次序由高到低依次为 3、2、1,中断处理程序的入口地址分别为 1000H, 1100H,1200H。试编写主程序及中断服务程序(转至相应的中断处理程序的入口即可)。 ORG 0000H
AJMP MAIN ORG 0003H LJMP PINT0 ORG 0100H MAIN: SETB IT0 SETB EX0 SETB EA HERE: SJMP HERE PINT0: PUSH PSW PUSH A
JNB P1.3,IR3 JNB P1.2,IR2 JNB P1.1,IR1 PINTIR: POP A POP PSW RETI
IR3: LJMP IR3INT IR2: LJMP IR2INT IR1: LJMP IR1INT ORG 1000H IR3INT: LJMP PINTIR ORG 1100H IR2INT: LJMP PINTIR
ORG 1200H IR1INT: LJMP PINTIR END
第六章 MCS-51 的定时器/计数器
6.1 如果采用的晶振的频率为 3MHZ,定时器/计数器工作在方式 0、1、2下,其最大的定时
时间各为多少? 答:方式 0 213 *4us=32.768 方式 1 216 *4us=262.144 方式 2 28 *4us=1.024
6.2 定时器/计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关? 答:定时器/计数器被选定为定时器工作模式时,计数输入信号是内部时钟脉冲,每个机器
周期产生 1个脉冲使计数器增 1,因此,定时器/计数器的输入脉冲的周期与机器周期一样, 为时钟振荡频率的 1/2。
6.3 定时器/计数器作计数器使用时,对外界计数频率有何限制?
答:定时器/计数器用作计数器时,计数脉冲来自相应的外部输入引脚 T0 或 T1。对外界计 数频率要求为其最高频率为系统振荡频率的 1/24。
6.4 采用定时器/计数器 T0 对外部脉冲进行计数,每计数 100 个脉冲后,T0转为定时工作方
式。定时 1ms 后,又转为计数方式,如此循环不止。假定 MCS---51 单片机的晶体震荡器的
频率为 6MHZ,请使用方式 1 实现,要求编写出程序。 ORG 0000H
AJMP MAIN ORG 000BH LJMP PT0J ORG 0100H
MAIN: MOV TMOD,#05H;00000001 MOV TH0,#0FFH;X=65436 MOV TL0,#9CH CLR F0 SETB TR0 SETB ET0 SETB EA HERE: AJMP HERE PT0J: JB F0,PT0D
MOV TMOD,#01H;00000001 MOV TH0,#0FEH;X=65036 MOV TL0,#0CH
SETB F0 RETI PT0D: CLR F0
MOV TMOD,#05H MOV TH0,#0FFH MOV TL0,#9CH RETI END
6.5 定时器/计数器的工作方式 2 有什么特点?适用于哪些应用场合?
答:工作方式 2 为自动恢复初值的(初值自动装入)8 位定时器/计数器,TLX 作为常数缓
冲器,当 TLX 计数溢出时,在置 1 溢出标志 TFX 的同时,还自动的将 THX 中的初值送至
TLX,使 TLX从初值开始重新计数(X=0,1)。
6.6 编写程序,要求使用 T0,采用方式2 定时,在 P1。0 输出周期为 400 微秒,占空比为 1:
10 的矩形脉冲。 ORG 0000H
AJMP MAIN ORG 000BH AJMP PT0 ORG 0100H MAIN: MOV R2,#00H MOV TMOD,#02H
MOV TH0,#0ECH;X=236 MOV TL0,#0ECH SETB P1.0 SETB TR0 SETB ET0 SETB EA HERE: SJMP HERE
PT0: CJNE R2,#09H,PT01 SETB P1.0
MOV R2,#00H RETI
PT01: CLR P1.0 INC R2 RETI END
6.7 一个定时器的定时时间有限,如何实现两个定时器的串行定时,来实现较长时间的定 时?
答:第一个定时溢出启动第二个定时计数,实行串行定时
6.8 当定时器 T0 用于方式 3 时,应该如何控制定时器 T1 的启动和关闭?
答:控制信号 C/T和 M1 M0。 6.9 定时器/计数器测量某正脉冲的宽度,采用何种方式可得到最大量程?若时钟频率为
6MHZ,求允许测量的最大脉冲宽度是多少?
答:上升沿从 0 开始计数,计满回到下降沿。最大脉冲宽度 Tw=131.072us
6.10 编写一段程序,功能要求为:当 P1.0 引脚的电平正跳变时,对 P1.1 的输入脉冲进行计
数;当 P1.2 引脚的电平负跳变时,停止计数,并将计数值写入 R0、R1(高位存 R1,低位
存 R0)。
ORG 0000H LJMP MAIN MAIN: ORG 0100H MOV R0,#00H MOV R1,#00H MOV TL0,#00H MOV TH0,#00H LOOP1: JB P1.0,LOOP1 LOOP2: JNB P1.0,LOOP2 SETB TR0
LOOP3: JNB P1.2,LOOP3 LOOP4: JB P1.2,LOOP4 CLR TR0 MOV R1,TH0 MOV R0,TL0 END
6.11 THX与TLX(X=0,1)是普通寄存器还是计数器?其内容可以随时用指令更改吗?更 改后的新值是立即刷新还是等当前计数器计满之后才能更新?
答:THX与 TLX(X=0,1)是计数器,能用指令更改;能立即刷新。 6.12 判断下列说法是否正确?
(1)特殊功能寄存器 SCON,与定时器/计数器的控制无关。 (√) (2)特殊功能寄存器 TCON,与定时器/计数器的控制无关 (×) (3)特殊功能寄存器 IE,与定时器/计数器的控制无关 (×) (4)特殊功能寄存器 TMOD,与定时器/计数器的控制无关 (×) 第七章 MCS-51 的串行口
7.3 帧格式为 1 个起始位,8 个数据位和 1 个停止位的异步串行通信方式是方式(1)。 7.4 串行口有几种工作方式?有几种帧格式?各种工作方式的波特率如何确定? 答:串行口有四种工作方式:方式 0、方式 1、方式 2、方式3 有三种帧格式: 方式 0 帧格式
D1 D2 D3 D4 D5 D6 D7 D0
方式 0 波特率=Fosc/12 方式 1 帧格式
方式 1 波特率=2 定时器T1 的溢出率/32 SMOD
起始位 D0 停止 D7 D6 D5 D4 D3 D2 D1 方式 2 和方式 3 帧格式
D1 D2 D3 D4 D5 D6 D7 D0 停止 起始位 D8
方式 2 的波特率=2 *Fosc/64 MOD
方式 3 的波特率=2 *定时器T1 的溢出率/32 MOD
7.5 假定串行口发送的字符格式为 1个起始位,8 个数据位,1 个奇校验位,1 个停止位,请
画出传送字符“A”的帧格式? 0 0 0 0 0 1 0 1 0 1 1 7.6 判断下列说法是否正确
(A)串行口通行的第 9 数据位的功能可由用户定义。(T)
(B)发送数据的第 9 数据位的内容在 SCON 寄存器的 TB8 位中预先准备好的。(T) (C)串行通讯帧发送时,指令把TB8位的状态送入发送SBUF中。(F)
(D)串行通讯接收到的第 9 位数据送 SCON 寄存器的 RB8中保存。(T) (E)串行口方式 1 的波特率是口变的,通过定时器/计数器T1 的溢出率设定。(T) 7.7 通过串行口发送或接收数据时,在程序中应使用: (C)
(A)MOVC 指令 (B)MOVX 指令(C)MOV指令 (D)XCHD 指令 7.8 为什么定时器/计数器T1用作串行口波特率发生器时,常采用方式2?若已知时钟频率,
通讯波特率,如何计算器初值?
答:定时器T1 工作方式 2 是一种自动重装方式,无需在中断服务程序中送数,没有由于中
断引起的误差。定时器工作在方式 2是一种既省事又精确的产生串行口波特率的方法。设定
时器T1 方式2 的初值为X,则有:
定时器T1 的溢出率=计数速率/(256-X)=Fosc/(256-X)*12 则方式 2 的波特率=2 *F /(256-X)*12*32 MOD osc
故计数器初值为X=2 *F /12*32*波特率 MOD osc
7.9 串行口工作方式 1 的波特率是:C (A)固定的,为Fosc/32。 (B)固定的,为Fosc/16。
(C)可变得,通过定时器/计数器 T1 的溢出率设定。 (D)固定的,为Fosc/64。
7.10 在串行通讯中,收发双方对波特率的设定应该是相同的。
7.11 若晶体振荡器为 11.0592MHZ,串行口工作于方式 1,波特率为 4800b/s,写出用 T1作为
波特率发生器的方式控制字和计数初值。
答:方式字 为 01000000。Fosc=11.0592MHz SMOD=1 SCON=40H X=65536-11.0592*2/(384*4800) =65524=0FFF4H ORG 0000H
MOV SCON,#40H MOV PCON,#80H MOV TMOD,#10H MOV TL1,#0F4H MOV TH1,#0FFH END
7.14 使用8031 的串行口按工作方式 3进行串行口数据通讯,假定波特率为 1200b/s,第9数
据位作奇偶校验位,以中断方式传送数据 ,请编写通讯程序。 方法一:中断方式 发送程序
ORG 0000H