单片机原理及应用_第二版(林立)课后答案.docx

上传人:暗伤 文档编号:39925635 上传时间:2022-09-08 格式:DOCX 页数:57 大小:352.09KB
返回 下载 相关 举报
单片机原理及应用_第二版(林立)课后答案.docx_第1页
第1页 / 共57页
单片机原理及应用_第二版(林立)课后答案.docx_第2页
第2页 / 共57页
点击查看更多>>
资源描述

《单片机原理及应用_第二版(林立)课后答案.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用_第二版(林立)课后答案.docx(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机原理及应用课后答案第一章习题1. 什么是单片机?单片机和通用微机相比有何特点?答:单片机又称为单片微计算机,它的结构特点是将微型计算机的根本功 能部件如中央处理器CPU、存储器、输入接口、输出接口、定时/计数器及终端系统等全部集成在一个半导体芯片上。虽然单片机只是一个芯片,但无论从组成还是从逻辑功能上来看,都具有 微机系统的定义。与通用的微型计算机相比,单片机体积小巧,可以嵌入到应用系统中作为指挥决策中心,是应用系统实现智能化。2. 单片机的开展有哪几个阶段?8 位单片时机不会过时,为什么?答:单片机诞生于 1971 年,经历了 SCM、MCU、SOC 三大阶段,早期的 SCM 单片机都

2、是 8 位或 4 位的。其中最成功的是 INTEL 的 8031,此后在 8031 上开展出了 MCS51 系列 MCU 系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了 16 位单片机, 但因为性价比不理想并未得到很广泛的应用。90 年代后随着消费电子产品大开展,单片机技术得到了巨大提高。随着 INTEL i960 系列特别是后来的 ARM 系列的广泛应用,32 位单片机迅速取代 16 位单片机的高端地位,并且进入主流市场。然而,由于各应用领域大量需要的仍是 8 位单片机,因此各大公司纷纷推出高性能、大容量、多功能的新型 8 位单片机。目前,单片机正

3、朝着高性能和多品种开展,但由于 MCS-51 系列 8 位单片机仍能满足绝大多数应用领域的需要,可以肯定,以 MCS-51 系列为主的8 位单片机,在当前及以后的相当一段时间内仍将占据单片机应用的主导地位。3. 举例说明单片机的主要应用领域。答:单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用 设备的智能化管理及过程控制等领域,大致可分如下几个范畴:智能仪器单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、电流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用

4、单片机控制使得仪器仪表数 字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如 精密的测量设备电压表、功率计,示波器,各种分析仪。工业控制单片机具有体积小、控制功能强、功耗低、环境适应能力强、扩展灵 活和使用方便等优点,用单片机可以构成形式多样的控制系统、数据采集系统、通信系统、信号检测系统、无线感知系统、测控系统、机器人等应用控制系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。家用电器现在的家用电器广泛采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备和白色家电等。网络和通信现代的单片机普遍

5、具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备根本上都实现了单片机智能控制,从 , 机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动 ,集群移动通信,无线电对讲机等。医用设备领域单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。模块化系统某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中有别于磁带机的原理,就需要复杂的类似于计算机的原理

6、。如:音乐信号以数字的形式存于存储器中类似于 ROM,由微控制器读出,转化为模拟音乐电信号类似于声卡。在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。汽车电子单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN 总线的汽车发动机智能电子控制器、GPS 导航系统、abs 防抱死系统、制动系统、胎压检测等。此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空 航天等领域都有着十分广泛的用途。4. 将十进制数 37 转换为二进制,BCD 码和十六进制数,并对转换结果进行比照分析。答:37=(100101)B=(25)H;BCD

7、 码为0011 0111 ;可见,同一个数用不同进制表示,其结果也不同。5. 写出以下十进制数在 8 位微机中的原码,反码和补码形式。(1)+36原码0010 0100B 反码0010 0100B 补码0010 0100B(2)-36原码1010 0100B 反码1101 1011B 补码1101 1100B(3)+127原码0111 1111B 反码0111 1111B补码0111 1111B(4)-128原码1000 0000B 反码0111 1111B 补码1000 0000B5-121原码1111 1001B 反码1000 0110B补码1000 0111B6. 对于二进制数 1000

8、 1001B,假设理解为无符号数,那么该数对应十进制数为多少?假设理解为有符号数,那么该数对应十进制为多少?假设理解为 BCD 数,那么该数对应十进制数为多少?答:1000 1001B 无符号数:137;有符号数:-9;BCD数:89;7. 对以下各组数进行“与,“或和“异或运算。11010 1010和0000 0000与0000 0000或1010 1010异或1010 1010(2)0111 0111 和1000 1000与0000 0000或1111 1111异或1111 1111(3)1110 1110 和0111 0111与0110 0110或1111 1111异或1001 1001

9、(4) 0011 1100和1111 0000与0011 0000或1111 1100异或1100 11008. Proteus ISIS 的工作界面中包含哪几个窗口?菜单栏中包含哪几个选项?1515y1I L l .即mm.g di tImsp. ,心 xx i ,叩臣 包 焙旦b 心r 工砐l s D ” : i 王 生 吁 h 至0 亡 0.! . b“ 8 T气沪 心SE “ ” !. l pI 口 今 国 1 印 氓 I 刍 比圉 rm 寺 | Q 3回 口 m 怂 芼 氐 1 王 玉元件列衾令 十 卫王l 石ii i 扑 太 1 由迈 全 心r 叶 的团 1 四匡 文 牲 黏 户忤

10、 扛R= 守 铝 西 沪 炉志一 口0 、8A 国 聋厅 图茹扭老口丑梪型选择工具拦方向工具栏oo 3hccI 19. 利用 ISIS 模块开发单片机系统需要经过哪几个主要步骤?答:1启动2绘制电路原理图;34进行源代码调试;5仿真运行。10. 何谓 PCB?利用 ARES 模块进行 PCB 设计需要经过哪几个主要步骤? 答:PCBPrinted Circuit Board,中文名称为印制电路板,又称印刷电路板、印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电 子元器件电气连接的提供者。由于它是采用电子印刷术制作的,故被称为“印刷电路板。利用 ARES 模块进行 PCB 设计的主要步骤

11、:(1) 启动ARES;(2) 元器件布局;(3) 元器件布线;(4) 铺铜;(5) 三维效果图;(6) CADCAM 输出。第 2 章MCS-51单片机结构及原理 习题1MSC 51 单片机内部由哪些功能部件组成,各有什么功能? 答:以 80C51 单片机为例,其内部功能部件有:控制器:是对取自程序存储器中的指令进行译码,在规定的时刻发出各种 操作所需的控制信号,完成指令所规定的功能;EA/ VPP (31):外部 ROM 允许访问编程电源输入(3) 并行I/O 口引脚P0.0P0.73932 脚P0 口; P1.0P1.718 脚P1 口; P2.0P2.72128 脚P2P3.0P3.7

12、1017 脚P3 口。351 系列单片机的封装有哪些类型?请说明每一种封装引脚之间的距离。答:51 系列单片机的封装有:40 引脚双列直插封装DIPdual in-line package,引脚之间的距离是 100mil(2.54mm);44 引脚方形扁平封装QFP quad flat package方式,引脚之间的距离是 2.54mm;44 引脚带引线的塑料芯片载体 PLCC(Plastic Leaded Chip Carrier)。4. 什么是复位?单片机复位电路有哪几种,工作原理分别是什么? 答:复位使单片机恢复原始默认状态的操作。单片机复位电路有:上电复位电路,由电阻和电容构成,通过上

13、电时,电容相当于短路而使复位引脚在晶振有效的情况下保持 2 个机器周期的高电平;按钮开关复位电路,由两个电阻的分压构成,通过手工按下按钮, 使复位引脚在晶振有效的情况下保持 2 个机器周期的高电平。5. 通常的微机系统存储器结构有哪几种?MCS-51 单片机存储器属于哪一类?CS-51 可寻址多大空间?答:通常的微机系统存储器结构有两种结构,即哈佛结构和冯诺依曼结构 (也叫普林斯顿结构),MCS-51 单片机存储器属于,MCS-51 可寻址空间是两个 64KB,即 64KB 的程序存储空间和 64KB 的数据存储空间。6. 片内 RAM 中低 128 个单元划分为哪三个主要局部?各局部的主要功

14、能是什么?答:片内 RAM 中低 128 个单元划分为三个局部:工作存放器区00H-1FH,四组,每组 8 个,可作用工作存放器切换使用;可位寻址区20H-2FH,16B,位地址为 00H-7FH,用作为按位寻址的空间;用户 RAM 区30H-7FH,80B,用作普通 RAM 单元或堆栈。7. 程序状态字存放器 PSW 各位的定义是什么? 答:程序状态字存放器 PSW 各位的定义如下:PSW.7:进/借位标志 CY,加法有进位时置 1,减法有借位时置 1; PSW.6:辅助进位标志 AC,加法运算低四位向高上四位有进位时置 1; PSW.5、PSW.1:用户标志位 F0 和用户标志位 F1,保

15、存用户的位数据;PSW.4、PSW.3:工作存放器选择控制位 RS1 和 RS0,00 至 11 分别选择四组工作之一作为当前工作存放器PSW.2 :溢出标志位 OV,有符号数加、减运算结果有溢出或乘除上结果异常(乘法运算结果大于 255 即乘积在BA 中,或除法运算除数为 0)时置 1 PSW.0:奇偶标志位P,累加器A 中 1 的个数为奇数时置 1。8. 什么是时钟周期?什么是机器周期?什么是指令周期?当振荡频率为12MHz 时,一个机器周期为多少微秒?答:时钟周期又叫振荡周期或拍,用 P 表示,是 MCS-51 单片机中最小的时间单位,在一个时钟周期内,CPU 完成一个最根本的动作。机器

16、周期:由 12 个时钟周期构成,完成一个根本操作指令周期:是执行一条指令所需的时间,根据指令的复杂性,可由 14 个机器周期构成。当振荡频率为 12MHz 时,一个机器周期为 1 微秒。9. P0、P1、P2 和 P3 口的结构和功能分别是什么?答:P0 口的每一位由 1 个锁存器 、2 个三态缓冲器 、1 个输出控制电路非门X 、与门、电子开关 MUX、输出驱动电路构成,其功能既可以作为通用 I/O 口实现输入/输出功能,也可作为单片机地址线的低 8 位和数据线实现外部扩展功能。在用作输入输出口时,需外接上拉电阻。P1 口的每一位由 1 个锁存器 、1 个场效应管驱动器 V 和 2 个三态门

17、缓冲器构成,其作用是用作输入输出口P2 口的每一位由 1 个锁存器、2 个三态缓冲器、1 个输出控制单元、1 个输出驱动单元构成,其功能是用作输入输出口,或地址总线的高 8 位。P3 口的每一位由 1 个锁存器、2 个三态缓冲器、1 个第二功能控制单元 、1 个输出驱动单元构成,其作用是用作输入输出口或第二功能。1080C51 单片机引脚 ALE 的作用是什么?当 80C51 不外接存储器时,ALE 上的输出的脉冲频率是多少?答:80C51 单片机引脚 ALE 的作用是对外部存储寻址时锁存 P0 口输出的低 8 位地址,当 80C51 不外接存储器时,ALE 上的输出的脉冲频率是fosc/6。

18、第 3 章 单片机的汇编语言与程序设计 习题1MCS-51 单片机有哪几种寻址方式?适用于什么地址空间?答:MCS-51 单片机有 7 种寻址方式:直接寻址、存放器寻址、存放器间接寻址、立即寻址、变址寻址、位寻址、相对寻址。直接寻址方式:操作数的地址由指令直接给出,适用于片内 RAM 的所有地址空间;如MOVA,68HMOVA,PSW存放器寻址方式:指令给出的是存放器的编码,操作数在编码指定的存放器中,适用于片内 00H 至 1FH 的 32 个字节,用 R0,R7 表示,通过 PSW 的 RS1 和RS0 选择组号确定对应 32 个字节中的其中 8 个,还有累加器 A, 以及乘除法指令中的

19、A 和 B 存放器,位寻址方式中的布尔累加器 C;MOVA,R1MULABINCDPTR存放器间接寻址方式:指令给出的是存放器的编码,操作数地址在编码指 定的存放器中,适用于片内 RAM 的全部空间,其中 52 系列中的 80H 至FFH 只能用存放器间接寻址;如 MOV A,R0MOVA,R1 MOVXA,DPTR立即寻址方式:操作数本身在指令中直接,给出适用于用 8 位立即数对片内 RAM 所有地址单元赋值,也可用 16 位立即数对 DPTR 赋值; 如MOVA,#0E2HMOVDPTR,#2000H变址寻址方式:以 DPTR 或PC 作为基地址存放器,以累加器 A 作为变址存放器,将基址

20、存放器与变址存放器的内容相加形成操作数的实际地址的一种寻址方式,变址寻址方式适用于程序存储器 ROM,仅有三条指令如下: MOVC A,A+DPTRMOVC A,A+PC JMP A+DPTR位寻址方式:指令中直接给出操作数所在单元的位地址,适用于片内 RAM 中地址 20H 至 2FH 中的 16 个字节中的 128 个位地址空间和 80H 至 FFH 中地址中可以被 8 整除的所有 SFR 中的每个位地址空间;如MOVC,7FHMOVF0,CMOV C,ACC.7相对寻址方式:为相对转移指令而设,指令中直接给出转移的相对偏移量, 其转移目标在当前指令-128 至127 字节范围内的地址空间

21、。如SJMPSTARTHERE:SJMPHERE;等效于:SJMP$2. MCS-51 单片机的 PSW 程序状态字中无 ZERO(零)标志位,怎样判断某内部数据单元的内容是否为零?答:MCS-51 单片机的 PSW 程序状态字中无 ZERO(零)标志位,判断某内部数据单元的内容是否为零是能通过取数到 A 累加器,再判断 A 中的每一位是否为零来确定其值是否为零。3. 编程将内部RAM 的 20H-30H 单元内容清零。解:设一个片内 RAM 指针 R0,先指向首地址 20H,通过累加器 A 清零,然后采用间接寻址方式依次将 A 中的零值传送到指针所指的片内 RAM 单元, 每传送一个字节,地

22、址指针加 1,直到到达地址为 30H 或到达计数器规定的 17 个字节为止。程序 1:MOV R0,#20H ;设地址指针初值CLR A ; 累 加 器 清 0CONT: MOV R0,A ;置 0 指针所指单元INC R0 ; 地 址 指 针 加 1CJNER0,#31H,CONT;指针未超过终点那么继续SJMP$;暂停程序 2:MOVR0,#20H;设地址指针初值CLRA;累加器清 0MOVR7,#17;计数器赋初值,从 20H 到 30H 共 17 个字节CONT:MOVR0,A;置 0 指针所指单元INCR0;地址指针加 1DJNZR7, CONT ;计数器减 1,非 0,那么继续SJ

23、MP$;暂停4. 编程查找内部 RAM 的 32H41H 单元中是否有 0AAH 这个数据,假设有这一数据,那么将 50H 单元置为 0FFH,否那么将 50H 单元清零。解:设一个片内 RAM 指针 R0,先指向首地址 32H,比拟R0 与#0AAH,假设相等,那么退出循环,给 50H 单元赋 0FFH,假设不相等,那么 R0 加 1 为继续比拟下一个字节做准备,直到到达地址为 41H 或到达计数器规定的16 个字节为止还没找到,那么给 50H 单元赋 00H程序 1:MOVR0,#32H;设地址指针初值CONT: CJNE R0,#0AAH,NEXT;比拟查找值与指针所指单元的值,不相等转

24、移MOVA,#0FFH;相等,那么准备好要赋的标志值 0FFHSJMPDOWN;转存到保存结果处 NEXT:INCR0;修改地址指针CJNER0,#42H,CONT;假设指针未越过终点,那么继续MOVA,#00H;查找失败,那么将 00H 存入结果标志单元DOWN:MOV50H,A;将比拟结果标志存入 50H 单元SJMP$;暂停END程序 2:MOVR7,#16;计数器赋初值,从 20H 到 30H 共 16 个字节MOVR0,#32H;设地址指针初值CONT:CJNER0,#0AAH,NEXT;比拟查找值与指针所指单元的值,不相等转移MOVA,#0FFH;相等,那么准备好要赋的标志值 0F

25、FHSJMPDOWN;转存到保存结果处 NEXT:INCR0;修改地址指针DJNZR7,CONT;计数器减 1,非 0,那么继续MOVA,#00H;查找失败,那么将 00H 存入结果标志单元DOWN:MOV50H,A;将比拟结果标志存入 50H 单元SJMP$;暂停END5. 查找 20H4FH 单元中出现 00H 的次数,并将查找结果存入 50H 单元。解:从 20H 到 4FH 共 48 个字节0000 0011=0011 0111XRLA,R0;A= 0000 0011 00110111 =0011 0100 CPLA;A=1100 10117. 单片机的晶振频率为 12MHz,分别设计

26、延时为 0.1s、1s 的子程序。答:单片机的晶振频率为 12MHz,那么机器周期为 1us,延时子程序是通过执行指令序列中机器周期数来到达,如果要 0.1s,即 100ms,也就是100000us,所以需要机器周期数到达 100000。要延时到达 1S,可通过对延时为 0.1 秒的子程序调用 10 次来实现。DELAY100MS:MOV R6,#200;1 个机器周期D1:MOV R7,#250;1 个机器周期D2:NOP;1 个机器周期DJNZ R7,D2;2 个机器周期,3*251=753DJNZ R6,D1;2 个机器周期,(1+753+2)*132=99792 RET;2 个机器周期

27、,1+99792+2=99795,约 100msDELAY1S:MOVR7,#10;计数 10 次1LOOP:ACALL DELAY100MS;延时 100ms 子程序99795+2DJNZR7,LOOP;未到达 10 次那么继续10*(2+99795+2)RET;返回 2+10*(2+99795+2)=9979928. 内部 RAM 从 20H 单元开始处有一数据块,以 ODH 为结束标志,试统计该数据块的长度,将该数据块送到外部数据存储器 7E01H 开始的单元,并将长度存入 7E00H 单元。解:从 20H 的指针用 R0,从外部 RAM7E01 开始的指针用 DPTR,计数器用R7MO

28、VR7,#0;字节计数器赋初值MOV R0,#20H ;设片内RAM 地址指针初值MOV DPTR,#7E01H ;设片外RAM 地址指针初值CONT: MOV A,R0 ;取片内RAM 中的一个字节MOVX DPTR,A ;存入片外RAM 指针所指单元INC R7 ; 长 度 计 数 器 加 1INC R0 ;片内RAM 地址指针加 1 INC DPTR ;片外RAM 地址指针加 1 CJNE A,#0DH,CONT ;未到达结束标志MOVA,R7;取块计数长度值MOVXDPTR,A;保存SJMP$;暂停END9. 内部 RAM 从 DATA 开始的区域中存放着 10 个单字节十进制数,求其

29、累加和,并将结果存入 SUM 和SUM+1 单元。解:R7 计数,R6 保存累加和高 8 位,R0 用作地址指针ORG0000HLJMPMAINORG100HSUMEQU30HDATAAEQU40HMAIN:MOVR7,#10;字节计数器赋初值MOVR0,#DATAA;设片内RAM 地址指针初值CLRA;累加器清 0MOVR6,A;累加结果的高 8 位CONT:ADDA,R0;加RAM 中的一个字节到 ACC DAAJNCNEXT;假设无进位那么不用管高 8 位INCR6;有进位,高 8 位加 1NEXT:INCR0;片内RAM 地址指针加 1 DJNZR7,CONT;未完继续MOVSUM,A

30、;保存低 8 位MOVSUM+1,R6;保存高 8 位SJMP$;暂停END10. 内部 RAM 从DATA1 和DATA2 单元开始处存放着两个等长的数据块,数据块的长度在 LEN 单元中。请编程检查这两个数据块是否相等,假设相等, 将 0FFH 写入RESULT 单元,否那么将 0 写入 RESULT 单元。解:从 DATA1 开始的指针用 R0,从 DATA2 开始的指针用 R1,计数器用 R7 LENEQU10DATA1EQU30HDATA2EQU40HRESULT EQU50HMOVR7,#LEN;字节计数器赋初值MOVR0,#DATA1;设片内RAM 地址指针初值MOVR1,#DA

31、TA2;设片外RAM 地址指针初值CONT:MOVA,R0;取片内RAM R0 所指的的一个字节MOV7FH,R1;将R1 所指单元内容取到片内 RAM 地址 7FH 中CJNEA,7FH,NOEQ;比拟,不相等那么结束INCR0;DATA1 RAM 地址指针加 1INCR1;DATA2 RAM 地址指针加 1 DJNZR7,CONT;未完,继续MOVA,#0FFH;相等,准备写入 FFHSJMPDOWN;转写入结果处NOEQ:MOVA,#0;不相等,准备写入 00HDOWN:MOVRESULT,A;保存比拟结果标志SJMP$;暂停END11. 编制程序,将内部 RAM 中 M1、M2、M3

32、和 M4 单元中的无符号数 xl、x2、x3 和x4 相加,并把和存入 RO 和R1(R0 中为高 8 位)中。解:M1EQU30HM2EQU40HM3EQU45HM4EQU4FHMOVA,M1;取第一个数ADDA,M2;与第二个数相加JNCNEXT1;如果无进位,那么转移至第三个相加MOVR0,#1;有进位,高 8 位置 1NEXT1:ADDA,M3;与第三个数相加JNCNEXT2;没有进位,那么转至第四个数相加INCR0;有进位,高 8 位加 1NEXT2:ADDA,M4;与第四个数相加JNCNEXT3;没有进位,那么转至结束INCR0;有进位,高 8 位再加 1NEXT3:MOVR1,A

33、;低 8 位保存到 R1SJMP$;暂停END第 4 章 单片机的 C51 语言 习题1C 语言的优点是什么?C 程序的主要结构特点是什么?答:C 语言是一种高级语言,学习比低级容易,不需要具体组织、分配存储器资源和处理端口数据,可以直接驱动单片机的所有资源。C 程序以函数为单位,由一个主函数和假设干个其他函数构成,主函数是程序的入口,其他函数由主函数直接或间接调用。程序可以由一个文件或多个文件组成。文件类型包括头文件和 C 语言源文件,也可以是汇编语言文件,C 程序可与汇编语言混合编程。2. C51 语言的变量定义包含哪些关键因素?为何这样考虑?答:C 语言的变量定义格式如下:存储种类 数据

34、类型 存储类型 变量名其中:存储种类与标准 C 语言相同,包括:自动型(auto)、外部型(extern)、静态型(static)、存放器型(register)。数据类型除了包含标准 C 语言类型的字符型(char),整型(int),长整型(long),浮点型(float),双精度型(double)外,还有二进制位型(bit), 特殊功能存放器型(sfr),SFR 可位寻址的位类型(sbit)。存储类型包括:片内 RAM 区(data)、片内可位寻址区(bdata),片内 RAM 间接寻址区(idata),片外 RAM 页寻址区(pdata),片外 RAM 区(xdata)、ROM 区(cod

35、e)。只所以比标准 C 语言多了存储类型,就是因为 MCS51 单片机的存储结构中有四个物理存储空间(片内RAM、片内 ROM,片外 RAM,片外 ROM),三个逻辑地址空间(片内RAM,片外 RAM,ROM),而且有多种寻址方式直接寻址、间接寻址、页面寻址、位寻址所致,所以在定义变量时,要根据其所在位置和寻址方式明确指定存储类型。3. C51 与汇编语言的特点各有哪些?怎样实现两者的优势互补?答:C51 是结构化语言,代码紧凑;接近自然语言,程序可读性强,易于调试、维护;库函数丰富,编程工作量小,可使产品开发周期短;具有机 器级控制能力,功能很强,适合于嵌入式系统开发;汇编指令无关,易于 掌

36、握,上手快。汇编语言优点是编写的程序代码精炼、执行速度快,在相同功能下,汇编 语言程序可能比 C 语言程序效率高。缺点是对程序员要求高,必须对单片机的硬件结构非常熟悉才能编程,不便于编写比拟复杂的程序。可根据需要对要求时间性很强的代码用汇编语言编写,其它局部用 C 语言编写,两者混合编程就可以实现优势互补。4. 指出下面程序的语法错误: #includemain() a=C;int a=7,C delay(10) void delay(); cgar i;for(i=O; i=255;+);答 : #include main()a=C;/a 和C 必须先定义才可使用int a=7,C/缺分号,

37、应该提在使用前说明delay(10)/延时子程序必须先定义,或先有函数原型说明void delay();/作为函数定义,有函数定义不能嵌套的问题,/即不能在一个函数内定义另一个函数,而且“前不应有分号/作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体cgar i;/字符型应该是 unsigned charfor(i=O; i=255;+);/ +应改成 i+/主函数没有结束,缺5. 定义变量 a,b,c,其中 a 为内部 RAM 的可位寻址区的字符变量,b 为外部数据存储区浮点型变量,c 为指向int型xdata区的指针。答: char bdata a; float xdata b

38、; int xdata *c;6. 编程将 8051 的内部数据存储器 20H 单元和 35H 单元的数据相乘,结果存到外部数据存储器中(任意位置)。解:方法一:用嵌入式汇编语言实现#include void main() #pragma asm MOVA,20HMOV MUL MOVB,35H ABDPTR,#1234HMOVX DPTR,AINC MOVDPTR A,BMOVX DPTR,A#pragmaendasm方法二:单用 C 语言编程实现#include #includeint movdata(char); void main()unsigned int xdata x; unsi

39、gned char *ptr,a,b; ptr=0x25;a=*ptr; ptr=0x30; b=*ptr; x=a*b;78051 的片内数据存储器 25H 单元中存放有一个 010 的整数,编程求其平方根(精确到 5 位有效数字),将平方根放到 30H 单元为首址的内存中。解:方法一:用 C 语言与汇编语言混合编程实现/用C 语言编写的主函数 MAIN.C #include #includechar getdata(char); void main()char a=0x25,c; float f; c=getdata(a); f=sqrt(c);用汇编语言编写的取数据子函数,只有一个地址参

40、数在 R7 中,返回值为指定地址单元中的内容,用 R7 返回主函数。PUBLIC_GETDATA DESEGMENTCODE RSEG DE_GETDATA: MOVA,R7;取地址参数MOVR0,AMOVA,R0MOVR7,A;返回地址单元中的内容EXIT:RETEND方法二:单用 C 语言编程实现/MAIN.C#include #include int movdata(char); void main()char n; char *ptr;float *ptr2; float f; ptr=0x25; n=*ptr; f=sqrt(n); ptr2=0x30;*ptr2=f;8. 将外部R

41、AM 10H15H 单元的内容传送到内部 RAM 10H15H 单元。解:方法一:采用 C 语言与汇编语言混合编程/用C 语言编写的主函数 MAIN.C #includechar movdata(char,char); void main()char a=0x10,b=0x06; movdata(a,b);用汇编语言编写的移动数据子函数 MOVDATA,其中第一个参数在 R7 中为首地址,第二个参数在 R5 中为字节数PUBLIC_MOVDATA DESEGMENTCODE RSEG DE_MOVDATA:MOVA,R7;取参数MOVR0,ALOOP:MOVXA,R0 MOVR0,A DJNZ

42、R5,LOOPEXIT:RET END方法二:单用 C 语言编程实现/MAIN.C#include int movdata(char); void main()char n=6;char *ptr1=0x10; char xdata *ptr2; ptr2=0x20; while(n-)*ptr2+=*ptr1+;9. 内部 RAM 20H、21H 和 22H、23H 单元分别存放着两个无符号的 16 位数,将其中的大数置于 24H 和 25H 单元。解 : 方 法 一 : #include void main()unsigned int *ptr;/设置一个内部 RAM 指针unsigned int x,y,z;ptr=0x20;/指向 0x20 单元x=*ptr;/取第一个数ptr=0x22;/指向 0x22 单元y=*ptr;/取第二个数z=(xy)?x:y;/将两数中的较大者赋给 zptr=0x24;/指向

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