欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PDF文档下载
     

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

    • 资源ID:5603164       资源大小:293.16KB        全文页数:52页
    • 资源格式: PDF        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第一章 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 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H 3. 什么是单片机? 答:单片机是把微型计算机中的微处理器、存储器、I/O 接口、定时 器/ 计数器、串行接口、中断系统等电路集成到一个集成电路芯片上形成 的微型计算机。因而被称为单片微型计算机,简称为单片机。 4. 单片机的主要特点是什么? 答:主要特点如下: 1) 在存储器结构上,单片机的存储器采用哈佛(Harvard) 结构 2) 在芯片引脚上,大部分采用分时复用技术 3) 在内部资源访问上,采用特殊功能寄存器(SFR)的形式 . 4) 在指令系统上,采用面向控制的指令系统 5) 内部一般都集成一个全双工的串行接口 6) 单片机有很强的外部扩展能力 5. 指明单片机的主要应用领域。 答:单机应用: 1) 工业自动化控制;2) 智能仪器仪表;3) 计算机外部设备 和智能接口; 4) 家用电器 多机应用:功能弥散系统、并行多机处理系统和局部网络系统。 第二章 1. MCS-51 单片机由哪几个部分组成? 答:MCS-51单片机主要由以下部分组成的:时钟电路、中央处理器(CPU)、 存储器系统 (RAM和 ROM) 、定时 / 计数器、并行接口、串行接口、中断系统及一 些特殊功能寄存器 (SFR)。 2. MCS-51 的标志寄存器有多少位,各位的含义是什么? 答:MCS-51的标志寄存器 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.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 到 7F 单 元;特殊功能寄存器区位于80H FFH单元。 4. 什么是堆栈?说明MCS-51单片机的堆栈处理过程。 答:堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。CS-51 单片机的堆栈是向上生长型的,存入数据是从地址低端向高端延伸,取出数据 是从地址高端向低端延伸。入栈和出栈数据是以字节为单位的。入栈时,SP指 针的内容先自动加1,然后再把数据存入到SP指针指向的单元;出栈时,先把 SP指针指向单元的数据取出,然后再把SP指针的内容自动减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.如果时钟周期的频率为12MHz ,那么 ALE信号的频率为多少? 答:2MHZ 第三章 1在 MCS-51 单片机中,寻址方式有几种?其中对片内RAM 可以用哪几种 寻址方式?对片外RAM 可以用哪几种寻址方式? 答:寻址方式可分为数的寻址和指令寻址,数的寻址有:常数寻址(立即 寻址)、寄存器数寻址(寄存器寻址)、存储器数寻址(直接寻址方式、寄存 器间接寻址方式、变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻 址。片内 RAM 寻址有:寄存器寻址、直接寻址方式和寄存器间接寻址方式。片 外 RAM 寻址有:寄存器间接寻址方式。 2在对片外 RAM 单元寻址中,用Ri 间接寻址与用 DPTR 间接寻址有什么区 别? 答:片外数据存储器寻址中,用Ri 间接寻址只能访问低端的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 的 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 ,#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 答:前者源操作数是访问片内数据存储器,后者源操作数访问片外数据 存储器低 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 。分析下列指令执行后片内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 ,片内 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 ,(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 (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 位取反,其余位不变。 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 ,10H的地址是 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 答:( 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 单元的内容,全部搬到片内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,R6 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 ;结果的高字节加上进位位后存入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 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 ,#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单片机直接支持的数据类型标准分为基本数据类型和组合数据 类型,基本数据类型有字符型char 、短整型 short 、整型 int 、长整型 long 、 浮点型 float 、双精度型 double 、特殊功能寄存器型和位类型,其中char 型 与 short 型相同, float型与 double 型相同。组合数据类型有数组类型、结构 体类型、共同体类型和枚举类型,另外还有指针类型和空类型。 3. C51 特有的数据类型有哪些? 答:C51特有的数据类型有特殊功能寄存器型和位类型。 4. C51 中的存储器类型有几种,它们分别表示的存储器区域是什么? 答:C51中的存储器类型有6 种,分别如下: data:直接寻址的片内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位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时 需指明其位地址,可以是位直接地址,可以是可位寻址变量带位号,也可以是 特殊功能寄存器名带位号。 6. 在 C51中,通过绝对地址来访问的存储器有几种? 答:通过绝对地址来访问存储器有三种方法: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) 如果在中断函数中调用了其他函数,则被调用函数所使用的寄存 器必须与中断函数相同,否则会产生不正确的结果。 (5) C51编译器对中断函数编译时会自动在程序开始和结束处加上相 应的内容。 (6) C51编译器从绝对地址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 区定义一个指向 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 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 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; 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 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 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,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 语句还可以从循环体中跳出循环,提前结束循环而接着执行 循环结构下面的语句。 continue 语句用在循环结构中,用于结束本次循环,跳过循环体中 continue 下面尚未执行的语句,直接进行下一次是否执行循环的判定。 continue 语句和 break 语句的区别在于: continue 语句只是结束本次循环 而不是终止整个循环; break 语句则是结束循环,不再进行条件判断。 12. 用分支结构编程实现:输入“1”显示“ A”,输入“ 2”显示 “B”,输入“ 3”显示“ C”,输入“ 4”显示“ D”,输入“ 5”结束。 参考程序: #include . #include void main(void) 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 (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=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) / 主函数 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; printf(“由小到大的顺序为 :%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(“%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;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程序中嵌入一段汇编语言程序。 2简述 C51程序调用汇编程序时如何实现参数传递。 答:C51中调用汇编程序进行参数传递时都必须严格遵守C51函数的参数和 返回值的相关约定。行参数传递的方式有两种,一种是通过寄存器传递参数, C51中不同类型的实参会存入相应的寄存器,在汇编中只需对相应寄存器进行 操作,即可达到传递参数的目的;第二种是通过固定存储区传递。 3简述嵌入式汇编的实现方法。 答:在 C51程序中嵌入汇编程序通常的处理方法如下。 第一步:在 C文件中以如下方式嵌入汇编程序。 第二步:在 Keil C51 软件的 Project 窗口右击嵌入汇编程序的C文件,在 弹出的快捷菜单中选择Options for .命令,选中右边的Generate Assembler SRC File和 Assemble SRC File 复选框,使检查框由灰色变成黑色 (有效)状态。 第三步:根据选择的编译模式,把相应的库文件( 如 Small 模式时,是 KeilC51LibC51S.Lib)加入到工程中,该文件必须作为工程的最后文件。 4简述 C51中调用汇编程序的实现方法。 答:编写为 C51调用的汇编程序,参数须按规定的寄存器或存储器传送, 程序格式有相应的规则,这些规则比较繁琐,为了便于处理,在实际中我们往 往先用 C51写出这个程序的主体,然后用SRC 控制指令编译产生asm文件,修 改这个 asm文件得到我们所要的汇编函数。处理过程具体如下。 . 第一步:先用 C语言程序编写出程序框架,如文件名为a1.c( 注意参数 ) 。 第二步:在 Keil C51 的 Project窗口中右击该 C语言文件,在弹出的快捷 菜单中选择 Options for .,右边的 Generate Assembler SRCFile和 Assemble SRC File ,使检查框由灰色变成黑色( 有效)状态; 第三步:根据选择的编译模式,把相应的库文件( 如 Small 模式时,是 KeilC51Lib C51S.Lib)加入工程中,该文件必须作为工程的最后文件。库 文件与编译模式的关系如前面。 第四步:编译后将会产生一个SRC 的文件,将这个文件扩展名改为ASM 。这 样就形成了可供 C51程序调用的汇编程序。随后可在该文件的代码段中加入所 需的指令代码。 第五步:将该汇编程序与调用它的主程序一起加到工程文件中,这时工程 文件中不再需要原来的C语言文件和库文件,主程序只需要在程序开始处用 EXTERN 对所调用的汇编程序中的函数作声明,在主程序中就可调用汇编程序中 的函数了。 第六章 1. 何为“准双向 I/O 接口”?在 MCS-51 单片机的四个并口中,哪些是 “准双向 I/O 接口”? 答:准双向 I/O 接口是能实现输入输出功能,但在使用时只能从输入和输 出中选择一个。 MCS-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 位定时 / 计数器 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”。特点是对发 送时钟和接收时钟的要求相对不高,

    注意事项

    本文(单片机C51程序设计课后习题答案(复习专用)..(0617103240).pdf)为本站会员(白大夫)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开