单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf

上传人:白大夫 文档编号:5603164 上传时间:2020-06-21 格式:PDF 页数:52 大小:293.16KB
返回 下载 相关 举报
单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf_第1页
第1页 / 共52页
单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf_第2页
第2页 / 共52页
单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf_第3页
第3页 / 共52页
单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf_第4页
第4页 / 共52页
单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf》由会员分享,可在线阅读,更多相关《单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf(52页珍藏版)》请在三一文库上搜索。

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 2. 指明下列字符在计算机内部的表示形式。 AsENdfJFmdsv120 答:41H 73H 4

2、5H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H 3. 什么是单片机? 答:单片机是把微型计算机中的微处理器、存储器、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的标

4、志寄存器 PSW 有 8 位; D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 C A C F 0 R S1 R S0 O 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

5、.0):奇偶标志位。用于记录指令执行后累加器A中 1 的个数的奇偶 性。若累加器 A中 1 的个数为奇数,则P置位,若累加器A中 1 的个数为偶 数,则 P清零。 其中 PSW.1 未定义,可供用户使用。 3. 在 8051的存储器结构中,内部数据存储器可分为几个区域?各有什么 特点? 答:片内数据存储器按功能可以分成以下几个部分:工作寄存器组区、位 寻址区、一般 RAM 区和特殊功能寄存器区,其中还包含堆栈区。工作寄存器组 区,00H 1FH单元,可用 R0 R7等 8 个寄存器访问;位寻址区,20H 2FH单 元,可按位方式访问;一般RAM 区,30H 7FH单元;堆栈区,可从08 到 7

6、F 单 元;特殊功能寄存器区位于80H FFH单元。 4. 什么是堆栈?说明MCS-51单片机的堆栈处理过程。 答:堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。CS-51 单片机的堆栈是向上生长型的,存入数据是从地址低端向高端延伸,取出数据 是从地址高端向低端延伸。入栈和出栈数据是以字节为单位的。入栈时,SP指 针的内容先自动加1,然后再把数据存入到SP指针指向的单元;出栈时,先把 SP指针指向单元的数据取出,然后再把SP指针的内容自动减1。 5. MCS-51 单片机有多少根 I/O 线?它们和单片机的外部总线有什么关系? 答:MCS-51单片机有 32 根 I/O 线,由 P0

7、口经地址锁存器提供低8 位 (A7A0),P2口提供高 8 位(A15A8)而形成。数据总线宽度为8 位,由 P0 口直接提供。控制总线由第二功能状态下的P3口和 4 根独立的控制线RST 、 EA 、ALE和 PSEN 组成。 . 6. 什么是机器周期? MCS-51单片机的一个机器周期包括多少个时钟周 期? 答:机器周期:机器周期是单片机的基本操作周期,每个机器周期包含 S1、S2、S66个状态,每个状态包含两拍P1和 P2,每一拍为一个时钟周 期( 振荡周期 )。因此,一个机器周期包含12个时钟周期。 7.如果时钟周期的频率为12MHz ,那么 ALE信号的频率为多少? 答:2MHZ 第

8、三章 1在 MCS-51 单片机中,寻址方式有几种?其中对片内RAM 可以用哪几种 寻址方式?对片外RAM 可以用哪几种寻址方式? 答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即 寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存 器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻 址。片内 RAM 寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片 外 RAM 寻址有:寄存器间接寻址方式。 2在对片外 RAM 单元寻址中,用Ri 间接寻址与用 DPTR 间接寻址有什么区 别? 答:片外数据存储器寻址中,用Ri 间接寻址只能访问低端的

9、256字节单 元,而用 DPTR 作指针间接访问可访问整个64K字节。 3在位处理中,位地址的表示方式有哪几种? 答:1直接位地址( 00H0FFH )。例如: 20H 2字节地址带位号。例如:20H.3 表示 20H单元的 3 位。 . 3特殊功能寄存器名带位号。例如:P0.1 表示 P0口的 1 位。 4位符号地址。例如: TR0是定时 / 计数器 T0 的启动位 。 4写出完成下列操作的指令。 (1)R0的内容送到 R1中。 MOV A ,R0 MOV R1 ,A (2)片内 RAM 的 20H单元内容送到片内RAM 的 40H单元中。 MOV 40H ,20H (3)片内 RAM 的

