1、 第 2 章 部分习题参考解答 1、 试述 MCS-51 单片机内部有哪些主要逻辑部件并说出其功能,画出片内结构图。 MCS-51 单片机的内部除包含 CPU 外,还包含程序存储器、数据存储器、定时器 /计数器、并行 I/O 接口、串行 I/O 接口、总线控制逻辑和中断控制逻辑等逻辑部件,其结构框图如图所示: 振 荡 器 和时 序 逻 辑程 序 存 储 器 数 据 存 储 器C P U并 行 I / O 口 串 行 I / O 口定 时 计 数 器中 断 控 制逻 辑6 4 K 空 间 总线 控 制外 接 时钟 源内 部总 线电 源其中, CPU 是单片机的最核心部分 ,它是整个单片机的控制和
2、指挥中心,完成所有的计算和控制任务。振荡器和时序逻辑,产生 CPU 工作所需要的内部时钟。中断控制逻辑用来应付一些 临时到达的突发事件,并能保证当有多个突发事件发生时, CPU 能够有序地为这些事件进行服务,所有突发事件服务完成后 CPU还能继续以前的工作。并行 I/O 接口和串行 I/O 接口作为 CPU 与外部设备通信的信息传输通道。程序存储器用于存放单片机的程序。数据存储器用于存放内部待处理的数据和处理后的结果。定时器 /计数器主要是完成对外部输入脉冲的计数或者根据内部的时钟及定时设置,周期性的产生定时信号。 64K 总线控制逻辑,用于产生外部 64KB 存储空间的有关读写控制信号。 2
3、、 MCS-51 单片机有 4 个 8 位并行口 (P0、 P1、 P2、 P3),哪个口可作为地址 /数据利用总线? P0 口可作为地址 /数据复用总线口。 3、 P0 口作为通用 I/O 口使用时,在输出状态下应注意什么?在输入状态下应注意什么? P0 口作为通用 I/O 口使用时,输出级是漏极开路的,因此在输出状态下外部应加上拉电阻。在输入状态下应先向端口锁存器写入 1,这样引脚便处于悬浮状态,可作高阻抗输入。 5、 MCS-51 单片机的最大寻址空间是多少?为什么? MCS-51 单片机, 程序存储器空间采用片内、片外统一编址的方式,共有 64KB,地址范围为 000OHFFFFH。片
4、内有 256 字节数据存储器地址空间,地址范围为 00H FFH。片外数据存储器空间有 64KB,其地址范围也是 000OH FFFFH。 7、 MCS-51 单片机片内低 128 字节的 RAM 中,分了几个基本区域?说出这些区域的名称。 MCS-51 系列单片机片内低 128 字节的 RAM包含:工作寄存器区( 00H: 1FH)、可位寻址区( 20H: 2FH)、通用 RAM 区( 30H: 7FH) 3 个组成部分。 8、 片内和片外数据存储器地址重叠的区域是哪些地址? 片内与片外数据存储器空间的低地址部分 (000OH OOFFH)是重叠 的 ,MCS 51 单片机有 MOV 和MO
5、VX 两种指令 ,用以区分片内、片外 RAM 空间,当使用 MOV 指令时,访问的是片内区域,当使用 MOVX指令时,访问的是片外区域。 9、 访问程序存储器的片外空间,是通过什么方式实现的? 程序存储器空间的片内、片外选择通过单片机的引脚 EA 来实现,当 EA 接低电平时,程序存储器空间的 64KB 全部由片外实现,当 EA 接高电平时,程序存储器空间的前 4KB( MCS-52 是 8KB)由片内实现,对于片内没有的高地址空间部分单元,不管 EA 引脚接的是高电平还是低电平都由片外实现。 片外程序存储器空间和片外数据存储器空间,采用的外部地址总线和数据总线是相同的,不同的是控制总线,程序
6、存储空间的读信号 PSEN ,而数据存储空间的读信号 为。 10、说出程序状态字寄存器 (PSW)各位的含义。 PSW 的位结构如下表所示。 D7 D6 D5 D4 D3 D2 D1 D0 Cy AC F0 RS1 RS0 OV - P 其中,各位的含义如下: Cy:高位进位标志位 ,当 ALU 的算术运算过程中有进位或借位时, Cy=1;否则, Cy=0。同时,该位还可以用作位累加器,这时一般只用 “C”表示。 AC:辅助进位标志 ,当 ALU 的算术运算过程中低 4 位向高 4 位有进位或借位时, AC=1;否则,AC=0。该位常用于 BCD 码的调整。 F0:用户标志位 。 RS1、 R
7、S0:选择工作寄存器组位 ,用于选择内部数据存储器区内 4 组工作寄存器中的某一组。具体选择情况见寄存器介绍部分。 OV:溢出标志位, 当 ALU 的算术运算过程中有溢出时, OV =1;否 则, OV =0。 P:奇偶校验标志位 ,根据累加器 ACC 中 1 的个数由硬件置位或清除,当累加器 ACC 中有奇数个 1 时 P=1;否则, P=0。 PSW.1:保留位,无定义。 11、在 MCS-51 单片机的工作时序中,一个机器周期包含几个状态周期、几个振荡周期? 一个机器周期包含 6 个状态周期、 12 个振荡周期。 12、单片机复位后,程序计数器 PC 指向哪个地址? PC 0000H 第
8、 3 章 部分习题参考解答 1、写出 MCS-51单片机汇编指令的指令格式,并简单举例。 MCS-51 单片机的汇编指令格式如下: 标 号: 操作码 目的操作数 ,源操作数 ;注释 操作码表示该指令所实现的操作功能,一般由 25 个英文字母表示。例如 ORL, ADD, LCALL 等。 操作数表示参与操作的数据来源和目的单元。操作数可以是一个立即数,也可以是一个内存单元或者是一个寄存器单元。 操作码和第一个操作数之间一般用一个或几个空格隔开,而操作数与操作数之间用逗号隔开。 操作数可以有 1 个, 2 个,个或没有。 如果需要对指令进行注释说明的话,在最后一个操作数后加一个分号,分号后面是注
9、释。 如: MOV A , 60H ; (60H)A 标号由 1 8 个字母或数字构成,以字母开头以 “: ”结尾,标号可有可无,它仅仅代表了该指令所在的地址,便于源程序编写过程中使用该地址。 2、指出下面程序每个语句的寻址方式。 目的操作数 原操作数 MOV A, P1 寄存器寻址 直接寻址 MOV A, #40H 寄存器寻址 立即寻址 MOV 80H, A 直接寻址 寄存器寻址 MOV A, R5 寄存器寻址 寄存器寻址 MOV R0,A 寄存器间接寻址 寄存器寻址 MOVX A,DPTR 寄存器寻址 寄存器间接寻址 MOVC A,A+DPTR 寄存器寻址 基址变址寻址 MOV 74H,
10、#80H 直接寻址 立即寻址 3、写出下面程序被执行后,各数据存储器地址中的内容。 MOV 40H,#33H MOV 41H,#44H MOV A,40H MOV 50H,A MOV A,41H MOV 51H,A ( 40H) 33H,( 41H) 44H,( 50H) 33H,( 51H) 44H 4、设置堆栈指针 SP中内容为 60H,编写程序,将上题中数据存储器 50H、 51H的内容压栈后,分别将栈内数据弹出到 DPTR寄存器中。 MOV SP, #60H PUSH 50H PUSH 51H POP DPL POP DPH 5、访问片内、外数据存储器,都用什么指令? 访问片内数据存储
11、器的数据传送指令用 MOV,访问片外数据存储器的数据传送指令用 MOVX。 6、下面的指令语句对吗? 为什么? MOV R0,#0400H ;不对, R0是 8位寄存器源操作数超过了 8位 MOV 100H,A ;不对,片内数据存储器用 8位地址访问,目的操作数的地址 超过了 8位。 MOV R2,A ;不对,能够用于间接寻址的只能是 R0或 R1 MOVX R1,A ;对, R1做为间址寄存器来提供寻址存储器的低 8位,高 8位由 P2提供 7、查表指令 MOVC A,A+DPTR 所查的表数据是在程序存储区还是数据存储区? 程序存储区。 9、使用位操作指令完成下列操作。 将 P1.1 置
12、“1”。 SETB P1.1 将 ACC.7 置 “1”。 SETB ACC.7 10、编写程序,将 40H为首的 8个单元内容,依次反序送入到 60H为首的 8个单元 中去。 MOV R0,#47H ;40H开始的 8字节数据中最后一个单元的地址 MOV R1,#60H MOV R2,#8 LOOP:MOV A,R0 MOV R1,A DEC R0 INC R1 DJNZ R2,LOOP SJMP $ 11、两个四位压缩类型 BCD码数,被加数放在 30H和 31H内存单元中,加数放在 32H和 33H内存单元中,所求的和放在 34H和 35H中。位数排列按高位在低地址,低位在高地址的顺序,
13、编写此加法程序。 MOV PSW,#00H ;取 0组工作寄存器 MOV R0,#31H MOV R1,#33H SETB RS0 ;取 1组工作寄存器 MOV R0,#35H CLR RS0 MOV R2,#02H CLR C ;清除进位标志,准备进行带进位加 LOOP: MOV A,R0 ADDC A,R1 DA A SETB RS0 ;取 1组工作寄存器 MOV R0,A DEC R0 CLR RS0 ;恢复 0组工作寄存器 DEC R0 DEC R1 DJNZ R2,LOOP SJMP $ 13、写出 ACALL和 LCALL两个调用指令的调用范围,试写出这两条指令执行时, CPU的操
14、作过程。 ACALL的调用范围是包括调用指令下一条指令的第一个字节所在的 2KB范围的程序存储器空间。 ACALL调用指令的执行过程是: PC加 2(本指令代码为两个字节)获得下一条指令的地址,并把该断点地址(当前的 PC值)入栈,然后将断点地址的高五位与 11位目标地址(指令代码第一字节的高 3位,以及第二字节的八位)连接构成 16位的子程序入口地址,使程序转向子程序。调用子程序的入口地址和 ACALL指令的下一条指令的地址,其高五位必须相同。因此子程序的入口地址和 ACALL指令下一条指令的第一个字节必须在同一个 2KB范围的程序存储器空间内。 LCALL调用指令的目标地址以 16位给出,
15、允许子程序放在 64KB空间的任何地方。 指令的执行过程是把 PC加上本指令代码数(三个字节)获得下一条指令的地址,并把该断点地址入栈(断点地址保护),接着将被调子程序的入口地址( 16位目标地址)装入 PC,然后从该入口地址开始执行子程序。 14、分析下列程序,说出此程序完成什么样的功能。 MOV P1,#0FFH LOOP: MOV R7,#03H ;该指令 1个机器周期 1 LOOP1: MOV R6,#0FFH ;该指令 1个机器周期 2 DJNZ R6,$ ;该指令 2个机器周期 3 DJNZ R7,LOOP1 ;该指令 2个机器周期 4 CPL P1.0 ;该指令 1个机器周期 5
16、 JMP LOOP ;该指令 2个机器周期 6 END 该程序的功能是从 P1.0引脚输出连续方波,方波的周期为( 11( 12 23255 24) 3 15 26) 2 个机器周期 15、试编写程序 ,完成对十个数从大到小的排序(建议用气泡排序法)。十个源字节数据放在 30H为首的内存区域,排序后的目标数据放在 50H为首的区域。 如果不破坏 30H 开始存放的源字节数据,可以把从 30H 开始的数据先传送到 50H 开始的数据区,然后对 50H 开始的数据进行排序。 如果不需考虑 30H 开始存放的数据使用后的顺序,则可先对 30H 开始存放的数据进行排序,然后再传送到 50H 开始的数据
17、区中。 现根据第 1 种情况进行编程。 MOV R0,#30H MOV R1,#50H MOV R2,#10 LOP1: MOV A,R0 MOV R1,A INC R0 INC R1 DJNZ R2,LOP1 MOV R2,#9 LOP4: MOV R0,#50H MOV R1,#51H MOV A,R2 MOV R3,A LOP3: MOV A,R0 CLR C SUBB A,R1 LOP2: JC NEXT MOV A,R0 XCH A,R1 MOV R0,A NEXT: INC R0 INC R1 DJNZ R3,LOP3 DJNZ R2,LOP4 SJMP $ 第 4 章 部分习题参
18、考解答 1、 MCS-51 单片机中,有几个 16 位定时 /计数器?其实际用途? MCS-51 单片机中,有 2 个 16 位定时 /计数器。 可以用定时器在规定的时间对温度、湿度、流量、转速等参数进行检测采样,用于环境检测、工业控制;或者利用定时器按一定的周期产生方波信号进行输出;还可以通过计数器对脉冲进行计数,用于信息的采集处理领域等。 2、 通过对定时 /计数器中的哪个特殊寄存器进行工作模式设置?试叙述几种工作模式功能。 通过特殊寄存器 TMOD 对定时 /计数器进行工作模式设置。 工作方式 0,为 13 位的定 时 /计数器。 工作方式 1,为 16 位定时器 /计数器。 工作方式
19、2,为 8 位自动重装定时器 /计数器。 工作方式 3,只有定时器 /计数器 T0 具有此工作方式,为两个 8 位定时器 /计数器。 3、门控制信号 GATE 为 1 时,外部中断引脚 INTx 在什么状态下启动计数? GATE 为 1 时,在外部中断引脚 INTx 1、 TRx 1 时启动定时器 /计数器。 5、定时 /计数器作为计数器时,对外界技术频率有什么要求(假定时钟频率为 12MHz)? 当定时 /计数器设置为计数工作方式时,计数器对来自输入引脚 T0 和 T1 的外部脉冲信号计数,在每个机器 周期的 S5P2 期间采样外部脉冲,若前一个机器周期采样到高电平,后一个机器周期采样到低电
20、平,则将触发计数器加 1,更新的计数值将在下一个机器周期的 S3P1 期间装入计数器。因此,单片机检测一个从高电平到低电平的下降沿需要 2 个机器周期,要使下降沿能被检测到,需要保证被采样高、低电平至少维持一个机器周期的时间,即外部输入信号的频率不超过晶振频率的 1/24。当晶振频率为 12MHz 时,最高计数频率不超过 0.5MHz,即计数脉冲的周期要大于 2 微秒。 6、定时 /计数器在何种设置下可提供 3 个 8 位定时器?当 T0 运行在模式 3 下, TH0 作为定时器使用时,其启动和关闭受谁的控制? 定时器 /计数器 T0 工作在方式 3 下,定时器 /计数器 T1工作在方式 2
21、下,可提供 3 个 8 位定时器。当T0 运行在方式 3 下, TH0 作为定时器使用时,其启动和关闭受 TR1 的控制。 7、当定时 /计数器 T0 被设置为模式 3 时,怎样使 T1启动运行?又怎样使其停止运行? 当定时 /计数器 T0 被设置为模式 3 时, 定时 /计数器 T1 只要设置好工作方式、时间常数初值 ,然后用控制位 C/T 切换其为定时或计数功能就可以使 T1运行 ,若想停止它的运行 ,只要把它的工作方式设置为方式 3即可 ,因为定时器 T1 没有方式 3,将它设置为方式 3 就使它停止工作。 8、时钟频率为 12MHz。要求定时值分别为: 0.1ms、 1ms、 10ms
22、;定时 /计数器 T0 分别工作在模式 0、模式 1、模式 2,其定时初值各为多少? 方式 0 时, 0.1ms 定时的计数值为 100,时间常数初值为: TH0 0FCH, TL0 1CH 方式 0 时, 1ms 定时的计数值为 1000,时间常数初值为: TH0 0E0H, TL0 18H 方式 0 时,最长的定时时间只能到 8.192ms 方式 1 时, 0.1ms 定时的计数值为 100,时间常数初值为: TH0 0FFH, TL0 9CH 方式 1 时, 1ms 定时的计数值为 1000,时间常数初值为: TH0 0FCH, TL0 18H 方式 1 时, 10ms 定时的计数值为
23、10000,时间常数初值为: TH0 0D8H, TL0 0F0H 方式 2 时, 0.1ms 定时的计数值为 100,时间常数初值为: TH0 9CH, TL0 9CH 方式 2 时,最长的定时时间只能到 0.256ms 9、时钟频率为 12MHz。编写程序完成从 P1.0 输出占空比为 1: 4,频率为 1000Hz 的脉冲波型。 1000Hz 周期为 1ms,则高电平持续时间为 1ms/4 0.25ms 250us。用 T0 实现 250um 定时,采用工作方式 2,定时时间常数为 256 250 6。 从 P1.0 输出占空比为 1: 4,频率为 1000Hz 的脉冲波型,既 P1.0
24、 持续 250us 的高电平, 250us3 的低电平。 采用查询方式实现: MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0 LOP2: SETB P1.0 JNB TF0,$ CLR TF0 CLR P1.0 MOV R0,#03H LOP1: JNB TF0,$ CLR TF0 DJNZ R0,LOP1 JMP LOP2 采用中断方式实现: ORG 0000H LJMP MAIN ORG 000BH LJMP T0S ORG 0030H MAIN: MOV SP,#60H MOV TMOD,#02H MOV IE,#82H MOV R0,#
25、03H MOV TH0,#06H MOV TL0,#06H SETB TR0 SETB P1.0 SJMP $ T0S: JNB P1.0,T01 CLR P1.0 SJMP EXIT T01: DJNZ R0,EXIT SETB P1.0 MOV R0,#03H EXIT: RETI 10、编写程序。时钟频率为 12MHz,使用 T1,由 P1.0、 P1.1 分别输出周期为 500s和 2ms 的方波。 用 T1 实现 250um 定时,采用工作方式 2,定时时间常数为 256 250 6。 P1.0 每 250us 改变状态一次, P1.1 每 250us4 改变状态一次。 ORG 00
26、00H LJMP MAIN ORG 001BH LJMP T1S ORG 0030H MAIN: MOV SP,#60H MOV TMOD,#20H MOV IE,#88H MOV R0,#04H MOV TH1,#06H MOV TL1,#06H SETB TR1 SETB P1.0 SETB P1.1 SJMP $ T1S: CPL P1.0 DJNZ R0,EXIT CPL P1.1 MOV R0,#04H EXIT: RETI 15、半双工通信和全双工通信的区别? 半双工是指数据传输可以沿两个方向,但需要分时进行。全双工是指数据可以同时进行双向传输。 16、使用哪个特殊功能寄存器来确定
27、串行口的工作方式? MCS-51 单片 机串行口有几种工作方式?各工作方式的波特率如何确定? SCON 用来设定串行口的工作方式、接收 /发送控制以及设置状态标志; MCS-51 单片机串行口有 4 种工作方式。 方式 0 的波特率由振荡器的频率所确定,波特率为 fosc/12; 方式 2 时的波特率由振荡器的频率( fosc)和 SMOD 位所确定,即: 2232fSM ODo s c 波特率 方式 1 和 3 时的波特率由定时器 T1 和 T2的溢出率和 SMOD 所确定。 3221 S M O DT 溢出率波特率 17、晶振为 11.059MHz,工作于方式 1,波特 率为 1200b/
28、s,用定时器 /计数器 T1 作为波特率发生器,写出其方式字和计数初值。 T1 工作在方式 2 下,其方式字为 20H 由串行口方式 1 的 3221 S M O DT 溢出率波特率 ,取 SMOD 0,可计算出 T1 的溢出率 38400。则 T1 的计数值为 11.0592/( 3840012) 24, T1 的初值为 232 或 0E8H。 18、串行口按工作方式 1 进行串行数据通信。晶振为 11.059MHz,波特率为 4800b/s,请编写具有收发功能的串口通信程序(两种接收方式): a、以查询方式接收数据。 b、以中断方 式接收数据。 将接收数据放到 30H 为首的片内存储区中。 设 T1 工作在方式 2 下,其方式字为 20H 由串行口方式 1 的 3221 S M O DT 溢出率波特率 ,取 SMOD 0,可计算出 T1 的溢出率 153600。则 T1 的计数值为 11.0592/( 15360012) 6, T1 的初值为 250 或 0FAH。 二者之间的通信约定如下: