1、单片机C51程序设计课后习题答案复习专用第一章1. 给出下列有符号数的原码、反码和补码 ( 假设计算机字长为 8位) 。+45 -89 -6 +112答:【+45】原=00101101,【+45】反=00101101,【+45】补=00101101【-89】原=11011001,【-89】反=10100110,【-89】补=10100111【-6】原=10000110,【-6】反=11111001,【-6】补=11111010【+112】原=01110000,【+45】反=01110000,【+45】补=011100002. 指明下列字符在计算机内部的表示形式。AsENdfJFmdsv120答
2、:41H 73H 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H3. 什么是单片机? 答:单片机是把微型计算机中的微处理器、存储器、 I/O 接口、定时器/ 计数器、串行接口、中断系统等电路集成到一个集成电路芯片上形成的微型计算机。因而被称为单片微型计算机,简称为单片机。4. 单片机的主要特点是什么?答:主要特点如下:1) 在存储器结构上,单片机的存储器采用哈佛 (Harvard) 结构2) 在芯片引脚上,大部分采用分时复用技术3) 在内部资源访问上,采用特殊功能寄存器 (SFR)的形式4) 在指令系统上,采用面向控制的指令系统5) 内部
3、一般都集成一个全双工的串行接口6) 单片机有很强的外部扩展能力5. 指明单片机的主要应用领域。答:单机应用: 1) 工业自动化控制; 2) 智能仪器仪表; 3) 计算机外部设备和智能接口; 4) 家用电器多机应用:功能弥散系统、并行多机处理系统和局部网络系统。第二章1. MCS-51 单片机由哪几个部分组成?答:MCS-51单片机主要由以下部分组成的:时钟电路、中央处理器 (CPU)、存储器系统 (RAM和 ROM、) 定时/ 计数器、并行接口、串行接口、中断系统及一些特殊功能寄存器 (SFR)。2. MCS-51 的标志寄存器有多少位,各位的含义是什么?答:MCS-51的标志寄存器 PSW有
4、 8 位;D76D5D D D D 4 3 2 1D0DCCA0F R R O S1 S0 V- P含义如下:C(PSW.7):进位或借位标志位。AC(PSW.6):辅助进位或借位可标志位。F0(PSW.5):用户标志位。是系统预留给用户自己定义的标志位。RS1、RS0(PSW.4、PSW.3):寄存器组选择位。可用软件置位或清零,用于从四组工作寄存器中选定当前的工作寄存器组。OV(PSW.2:) 溢出标志位。在加法或减法运算时,如运算的结果超出 8位二进制数的范围,则 OV置 1,标志溢出,否则 OV清零。 P(PSW.0):奇偶标志位。用于记录指令执行后累加器 A中 1 的个数的奇偶性。若
5、累加器 A中 1 的个数为奇数,则 P置位,若累加器 A中 1 的个数为偶数,则 P清零。其中 PSW.1未定义,可供用户使用。6. 在 8051的存储器结构中,内部数据存储器可分为几个区域?各有什么特点?答:片内数据存储器按功能可以分成以下几个部分:工作寄存器组区、位寻址区、一般 RAM区和特殊功能寄存器区,其中还包含堆栈区。工作寄存器组区,00H1FH单元,可用 R0R7等 8 个寄存器访问;位寻址区, 20H2FH单元,可按位方式访问;一般 RAM区,30H7FH单元;堆栈区,可从 08 到7F 单元;特殊功能寄存器区位于 80HFFH单元。7. 什么是堆栈?说明 MCS-51单片机的堆
6、栈处理过程。答:堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。 CS-51单片机的堆栈是向上生长型的,存入数据是从地址低端向高端延伸,取出数据是从地址高端向低端延伸。入栈和出栈数据是以字节为单位的。入栈时, SP指针的内容先自动加 1,然后再把数据存入到 SP指针指向的单元;出栈时,先把SP指针指向单元的数据取出,然后再把 SP指针的内容自动减 1。8. MCS-51 单片机有多少根 I/O 线?它们和单片机的外部总线有什么关系?答:MCS-51单片机有 32 根I/O 线,由 P0口经地址锁存器提供低 8 位(A7A0),P2口提供高 8 位(A15A8)而形成。数据总线宽度为 8
7、 位,由 P0口直接提供。控制总线由第二功能状态下的 P3口和 4 根独立的控制线 RST、EA、ALE和 PSEN组成。9. 什么是机器周期? MCS-51单片机的一个机器周期包括多少个时钟周期?答:机器周期:机器周期是单片机的基本操作周期,每个机器周期包含S1、S2、 、S66个状态,每个状态包含两拍 P1和 P2,每一拍为一个时钟周期( 振荡周期) 。因此,一个机器周期包含 12个时钟周期。10. 如果时钟周期的频率为 12MHz,那么 ALE信号的频率为多少?答:2MHZ第三章1在 MCS-51单片机中,寻址方式有几种?其中对片内 RAM可以用哪几种寻址方式?对片外 RAM可以用哪几种
8、寻址方式?答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内 RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外RAM寻址有:寄存器间接寻址方式。2在对片外 RAM单元寻址中,用 Ri 间接寻址与用 DPTR间接寻址有什么区别?答:片外数据存储器寻址中,用 Ri 间接寻址只能访问低端的 256字节单元,而用 DPTR作指针间接访问可访问整个 64K字节。3在位处理中,位地址的表示方式有哪几种?答:1直接位地址( 00H0FF
9、H)。例如: 20H2字节地址带位号。例如: 20H.3 表示 20H单元的 3 位。3特殊功能寄存器名带位号。例如: P0.1 表示 P0口的 1 位。4位符号地址。例如: TR0是定时/ 计数器 T0 的启动位。4写出完成下列操作的指令。(1)R0的内容送到 R1中。MOV A,R0MOV R1,A(2)片内 RAM的 20H单元内容送到片内 RAM的 40H单元中。MOV 40H,20H(3)片内 RAM的 30H单元内容送到片外 RAM的 50H单元中。MOV A,30HMOV R0,#50HMOVX R,0A(4)片内 RAM的 50H单元内容送到片外 RAM的 3000H单元中。M
10、OV A,50HMOV DPTR,#3000HMOVX DPT,RA(5)片外 RAM的 2000H单元内容送到片外 RAM的 20H单元中。MOV DPTR,#2000HMOVX A,DPTRMOV 20H,A(6)片外 RAM的 1000H单元内容送到片外 RAM的 4000H单元中。MOV DPTR,#1000HMOVX A,DPTRMOV DPTR,#4000HMOV DPT,RA(7)ROM的 1000H单元内容送到片内 RAM的 50H单元中。MOV A,#0MOV DPTR,#1000HMOVC A,A+DPTRMOV 20H,A(8)ROM的 1000H单元内容送到片外 RAM
11、的 1000H单元中。MOV A,#0MOV DPTR,#1000HMOVC A,A+DPTRMOVX DPT,RA5区分下列指令有什么不同?(1)MOV A,20H和 MOV A,#20H答:前者源操作数是直接寻址,后者源操作数立即寻址。(2)MOV A,R1和 MOVX A,R1答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低 256字节。(3)MOV A,R1和MOV A,R1答:前者源操作数是寄存器寻址,后者源操作数寄存器间接寻址。(4)MOVX A,R1和 MOVX A,DPTR答:前者源操作数是访问片外数据存储器低 256字节,后者源操作数访问片外数据存储器整
12、个 64K字节。(5)MOVX A,DPT和R MOVC A,A+DPTR答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据存储器。6设片内 RAM的(20H)=40H,(40H)=10H,(10H)=50H,(P1)=0CAH。分析下列指令执行后片内 RAM的 20H、40H、10H单元以及 P1、P2中的内容。MOV R0,#20HMOV A,R0 ;A=40HMOV R1,A ;R1=40HMOV A,R1;A=10HMOV R,0 P1 ;(40H)=0CAHMOV P2,P1P2=0CAHMOV 10H,A(10H)=10HMOV 20H,10H (20H)=10H结果:
13、(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH7已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内 RAM(7FH)=70H,片外 RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。(1)MOV A,R1 结果:累加器 A等于 70H(2)MOVX DP,TRA 结果:片外 RAM(2FFCH)单元等于 02H(3)MOVC A,A+DPTR 结果: 累加器 A等于 64H(4)XCHD A,R1 结果:累加器 A等于 00H,片内 RAM(7FH)单元等于 72H8已知:(
14、A)=78H,(R1)=78H,(B)=04H,CY=1,片内 RAM(78H)=0DDH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。(1)ADD A,R1 ;累加器 A等于 55H,CY等于 1(2)SUBB A,#77H ;累加器 A等于 00H,CY等于 0 (3)MUL AB ;累加器 A等于 E0H,B寄存器等于 01H,CY等于 1,OV等于 0(4)DIV AB ;累加器 A等于 1EH,B寄存器等于 00H,CY、OV等于 0(5)ANL 78H,#78H ;片内 RAM(78H)单元等于 58H(6)ORL A,#0FH ;累加器 A等于 7
15、FH(7)XRL 80H,A ;片内 RAM(80H)等于 14H9设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器 A、R0、17H单元的内容。ANL A,#17H ;A=03HORL 17H,A ;(17H)=37HXRL A,R0 ;A=34HCPL A ;A=CBH结果:A=CBH,(R0)=17H,(17H)=37H10写出完成下列要求的指令。(1)累加器 A的低 2 位清零,其余位不变。ANL A,#11111100B(2)累加器 A的高 2 位置“1”,其余位不变。ORL A,#11000000B(3)累加器的高 4 位取反,其余位不变。XR
16、L A,#11110000B(4)累加器第 0 位、2 位、4 位、6 位取反,其余位不变。XRL A,#01010101B11说明 LJMP指令与 AJMP指令的区别?答:LJMP指令后面提供的是 16 位目标地址,所以可以转移到 64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。AJMP指令后带的是 11 位直接地址,执行时,先将程序指针 PC的值加 2(该指令长度为 2 字节),然后把指令中的 11 位地址 addr11 送给程序指针 PC的低 11 位,而程序指针的高 5 位不变,只能在当前 2K范围内转移。12设当前指令 CJNE A,#12H,10H的地址是 0FFEH,
17、若累加器 A的值为10H,则该指令执行后的 PC值为多少?若累加器 A的值为 12H呢?答:指令执行后的 PC值为 1011H,若累加器 A的值为 12H,则指令执行后的 PC值为 1001H。13用位处理指令实现 P1.4=P1.0 (P1.1 P1.2) /P1.3 的逻辑功能。程序:MOV C,P1.1ORL C,P1.2ANL C,P1.0ORL C,/P1.3MOV P1.4,C14下列程序段汇编后,从 1000H单元开始的单元内容是什么?ORG 1000HTAB: DB 12H ,34HDS 3DW 5567H,87H答:(1000H)=12H,(1001H)=34H,(1002H
18、)=00H,(1003H) =00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H15试编一段程序,将片内 RAM的 20H、21H、22H单元的内容依次存入片外RAM的 20H、21H、22H中。程序:MOV R0,#20HMOV R2,#03HLOOP:MOV A,R0MOVX R,0 AINC R0DJNZ R2,LOOPSJMP $16编程实现将片外 RAM的 2000H2030H单元的内容,全部搬到片内 RAM的20H单元开始位置,并将源位置清零。程序:MOV R0,#20HMOV DPTR,#2000HMOV R
19、2,#30HLOOP: MOVX A,DPTRMOV R,0 AMOV A,#00MOVX DPT,RAINC DPTRINC R0DJNZ R2,LOOPSJMP $17编程将片外 RAM的 1000H单元开始的 100 个字节数据相加,结果放于R7R6中。程序:MOV DPTR,#1000HMOV R2,#100MOV R7,#00MOV R6,#00LOOP: MOVX A,DPTRADD A,R6MOV R6,AMOV A,R7ADDC A,#0MOV R7,AINC DPTRDJNZ R2,LOOPSJMP $18编程实现 R4R3 R2,结果放于 R7R6R5中。程序:ORG 01
20、00HMUL1:MOV A,R2MOV B,R3MUL AB ;R2 R3,结果的低字节直接存入积的 R5MOV R5,A ;结果的高字节存入 R6中暂存起来MOV R6,BMUL2:MOV A,R2MOV B,R4MUL AB ;R2 R4,结果的低字节与 R6相加后,再存入R6中ADD A,R6MOV R6,AMOV A,B ;结果的高字节加上进位位后存入 R7中ADDC A,#00MOV R7,ASJMP $19编程实现把片内 RAM的 20H单元的 0 位、1 位,21H单元的 2 位、3位,22H单元的 4 位、5 位,23H单元的 6 位、7 位,按原位置关系拼装在一起放于 R2中
21、。程序:MOV C,20H.0MOV A.0,CMOV C,20H.1MOV A.1,CMOV C,21H.2MOV A.2,CMOV C,21H.3MOV A.3,CMOV C,22H.4MOV A.4,CMOV C,22H.5MOV A.5,CMOV C,23H.6MOV A.6,CMOV C,23H.7MOV A.7,CMOV R2,A20用查表的方法实现一位十六进制数转换成 ASCII。程序:(设一位十六进制数放在 R2中,轮换的 ASCII 也放于 R2中)C16STAS:C MOV DPTR,#TABMOV A,R2MOVC A,A+DPTRMOV R2,ARETTAB:DB 30
22、H,31H,32H,33H,34H,35H,36H,37HDB 38H,391H,41H,42H,43H,44H,45H,46H21编程统计从片外 RAM2000H开始的 100个单元中“ 0”的个数放于 R2中。程序:MOV DPTR,#2000HMOV R3,#100MOV R2,#00LOOP: MOVX A,DPTRJNZ NEXTINC R2NEXT:INC DPTRDJNZ R3,LOOPSJMP $第四章11. C 语言有哪些特点?答:C语言具有以下特点:1) 语言简洁、紧凑,使用方便、灵活2) 运算符丰富3) 数据结构丰富,具有现代化语言的各种数据结构4) 可进行结构化程序设计
23、5) 可以直接对计算机硬件进行操作6) 生成的目标代码质量高,程序执行效率高7) 可移植性好12. 有哪些数据类型是 MCS-51单片机直接支持的 ?答:MCS-51单片机直接支持的数据类型标准分为基本数据类型和组合数据类型,基本数据类型有字符型 char 、短整型 short 、整型 int 、长整型 long 、浮点型 float 、双精度型 double 、特殊功能寄存器型和位类型,其中 char 型与short 型相同,float 型与 double 型相同。组合数据类型有数组类型、结构体类型、共同体类型和枚举类型,另外还有指针类型和空类型。13. C51 特有的数据类型有哪些?答:C
24、51特有的数据类型有特殊功能寄存器型和位类型。14. C51 中的存储器类型有几种,它们分别表示的存储器区域是什么?答:C51中的存储器类型有 6 种,分别如下:data:直接寻址的片内 RAM低 128B,访问速度快bdata:片内 RAM的可位寻址区 (20H2FH),允许字节和位混合访问idata :间接寻址访问的片内 RAM,允许访问全部片内 RAMpdata:用 Ri 间接访问的片外 RAM低 256Bxdata :用 DPTR间接访问的片外 RAM,允许访问全部 64KB片外 RAMcode:程序存储器 ROM 64KB空间15. 在 C51中,bit 位与 sbit 位有什么区别
25、?答:bit 位类型符用于定义一般的位变量。存储器类型只能是 bdata、data、idata ,只能是片内 RAM的可位寻址区,严格来说只能是 bdata。sbit 位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时需指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。16. 在 C51中,通过绝对地址来访问的存储器有几种?答:通过绝对地址来访问存储器有三种方法: 1. 使用 C51运行库中预定义宏。2. 通过指针访问。 3. 使用 C51扩展关键字 _at_17. 在 C51中,中断函数与一般函数有什么不同? 答:中断函数在定义时后面带 in
26、terrupt m 修饰符, m的取值为 031,对应的中断情况如下: 0外部中断 0,1定时/ 计数器 T0,2外部中断 1,3定时/ 计数器 T1,4串行口中断, 5定时/ 计数器 T2,其他值预留。编写 MCS-51中断函数需要注意如下几点。(1) 中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。(2) 中断函数没有返回值。(3) 在任何情况下都不能直接调用中断函数(4) 如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同,否则会产生不正确的结果。(5) C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容。(6) C51
27、编译器从绝对地址 8m+3处产生一个中断向量,其中 m为中断号,也即 interrupt 后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。(7) 中断函数最好写在文件的尾部,并且禁止使用 extern 存储类型说明。防止其他程序调用。8. 按给定的存储类型和数据类型,写出下列变量的说明形式。(1) 在 data 区定义字符变量 val1 。char data val1;(2) 在 idata 区定义整型变量 val2 。int idata val2;(3) 在 xdata 区定义无符号字符型数组 val34 。unsigned char xdata val34;(4) 在 xdata
28、区定义一个指向 char 类型的指针 px。char xdata *px;(5) 定义可寻址位变量 flag 。bit flag;(6) 定义特殊功能寄存器变量 P3。sfr P3=0xa0;(7) 定义特殊功能寄存器变量 SCON。sfr SCON=0x98;(8) 定义 16 位的特殊功能寄存器 T0。sfr16 T0=0x8a;9. 写出下列关系表达式或逻辑表达式的结果,设 a=3,b=4,c=5。(1) a+bc&b= =c 结果:假(2) a|b+c&b-c 结果:真(3) !(ab)&!c|1 结果:真(4) !(a+b)+c-1&b+c/2 结果:假10. 写出下列 C51程序的
29、执行结果。(1)#include extern serial_initial();main()int x,y,z; serial_initial();x=y=8;z=+x;printf(n %d %d %d,y,z,x);x=y=8;z=x+;printf(n %d %d %d,y,z,x);x=y=8;z=-x;printf(n %d %d %d,y,z,x);x=y=8;z=x-;printf(n %d %d %d,y,z,x);printf(n); while(1);结果: 8 9 98 8 98 7 78 8 7(2)#include extern serial_initial();main()int x,y,z; serial_initial();printf(input data x,y?n);scanf(%d %d,&x,&y);printf(n x y xy xy x=y x!=y x=y);printf(n); printf(n%3d%3d,x,y);z=xy; printf(%5d,z);z=xy; printf(%5
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1