10、30H单元内容送到片外RAM 的 50H单元中。 MOV A ,30H MOV R0 ,#50H MOVX R0,A (4)片内 RAM 的 50H单元内容送到片外RAM 的 3000H单元中。 MOV A ,50H MOV DPTR ,#3000H MOVX DPTR,A (5)片外 RAM 的 2000H单元内容送到片外RAM 的 20H单元中。 MOV DPTR ,#2000H MOVX A ,DPTR MOV 20H ,A (6)片外 RAM 的 1000H单元内容送到片外RAM 的 4000H单元中。 . MOV DPTR ,#1000H MOVX A ,DPTR MOV DPTR

11、,#4000H MOV DPTR,A (7)ROM 的 1000H单元内容送到片内RAM 的 50H单元中。 MOV A ,#0 MOV DPTR ,#1000H MOVC A ,A+DPTR MOV 20H ,A (8)ROM 的 1000H单元内容送到片外RAM 的 1000H单元中。 MOV A ,#0 MOV DPTR ,#1000H MOVC A ,A+DPTR MOVX DPTR,A 5区分下列指令有什么不同? (1)MOV A ,20H和 MOV A ,#20H 答:前者源操作数是直接寻址,后者源操作数立即寻址。 (2)MOV A ,R1 和 MOVX A ,R1 答:前者源操作

12、数是访问片内数据存储器,后者源操作数访问片外数据 存储器低 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 答:前者源操作数是访问片外数据存储器,后者源操作数访问程序数据 存储器。 6设片内 RAM 的(20H )=40H ,(40H )=10H ,(10H )=50H ,(P1) =0CAH 。

13、分析下列指令执行后片内RAM 的 20H 、40H 、10H单元以及 P1、P2中的 内容。 MOV R0 ,#20H MOV A ,R0 ;A=40H MOV R1 ,A ;R1=40H MOV A ,R1 ;A=10H MOV R0,P1 ;(40H )=0CAH MOV P2 ,P1 P2=0CAH MOV 10H ,A (10H )=10H MOV 20H ,10H (20H )=10H 结果:( 20H )=10H 、(10H )=10H 、(40H )=0CAH 、P2=0CAH 和 P1=0CAH 7已知( A)=02H ,(R1 )=7FH ,(DPTR )=2FFCH ,片内

