版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章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】补=01110000指明下列字符在计算机内部的表示形式。AsENdfJFmdsv120答:41H 73H 45H 4EH 64H 66H 4AH
2、 46H 6DH 64H 73H 76H 31H 32H 30H什么是单片机?答:单片机是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等 电路集成到一个集成电路芯片上形成的微型计算机。因而被称为单片微型计算机,简称为单片机。单片机的主要特点是什么?答:主要特点如下:在存储器结构上,单片机的存储器采用哈佛(Harvard)结构在芯片引脚上,大部分采用分时复用技术在内部资源访问上,采用特殊功能寄存器(SFR)的形式在指令系统上,采用面向控制的指令系统内部一般都集成一个全双工的串行接口单片机有很强的外部扩展能力指明单片机的主要应用领域。答:单机应用:1)工业自动化
3、控制;2) 智能仪器仪表;3)计算机外部设备和智能接口;4) 家用电器多机应用:功能弥散系统、并行多机处理系统和局部网络系统。第二章MCS-51单片机由哪几个部分组成?答:MCS-51单片机主要由以下部分组成的:时钟电路、中央处理器(CPU)、存储器系统(RAM和 ROM)、定时/计数器、并行接口、串行接口、中断系统及一些特殊功能寄存器(SFR)。MCS-51的标志寄存器有多少位,各位的含义是什么?答:MCS-51的标志寄存器PSW有8位;CCA0FRCCA0FRS1RS0VOPD D D D D D D76543210含义如下:C(PSW.7):进位或借位标志位。AC(PSW.6):辅助进位
4、或借位可标志位。F0(PSW.5):用户标志位。是系统预留给用户自己定义的标志位。RS1、RS0(PSW.4、PSW.3):寄存器组选择位。可用软件置位或清零,用于从四组工作寄存器中选定 当前的工作寄存器组。0V(PSW.2):溢出标志位。在加法或减法运算时,如运算的结果超出8位二进制数的范围,则0V置 1,标志溢出,否则0V清零。P(PSW.O):奇偶标志位。用于记录指令执行后累加器A中1的个数的奇偶性。若累加器A中1的个 数为奇数,则P置位,若累加器A中1的个数为偶数,贝打清零。其中PSW. 1未定义,可供用户使用。在8051的存储器结构中,内部数据存储器可分为几个区域?各有什么特点?答:
5、片内数据存储器按功能可以分成以下几个部分:工作寄存器组区、位寻址区、一般RAM区和特 殊功能寄存器区,其中还包含堆栈区。工作寄存器组区,00H1FH单元,可用R0R7等8个寄存器访 问;位寻址区,20H2FH单元,可按位方式访问;一般RAM区,30H7FH单元;堆栈区,可从08到7F 单元;特殊功能寄存器区位于80HFFH单元。什么是堆栈?说明MCS-51单片机的堆栈处理过程。答:堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。CS-51单片机的堆栈是向上生 长型的,存入数据是从地址低端向高端延伸,取出数据是从地址高端向低端延伸。入栈和出栈数据是以 字节为单位的。入栈时,SP指针的内容
6、先自动加1,然后再把数据存入到SP指针指向的单元;出栈时, 先把SP指针指向单元的数据取出,然后再把SP指针的内容自动减1。MCS-51单片机有多少根I/O线?它们和单片机的外部总线有什么关系?答:MCS-51单片机有32根I/O线,由P0 口经地址锁存器提供低8位(A7A0),P2 口提供高8位 (A15A8)而形成。数据总线宽度为8位,由P0 口直接提供。控制总线由第二功能状态下的P3 口和4 根独立的控制线RST、EA、ALE和PSEN组成。什么是机器周期? MCS-51单片机的一个机器周期包括多少个时钟周期?答:机器周期:机器周期是单片机的基本操作周期,每个机器周期包含S1、S2、S6
7、6个状态,每个状态包含两拍P1和P2,每一拍为一个时钟周期(振荡周期)。因此,一个机器周期包含12个时钟周 期。如果时钟周期的频率为12MHz,那么ALE信号的频率为多少?答:2MHZ第三章1在MCS-51单片机中,寻址方式有几种?其中对片内RAM可以用哪几种寻址方式?对片外RAM可 以用哪几种寻址方式?答:寻址方式2在对片外RAM单元寻址中,用Ri间接寻址与用DPTR间接寻址有什么区别?答:片外数据存储器寻址中,用Ri间接寻址只能访问低端的256字节单元,而用DPTR作指针间接 访问可访问整个64K字节。3.在位处理中,位地址的表示方式有哪几种?答:1直接位地址(OOHOFFH)。例如:20
8、H2字节地址带位号。例如:20H.3表示20H单元的3位。3特殊功能寄存器名带位号。例如:P0. 1表示P0 口的1位。4位符号地址。例如:TR0是定时/计数器T0的启动位4写出完成下列操作的指令。R0的内容送到R1中。MOV A,R0MOV R1,A片内RAM的20H单元内容送到片内RAM的40H单元中。MOV 40H,20H片内RAM的30H单元内容送到片外RAM的50H单元中。MOV A,30HMOV R0,#50HMOVX R0,A片内RAM的50H单元内容送到片外RAM的3000H单元中。MOV A,50HMOV DPTR,#3000HMOVX DPTR,A片外RAM的2000H单元
9、内容送到片外RAM的20H单元中。MOV DPTR,#2000HMOVX A,DPTRMOV 20H,A(6)片外RAM的1000H单元内容送到片外RAM的4000H单元中。MOV DPTR,#1000HMOVX A,DPTRMOV DPTR,#4000HMOV DPTR,A(7)ROM的1000H单元内容送到片内RAM的50H单元中。MOVA,#0MOVDPTR,#1000HMOVCA,A+DPTRMOV20H,A(8)ROM的1000H单元内容送到片外RAM的1000H单元中。MOVA,#0MOVDPTR,#1000HMOVCA,A+DPTRMOVXDPTR,A5区分下列指令有什么不同?(
10、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字节,后者源操作数访问片外数据存储器整个64K字节。(5)MOVX A, DPTR 和 MOVC A, A+DPTR 答:前者源操作数是访问片外数据存储
11、器,后者源操作数访问程序数据存储器。(10H) =10H、(40H) =OCAH、 P2=0CAH 和 P1=OCAH6(10H) =10H、(40H) =OCAH、 P2=0CAH 和 P1=OCAH内 RAM 的 2OH、4OH、1OH单元以及Pl、P2中的内容。MOVRO,#2OHMOVA,RO;A=4OHMOVR1,A;R1=4OHMOVA,R1;A=1OHMOVRO,P1;(4OH)=OCAHMOVP2,P1P2=OCAHMOV1OH,A(1OH)=1OHMOV2OH,1OH(2OH)=1OH结果:(20H) =10H、(Rl) =7FH,(DPTR) =2FFCH,片内 RAM (
12、7FH) =70H,片外 (Rl) =7FH,(DPTR) =2FFCH,片内 RAM (7FH) =70H,片外 RAM (2FFEH)=11H,ROM (2FFEH) =64H,试分别写出以下各条指令执行后目标单元的内容。1)MOVA,R1结果2)MOVXDPTR,A结果3)MOVCA,A+DPTR结果1)MOVA,R1结果2)MOVXDPTR,A结果3)MOVCA,A+DPTR结果4)XCHDA,R1结果累加器A等于70H片外RAM(2FFCH)单元等于02H累加器A等于64HA)=78H,(Rl)=78H,累加器A等于00H,片内RAM(7FH)单元等于72H8已知:分别写出下列指令执
13、行后目标单元的结果和相应标志位的值。(B) =04H,CY=1,片内 RAM(78H) =0DDH,(80H) =6CH,试ADD A,R1;累加器A等于55H,CY等于1SUBB A,#77H;累加器 A 等于 OOH,CY 等于 0MUL AB;累加器A等于EOH,B寄存器等于01H,CY等于1,OV等于0DIV AB;累加器A等于1EH,B寄存器等于OOH,CY、OV等于0ANL 78H,#78H ;片内 RAM (78H)单元等于 58HORL A,#OFH;累加器 A 等于 7FHXRL 8OH,A;片内 RAM (8OH)等于 14H9设(A) =83H,(RO) =17H,(17
14、H) =34H,分析当执行完下面指令段后累加器A、RO、17H单元 的内容。ANL A,#17H;A=O3HCPL A; A=CBH结果:A=CBH,(RO) =17H,(17H) =37H写出完成下列要求的指令。累加器A的低2位清零,其余位不变。ANL A, #11111100B累加器A的高2位置“1”,其余位不变。ORL A, #11000000B累加器的高4位取反,其余位不变。XRL A, #11110000B累加器第0位、2位、4位、6位取反,其余位不变。XRL A, #01010101B说明LJMP指令与AJMP指令的区别?答:LJMP12设当前指令CJNE A,#12H,10H的地
15、址是0FFEH,若累加器A的值为10H,则该指令执行后的 PC值为多少?若累加器A的值为12H呢?答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。13.用位处理指令实现P1.4=P1.0(P1.1P1.2)/P1.3的逻辑功能。程序:MOVC,P1.1ORLC,P1.2ANLC,P1.0ORLC,/P1.3MOVP1.4, C14下列程序段汇编后,从1000H单元开始的单元内容是什么?ORG 1000HTAB: DB 12H, 34HDS 3DW 5567H, 87H答:(1000H) =12H,(1001H) =34H,(1002H) =00H,
16、(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 R0,AINCR0DJNZ R2,LOOPSJMP $16编程实现将片外RAM的2000H2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并 将源位置清零。程序:MOV R0,#20HMOV DPTR,#2000HMOV R2,#30HLOO
17、P:MOVX A,DPTRMOV R0,AMOVA,#00MOVXDPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP $17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。程序:MOV DPTR,#1000HMOV R2,#100MOV R7, #00MOV R6, #00LOOP:MOVX A, DPTRADDA, R6MOVR6, AMOVA, R7ADDCA, #0MOVR7, AINCDPTRDJNZR2, LOOPSJMP$18编程实现R4R3R2,结果放于R7R6R5中。程序:ORG0100HMUL1: MOV A, R2MOVB,
18、 R3MULAB;R2R3,结果的低字节直接存入积的R5MOVR5, A;结果的高字节存入R6中暂存起来MOV R6, BMUL2: MOV A, R2MOVB,R4MULAB;R2 R4,结果的低字节与R6相加后,再存入R6中ADDA,R6MOVR6,AMOVA,B;结果的高字节加上进位位后存入R7中ADDCA,#00MOV R7, ASJMP19编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5 位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。程序:MOVC,20H.0MOVA.0,CMOVC,20H.1MOVA.1,CMOVC,21H
19、.2MOVA.2,CMOVC,21H.3MOVA.3,CMOVC,22H.4MOVA.4,CMOVC,22H.5MOVA.5,CMOVC,23H.6MOVA.6,CMOVC,23H.7MOVA.7,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编程统计从片外RA
20、M2000H开始的100个单元中“0”的个数放于R2中。程序:MOV DPTR,#2000HMOV R3,#100MOV R2,#00LOOP:MOVXA,DPTRJNZNEXTINCR2NEXT:INCDPTRDJNZR3,LOOPSJMP$第四章C语言有哪些特点?答:C语言具有以下特点:语言简洁、紧凑,使用方便、灵活运算符丰富数据结构丰富,具有现代化语言的各种数据结构可进行结构化程序设计可以直接对计算机硬件进行操作生成的目标代码质量高,程序执行效率高可移植性好有哪些数据类型是MCS-51单片机直接支持的?答:MCS-51单片机直接支持的数据类型标准分为基本数据类型和组合数据类型,基本数据类
21、型有字 符型char、短整型short、整型int、长整型long、浮点型float、双精度型double、特殊功能寄存器 型和位类型,其中char型与short型相同,float型与double型相同。组合数据类型有数组类型、结 构体类型、共同体类型和枚举类型,另外还有指针类型和空类型。C51特有的数据类型有哪些?答:C51特有的数据类型有特殊功能寄存器型和位类型。C51中的存储器类型有几种,它们分别表示的存储器区域是什么?答:C51中的存储器类型有6种,分别如下:data:直接寻址的片内RAM低128B,访问速度快bdata: idata: pdata:用Ri间接访问的片外RAM低256B
22、xdata:用DPTR间接访问的片外RAM,允许访问全部64KB片外RAMcode:程序存储器ROM 64KB空间在C51中,bit位与sbit位有什么区别?答:bit位类型符用于定义一般的位变量。存储器类型只能是bdata、data、idata,只能是片内 RAM的可位寻址区,严格来说只能是bdata。sbit位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时需指明其位地址,可以是 位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。在C51中,通过绝对地址来访问的存储器有几种?答:通过绝对地址来访问存储器有三种方法:1.使用C51运行库中预定义宏。2.通过指针访
23、问。3. 使用C51扩展关键字_at_在C51中,中断函数与一般函数有什么不同?答:中断函数在定义时后面带interrupt m修饰符,m的取值为031,对应的中断情况如下:0 外部中断0,1定时/计数器T0,2外部中断1,3定时/计数器T1,4串行口中断,5 定时/计数器T2,其他值预留。编写MCS-51中断函数需要注意如下几点。中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。中断函数没有返回值。在任何情况下都不能直接调用中断函数如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同,否则 会产生不正确的结果。C5 1编译器对中断函数编译时会自
24、动在程序开始和结束处加上相应的内容。C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数 字。该向量包含一个到中断函数入口地址的绝对跳转。中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其他程序调用。按给定的存储类型和数据类型,写出下列变量的说明形式。在data区定义字符变量val1。char data val1;在idata区定义整型变量 idata val2;在xdata区定义无符号字符型数组val34。unsigned char xdata val34;在xdata区定义一个指向char类型的指针px。ch
25、ar xdata *px;定义可寻址位变量flag。bit flag;定义特殊功能寄存器变量P3。sfr P3=0 xa0;定义特殊功能寄存器变量SCON。sfr SCON=0 x98;定义16位的特殊功能寄存器TO。sfr16 T0=0 x8a;写出下列关系表达式或逻辑表达式的结果,设a=3, b=4, c=5。a+bc&b= =c结果:假a|b+c&b-c结果:真!(ab)&!c|1结果:真!(a+b)+c-1&b+c/2 结果:假写出下列C51程序的执行结果。(1)#include extern serial_initial();main() int x,y,z; serial_init
26、ial();x=y=8;z=+x;printf(n %d %d %d,z,x)x=y=8;z=x+;printf(n %d %d %d,z,x)x=y=8;z=-x;printf(n %d %d %d,z,x)x=y=8;z=x-;printf(n %d %d %d,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);x=y
27、x!=y x=y);printf(n x y xy xy printf(n);x=y x!=y x=y);printf(n%3d%3d,x,y);z=xy;printf(%5d,z);z=xy;printf(%5d,z);z=x=y;printf(%5d,z);z=x!=y;printf(%5d,z);z=x=y;printf(%5d,z);while(1);执行结果:input data x,y?1 2x y xy xy x=y x!=y x=y1 2 1 1 0 0 1 0(3)#include extern serial_initial();main()int x,y,z;serial_
28、initial(); printf(input data x, y ?n); scanf(%d %d,&x,&y);printf(n x 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, y ?x y !x x|y x&y1 2 0 11That is all(4)#include extern serial_initi
29、al();main()int a,b; unsigned int x,y; serial_initial(); a=b=0 xaa55;x=y=0 xaa55;printf(n a=%4x b=%4x x=%4x y=%4x,a,b,x,y); a=a1;x=x1;printf(n a=%4x b=%4x x=%4x y=%4x,a,b,x,y); printf(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.b
30、reak和continue语句的区别是什么?答:break语句可以跳出switch结构,使程序继续执行switch结构后面的一个语句。break语句还 可以从循环体中跳出循环,提前结束循环而接着执行循环结构下面的语句。continue语句用在循环结构中,用于结束本次循环,跳过循环体中continue下面尚未执行的语 句,直接进行下一次是否执行循环的判定。continue语句和break语句的区别在于:continue语句只是结束本次循环而不是终止整个循环; break语句则是结束循环,不再进行条件判断。用分支结构编程实现:输入“1”显示“A”,输入“2”显示“B”,输入“3”显示“C”,输 入
31、“4”显示“D”,输入“5”结束。参考程序:#include #include void main(void)unsigned char x;SCON=0 x52;/串口初始化TMOD=0 x20;TH1=0XF3;TR1=1;while(1)printf(input x:n);/输出提示信息scanf(%c,&x);switch(x)case 1:printf( An);break;case 2:printf( Bn);break;case 3:printf( Cn);break;case 4:printf( Dn);break;case 5:printf( QUITn);break; de
32、fault: printf( RETRYn);if (x=5) break;while(1);输入3个无符号的字符数据,要求按由大到小的顺序输出。参考程序:#include #include void main(void)unsigned char x,y,z,m;/串口初始化SCON=0 x52;/串口初始化TMOD=0 x20;TH1=0XF3;TR1=1;printf(input x,y,z:); scanf(%c,%c,%c,&x,&y,&z); printf(n);if(xy)m=x;x=y;y=m;if(yz)m=y;y=z;z=m;if(xy)m=x;x=y;y=m;printf
33、(output %c,%c,%cn, x,y,z); while(1);/输出提示信息/输出参考程序:(1)while 循环#include #include void main(void)/包含特殊功能寄存器库/包含I/O函数库/主函数int i,s=0; i=1;SCON=0 x52;TMOD=0 x20;TH1=0XF3;TR1=1;while (i=10) /定义整型变量/输出提示信息/输出参考程序:(1)while 循环#include #include void main(void)/包含特殊功能寄存器库/包含I/O函数库/主函数int i,s=0; i=1;SCON=0 x52;
34、TMOD=0 x20;TH1=0XF3;TR1=1;while (i=10) /定义整型变量/串口初始化/累加1到10的平方之和在s中s=s+i*i; i+;printf(1 到 10 的平方之和=%dn,s); while(1);(2)do while 循环#include /包含特殊功能寄存器库#include /包含I/O函数库void main(void)int i,s=0;i=1;/主函数/定义整型变量SCON=0 x52;TMOD=0 x20;TH1=0XF3;TR1=1;/串口初始化dos=s+i*i; i+;/累加1到10的平方之和在s中while (i=10);printf(
35、l 到 while (i=10);printf(l 到 10 的平方之和=%dn,s);while(1);(3)for循环#include #include void main(void)int i,s=0;SCON=0 x52;TMOD=0 x20;/包含特殊功能寄存器库/包含I/O函数库/主函数/定义整型变量/串口初始化TH1=0XF3;TR1=1;for (i=1;i=10;i+) s=s+i*i; /累加 1 到 10 的平方之和在 s 中 printf(1 到 10 的平方之和=%dn,s);while(1);对一个由5个元素组成的无符号字符数组按由小到大的顺序进行排序。参考程序:/
36、包含特殊功能寄存器库/包含/包含特殊功能寄存器库/包含I/O函数库#include main()unsigned char f5,m,i,j;SCON=0 x52;/串口初始化TMOD=0 x20;TH1=0XF3;TR1=1;printf(输入任意5个字符:); scanf(%c,%c,%c,%c,%c,&f0,&f1,&f2,&f3,&f4); printf(n);for (i=0;i5;i+)for (j=0;jfj+1) m=fj;fj=fj+1;fj+1=m;printf(由小到大的顺序为:c,%c,%c,%c,%c ,f0,f1,f2,f3,f4); printf(n);while
37、(1);用指针实现,输入3个无符号字符数据,按由大到小的顺序输出。参考程序:#include /包含特殊功能寄存器库#include stdio.h/包含 1/0 函数库main()unsigned char x,y,z;unsigned char *p,*p1,*p2,*p3;SC0N=0 x52; /串口初始化TM0D=0 x20;TH1=0XF3;TR1=1;printf(input x,y and z:n); scanf(%c,%c,%c,&x,&y,&z);printf(n); p1=&x;p2=&y; p3=&z;if (*p1*p2) p=p1;p1=p2;p2=p;if (*p
38、2*p3) p=p2;p2=p3;p3=p;if (*p1*p2) p=p1;p1=p2;p2=p; printf(max to min is:%c,%c,%cn,*p1,*p2,*p3); while(1);有3个学生,每个学生都包括学号、姓名和成绩,要求找出成绩最高的学生的姓名和成绩参考程序:#include /包含特殊功能寄存器库#include stdio.h/包含 1/0 函数库struct studentunsigned char number10;unsigned char name10;unsigned int grade;p13;main()unsigned char i,j
39、=0;SC0N=0 x52; /串口初始化TM0D=0 x20;TH1=0XF3;TR1=1;printf(input 3 studend number,name and grade:n);for (i=0;i3;i+)printf(input number:n); scanf(%s,p1i. number);printf(input name:n); scanf(%s,);printf(input grade:n); scanf(%d,&p1i.grade);for (i=1;ip1j.grade) j=i;printf(成绩最高的学生是:s,成绩是:d,,p
40、lj.grade);printf(n);while(1);第五章单片机C语言与汇编语言混合编程有哪几种方式?通常采用什么方式?答:单片机C语言和汇编语言混合编程分为汇编中调用C51函数和C51程序中引用汇编,通常使用 的是在C51程序中引用汇编。在C51程序中使用汇编语言有两种情况:一种是汇编程序部分和C51程序 部分为不同的模块,或不同的文件,通常由C51程序调用汇编程序模块的变量和函数(也可称为子程序或 过程);另一种是嵌入式汇编,即在C51程序中嵌入一段汇编语言程序。2简述C51程序调用汇编程序时如何实现参数传递。答:C51中调用汇编程序进行参数传递时都必须严格遵守C51函数的参数和返回
41、值的相关约定。行 参数传递的方式有两种,一种是通过寄存器传递参数,C51中不同类型的实参会存入相应的寄存器,在 汇编中只需对相应寄存器进行操作,即可达到传递参数的目的;第二种是通过固定存储区传递。3简述嵌入式汇编的实现方法。答:在C51程序中嵌入汇编程序通常的处理方法如下。第一步:在C文件中以如下方式嵌入汇编程序。第二步:在Keil C51软件的Project窗口右击嵌入汇编程序的C文件,在弹出的快捷菜单中选择 Options for .命令,选中右边的 Generate Assembler SRC File 和 Assemble SRC File 复选框,使检 查框由灰色变成黑色(有效)状态
42、。第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是KeilC51LibC51S.Lib)加 入到工程中,该文件必须作为工程的最后文件。4简述C51中调用汇编程序的实现方法。答:编写为C51调用的汇编程序,参数须按规定的寄存器或存储器传送,程序格式有相应的规则, 这些规则比较繁琐,为了便于处理,在实际中我们往往先用C51写出这个程序的主体,然后用SRC控制 指令编译产生asm文件,修改这个asm文件得到我们所要的汇编函数。处理过程具体如下。第一步:先用C语言程序编写出程序框架,如文件名为a1.c(注意参数)。第二步:在Keil C51的Project窗口中右击该C语言文件,在弹
43、出的快捷菜单中选择Options for .,右边的Generate Assembler SRCFile和Assemble SRC File,使检查框由灰色变成黑色(有效) 状态;第三步:根据选择的编译模式,把相应的库文件(如Small模式时,是KeilC51Lib C51S.Lib)加 入工程中,该文件必须作为工程的最后文件。库文件与编译模式的关系如前面。第四步:编译后将会产生一个SRC的文件,将这个文件扩展名改为ASM。这样就形成了可供C51程 序调用的汇编程序。随后可在该文件的代码段中加入所需的指令代码。第五步:将该汇编程序与调用它的主程序一起加到工程文件中,这时工程文件中不再需要原来的
44、C 语言文件和库文件,主程序只需要在程序开始处用EXTERN对所调用的汇编程序中的函数作声明,在主程 序中就可调用汇编程序中的函数了。Afr -第六章何为“准双向I/O接口”?在MCS-51单片机的四个并口中,哪些是“准双向I/O接口”?答:准双向I/O接口是能实现输入输出功能,但在使用时只能从输入和输出中选择一个MCS-51单 片机的四个并口中P1、P2、P3是准双向I/O接口。80C51 单片机内部有几个定时/计数器?它们由哪些功能寄存器组成?怎样实现定时功能和计数 功能?答:80C51单片机内部有两个16位的可编程定时/计数器,由THO,TLO,TH1,TL1,TMOD和TCON功能 寄
45、存器组成。通过TMOD中的C/T位选择对机器周期计数实现计数功能,选择对外部脉冲计数实现计数功 能。定时/计数器T0有几种工作方式?各自的特点是什么?答:有四种工作方式,特点见下表:M1M0工作方式0方式说明M1M0工作方式0方式说明13位定时/计数器16位定时/计数器8位自动重置定时/计数器两个8位定时/计数器(只有T0有)定时/计数器的四种工作方式各自的计数范围是多少?如果要计10个单位,不同的方式初值应 为多少?答:有四种方式。方式0计数范围: 18192;方式1计数范围: 165536;方式2计数范围: 1256;方式 3 计数范围:1256。如果计10个单位,方式0初值为:8192-
46、10=8182;方式1初值为:65536-10=65526;方式2初 值为: 256-1 0=246;方式2初值为: 256-1 0=246 。设振荡频率为12MHz,如果用定时/计数器T0产生周期为100ms的方波,可以选择哪几种方 式,其初值分别设为多少?答:只能选择方式 1,初值为 65536-50000=15536。何为同步通信?何为异步通信?各自的特点是什么?答:异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空 闲状态,空闲线路约定为高电平“1”。特点是对发送时钟和接收时钟的要求相对不高,线路简单,但传 送速度较慢。同步通信方式的特点是数据在线路上
47、传送时以字符块为单位,一次传送多个字符,传送时须在前面 加上一个或两个同步字符,后面加上校验字符。特点是对发送时钟和接收时钟要求较高,往往用同一个 时钟源控制,控制线路复杂,传送速度快。单工、半双工和全双工有什么区别?答:单工方式只有一根数据线,信息只能单向传送;半双工方式也只有一根数据线,但信息可以分 时双向传送;全双工方式有两根数据线,在同一个时刻能够实现数据双向传送。设某异步通信接口,每帧信息格式为10位,当接口每秒传送1000个字符时,其波特率为多 少?答:10000波特串行口数据寄存器SBUF有什么特点?答:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄
48、存器),执行 MOV SBUF,A发送时为发送数据寄存器,执行MOV A, SBUF接收时为接收数据寄存器。MCS-51单片机串行口有几种工作方式?各自特点是什么?答:有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。方式1,称为8位的异步通信方式,通常用于双机通信。方式2和方式3,称为9位的异步通信方式,通常用于多机通信。说明SM2在方式2和方式3对数据接收有何影响。答:通过SM2对方式2和方式3数据接收进行控制,SM2=1,那么只有接收的第9位为“ 1”才接收 有效。如SM2=0,接收的第9位无论为1还是0
49、都接收有效。怎样来实现利用串行口扩展并行输入/输出口?答:利用串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口;当外接 一个并入串出的移位寄存器时,就可以扩展并行输入口。什么是中断、中断允许和中断屏蔽?答:在计算机中,由于计算机内外部的原因或软硬件的原因,使CPU从当前正在执行的程序中暂停 下来,而自动转去执行预先安排好的为处理该原因所对应的服务程序。执行完服务程序后,再返回被暂 停的位置继续执行原来的程序,这个过程称为中断,实现中断的硬件系统和软件系统称为中断系统。中 断允许是允许中断请求送CPU产生中断,中断屏蔽是禁止中断请求信号送CPU产生中断。8051有几个中断源
50、?中断请求如何提出?答:MCS-51单片机提供5个硬件中断源:两个外部中断源INTO (P3.2)和INTI (P3.3),两个定时/ 计数器T0和T1中断;1个串行口中断。外部中断源INTO和INT1的P3.2和P3.3输入;两个定时/计数器T0和T1的溢出中断TF0和TF1 定时/计数器T0(或T1)溢出时提出;串行口中断由发送中断标志T1和接收中断标志R1产生。8051的中断源中,哪些中断请求信号在中断响应时可以自动清除?哪些不能自动清除?应如何 处理?答:工作在边沿触发方式下的两个外部中断源和两个定时/计数器中断中断请求信号在中断响应时可 以自动清除,工作在电平触发方式下的两个外部中断
51、源和串行口中断不能自动清除。工作在电平触发方 式下的两个外部中断源的中断请求信号通过外加硬件和加软件的方式清除,串行口中断标志T1和标志 R1完全由软件清除。8051的中断优先级有几级?在形成中断嵌套时各级有何规定?答:8051的中断优先级有两级;形成中断嵌套时规定(1) 正在进行的中断过程不能被新的同级或 低优先级的中断请求所中断,直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令 后,CPU才响应新的中断请求。正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。设8051的P1中各位接发光二极
52、管,分别用汇编语言和C语言编程实现逐个轮流点亮二极管, 并循环显示。参考程序:ORG 0000HLJMP MAINORG 0100H;主程序MAIN: MOV A,#01HLOOP:MOV P1,ACALL DELAYRL ASJMP LOOPSJMP $DELAY:MOV R7,#0FFHDJNZ R7,$RETENDC语言程序:#include /包含特殊功能寄存器库void delay(unsigned int x);void main()unsigned char i,j;while(1)i=01;for (j=0;j8;j+)P1=i;delay(100);i=i*2;void de
53、lay(unsigned int x) unsigned char j;while(x-)for (j=0;j125;j+);8051系统中,已知振荡频率为12MHz,用定时/计数器TO,实现从P1.0产生周期为2ms的方 波。要求分别用汇编语言和C语言进行编程。解:分析:从P1.0输出周期为2ms的方波,只须P1.0每1 ms取反一次则可。当系统时钟为 12MHZ,定时/计数器T0 工作于方式1时,最大的定时时间为65.536ms,满足1ms的定时要求,方式控 制字应设定为00000001B (01H)。定时1ms,计数值N为1000,初值X=65536-1000=64536,则 TH0=F
54、CH,TL0=18H。采用中断处理方式:程序如下:ORG 0000HLJMPMAINORG000BH;中断处理程序MOVTH0,#0FCHMOVTL0,#18HCPLP1.0RETIORG0100H;主程序MAIN:MOV TMOD,#01HMOVTH0,#0FCHMOVTL0,#18HSETBEASETBET0SETBTR0SJMP$ENDC语言程序:#include /包含特殊功能寄存器库sbit P1_0=P0;void main()TMOD=0 x01;TH0=0 xFC;TL0=0 x18;EA=1;ET0=1;TR0=1;while(1);void time0_int(void)
55、interrupt 1 /中断服务程序TH0=0 xFC;TL0=0 x18;P1_0=!P1_0;8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生周期为2s的方 波。要求分别用汇编语言和C语言进行编程。解:从P1.1产生2s的方波,应产生500ms的周期性的定时,定时到对P1.1取反就可实现。由于定 时时间较长,一个定时/计数器T1不能直接实现,采用定时/计数器T1产生周期性为10ms的定时,然后 用一个寄存器R2对10ms计数100次来实现。系统时钟为12MHZ,定时/计数器T1定时10ms,计数值N 为10000,只能选方式1,方式控制字为00010000
56、B (10H),初值X:X=65536-10000=55536=1101100011110000B则 TH1=11011000B=D8H, TL1=11110000B=F0H。定时/计数器T1采用中断处理方式。汇编程序:ORG 0000HLJMP MAINORG 001BHLJMP INTT1ORG 0100HMAIN: MOV TMOD,#10HMOVTH1,#0D8HMOVTL1,#0F0HMOVR2,#00HSETBEASETBET1SETBTR1SJMP$INTT1:MOV TH1,#0D8HMOV TL1,#0F0HINC R2CJNE R2,#64H,NEXTCPL P1.1MOV
57、 R2,#00HNEXT: RETIENDC语言程序:#include /包含特殊功能寄存器库sbit P1_1=P1;char i;void main()TMOD=0 x10; TH1=0 xD8;TL1=0 xf0;EA=1;ET1=1;i=0;TR1=1;while(1);void time0_int(void) interrupt 3 /中断服务程序 TH1=0 xD8;TL1=0 xf0;i+;if (i= =100) P1_1=! P1_1;i=0;8051系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生高电平宽度为 10ms,低电平宽度为20ms的矩形波。
58、要求分别用汇编语言和C语言进行编程。解:本题处理方式有多种,这里采用对定时/计数器T1形成10ms周期定时,用R2对10ms计数,当 计到1,则对P1.1置1,当计到2和3,则对P1.1置0来实现。用定时/计数器T1形成10ms周期定时 见上题。程序如下:ORG 0000HLJMP MAINLJMP INTT1ORG 0100HMAIN: MOV TMOD,#10HMOVTH1,#0D8HMOVTL1,#0F0HMOVR2,#00HSETBEASETBET1SETBTR1SJMP$INTT1: MOV TH1,#0D8HMOVTL1,#0F0HINCR2CJNER2,#01H,NEXTSETB
59、P1.1SJMPEXITNEXT: CJNE R2,#02H,NEXT1CLR P1.1SJMP EXITNEXT1:CJNE R2,#03H,NEXTSETB P1.1MOV R2,#00EXIT: RETIENDC语言程序:#include /包含特殊功能寄存器库sbit P1_1=P1;char i;void main()TH1=0 xD8;TL1=0 xf0;EA=1;ET1=1;i=0;TR1=1;while(1)if (i= =0) P1_1=1; if (i= =1) P1_1=0; if (i= =2) P1_1=0; void time0_int(void) interrup
60、t 3 /中断服务程序TH1=0 xD8;TL1=0 xf0;i+;21.if (i= =3) 21.用8051单片机的串行口扩展并行I/O接口,控制16个发光二极管依次发光,画出电路图,用 汇编语言和C语言分别编写相应的程序。解:采用在串口连接两个CD409解:采用在串口连接两个CD4094来实现,电路图如下:程序如下;ORG 0000HLJMP MAINORG 0100HMAIN:MOV SCON,#00HMOV R3,#00HMOV R2,#01HCLR P1.0START:MOV A,R3MOV SBUF,ALOOP: JNB TI,LOOPMOV A,R2MOV SBUF,ALOOP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力调度自动化维护员练习题含答案
- 安全生产责任险投保及理赔方案
- 农田灌溉渠系衬砌施工方案
- 2026年交通安全文明出行知识竞赛试题及答案
- 2026学年浙江省义乌市一年级语文期末高分黑金提分题(附答案)详细答案和解析
- OSSLT完整模拟考试题及详细答案解析
- OpenGL 高频面试题及详细答案(实战向)
- 货运车辆动态监控24小时值守方案
- 医疗纠纷预防前置管理中国专家共识(2026版)
- 保险代理从业人员资格考试模拟试题及解析
- 2026年4月自考13180操作系统试题
- 2026年学校保安招聘考试题库及答案
- 郑州宇通客车股份公司供应商管理手册
- GB/T 26071-2026太阳能电池用硅单晶及硅单晶片
- 《中国教育史》孙培青1
- 学堂在线 人工智能 章节测试答案
- 草原有害生物防治项目施工方案
- 退婚彩礼退还协议书
- 皮肤性病学 银屑病教案学习资料
- 《面神经炎》课件
- 互联网骨干直联点监测系统项目需求
评论
0/150
提交评论