1、第二章1.89C51、87C51、80C51 和 80C31 单片机的主要区别在那里?答:相同之处是:制造工艺都为 CHMOS,都有 128 字节片内 RAM、两个定时/计数器、4 个 8 位 I/O 并行口,一个串行口和 5 个中断源。主要区别: 89C51 片内 4K 字节 FLASHROM; 87C51 片内 4K 字节 EPROM; 80C51 片内 4K 字节 掩膜 ROM; 80C31 片内无程序存 储器。2.MCS-51 单片机引脚有多少 I/O 线?它们和单片机对外的地址总线和数据总线有何关系?答:4 个 8 位 I/O 并行口,一个串行口;其中 P0 口为外接程存和数存的地址
2、低 8 位和数据 总线的时分复用接口;其中 P2 口为外接程存和数存的地址高 8 位总线接口;其中 P1 口为真正的用户口线;其中 P3 口有第 2 功能;以上 4 个口线在没有专用功能时,也可以做通用 I/O 口线用。3.简述 8031 片内 RAM 区地址空 间的分配特点。答:MCS-51 单片机片内 RAM 为 256 字节, 地址范围为 00HFFH, 分为两大部分: 低 128 字节(00H7FH )为真正的 RAM 区; 高 128 字节(80HFFH)为特殊功能寄存器区 SFR。 在低 128 字节 RAM 中, 00H1FH 共 32 单元是 4 个通用工作寄存器区。每一个区有
3、 8 个通用寄存器 R0R7。4. MCS-51 单片机由哪几个部分组成。答: 一个 8 位 CPU; 4KB ROM or EPROM(8031 无 ROM); 128 字节 RAM 数据存 储器; 21 个特殊功能寄存器 SFR; 4 个 8 位并行 I/O 口,其中 P0、P2 为地址/数据 线,可寻址 64KB 程序存储器和 64KB 数据存 储器; 一个可编 程全双工串行口; 具有 5 个中断源,两个优先级,嵌套中断 结构; 两个 16 位定 时器/计数器; 一个片内振 荡器及时钟电 路。5. MCS-51 单片机的 信号各自的功能是什么?,EALPSN答:都是控制总线 :访问内部程
4、序存储器的控制信号/编程电压输入端。 时,PV 1EACPU 从片内 读 取指令, CPU 从片外读取指令。0EA :地址锁存允 许/编程信号线。ROGAL/ :外部程序存 储 器读选通信号。PSN :复位输入信号 /掉电保护后备电源引脚。VDE/6.MCS-51 单片机如何实现工作寄存器组的选择?RS1(PSW.4)、RS0(PSW.3) 为工作寄存器组的选择位; 取 值为 00 时选择 第 0 组工作寄存器,片内 RAM 地址是 00H07H,名称为 R0R7; 取值为 01 时选择第 1 组工作寄存器,片内 RAM 地址是 08H0FH,名称为 R0R7; 取值为 10 时选择第 2 组
5、工作寄存器,片内 RAM 地址是 10H17H,名称为 R0R7; 取值为 11 时选择第 3 组工作寄存器,片内 RAM 地址是 18H1FH,名称为 R0R7。7. 什么是时钟周期、机器周期、指令周期?当单片机的时钟频率为 12MHz 时,一个机器周期是多少?ALE 引脚的输出频率是多少?(1) 振荡周期: 也称时钟周期, 是指为单片机提供时钟脉冲信号的振荡源的周期。(2) 状 态周期 : 每个状态 周期为时钟周期的 2 倍, 是振荡周期经二分频后得到的。 (3) 机器周期: 一个机器周期包含 6 个状态周期 S1S6, 也就是 12 个时钟周期。 在一个机器周期内, CPU 可以完成一个
6、独立的操作。(4) 指令周期: 它是指 CPU 完成一条操作所需的全部 时间。 每条指令执行时间都是有一个或几个机器周期组成。MCS - 51 系统中, 有单周期指令、双周期指令和四周期指令。 当单片机的时钟频率为 12MHz 时,一个机器周期是多少 1s(微秒);ALE引脚的输出频率是多少 2s(微秒)。第三章1.MCS-51 指令系统按功能分为几类?具有几种寻址方式?他们的寻址范围如何? 答: 按功能分为 5 类,分别 是: 数据传送类、算术操作类、逻辑操作类、控制转移类和位操作类; 具有 7 种 寻址方式; 立即寻址,寻址范围是程序存储器; 直接寻址,寻址范围是内部 RAM 低 128
7、字节和高 128 字节;寄存器寻址,寻址范围是四组工作寄存器 R0R7 ;寄存器间接寻址,寻址范围是内部 RAM 的低 128 和外部 RAM 低 64K 可寻址空间;基址寄存器加变址寄存器间接寻址,寻址范围是程序存储器; 相对寻址,寻址范围是以下一条指令为相对地址的-128+127 字节范围内; 位寻址,寻址范围是可位寻址空间,包括内部 RAM 的可寻址位,特殊功能寄存器中的可寻址位。2.设内部 RAM 中 59H 单元的内容为 50H,写出当执行下列程序段后寄存器A,R0,和内部 RAM 中 50H、51H 单元的内容为和值?答:MOV A,59H ; (A)=(59H)=50HMOV R
8、0,A ; (R0)=50HMOV A,#00 ; (A)=00MOV R0,A ; (R0)=(50H)=00MOV A,#25H ; (A)=25HMOV 51H,A ; (51H)=25HMOV 52H,#70H ; (52H)=70H执行下列程序段后:(A)=25H,(R0)=50H, (50H)=00、(51H)=25H3.PSW 中 Cy 与 OV 有何不同?下列程序段执行后( Cy)=?(OV)= ?。MOV A,#56HADD A,#74H 答:Cy进位、借位标志位;OV溢出标志位。MOV A,#56H ;(A)=56H=0101 0110 BADD A,#74H ;(A)=5
9、6H+74H=0CAH=1100 1010B , 程序执行后:(Cy)=0(OV)=14.MOVC A,A+DPTR 与 MOVX A,DPTR 指令有何不同?答: MOVC A,A+DPTR ;寻找的操作数在程序存储器中,地址是:(A)+(DPTR); MOVX A,DPTR ;寻找的操作数在外部数据存储器中,地址是:(DPTR)。5. AJMP、LJMP、SJMP 指令功能上有何不同?答:相同之处,都是无条件转移指令。 AJMP addr11 ;下调指令为基准的 2KB 范围内的跳转指令。 LJMP addr16 ;转 移的目标地址可以在 64KB 程序存储器的任何地方。 SJMP rel
10、 ;下调指令为基准的-128B+127B 范围内的短跳转指令。6.设堆栈指针 SP 中的内容为 60H,内部 RAM 中 30H 和 31H 单元的内容分别为 24H 和 10H,执行下列程序段后,61H,62H, 30H,31H,DPTR 及 SP 中的内容将有何变化?PUSH 30HPUSH 31HPOP DPLPOP DPHMOV 30H,#00HMOV 31H,#0FFH答:PUSH 30H ;(61H)= (30H) = 24HPUSH 31H ; (62H) = (31H) = 10HPOP DPL ; (DPL) = (62H) = 10HPOP DPH ; (DPH) =(61
11、H)= 24HMOV 30H,#00H ; (30H) = 00HMOV 31H,#0FFH ; (31H) = 0FFH程序执行后:(61H)= 24H, (62H) = 10H, (30H) = 00H, (31H) = 0FFH,(DPTR) = 2410H7.试分析下列程序段,当程序执行后,位地址 00H 和 01H 中的内容将为何值?P1 口的 8 条 I/O 线为何状态?CLR CMOV A,#66HJC LOOP1CPL CSETB 01HLOOP1: ORL C,ACC.0JB ACC.2,LOOP2LOOP2: MOV P1,A答: CLR C ; (Cy)=0MOV A,#
12、66H ; (A) = 66H = 0110 0110 BJC LOOP1 ; 因 此时(Cy)=0 ,所以不跳转CPL C ; (Cy) = 1SETB 01H ; (01H)= 1LOOP1: ORL C,ACC.0 ; (Cy) =(Cy)(ACC.0) = 1JB ACC.2,LOOP2 ; 因(ACC.2) = 1LOOP2: MOV P1,A ; (P1)= 0110 0110 B8.要完成以下的数据传送,应如何用 MCS-51 指令 实现? R1 的内容传送到 R0; 片外 RAM 20H 单元的内容送 R0; 片外 RAM 20H 单元的内容送片内 RAM 20H 单元; 片外
13、 RAM 1000H 单元的内容送片内 RAM 20H 单元; ROM 2000H 单元的内容送 R0; ROM 2000H 单元的内容送片内 RAM 20H 单元; ROM 2000H 单元的内容送片外 RAM 20H 单元。答: R1 的内容传送到 R0;MOV A,R1MOV R0,A 片外 RAM 20H 单元的内容送 R0;MOV R1,#20HMOVX A,R1MOV R0,A 片外 RAM 20H 单元的内容送片内 RAM 20H 单元;MOV R1,#20HMOVX A,R1MOV 20H,A 片外 RAM 1000H 单元的内容送片内 RAM 20H 单元;MOV DPTR,
14、#20HMOVX A,DPTRMOV 20H,A ROM 2000H 单元的内容送 R0;MOV DPTR,#2000HCLR AMOVC A,A+DPTRMOV R0,A ROM 2000H 单元的内容送片内 RAM 20H 单元;MOV DPTR,#2000HCLR AMOVC A,A+DPTRMOV 20H,A ROM 2000H 单元的内容送片外 RAM 20H 单元。MOV DPTR,#2000HCLR AMOVC A,A+DPTRMOV R0,#20HMOVX R0,A9.分析以下程序每条指令执行的结果:MOV A, #25H ; (A) = 25HMOV R1,#33H ; (R
15、1) = 33HMOV 40H,#1AH ; (40H) = 1AHMOV R0,40H ; (R0) = 1AHADD A,R1 ; (A) = 25H + 33H = 58HADDC A,R0 ; (A) = 58H + (1AH) + (Cy) = 58H ADDC A,40H ; (A) = 58H + 1AH + (Cy) = 72H10.设 A=83H,R0=17H,(17H)=34H,执行下列程序后,(A) = ?ANL A,#17H ; (A) = 1000 0011B0001 0111B = 0000 0011BORL 17H,A ; (17H) = 0011 0100B00
16、00 0011B = 0011 0111BXRL A,R0 ; (A) = 0000 0011B0011 0111 = 0011 0100BCPL A ; (A) = 1100 1011B11.两个 4 位 BCD 码数相加,被加数和加数分别存于 30H、31H 和 40H、41H单元中(次序为千位、百位在低地址中,十位、个位在高地址中),和数放在50H、51H、52H 中(52H 用于存放最高位的进位), 试编 写加法程序。解: ORG 00HMOV 30H, #12H ; MOV 31H, #34H ; MOV 40H, #56H ; MOV 41H, #78H ; MOV A, 31H
17、; 取被加数十个位ADD A, 41H ; 相加, (A) = (31H) + (41H) DA A ; 十进制调整MOV 51H,A ; 存十位个位运算结果MOV A, 30H ; 取被加数千百位ADDC A, 40H ; 相加,(A) = (30H) + (40H)DA A ; 十进制调整MOV 50H,A ; 存千位百位运算结果CLR A ; 清 AADDC A,#0 ; 将 进位加到 A 中MOV 52H, A ; 存进位SJMP $12.试编写一程序,查找内部 RAM 单元的 20H50H 中是否有 0AAH 这一数据,若有,则将 51H 单元置为 01H,若没有,则使 51H 单元
18、置 0。解: ORG 00HMOV 30H, #0AAH ;MOV R1, #31H ; MOV R0, #20H ; BIJIAO: MOV A, R0CJNE A, #0AAH , LOOP; MOV 51H,#01HSJMP JIESHULOOP: INC R0DJNZ R1,BIJIAOMOV 51H,#00HJIESHU :SJMP $第四章1、若有两个符号数 X,Y 分别存放在内部存储器 50H、51H 单元中,试编写一个程序实现 X*10+Y,结果存入 52H、53H 中。1 ORG 00H0000 7850 2 MOV R0,#50H0002 E6 3 MOV A,R00003 75F00A 4 MOV B,#0AH0006 A4 5 MUL AB