
《单片机原理与应用及C51程序设计课后答案》由会员分享,可在线阅读,更多相关《单片机原理与应用及C51程序设计课后答案(33页珍藏版)》请在文档大全上搜索。
1、第一章1. 给出下列有符号数的原码、反码和补码(假设计算机字长为 8 位)。+45 -89 -6 +112答:【 +45】原=00101101,【 +45】反=00101101,【 +45】补=00101101【-89 】原 =,【-89 】反=,【 -89】补 =【-6】原=,【-6】反=,【 -6】补=【+112】原 =01110000,【 +45】反=01110000,【+45】补 =011100002. 指明下列字符在计算机内部的表示形式。AsENdfJFmdsv120答:41H 73H 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 3
2、0H3. 什么是单片机答:单片机是把微型计算机中的微处理器、存储器、 I/O 接口、定时器 / 计数器、串行接口、中断系统等电路集成到一个集成电路芯片上形成的微型计算 机。因而被称为单片微型计算机,简称为单片机。4. 单片机的主要特点是什么答:主要特点如下:1) 在存储器结构上,单片机的存储器采用哈佛 (Harvard) 结构2) 在芯片引脚上,大部分采用分时复用技术3) 在内部资源访问上,采用特殊功能寄存器(SFR)的形式4) 在指令系统上,采用面向控制的指令系统5) 内部一般都集成一个全双工的串行接口6) 单片机有很强的外部扩展能力5. 指明单片机的主要应用领域。答:单机应用: 1)工业自
3、动化控制; 2)智能仪器仪表; 3)计算机外部设备和智能接口; 4)家用电器多机应用:功能弥散系统、并行多机处理系统和局部网络系统。第二章1. MCS-51单片机由哪几个部分组成答:MCS-51单片机主要由以下部分组成的:时钟电路、中央处理器(CPU)、存储器系统(RAM和ROM、定时/计数器、并行接口、串行接口、中断系统及一些特殊功能寄存器 (SFR)。2. MCS-51的标志寄存器有多少位,各位的含义是什么答:MCS-51的标志寄存器 PSW有 8位;DDDDDDDD76543210CAFRROC0S1S0V含义如下:C:进位或借位标志位。AC辅助进位或借位可标志位。F0:用户标志位。是系
4、统预留给用户自己定义的标志位。RS1 RS0 :寄存器组选择位。可用软件置位或清零,用于从四组工作寄存器中选定当前的工作寄存器组。OV溢出标志位。在加法或减法运算时,如运算的结果超出8位二进制数的范围,则 OV置1,标志溢出,否则 OV清零。P:奇偶标志位。用于记录指令执行后累加器A中1的个数的奇偶性。若累加器 A中1的个数为奇数,则P置位,若累加器 A中1的个数为偶数,则P清零。其中未定义,可供用户使用。3. 在8051的存储器结构中,内部数据存储器可分为几个区域各有什么特点答:片内数据存储器按功能可以分成以下几个部分:工作寄存器组区、位寻址区、一般RAM区和特殊功能寄存器区,其中还包含堆栈
5、区。工作寄存器组区,00H1FH单元,可用R(R7等8个寄存器访问;位寻址区,20H2FH单元,可按位方式访问;一般RAM区,30H7FH单元;堆栈区,可从 08到7F单元;特殊功能寄存器区位于80HFFH单元。4. 什么是堆栈说明 MCS-51单片机的堆栈处理过程。答:堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。CS-51单片机的堆栈是向上生长型的,存入数据是从地址低端向高端延伸,取出数据是从地址高端向低端延伸。入栈和出栈数据是以字节为单位的。入栈时,SP指针的内容先自动加1,然后再把数据存入到 SP指针指向的单元;出栈时,先把 SP指针指向单元的数据取出,然后再把SP指针的内容
6、自动减1。5. MCS-51单片机有多少根I/O线它们和单片机的外部总线有什么关系答:MCS-51单片机有32根I/O线,由P0 口经地址锁存器提供低 8位(A7A0) , P2 口提供高8位(A15A8)而形成。数据总线宽度为 8位,由P0口直接提供。 控制总线由第二功能状态下的P3 口和4根独立的控制线 RST EA、ALE和PSEN组成。6. 什么是机器周期MCS-51单片机的一个机器周期包括多少个时钟周期答:机器周期:机器周期是单片机的基本操作周期,每个机器周期包含S1、S2、S66个状态,每个状态包含两拍 P1和P2,每一拍为一个时钟周期(振荡周期)。因此,一个机器周期包含12个时钟
7、周期。7. 如果时钟周期的频率为12MHz那么ALE信号的频率为多少答: 2MHZ第三章1. 在MCS-51单片机中,寻址方式有几种其中对片内RAM可以用哪几种寻址方式对片外RAM可以用哪几种寻址方式答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址 方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址。片内RAM寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片外RAM寻址有:寄存器间接寻址方式。2在对片外RAM单元寻址中,用Ri间接寻址与用DPTF间接寻址有什么区别64K字节。答:片外
8、数据存储器寻址中,用Ri间接寻址只能访问低端的 256字节单元,而用DPTRf乍指针间接访问可访问整个3在位处理中,位地址的表示方式有哪几种答:1 直接位地址(OOHOFFH。例如:20H2. 字节地址带位号。例如:表示 20H单元的3位。3. 特殊功能寄存器名带位号。例如:表示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单
9、元中。MOV A, 30HMOV R0, #50HMOVX R,0 A(4) 片内RAM的 50H单元内容送到片外 RAM的3000H单元中。MOV 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, #4000H(7) ROM勺1000H单元内容送到片内 RAM的50H单元中。MOV
10、 A, #0MOV DPTR,#1000HMOVC A,A+DPTRMOV 20H,A(8) ROM勺1000H单元内容送到片外 RAM的1000H单元中。MOV A,#0MOV DPTR,#1000HMOVC A,A+DPTRMOVX DPT,RA5区分下列指令有什么不同(1) MOV A, 20H和 MOV A, #20H答:前者源操作数是直接寻址,后者源操作数立即寻址。(2) MOV A, RS MOVX a R1答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据存储器低256字节。(3) MOV A,R1 和 MOV A,R1答:前者源操作数是寄存器寻址,后者源操作数寄存器
11、间接寻址。(4) MOVX A 只和 MOVX A DPTR答:前者源操作数是访问片外数据存储器低 256字节 后者源操作数访问片外数据存储器整个 64K 字节。(5) MOVX A DPT和 MOVC A A+DPTR答:前者源操作数是访问片外数据存储器 后者源操作数访问程序数据存储器。10H单元以及P1、P2中的内容。6. 设片内 RAM的(20H)=40H,( 40H =10H,( 10H)=50H ,( P1)=0CAH 分析下列指令执行后片内RAM的20H 40H、MOV R0 #20HMOV A,R0; A=40HMOV R1,A ;R1=40HMOV A,R1;A=10HMOV
12、R0 P1;( 40H) =0CAHMOV P2 P1 P2=0CAHMOV 10H A ( 10H) =10HMOV 20H 10H(20H) =10H结果:( 20H) =10H、( 10H) =10H、(40H) =0CAH P2=0CAH和 P1=0CAH7已知( A) =02H( R1) =7FH元的内容。DPTR) =2FFCH 片内 RAM(7FH) =70H 片外 RAM(2FFEH) =11HROM( 2FFEH)试分别写出以下各条指令执行后目标单1)MOV A,R1结果2)MOVX DPTRA结果3)MOVC A,A+DPTR结果4)XCHD A,R1结果累加器A等于70H
13、片外 RAM( 2FFCH单元等于02H累加器A等于64H累加器 A等于00H,片内RAM(7FH)单元等于72H8. 已知:(A) =78H ( R1) =78H , ( B) =04H CY=1,片内RA( 78H) =ODDH ( 80H) =6CH|试分别写出下列指令执行后目标单元的结果和相应标志位的值。(1) ADD A, R1;累加器A等于55H, CY等于1 SUBB A,#77H ;累加器 A等于OOH, CY等于0(3) MUL AB;累加器A等于EOH B寄存器等于01H, CY等于1,OV等于0(4) DIV AB;累加器A等于1EH B寄存器等于OOH, CY OV等于
14、0(5) ANL 78H,#78H ;片内 RAM( 78H)单元等于 58H(6) ORL A,#0FH;累加器 A等于 7FH(7) XRL 80H,A;片内 RAM( 80H)等于 14H9.设(A) =83H,( R0) =17H(17H =34H分析当执行完下面指令段后累加器A、R0、17H单元的内容。ANL A,#17HORL 17H,AXRL A,R0CPL A;A=03H;(17H =37H;A=34H;A=CBH结果:A=CBH ( R0) =17H,( 17H) =37H10写出完成下列要求的指令。(1) 累加器A的低2位清零,其余位不变。ANL A,#B(2) 累加器A的
15、高2位置“ 1”,其余位不变。ORL A,#B(3) 累加器的高4位取反,其余位不变。XRL A,#B(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,#12
16、H, 10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的 PC值为多少若累加器 A的值为12H呢答:指令执行后的PC值为1011H,若累加器A的值为12H则指令执行后的 PC值为1001H。13. 用位处理指令实现=()/的逻辑功能。程序:MOVC,ORLC,ANLC,ORLC,/MOV,C14. 下列程序段汇编后,从 1000H单元开始的单元内容是什么ORG 1000HTAB: DB 12H ,34HDS 3=00HDW 5567H,87H答:( 1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=
17、67H,( 1006H)=55H,( 1007H)=87H,( 1008H)15. 试编一段程序,将片内 RAM的20H 21H 22H单元的内容依次存入片外 RAM的20H 21H 22H中。程序:MOVR0, #20HMOVR2, #03HLOOP:MOV A,R0MOVXR,0 AINCR0DJNZR2, LOOPSJMP16编程实现将片外RAM的2000H2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并将源位置清零。程序:MOVR0, #20HMOVDPTR, #2000HMOVR2, #30HLOOP:MOVXA, DPTRMOV R,0 AMOVA, #00MOVX
18、DPT,R AINCDPTRINCR0DJNZR2, LOOPSJMP$17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于 R7R6中。程序:MOVDPTR, #1000HMOVR2, #100MOVR7, #00MOVR6, #00LOOP:MOVXA,DPTRADDA,R6MOVR6, AMOVA,R7ADDCA,#0MOVR7,AINCDPTRDJNZR2, LOOPSJMP$i程实现R4R3R2,结果放于R7R6R5中。ORG0100HMOV A,R2MOV B, R3MUL AB;R2 R3,结果的低字节直接存入积的MOV R5 A;结果的高字节存入 R6中暂
19、存起来MOV R6 BMOV A,R2MOV B, R4MUL AB;R2 R4,结果的低字节与 R6相加后,ADD A,R6MOV R6 AMOV A B;结果的高字节加上进位位后存入R7中ADDC A #00MOV R7, A程序:R518.MUL1MUL2再存入R6中SJMP$19.编程实现把片内 RAM勺20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。程序:MOVC,MOV,CMOVC,MOV,CMOVC,MOV,CMOVC,MOV,CMOVC,MOV,CMOVC,MOV,CMOVC,MOV,CMOVC,
20、MOV,CMOVR2, A20用查表的方法实现一位十六进制数转换成ASCII 。程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中)C16STASC: MOVDPTR, #TABMOVA, R2MOVCA, A+DPTRMOVR2, ARETTAB: DB 30H , 31H, 32H, 33H, 34H, 35H, 36H, 37HDB 38H , 391H, 41H, 42H, 43H, 44H, 45H, 46H21.编程统计从片外 RAM2000开始的100个单元中“ 0”的个数放于 R2中。程序:MOVDPTR, #2000HMOVR3, #100MOVR2, #00L
21、OOP:MOVXA, DPTRJNZNEXTINCR2NEXT:INCDPTRDJNZR3, LOOPSJMP$第四章1. C 语言有哪些特点答:C语言具有以下特点:1) 语言简洁、紧凑,使用方便、灵活2) 运算符丰富3) 数据结构丰富,具有现代化语言的各种数据结构4) 可进行结构化程序设计5) 可以直接对计算机硬件进行操作6) 生成的目标代码质量高,程序执行效率高7) 可移植性好2. 有哪些数据类型是MCS-51单片机直接支持的答:MCS-51单片机直接支持的数据类型标准分为基本数据类型和组合数据类型,基本数据类型有字符型char、短整型short、整型int、长整型long、浮点型floa
22、t 、双精度型 double 、特殊功能寄存器型和位类型,其中 char 型与 short 型相同, float 型与 double 型相同。组合数据类型有数组类型、结构体类型、共同体类型和 枚举类型,另外还有指针类型和空类型。3. C51 特有的数据类型有哪些答: C51 特有的数据类型有特殊功能寄存器型和位类型。4. C51 中的存储器类型有几种,它们分别表示的存储器区域是什么答: C51 中的存储器类型有 6种,分别如下:data :直接寻址的片内 RAM氐128B,访问速度快bdata :片内RAM勺可位寻址区(20H2FH),允许字节和位混合访问idata :间接寻址访问的片内 RA
23、M允许访问全部片内 RAMpdata :用Ri间接访问的片外 RAM低256Bxdata :用DPTR间接访问的片外 RAM允许访问全部 64KB片外RAMcode:程序存储器ROM 64KB空间5. 在C51中,bit 位与sbit位有什么区别答:bit位类型符用于定义一般的位变量。存储器类型只能是bdata、data、idata,只能是片内RAM勺可位寻址区,严格来说只能是bdata。sbit 位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时需指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄 存器名带位号。6. 在 C51 中,通过绝对地址来访问的存
24、储器有几种答:通过绝对地址来访问存储器有三种方法:1.使用C51运行库中预定义宏。2.通过指针访问。3.使用C51扩展关键字_at_7. 在 C51 中,中断函数与一般函数有什么不同答:中断函数在定义时后面带 interrupt m修饰符,m的取值为031,对应的中断情况如下:0外部中断0, 1 定时/计数器T0, 2外部中断1, 3定时/计数器T1, 4串行口中断,5定时/计数器T2,其他值预留。编写MCS-51中断函数需要注意如下几点。(1) 中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。(2) 中断函数没有返回值。(3) 在任何情况下都不能直接调用中断函数(4
25、) 如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同,否则会产生不正确的结果。(5) C51 编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容。(6) C51编译器从绝对地址 8m+3处产生一个中断向量,其中m为中断号,也即in terrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。(7) 中断函数最好写在文件的尾部,并且禁止使用 extern存储类型说明。防止其他程序调用。8. 按给定的存储类型和数据类型,写出下列变量的说明形式。(1) 在 data 区定义字符变量 val1 。char data val1;(2) 在 idata 区定
26、义整型变量 val2 。int idata val2;(3) 在 xdata 区定义无符号字符型数组 val34 。unsigned char xdata val34;(4) 在 xdata 区定义一个指向 char 类型的指针 px。char xdata *px;(5) 定义可寻址位变量 flag 。bit flag;(6) 定义特殊功能寄存器变量 P3。sfr P3=0xa0;(7) 定义特殊功能寄存器变量 SCONsfr SCON=0x98;(8) 定义 16 位的特殊功能寄存器 T0。sfr16 T0=0x8a;9. 写出下列关系表达式或逻辑表达式的结果,设a=3,b=4, c=5 。
27、(1) a+b>c&&b= =c 结果:假(2) a|b+c&&b-c 结果:真(3) !(a>b)&&!c|1 结果:真(4) !(a+b)+c-1&&b+c/2 结果:假10. 写出下列 C51 程序的执行结果。(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
28、%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 7(2)#include <>extern serial_initial();main()int x,y,z;serial_initial();printf("input data x,yn");scanf("%d %d",&
29、amp;x,&y);printf("n x y x<y x<=y x>yx>=y x!=y x=y");printf("n");printf("n%3d%3d",x,y);z=x<y;printf("%5d",z);z=x<=y;printf("%5d",z);z=x>y;printf("%5d",z);z=x>=y;printf("%5d",z);z=x!=y;printf("%5d&qu
30、ot;,z);z=x=y;printf("%5d",z);while(1);执行结果:input data x,y1 2x y x<y x<=y x>y x>=y x!=y x=y1 2 1 1 0 0 1 0(3)#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
31、y !x x|y x&&y"); printf("n%3d%3d",x,y);z=!y; printf("%5d",z); z=x|y; printf("%5d",z);z=x&&y; printf("%5d",z); printf("n");printf("n"); printf("That is alln");while(1);执行结果:input data x, yx y !x x|y x&&
32、y1 2 0 1 1That is all(4)#include <>extern serial_initial();main()int a,b;unsigned int x,y;serial_initial();a=b=0xaa55;x=y=0xaa55;printf("n a=%4x b=%4x x=%4x y=%4x",a,b,x,y);a=a<<1;b=b>>1;x=x<<1;y=y>>1;printf("n a=%4x b=%4x x=%4x y=%4x",a,b,x,y);print
33、f("n");printf("n");printf("That is all.n");while(1);执行结果:a=aa55 b=aa55 x=aa55 y=aa55a=54aa b=d52a x=54aa y=552aThat is all.11. break 和 continue 语句的区别是什么答: break 语句可以跳出 switch 结构,使程序继续执行 switch 结构后面的一个语句。 break 语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构 下面的语句。continue 语句用在循环结构中,用于结束
34、本次循环,跳过循环体中 continue 下面尚未执行的语句,直接进行下一次是否执行循环的判定。continue 语句和 break 语句的区别在于: continue 语句只是结束本次循环而不是终止整个循环; break 语句则是结束循环,不再进行条件判断。12. 用分支结构编程实现:输入“ 1 ”显示“ A”,输入“ 2”显示“ B',输入“ 3”显示“ C”输入“ 4”显示“ D',输入“ 5”结束。参考程序:#include <>#include <>void main(void)输入 3 个无符号的字符数据,要求按由大到小的顺序输出。unsig
35、ned char x;SCON=0x52;参考程序:#include <>#include <>void main(void)unsigned char x,y,z,m;SCON=0x52; 用 3种循环结构编写程序实现输出 1到 10的平方之和。参考程序 :(1) while 循环#include <> 对一个由 5 个元素组成的无符号字符数组按由小到大的顺序进行排序。参考程序 :#include <> 用指针实现,输入 3 个无符号字符数据,按由大到小的顺序输出。参考程序 :#include <> 有 3 个学生,每个学生都包括学
36、号、姓名和成绩,要求找出成绩最高的学生的姓名和成绩。参考程序 :#include <> number);printf("input name:n");scanf("%s",p1i.name);printf("input grade:n");scanf("%d",&p1i.grade);for (i=1;i<3;i+)if (p1i.grade>p1j.grade) j=i;printf(" 成绩最高的学生是 :%s, 成绩是 :%d",p1j.name,p1j.g
37、rade);printf("n");while(1);第五章1单片机 C 语言与汇编语言混合编程有哪几种方式通常采用什么方式答:单片机C语言和汇编语言混合编程分为汇编中调用 C51函数和C51程序中引用汇编,通常使用的是在 C51程序中引用汇编。在 C51程序中使用汇编语言有两种 情况:一种是汇编程序部分和 C51 程序部分为不同的模块,或不同的文件,通常由 C51 程序调用汇编程序模块的变量和函数 (也可称为子程序或过程 ) ;另一种是嵌入式汇 编,即在 C51 程序中嵌入一段汇编语言程序。2简述 C51 程序调用汇编程序时如何实现参数传递。答:C51中调用汇编程序进行参
38、数传递时都必须严格遵守C51函数的参数和返回值的相关约定。行参数传递的方式有两种,一种是通过寄存器传递参数,C51中不同类型的实参会存入相应的寄存器,在汇编中只需对相应寄存器进行操作,即可达到传递参数的目的;第二种是通过固定存储区传递。3简述嵌入式汇编的实现方法。答:在 C51 程序中嵌入汇编程序通常的处理方法如下。第一步:在C文件中以如下方式嵌入汇编程序。第二步:在 Keil C51软件的Project 窗口右击嵌入汇编程序的 C文件,在弹出的快捷菜单中选择Options for .命令,选中右边的 Generate Assembler SRCFile 和 Assemble SRC File
39、 复选框,使检查框由灰色变成黑色 (有效) 状态。加入到工程中,该文件必须作为工程的最后文件。第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是4. 简述C51中调用汇编程序的实现方法。答:编写为C51调用的汇编程序,参数须按规定的寄存器或存储器传送,程序格式有相应的规则,这些规则比较繁琐,为了便于处理,在实际中我们往往先用C51写出这个程序的主体,然后用SRC控制指令编译产生asm文件,修改这个asm文件得到我们所要的汇编函数。处理过程具体如下。第一步:先用C语言程序编写出程序框架,如文件名为(注意参数)。第二步:在 Keil C51 的Project 窗口中右击该 C语言文
40、件,在弹出的快捷菜单中选择Optio ns for . ,右边的 Gen erate Assembler SRCFile 和Assemble SRCFile,使检查框由灰色变成黑色(有效)状态;第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是KeilC51Lib加入工程中,该文件必须作为工程的最后文件。库文件与编译模式的关系如前面。第四步:编译后将会产生一个 SRC的文件,将这个文件扩展名改为 ASM这样就形成了可供 C51程序调用的汇编程序。随后可在该文件的代码段中加入所需的指令 代码。第五步:将该汇编程序与调用它的主程序一起加到工程文件中,这时工程文件中不再需要原来的C语
41、言文件和库文件,主程序只需要在程序开始处用EXTERNA所调用的汇编程序中的函数作声明,在主程序中就可调用汇编程序中的函数了。第六章1. 何为“准双向I/O接口”在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个。MCS-51单片机的四个并口中P1、P2、P3是准双向I/O接口。2. 80C51单片机内部有几个定时/计数器它们由哪些功能寄存器组成怎样实现定时功能和计数功能答:80C51单片机内部有两个16位的可编程定时/计数器,由THO,TLO,TH1,TL1,TMOD和TCO功能寄存器组成。通过 TMOD
42、中的C/T位选择对机器周期计数实现计数 功能,选择对外部脉冲计数实现计数功能。3. 定时/计数器T0有几种工作方式各自的特点是什么答:有四种工作方式,特点见下表:M1M0工作方式方式说明00013位定时/计数器01116位定时/计数器1028位自动重置定时/计数器113两个8位定时/计数器(只有T0有)4. 定时/计数器的四种工作方式各自的计数范围是多少如果要计10个单位,不同的方式初值应为多少答:有四种方式。方式 0计数范围:18192;方式1计数范围:165536;方式2计数范围:1256;方式3计数范围:1256。如果计10个单位,方式 0初值为:8192-10=8182;方式1初值为:
43、65536-10=65526 ;方式2初值为:256-10=246 ;方式2初值为:256-10=246。5. 设振荡频率为12MHz如果用定时/计数器T0产生周期为100ms的方波,可以选择哪几种方式,其初值分别设为多少答:只能选择方式1 ,初值为65536-50000=15536。6. 何为同步通信何为异步通信各自的特点是什么答:异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1 ”。特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传
44、送时须在前面加上一个或两个同步字符,后面加上校验字符。特点是对发送时钟 和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。7. 单工、半双工和全双工有什么区别答:单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数 据双向传送。8.设某异步通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多少答:10000波特9. 串行口数据寄存器SBU F有什么特点答:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),执行MOV SBUF,A发
45、送时为发送数据寄存器,执行MOV A, SBUF接收时为接收数据寄存器。10. MCS-51单片机串行口有几种工作方式各自特点是什么答:有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。方式1,称为8位的异步通信方式,通常用于双机通信。方式2和方式3,称为9位的异步通信方式,通常用于多机通信。11. 说明SM2在方式2和方式3对数据接收有何影响。答:通过SM2对方式2和方式3数据接收进行控制,SM2=1,那么只有接收的第9位为“ 1”才接收有效。如SM2=Q接收的第9位无论为1还是0都接收有效。12. 怎样来实
46、现利用串行口扩展并行输入 /输出口答:利用串行口在方式 0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。13. 什么是中断、中断允许和中断屏蔽答:在计算机中,由于计算机内外部的原因或软硬件的原因,使CPU从当前正在执行的程序中暂停下来,而自动转去执行预先安排好的为处理该原因所对应的服务程序。执行完服务程序后,再返回被暂停的位置继续执行原来的程序,这个过程称为中断,实现中断的硬件系统和软件系统称为中断系统。中断允许是允许中断请求送 CPL产生中断,中断屏蔽是禁止中断请求信号送CPU产生中断。14. 8051有几个中断源中断请求如
47、何提出答:MCS-51单片机提供5个硬件中断源:两个外部中断源INT0 和 INT1 ,两个定时/计数器T0和T1中断;1个串行口中断。外部中断源 INT0 和 INT1 的中断请求信号从外部引脚和输入;两个定时 /计数器T0和T1的溢出中断TF0和TF1定时/计数器T0(或T1)溢出时提出;串行 口中断由发送中断标志 T1和接收中断标志 R1产生。15. 8051的中断源中,哪些中断请求信号在中断响应时可以自动清除哪些不能自动清除应如何处理答:工作在边沿触发方式下的两个外部中断源和两个定时/计数器中断中断请求信号在中断响应时可以自动清除,工作在电平触发方式下的两个外部中断源和串行口中断不能自
48、动清除。工作在电平触发方式下的两个外部中断源的中断请求信号通过外加硬件和加软件的方式清除,串行口中断标志T1和标志R1完全由软件清除。16. 8051的中断优先级有几级在形成中断嵌套时各级有何规定答:8051的中断优先级有两级;形成中断嵌套时规定(1)正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。(2) 正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。(3) CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。17. 设8051的P1中各位接发光二极管
49、,分别用汇编语言和C语言编程实现逐个轮流点亮二极管,并循环显示。参考程序:ORG 0000HLJMP MAINORG 0100H;主程序MAIN MOV A,#01HCALL DELAYRL ASJMP LOOPSJMP $DELAY: MOV R7,#0FFHDJNZ R7 ,$RETENDC语言程序:#inelude <>8051系统中,已知振荡频率为 12MHz用定时/计数器T0,实现从产生周期为 2ms的方波。要求分别用汇编语言和C语言进行编程。解:分析:从输出周期为 2ms的方波,只须每1ms取反一次则可。当系统时钟为12MHZ定时/计数器T0工作于方式1时,最大的定时时
50、间为,满足 1ms的定时要求,方式控制字应设定为 00000001B(01H)。定时 1ms 计数值 N为 1000,初值 X=65536-1000=64536,则 TH0=FCH TL0=18H。采用中断处理方式:程序如下:ORG 0000HLJMP MAINORG 000BH;中断处理程序MOV TH0, #0FCHMOV TL0, #18HCPLRETIORG 0100H;主程序MAIN: MOV TMO,D #01HMOV TH0, #0FCHMOV TL0, #18HSETB EASETB ET0SETB TR0SJMP $ENDC语言程序:#include <>8051
51、系统中,已知振荡频率为 12MHz用定时/计数器T1,实现从产生周期为 2s的方波。要求分别用汇编语言和C语言进行编程。解:从产生2s的方波,应产生500ms的周期性的定时,定时到对取反就可实现。由于定时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后用一个寄存器 R2对10ms计数100次来实现。系统时钟为12MHZ定时/计数器T1定时10ms,计数值N为10000,只能选方式1,方式控制字为 00010000B( 10H),初值 X:X=65536-10000=55536=000B则 TH1=B=D8H, TL1=B=F0H。定时/计数器T1
52、采用中断处理方式。汇编程序:ORG 0000HLJMP MAINORG 001BHLJMP INTT1ORG 0100HMAIN:MOV TMO,D #10HMOV TH1,#0D8HMOV TL1 ,#0F0HMOV R2, #00HSETB EASETB ET1SETB TR1SJMP $INTT1 :MOV TH1,#0D8HMOV TL1 ,#0F0HINC R2CJNE R2,#64H, NEXTCPLMOV R2, #00HNEXT: RETIENDC语言程序:20ms的矩形波。要求分别用汇编语言2和 3,则对置 0来实现。用定时 /计数器#inelude <> 805
53、1系统中,已知振荡频率为12MHz用定时/计数器T1,实现从产生高电平宽度为 10ms,低电平宽度为和 C 语言进行编程。解:本题处理方式有多种,这里采用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当计到1,则对置1,当计到T1形成10ms周期定时见上题。程序如下:LJMP MAINORG 001BHMAIN:INTT1:NEXT: CJNENEXT1:CJNEEXIT: RETILJMP INTT1ORG 0100HMOV TMO,D #10HMOV TH1,#0D8HMOV TL1,#0F0HMOV R2, #00HSETB EASETB ET1SETB TR1SJMP
54、$MOV TH1,#0D8HMOV TL1,#0F0HINC R2CJNE R2,#01H, NEXTSETBSJMP EXIT,#02H,NEXT1CLRSJMP EXIT,#03H,NEXTSETBMOV R2, #00ENDC语言程序:#include <>解:用 8051 单片机的串行口扩展并行 I/O 接口,控制 16 个发光二极管依次发光,画出电路图,用汇编语言和C语言分别编写相应的程序。采用在串口连接两个 CD4094来实现,电路图如下:程序如下;ORG 0000HLJMP MAINORG 0100HMAIN MOV SCON #00HMOV R4, #10HMOV
55、R3, #00HMOV R2 #01HCLRSTART MOV A R3MOV SBUF ALOOP JNB TI , LOOPMOV A, R2MOV SBUF ALOOP1 JNB TI , LOOP1SETBACALL DELAYCLR TICLR CMOV A, R2RLC AMOV R2 AMOV A, R3RLC AMOV R3, ACLRDJNZ R4, START1SJMP MAINLOOP2 MOV R6, #OFFHLOOP1 DJNZ R6, LOOP1DJNZ R7, LOOP2RETENDC语言程序:#in elude <>void delay (un s
56、ig ned int x);unionun sig ned int word;struct un sig ned char high; un sig ned char low;bytes;nu mber;void mai n()int i;SC0N=0x00;while(1)=0x01;for (i=0;i<16;i+)SBUF= delay(u nsig ned int x)un sig ned char j;while(x-)for (j=0;j<125;j+);22.用汇编语言编程设计一个 8051双机通信系统,将 A机的片内RAM中 30H3FH的数据块通过串行口传送到B机
57、的片内RAM勺40H4FH中,并画出电路图。解:线路连接如图所示。80518051RXDTXD乙机甲机TXDRXDGNDGND分析:甲、乙两机都选择方式1即8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50气由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器 PCO曲的SMO位决定,则需对定时/计数器T1初始化。设SMOD=,甲、乙两机的振荡频率为 12MHz由于波特率为1200bps。定时/计数器T1选择为方式2,则初值如下。初值=256 - f osc x 2SMOd/(12 X 波特率
58、X 32)根据要求,定时/计数器T1的方式控制字为20H>甲机的发送程序:TSTART: MOV TMOD,#20HMOV TL1,#0E6HMOV TH1,#0E6HMOV PCON,#00HMOV SCON,#40HMOV R0,#30HMOV R7,#10HSETB TR1LOOP:MOV A,R0MOV C,PMOV ,CMOV SBUF,AWAIT: JNB TI,WAITCLR TIINC R0DJNZ R7,LOOPRET乙机的接收程序:RSTART: MOV TMOD,#20HMOV TL1,#0E6HMOV TH1,#0E6HMOV PCON,#00HMOV R0,#4
59、0HMOV R7,#10HSETB TR1LOOP:MOV SCON,#50HWAIT: JNB RI,WAITMOV A,SBUFMOV C,PJC ERRORANL A,#7FHMOV R0,AINC R0DJNZ R7,LOOPRET第七章1. 什么是MCS-51单片机的最小系统答:所谓最小系统,是指一个真正可用的单片机的最小配置系统。对于单片机内部资源已能够满足系统需要的,可直接采用最小系统。2. 简述存储器扩展的一般方法。答:存储器芯片与单片机扩展连接具有共同的规律。即不论何种存储器芯片,其引脚都呈三总线结构,与单片机连接都是三总线对接。另外,电源线接电源线,地 线接地线。3. 什么
60、是部分译码法什么是全译码法它们各有什么特点用于形成什么信号答:部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线仅用一部分参加译码。部分译码使存储器芯片的地址空间有重叠,造 成系统存储器空间的浪费。全译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线全部参加译码。这种译码方法中存储器芯片的地址空间 是唯一确定的,但译码电路要相对复杂。译码形成存储器芯片的片选信号线CE。4. 采用部分译码为什么会出现地址重叠情况,它对存储器容量有何影响答:部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线仅用一部分参加译码。参加译码的地址线对于选中某一存储器芯片有 一个确定的状态,而与不参加译码的地址线无关。也可以说,只要参加译码的地址线处于对某一存储器芯片的选中状态,不参加译码的地址线的任意状态都可以选中该芯 片。正因为如此,部分译码使存储器芯片的地址空间有重叠,造成系统存储器空间减少。5. 存储器芯片的地址引脚与容量有什么关系答:容量(Q与地址线数目(N)满足关系式:Q=2No6. MCS-51单片机的外部设备是通过什么方式访问的答:MCS-51单片机扩展的外部设备与片外数据存储器统一编址,即外部设备占用片外