14、 RAM (7FH ) =70H ,片外 RAM (2FFEH )=11H ,ROM (2FFEH )=64H ,试分别写出以下各条指令 执行后目标单元的内容。 (1)MOV A ,R1 结果:累加器 A等于 70H (2)MOVX DPTR,A 结果:片外 RAM (2FFCH )单元等于 02H (3)MOVC A ,A+DPTR 结果: 累加器 A等于 64H (4)XCHD A ,R1 结果:累加器 A等于 00H ,片内 RAM (7FH ) 单元等于 72H 8已知:( A)=78H ,(R1 )=78H ,(B)=04H ,CY=1 ,片内 RAM (78H ) =0DDH ,(

15、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等于 7FH (7)XRL 80H,A ;片内 RAM (

16、80H )等于 14H 9设( A)=83H ,(R0)=17H ,(17H )=34H ,分析当执行完下面指令段后 累加器 A、R0 、17H单元的内容。 ANL A,#17H ;A=03H ORL 17H,A ;(17H )=37H XRL A,R0 ;A=34H CPL A ;A=CBH 结果: A=CBH ,(R0 )=17H ,(17H )=37H 10写出完成下列要求的指令。 (1)累加器 A的低 2 位清零,其余位不变。 ANL A,#11111100B (2)累加器 A的高 2 位置“ 1”,其余位不变。 ORL A,#11000000B (3)累加器的高 4 位取反,其余位不

17、变。 XRL A,#11110000B (4)累加器第 0 位、2 位、4 位、6 位取反,其余位不变。 XRL A,#01010101B 11说明 LJMP指令与 AJMP 指令的区别? . 答:LJMP指令后面提供的是16 位目标地址,所以可以转移到64KB程序 存储器的任意位置,缺点是:执行时间长,字节数多。 AJMP 指令后带的是 11 位直接地址,执行时,先将程序指针PC的 值加 2(该指令长度为 2 字节),然后把指令中的11 位地址 addr11 送给程序 指针 PC的低 11 位,而程序指针的高5 位不变,只能在当前2K范围内转移。 12设当前指令 CJNE A,#12H ,1

18、0H的地址是 0FFEH ,若累加器 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.1 ORL C,P1.2 ANL C,P1.0 ORL C,/P1.3 MOV P1.4,C 14下列程序段汇编后,从1000H单元开始的单元内容是什么? ORG 1000H TAB : DB 12H ,34H DS 3 DW 5567H ,87H 答

19、:( 1000H )=12H ,(1001H )=34H ,(1002H )=00H ,(1003H ) =00,(1004H )=00,(1005H )=67H ,(1006H )=55H ,(1007H )=87H , (1008H )=00H 15试编一段程序,将片内RAM 的 20H 、21H 、22H单元的内容依次存入片 外 RAM 的 20H 、21H 、22H中。 程序: . MOV R0,#20H MOV R2,#03H LOOP :MOV A ,R0 MOVX R0 ,A INC R0 DJNZ R2,LOOP SJMP $ 16编程实现将片外RAM 的 2000H2030H

20、 单元的内容,全部搬到片内RAM 的 20H单元开始位置,并将源位置清零。 程序: MOV R0,#20H MOV DPTR ,#2000H MOV R2,#30H LOOP :MOVX A,DPTR MOV R0 ,A MOV A,#00 MOVX DPTR,A INC DPTR INC R0 DJNZ R2,LOOP SJMP $ 17编程将片外 RAM 的 1000H单元开始的 100 个字节数据相加,结果放于 R7R6中。 程序: MOV DPTR ,#1000H . MOV R2,#100 MOV R7,#00 MOV R6,#00 LOOP :MOVX A,DPTR ADD A,R

21、6 MOV R6,A MOV A,R7 ADDC A,#0 MOV R7,A INC DPTR DJNZ R2,LOOP SJMP $ 18编程实现 R4R3R2 ,结果放于 R7R6R5 中。 程序: ORG 0100H MUL1 :MOV A ,R2 MOV B ,R3 MUL AB ;R2 R3 ,结果的低字节直接存入积的R5 MOV R5 ,A ;结果的高字节存入R6中暂存起来 MOV R6 ,B MUL2 :MOV A ,R2 MOV B ,R4 MUL AB ;R2 R4,结果的低字节与R6相加后,再存入 R6中 . ADD A,R6 MOV R6 ,A MOV A ,B ;结果的

22、高字节加上进位位后存入R7中 ADDC A ,#00 MOV R7 ,A SJMP $ 19编程实现把片内RAM 的 20H单元的 0 位、1 位,21H单元的 2 位、3 位,22H单元的 4 位、5 位,23H单元的 6 位、7 位,按原位置关系拼装在一起 放于 R2中。 程序: MOV C,20H.0 MOV A.0,C MOV C,20H.1 MOV A.1,C MOV C,21H.2 MOV A.2,C MOV C,21H.3 MOV A.3,C MOV C,22H.4 MOV A.4,C MOV C,22H.5 MOV A.5,C MOV C,23H.6 MOV A.6,C MOV

23、 C,23H.7 . MOV A.7,C MOV R2,A 20用查表的方法实现一位十六进制数转换成ASCII。 程序:(设一位十六进制数放在R2中,轮换的 ASCII 也放于 R2中) C16STASC:MOV DPTR ,#TAB MOV A,R2 MOVC A,A+DPTR MOV R2,A RET TAB :DB 30H,31H ,32H ,33H ,34H ,35H ,36H ,37H DB 38H,391H ,41H ,42H ,43H ,44H ,45H ,46H 21编程统计从片外RAM2000H 开始的 100个单元中“ 0”的个数放于 R2 中。 程序: MOV DPTR

24、,#2000H MOV R3,#100 MOV R2,#00 LOOP :MOVX A,DPTR JNZ NEXT INC R2 NEXT :INC DPTR DJNZ R3,LOOP SJMP $ . 第四章 1. C 语言有哪些特点? 答:C语言具有以下特点: 1) 语言简洁、紧凑,使用方便、灵活 2) 运算符丰富 3) 数据结构丰富,具有现代化语言的各种数据结构 4) 可进行结构化程序设计 5) 可以直接对计算机硬件进行操作 6) 生成的目标代码质量高,程序执行效率高 7) 可移植性好 2. 有哪些数据类型是MCS-51单片机直接支持的 ? 答:MCS-51单片机直接支持的数据类型标准分

25、为基本数据类型和组合数据 类型,基本数据类型有字符型char 、短整型 short 、整型 int 、长整型 long 、 浮点型 float 、双精度型 double 、特殊功能寄存器型和位类型,其中char 型 与 short 型相同, float型与 double 型相同。组合数据类型有数组类型、结构 体类型、共同体类型和枚举类型,另外还有指针类型和空类型。 3. C51 特有的数据类型有哪些? 答:C51特有的数据类型有特殊功能寄存器型和位类型。 4. C51 中的存储器类型有几种,它们分别表示的存储器区域是什么? 答:C51中的存储器类型有6 种,分别如下: data:直接寻址的片内

26、RAM 低 128B,访问速度快 bdata:片内 RAM 的可位寻址区 (20H2FH),允许字节和位混合访问 idata :间接寻址访问的片内RAM ,允许访问全部片内RAM pdata:用 Ri 间接访问的片外RAM 低 256B . xdata :用 DPTR 间接访问的片外 RAM ,允许访问全部 64KB片外 RAM code:程序存储器 ROM 64KB空间 5. 在 C51中,bit位与 sbit位有什么区别? 答:bit位类型符用于定义一般的位变量。存储器类型只能是bdata、 data、idata ,只能是片内 RAM 的可位寻址区,严格来说只能是bdata。 sbit位类

27、型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时 需指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是 特殊功能寄存器名带位号。 6. 在 C51中,通过绝对地址来访问的存储器有几种? 答:通过绝对地址来访问存储器有三种方法:1. 使用 C51运行库中预定义 宏。2. 通过指针访问。 3. 使用 C51扩展关键字 _at_ 7. 在 C51中,中断函数与一般函数有什么不同? 答:中断函数在定义时后面带interrupt m修饰符, m的取值为 031,对 应的中断情况如下: 0外部中断 0,1定时 / 计数器 T0,2外部中断 1,3定时 / 计数器 T1,4串行口中断

28、, 5定时 / 计数器 T2,其他值 预留。 编写 MCS-51 中断函数需要注意如下几点。 (1) 中断函数不能进行参数传递,如果中断函数中包含任何参数声 明都将导致编译出错。 (2) 中断函数没有返回值。 (3) 在任何情况下都不能直接调用中断函数 (4) 如果在中断函数中调用了其他函数,则被调用函数所使用的寄存 器必须与中断函数相同,否则会产生不正确的结果。 (5) C51编译器对中断函数编译时会自动在程序开始和结束处加上相 应的内容。 (6) C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断 号,也即 interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对

29、跳转。 . (7) 中断函数最好写在文件的尾部,并且禁止使用extern 存储类型 说明。防止其他程序调用。 8. 按给定的存储类型和数据类型,写出下列变量的说明形式。 (1) 在 data 区定义字符变量val1 。 char data val1; (2) 在 idata 区定义整型变量 val2 。 int idata val2; (3) 在 xdata 区定义无符号字符型数组val34。 unsigned char xdata val34; (4) 在 xdata 区定义一个指向 char 类型的指针 px。 char xdata *px; (5) 定义可寻址位变量flag 。 bit

30、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 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 %

31、d %d“,y,z,x); x=y=8;z=x-; printf(“n %d %d %d“,y,z,x); printf(“n“); while(1); 结果:8 9 9 8 8 9 8 7 7 8 8 7 (2) #include extern serial_initial();main() int x,y,z; serial_initial(); printf(“input data x,y?n“); scanf(“%d %d“, printf(“n x y xy x=y x!=y x=y“); printf(“n“); printf(“n%3d%3d“,x,y); z=xy; print

32、f(“%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 2 x y xy x=y x!=y x=y 1 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“, printf(“n x y !x x|y x

33、 printf(“n%3d%3d“,x,y); z=!y; printf(“%5d“,z); z=x|y; printf(“%5d“,z); z=x printf(“%5d“,z); printf(“n“);printf(“n“); printf(“That is alln“); while(1); 执行结果: input data x, y ? x y !x x|y x 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,

34、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=aa55 a=54aa b=d52a x=54aa y=552a That is all. 11. break 和 continue 语句的区别是什么? 答:break 语句可以跳出 switch 结构,使程序继续执行switch 结构后面的 一个语句。 break 语句还可以从循环体中跳

35、出循环,提前结束循环而接着执行 循环结构下面的语句。 continue 语句用在循环结构中,用于结束本次循环,跳过循环体中 continue 下面尚未执行的语句,直接进行下一次是否执行循环的判定。 continue 语句和 break 语句的区别在于: continue 语句只是结束本次循环 而不是终止整个循环; break 语句则是结束循环,不再进行条件判断。 12. 用分支结构编程实现:输入“1”显示“ A”,输入“ 2”显示 “B”,输入“ 3”显示“ C”,输入“ 4”显示“ D”,输入“ 5”结束。 参考程序: #include . #include void main(void)

36、unsigned char x; SCON=0x52; / 串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; while(1) printf(“input x:n“); / 输出提示信息 scanf(“%c“, 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; default: printf(“ RETRYn“); if (

37、x=5) break; while(1); 13. 输入 3 个无符号的字符数据,要求按由大到小的顺序输出。 参考程序: #include #include void main(void) unsigned char x,y,z,m; SCON=0x52; / 串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf(“input x,y,z:“); / 输出提示信息 scanf(“%c,%c,%c“, printf(“n“); if (x / 包含特殊功能寄存器库 #include / 包含 I/O 函数库 void main(void) / 主函数 int i,s=

38、0; / 定义整型变量 i=1; SCON=0x52; / 串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; while (i / 包含特殊功能寄存器库 #include / 包含 I/O 函数库 void main(void) / 主函数 int i,s=0; / 定义整型变量 i=1; SCON=0x52; / 串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; do / 累加 1 到 10 的平方之和在 s 中 s=s+i*i; i+; while (i / 包含特殊功能寄存器库 #include / 包含 I/O 函数库 void main(void)

39、 / 主函数 int i,s=0; / 定义整型变量 SCON=0x52; / 串口初始化 TMOD=0x20; . TH1=0XF3; TR1=1; for (i=1;i / 包含特殊功能寄存器库 #include / 包含 I/O 函数库 main() unsigned char f5,m,i,j; SCON=0x52; / 串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf(“输入任意 5 个字符 :“); scanf(“%c,%c,%c,%c,%c“, printf(“n“); for (i=0;ifj+1) m=fj;fj=fj+1;fj+1=m; pr

40、intf(“由小到大的顺序为 :%c,%c,%c,%c,%c “,f0,f1,f2,f3,f4); printf(“n“); while(1); 16. 用指针实现,输入3 个无符号字符数据,按由大到小的顺序输 出。 参考程序 : #include /包含特殊功能寄存器库 #include /包含 I/O 函数库 main() unsigned char x,y,z; unsigned char *p,*p1,*p2,*p3; SCON=0x52; / 串口初始化 . TMOD=0x20; TH1=0XF3; TR1=1; printf(“input x,y and z:n“); scanf(

41、“%c,%c,%c“, printf(“n“); p1=p2= p3= if (*p1 / 包含特殊功能寄存器库 #include / 包含 I/O 函数库 struct student unsigned char number10; unsigned char name10; unsigned int grade; p13; main() unsigned char i,j=0; SCON=0x52; / 串口初始化 TMOD=0x20; TH1=0XF3; TR1=1; printf(“input 3 studend number,name and grade:n“); for (i=0;

42、ip1j.grade) j=i; printf(“成绩最高的学生是 :%s,成绩是 :%d“,p1j.name,p1j.grade); printf(“n“); . while(1); 第五章 1单片机 C语言与汇编语言混合编程有哪几种方式?通常采用什么方式? 答:单片机 C语言和汇编语言混合编程分为汇编中调用C51函数和 C51程 序中引用汇编,通常使用的是在C51程序中引用汇编。在C51程序中使用汇编 语言有两种情况:一种是汇编程序部分和C51程序部分为不同的模块,或不同 的文件,通常由 C51程序调用汇编程序模块的变量和函数( 也可称为子程序或 过程) ;另一种是嵌入式汇编,即在C51程

43、序中嵌入一段汇编语言程序。 2简述 C51程序调用汇编程序时如何实现参数传递。 答:C51中调用汇编程序进行参数传递时都必须严格遵守C51函数的参数和 返回值的相关约定。行参数传递的方式有两种,一种是通过寄存器传递参数, C51中不同类型的实参会存入相应的寄存器,在汇编中只需对相应寄存器进行 操作,即可达到传递参数的目的;第二种是通过固定存储区传递。 3简述嵌入式汇编的实现方法。 答:在 C51程序中嵌入汇编程序通常的处理方法如下。 第一步:在 C文件中以如下方式嵌入汇编程序。 第二步:在 Keil C51 软件的 Project 窗口右击嵌入汇编程序的C文件,在 弹出的快捷菜单中选择Opti

44、ons for .命令,选中右边的Generate Assembler SRC File和 Assemble SRC File 复选框,使检查框由灰色变成黑色 (有效)状态。 第三步:根据选择的编译模式,把相应的库文件( 如 Small 模式时,是 KeilC51LibC51S.Lib)加入到工程中,该文件必须作为工程的最后文件。 4简述 C51中调用汇编程序的实现方法。 答:编写为 C51调用的汇编程序,参数须按规定的寄存器或存储器传送, 程序格式有相应的规则,这些规则比较繁琐,为了便于处理,在实际中我们往 往先用 C51写出这个程序的主体,然后用SRC 控制指令编译产生asm文件,修 改这

45、个 asm文件得到我们所要的汇编函数。处理过程具体如下。 . 第一步:先用 C语言程序编写出程序框架,如文件名为a1.c( 注意参数 ) 。 第二步:在 Keil C51 的 Project窗口中右击该 C语言文件,在弹出的快捷 菜单中选择 Options for .,右边的 Generate Assembler SRCFile和 Assemble SRC File ,使检查框由灰色变成黑色( 有效)状态; 第三步:根据选择的编译模式,把相应的库文件( 如 Small 模式时,是 KeilC51Lib C51S.Lib)加入工程中,该文件必须作为工程的最后文件。库 文件与编译模式的关系如前面。

46、 第四步:编译后将会产生一个SRC 的文件,将这个文件扩展名改为ASM 。这 样就形成了可供 C51程序调用的汇编程序。随后可在该文件的代码段中加入所 需的指令代码。 第五步:将该汇编程序与调用它的主程序一起加到工程文件中,这时工程 文件中不再需要原来的C语言文件和库文件,主程序只需要在程序开始处用 EXTERN 对所调用的汇编程序中的函数作声明,在主程序中就可调用汇编程序中 的函数了。 第六章 1. 何为“准双向 I/O 接口”?在 MCS-51 单片机的四个并口中,哪些是 “准双向 I/O 接口”? 答:准双向 I/O 接口是能实现输入输出功能,但在使用时只能从输入和输 出中选择一个。 M

47、CS-51单片机的四个并口中P1、P2、P3是准双向 I/O 接口。 2. 80C51 单片机内部有几个定时 / 计数器?它们由哪些功能寄存器组成?怎 样实现定时功能和计数功能? 答:80C51单片机内部有两个16 位的可编程定时 / 计数器,由 TH0,TL0,TH1,TL1,TMOD 和 TCON 功能寄存器组成。通过TMOD 中的 C/T 位选择对 机器周期计数实现计数功能,选择对外部脉冲计数实现计数功能。 3. 定时/ 计数器 T0有几种工作方式?各自的特点是什么? 答:有四种工作方式,特点见下表: M1 M0 工作方式方式说明 0 0 0 13 位定时 / 计数器 0 1 1 16

48、位定时 / 计数器 1 0 2 8 位自动重置定时 / 计数器 . 1 1 3 两个 8 位定时 / 计数器 (只有 T0 有) 4. 定时/ 计数器的四种工作方式各自的计数范围是多少?如果要计10个单 位,不同的方式初值应为多少? 答:有四种方式。方式0 计数范围: 18192;方式 1 计数范围: 165536; 方式 2计数范围: 1256;方式 3 计数范围: 1256。 如果计 10个单位,方式 0 初值为: 8192-10=8182;方式 1 初值为: 65536-10=65526;方式 2 初值为: 256-10=246;方式 2 初值为: 256-10=246。 5. 设振荡频率为 12MHz ,如果用定时 / 计数器 T0产生周期为 100ms的方 波,可以选择哪几种方式,其初值分别设为多少? 答:只能选择方式1,初值为 65536-50000=15536。 6. 何为同步通信?何为异步通信?各自的特点是什么? 答:异步通信方式的特点是数据在线路上传送时是以一个字符( 字节) 为单 位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。特点是对发 送时钟和接收时钟的要求相对不高,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1