




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章习题 1.什么是单片机?单片机和通用微机相比有何特点? 答:单片机又称为单片微计算机,它的结构特点是将微型计算机的基本功能部 件(如中央处理器(CPU) 、存储器、输入接口、输出接口、定时/计数器及终端 系统等)全部集成在一个半导体芯片上。 虽然单片机只是一个芯片,但无论从 组成还是从逻辑功能上来看,都具有微机系统的定义。与通用的微型计算机相 比,单片机体积小巧,可以嵌入到应用系统中作为指挥决策中心,是应用系统 实现智能化。 2.单片机的发展有哪几个阶段?8 位单片机会不会过时,为什么? 答:单片机诞生于 1971 年,经历了 SCM、MCU、SOC 三大阶段,早期的 SCM 单片 机都是 8 位或 4 位的。其中最成功的是 INTEL 的 8031,此后在 8031 上发展出 了 MCS51 系列 MCU 系统。基于这一系统的单片机系统直到现在还在广泛使用。 随着工业控制领域要求的提高,开始出现了 16 位单片机,但因为性价比不理想 并未得到很广泛的应用。90 年代后随着消费电子产品大发展,单片机技术得到 了巨大提高。随着 INTEL i960 系列特别是后来的 ARM 系列的广泛应用,32 位 单片机迅速取代 16 位单片机的高端地位,并且进入主流市场。然而,由于各应 用领域大量需要的仍是 8 位单片机,因此各大公司纷纷推出高性能、大容量、 多功能的新型 8 位单片机。 目前,单片机正朝着高性能和多品种发展,但由于 MCS-51 系列 8 位单片机 仍能满足绝大多数应用领域的需要,可以肯定,以 MCS-51 系列为主的 8 位单片 机,在当前及以后的相当一段时间内仍将占据单片机应用的主导地位。 3.举例说明单片机的主要应用领域。 答:单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备 的智能化管理及过程控制等领域,大致可分如下几个范畴:智能仪器 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等 优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、电 流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、 压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化, 且功能比起采用电子或数字电路更加强大。例如精密的测量设备(电压表、功 率计,示波器,各种分析仪) 。 工业控制 单片机具有体积小、控制功能强、功耗低、环境适应能力强、扩展灵活和使 用方便等优点,用单片机可以构成形式多样的控制系统、数据采集系统、通信 系统、信号检测系统、无线感知系统、测控系统、机器人等应用控制系统。例 如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网 构成二级控制系统等。 家用电器现在的家用电器广泛采用了单片机控制,从电 饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设 备和白色家电等。 2 网络和通信 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为 在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基 本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动 通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移 动通信,无线电对讲机等。 医用设备领域 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监 护仪,超声诊断设备及病床呼叫系统等等。 模块化系统 某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用, 而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微 缩在纯电子芯片中(有别于磁带机的原理) ,就需要复杂的类似于计算机的原理。 如:音乐信号以数字的形式存于存储器中(类似于 ROM) ,由微控制器读出,转 化为模拟音乐电信号(类似于声卡) 。在大型电路中,这种模块化应用极大地缩 小了体积,简化了电路,降低了损坏、错误率,也方便于更换。 汽车电子 单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于 CAN 总线的汽车发动机智能电子控制器、GPS 导航系统、abs 防抱死系统、制动系统、 胎压检测等。 此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空 航天等领域都有着十分广泛的用途。 4.将十进制数 37 转换为二进制,BCD 码和十六进制数,并对转换结果进行对比 分析。 答:37=(100101)B=(25)H;BCD 码为 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 0000B (5)-121 原码 1111 1001B 3 反码 1000 0110B 补码 1000 0111B 6.对于二进制数 1000 1001B,若理解为无符号数,则该数对应十进制数为多少? 若理解为有符号数,则该数对应十进制为多少?若理解为 BCD 数,则该数对应 十进制数为多少? 答:1000 1001B 无符号数:137 有符号数:-9; BCD 数:89; 7.对下列各组数进行“与” , “或”和“异或”运算。 (1)1010 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 (4) 0011 1100 和 1111 0000 与 0011 0000 或 1111 1100 异或 1100 1100 8.Proteus ISIS 的工作界面中包含哪几个窗口?菜单栏中包含哪几个选项? 答:Proteus ISIS 的工作界面主要包括标题栏、菜单栏、工具栏、状态栏、方 位控制按钮、仿真进程控制按钮、对象选择窗口,原理图编辑窗口和预览窗口 等。 主菜单栏包含文件、查看、编辑、工具、设计、图形、源文件、调试、库、 模板、系统、帮助选项。 9.利用 ISIS 模块开发单片机系统需要经过哪几个主要步骤? 答: (1)启动 ISIS; (2)绘制电路原理图; (3)输入单片机程序; (4)进行源代码调试; (5)仿真运行。 4 10.何谓 PCB?利用 ARES 模块进行 PCB 设计需要经过哪几个主要步骤? 答:PCB(Printed Circuit Board) ,中文名称为印制电路板,又称印刷电路板、 印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子元器件电气 连接的提供者。由于它是采用电子印刷术制作的,故被称为“印刷”电路板。 利用 ARES 模块进行 PCB 设计的主要步骤: (1)启动 ARES; (2)元器件布局; (3)元器件布线; (4)铺铜; (5)三维效果图; (6)CADCAM 输出。 第 2 章 MCS-51 单片机结构及原理 习题 1 MSC51 单片机内部由哪些功能部件组成,各有什么功能? 答:以 51 单片机为例,其内部功能部件有: 控制器:是对取自程序存储器中的指令进行译码,在规定的时刻发出各种操作 所需的控制信号,完成指令所规定的功能; 运算器:根据控制器发来的信号,执行算术逻辑运算操作; 存储器:包括程序存储和数据存储器; 定时器计数器:2 个 16 位定时器/计数器,可对机器周期计数,也可对外部输 入脉冲计数; 中断系统:可响应三个内部中断源和两个外部中断源的中断请求; 输入输出接口:4 个 8 位并行口和一个全双工串行口; 2MSC51 单片机外部引脚的名称是什么?各有什么功能? 答:(1) 电源及晶振引脚 VCC(40 脚):+5V 电源引脚 VSS(20 脚): 接地引脚 XTAL1(19 脚);外接晶振引脚(内置放大器输入端) XTAL2(18 脚):外接晶振引脚(内置放大器输出端) (2) 控制引脚 RST/VPD(9)为复位/ 备用电源引脚 ALE/PROG(30)为地址锁存使能输出/ 编程脉冲输入 PSEN(29):输出访问片外程序存储器读选通信号 EA/ VPP (31):外部 ROM 允许访问/ 编程电源输入 (3) 并行 I/O 口引脚 P0.0P0.7(3932 脚)P0 口; P1.0P1.7(18 脚)P1 口; P2.0P2.7(2128 脚)P2 口; P3.0P3.7(1017 脚)P3 口。 351 系列单片机的封装有哪些类型?请说明每一种封装引脚之间的距离。 答:51 系列单片机的封装有: 40 引脚双列直插封装(DIPdual in-line package) ,引脚之间的距离 是 100mil(); 5 44 引脚方形扁平封装(QFP quad flat package)方式,引脚之间的 距离是; 44 引脚带引线的塑料芯片载体 PLCC(Plastic Leaded Chip Carrier)。 4什么是复位?单片机复位电路有哪几种,工作原理分别是什么? 答:复位使单片机恢复原始默认状态的操作。 单片机复位电路有:上电复位电路,由电阻和电容构成,通过上电时,电容相当 于短路而使复位引脚在晶振有效的情况下保持 2 个机器周期的高电平;按钮开 关复位电路,由两个电阻的分压构成,通过手工按下按钮,使复位引脚在晶振 有效的情况下保持 2 个机器周期的高电平。 5通常的微机系统存储器结构有哪几种?MCS-51 单片机存储器属于哪一类? CS-51 可寻址多大空间? 答:通常的微机系统存储器结构有两种结构,即哈佛结构和冯诺依曼结构(也叫 普林斯顿结构),MCS-51 单片机存储器属于,MCS-51 可寻址空间是两个 64KB, 即 64KB 的程序存储空间和 64KB 的数据存储空间。 6片内 RAM 中低 128 个单元划分为哪三个主要部分?各部分的主要功能是什么? 答:片内 RAM 中低 128 个单元划分为三个部分: 工作寄存器区(00H-1FH) ,四组,每组 8 个,可作用工作寄存器切换使用; 可位寻址区(20H-2FH) ,16B,位地址为 00H-7FH,用作为按位寻址的空间; 用户 RAM 区(30H-7FH) ,80B,用作普通 RAM 单元或堆栈。 7程序状态字寄存器 PSW 各位的定义是什么? 答:程序状态字寄存器 PSW 各位的定义如下: C Y A C F 0 RS 1 RS 0 O V F 1 PCY AC F0 RS1 RS0 OV F1 P PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0 PSW.7:进/借位标志 CY,加法有进位时置 1,减法有借位时置 1; PSW.6:辅助进位标志 AC,加法运算低四位向高上四位有进位时置 1; PSW.5、PSW.1:用户标志位 F0 和用户标志位 F1, 保存用户的位数据; 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 完成一个最基本的动作。 机器周期:由 12 个时钟周期构成,完成一个基本操作 6 指令周期:是执行一条指令所需的时间,根据指令的复杂性,可由 14 个机器 周期构成。 当振荡频率为 12MHz 时,一个机器周期为 1 微秒。 9P0、P1、P2 和 P3 口的结构和功能分别是什么? 答:P0 口的每一位由 1 个锁存器 、2 个三态缓冲器 、1 个输出控制电路(非 门 X、与门、电子开关 MUX、输出驱动电路构成,其功能既可以作为通用 I/O 口实现输入/输出功能,也可作为单片机地址线的低 8 位和数据线实现外部扩展 功能。在用作输入输出口时,需外接上拉电阻。 P1 口的每一位由 1 个锁存器 、1 个场效应管驱动器 V 和 2 个三态门缓冲器 构成,其作用是用作输入输出口 P2 口的每一位由 1 个锁存器、2 个三态缓冲器、1 个输出控制单元、1 个输 出驱动单元构成,其功能是用作输入输出口,或地址总线的高 8 位。 P3 口的每一位由 1 个锁存器、2 个三态缓冲器、1 个第二功能控制单元 、1 个输出驱动单元构成,其作用是用作输入输出口或第二功能。 1051 单片机引脚 ALE 的作用是什么?当 51 不外接存储器时,ALE 上的输出的 脉冲频率是多少? 答:51 单片机引脚 ALE 的作用是对外部存储寻址时锁存 P0 口输出的低 8 位地 址,当 51 不外接存储器时,ALE 上的输出的脉冲频率是 fosc/6。 第 3 章 单片机的汇编语言与程序设计 习题 1MCS-51 单片机有哪几种寻址方式?适用于什么地址空间? 答:MCS-51 单片机有 7 种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、 立即寻址、变址寻址、位寻址、相对寻址。 直接寻址方式:操作数的地址由指令直接给出,适用于片内 RAM 的所有地 址空间;如 MOV A,68H MOV A,PSW 寄存器寻址方式:指令给出的是寄存器的编码,操作数在编码指定的寄存 器中,适用于片内 00H 至 1FH 的 32 个字节,用 R0,R7 表示,通过 PSW 的 RS1 和 RS0 选择组号确定对应 32 个字节中的其中 8 个,还有累加器 A,以及乘 除法指令中的 A 和 B 寄存器,位寻址方式中的布尔累加器 C; MOV A,R1 MUL AB INC DPTR 寄存器间接寻址方式:指令给出的是寄存器的编码,操作数地址在编码指 定的寄存器中,适用于片内 RAM 的全部空间,其中 52 系列中的 80H 至 FFH 只能 用寄存器间接寻址;如 MOV A,R0 MOV A,R1 MOVX A,DPTR 立即寻址方式:操作数本身在指令中直接,给出适用于用 8 位立即数对片 内 RAM 所有地址单元赋值,也可用 16 位立即数对 DPTR 赋值; 如 7 MOV A,#0E2H MOV DPTR,#2000H 变址寻址方式:以 DPTR 或 PC 作为基地址寄存器,以累加器 A 作为变址寄 存器,将基址寄存器与变址寄存器的内容相加形成操作数的实际地址的一种寻 址方式,变址寻址方式适用于程序存储器 ROM,仅有三条指令如下: MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR 位寻址方式:指令中直接给出操作数所在单元的位地址,适用于片内 RAM 中地址 20H 至 2FH 中的 16 个字节中的 128 个位地址空间和 80H 至 FFH 中地址中 可以被 8 整除的所有 SFR 中的每个位地址空间;如 MOV C,7FH MOV F0,C MOV C,ACC.7 相对寻址方式:为相对转移指令而设,指令中直接给出转移的相对偏移量, 其转移目标在当前指令-128 至127 字节范围内的地址空间。如 SJMP START HERE: SJMP HERE ;等效于: SJMP $ 2MCS-51 单片机的 PSW 程序状态字中无 ZERO(零)标志位,怎样判断某内部数 据单元的内容是否为零? 答:MCS-51 单片机的 PSW 程序状态字中无 ZERO(零)标志位,判断某内部数据单 元的内容是否为零是能通过取数到 A 累加器,再判断 A 中的每一位是否为零来 确定其值是否为零。 3编程将内部 RAM 的 20H-30H 单元内容清零。 解:设一个片内 RAM 指针 R0,先指向首地址 20H,通过累加器 A 清零,然后采 用间接寻址方式依次将 A 中的零值传送到指针所指的片内 RAM 单元,每传送一 个字节,地址指针加 1,直到达到地址为 30H 或达到计数器规定的 17 个字节为 止。 程序 1: MOV R0,#20H ;设地址指针初值 CLR A ;累加器清 0 CONT: MOV R0,A ;置 0 指针所指单元 INC R0 ;地址指针加 1 CJNE R0,#31H,CONT ;指针未超过终点则继续 SJMP $ ;暂停 程序 2: MOV R0,#20H ;设地址指针初值 CLR A ;累加器清 0 MOV R7,#17 ;计数器赋初值,从 20H 到 30H 共 17 个字节 CONT: MOV R0,A ;置 0 指针所指单元 INC R0 ;地址指针加 1 DJNZ R7, CONT ;计数器减 1,非 0,则继续 8 SJMP $ ;暂停 4编程查找内部 RAM 的 32H41H 单元中是否有 0AAH 这个数据,若有这一数据, 则将 50H 单元置为 0FFH,否则将 50H 单元清零。 解:设一个片内 RAM 指针 R0,先指向首地址 32H,比较R0 与#0AAH,若相等, 则退出循环,给 50H 单元赋 0FFH,若不相等,则 R0 加 1 为继续比较下一个字 节做准备,直到达到地址为 41H 或达到计数器规定的 16 个字节为止还没找到, 则给 50H 单元赋 00H 程序 1: MOV R0,#32H ;设地址指针初值 CONT: CJNE R0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移 MOV A,#0FFH ;相等,则准备好要赋的标志值 0FFH SJMP DOWN ;转存到保存结果处 NEXT: INC R0 ;修改地址指针 CJNE R0,#42H,CONT ;若指针未越过终点,则继续 MOV A,#00H ;查找失败,则将 00H 存入结果标志单元 DOWN: MOV 50H,A ;将比较结果标志存入 50H 单元 SJMP $ ;暂停 END 程序 2: MOV R7,#16 ;计数器赋初值,从 20H 到 30H 共 16 个字节 MOV R0,#32H ;设地址指针初值 CONT: CJNE R0,#0AAH,NEXT ;比较查找值与指针所指单元的值,不 相等转移 MOV A,#0FFH ;相等,则准备好要赋的标志值 0FFH SJMP DOWN ;转存到保存结果处 NEXT: INC R0 ;修改地址指针 DJNZ R7,CONT ;计数器减 1,非 0,则继续 MOV A,#00H ;查找失败,则将 00H 存入结果标志单元 DOWN: MOV 50H,A ;将比较结果标志存入 50H 单元 SJMP $ ;暂停 END 5查找 20H4FH 单元中出现 00H 的次数,并将查找结果存入 50H 单元。 解:从 20H 到 4FH 共 48 个字节 MOV R7,#48 ;字节计数器赋初值 MOV R0,#20H ;设地址指针初值 CONT: CJNE R0,#00H,NEXT ;比较查找值与指针所指单元的值,不相等转移 INC R6 ;相等,0 的个数计数器加 1 NEXT: INC R0 ;修改地址指针 DJNZ R7,CONT ;计数器减 1,非 0,则继续 MOV 50H,R6 ;保存 O 的个数计数值到 50H 单元 SJMP $ ;暂停 END END 9 6已知 A=83H,R0=17H,(17H)=34H,写出下列程序段执行之后的 A 中的内容。 ANL A,#17H ORL 17H,A XRL A,R0 CPL A END 答: ANL A,#17H ;A=03H ORL 17H,A ;(17H)=0011 0100 0000 0011=0011 0111 XRL A,R0 ;A= 0000 0011 0011 0111 =0011 0100 CPL A ;A=1100 1011 7已知单片机的晶振频率为 12MHz,分别设计延时为 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=753 DJNZ R6,D1 ;2 个机器周期,(1+753+2)*132=99792 RET ;2 个机器周期,1+99792+2=99795,约 100ms DELAY1S: MOV R7,#10 ;计数 10 次 1 LOOP: ACALL DELAY100MS;延时 100ms 子程序 99795+2 DJNZ R7,LOOP ;未达到 10 次则继续 10*(2+99795+2) RET ;返回 2+10*(2+99795+2)=997992 8内部 RAM 从 20H 单元开始处有一数据块,以 ODH 为结束标志,试统计该数据 块的长度,将该数据块送到外部数据存储器 7E01H 开始的单元,并将长度存入 7E00H 单元。 解:从 20H 的指针用 R0,从外部 RAM7E01 开始的指针用 DPTR,计数器用 R7 MOV R7,#0 ;字节计数器赋初值 MOV R0,#20H ;设片内 RAM 地址指针初值 MOV DPTR,#7E01H ;设片外 RAM 地址指针初值 CONT: MOV A,R0 ;取片内 RAM 中的一个字节 MOVX DPTR,A ;存入片外 RAM 指针所指单元 INC R7 ;长度计数器加 1 INC R0 ;片内 RAM 地址指针加 1 INC DPTR ;片外 RAM 地址指针加 1 CJNE A,#0DH,CONT ;未达到结束标志 MOV A,R7 ;取块计数长度值 MOVX DPTR,A ;保存 10 SJMP $ ;暂停 END 9内部 RAM 从 DATA 开始的区域中存放着 10 个单字节十进制数,求其累加和, 并将结果存入 SUM 和 SUM+1 单元。 解:R7 计数,R6 保存累加和高 8 位,R0 用作地址指针 ORG 0000H LJMP MAIN ORG 100H SUM EQU 30H DATAA EQU 40H MAIN: MOV R7,#10 ;字节计数器赋初值 MOV R0,#DATAA ;设片内 RAM 地址指针初值 CLR A ;累加器清 0 MOV R6,A ;累加结果的高 8 位 CONT: ADD A,R0 ;加 RAM 中的一个字节到 ACC DA A JNC NEXT ;若无进位则不用管高 8 位 INC R6 ;有进位,高 8 位加 1 NEXT: INC R0 ;片内 RAM 地址指针加 1 DJNZ R7,CONT ;未完继续 MOV SUM,A ;保存低 8 位 MOV SUM+1,R6 ;保存高 8 位 SJMP $ ;暂停 END 10内部 RAM 从 DATA1 和 DATA2 单元开始处存放着两个等长的数据块,数据块 的长度在 LEN 单元中。请编程检查这两个数据块是否相等,若相等,将 0FFH 写 入 RESULT 单元,否则将 0 写入 RESULT 单元。 解:从 DATA1 开始的指针用 R0,从 DATA2 开始的指针用 R1,计数器用 R7 LEN EQU 10 DATA1 EQU 30H DATA2 EQU 40H RESULT EQU 50H MOV R7,#LEN ;字节计数器赋初值 MOV R0,#DATA1 ;设片内 RAM 地址指针初值 MOV R1,#DATA2 ;设片外 RAM 地址指针初值 CONT: MOV A,R0 ;取片内 RAM R0 所指的的一个字节 MOV 7FH,R1 ;将 R1 所指单元内容取到片内 RAM 地址 7FH 中 CJNE A,7FH,NOEQ ;比较,不相等则结束 INC R0 ;DATA1 RAM 地址指针加 1 INC R1 ;DATA2 RAM 地址指针加 1 DJNZ R7,CONT ;未完,继续 MOV A,#0FFH ;相等,准备写入 FFH SJMP DOWN ;转写入结果处 NOEQ: MOV A,#0 ;不相等,准备写入 00H 11 DOWN: MOV RESULT,A ;保存比较结果标志 SJMP $ ;暂停 END 11编制程序,将内部 RAM 中 M1、M2、M3 和 M4 单元中的无符号数 xl、x2、x3 和 x4 相加,并把和存入 RO 和 R1(R0 中为高 8 位)中。 解: M1 EQU 30H M2 EQU 40H M3 EQU 45H M4 EQU 4FH MOV A,M1 ;取第一个数 ADD A,M2 ;与第二个数相加 JNC NEXT1 ;如果无进位,则转移至第三个相加 MOV R0,#1 ;有进位,高 8 位置 1 NEXT1: ADD A,M3 ;与第三个数相加 JNC NEXT2 ;没有进位,则转至第四个数相加 INC R0 ;有进位,高 8 位加 1 NEXT2: ADD A,M4 ;与第四个数相加 JNC NEXT3 ;没有进位,则转至结束 INC R0 ;有进位,高 8 位再加 1 NEXT3: MOV R1,A ;低 8 位保存到 R1 SJMP $ ;暂停 END 第 4 章 单片机的 C51 语言 习题 1C 语言的优点是什么?C 程序的主要结构特点是什么? 答:C 语言是一种高级语言,学习比低级容易,不需要具体组织、分配存储器 资源和处理端口数据,可以直接驱动单片机的所有资源。 C 程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程 序的入口,其他函数由主函数直接或间接调用。程序可以由一个文件或多个文 件组成。文件类型包括头文件和 C 语言源文件,也可以是汇编语言文件,C 程 序可与汇编语言混合编程。 2C51 语言的变量定义包含哪些关键因素?为何这样考虑? 答:C 语言的变量定义格式如下: 存储种类 数据类型 存储类型 变量名 其中: 存储种类与标准 C 语言相同,包括:自动型(auto)、外部型(extern)、静 态型(static)、寄存器型(register)。 数据类型除了包含标准 C 语言类型的字符型(char),整型(int),长整型 (long),浮点型(float),双精度型(double)外,还有二进制位型(bit),特殊 功能寄存器型(sfr),SFR 可位寻址的位类型(sbit)。 12 存储类型包括:片内 RAM 区(data)、片内可位寻址区(bdata),片内 RAM 间 接寻址区(idata),片外 RAM 页寻址区(pdata),片外 RAM 区(xdata)、ROM 区 (code)。 只所以比标准 C 语言多了存储类型,就是因为 MCS51 单片机的存储结构 中有四个物理存储空间(片内 RAM、片内 ROM,片外 RAM,片外 ROM),三个逻辑 地址空间(片内 RAM,片外 RAM,ROM),而且有多种寻址方式(直接寻址、间接 寻址、页面寻址、位寻址)所致,所以在定义变量时,要根据其所在位置和寻 址方式明确指定存储类型。 3C51 与汇编语言的特点各有哪些?怎样实现两者的优势互补? 答:C51 是结构化语言,代码紧凑;接近自然语言,程序可读性强,易于调试、 维护;库函数丰富,编程工作量小,可使产品开发周期短;具有机器级控制能 力,功能很强,适合于嵌入式系统开发;汇编指令无关,易于掌握,上手快。 汇编语言优点是编写的程序代码精炼、执行速度快,在相同功能下,汇编 语言程序可能比 C 语言程序效率高。缺点是对程序员要求高,必须对单片机的 硬件结构非常熟悉才能编程,不便于编写比较复杂的程序。 可根据需要对要求时间性很强的代码用汇编语言编写,其它部分用 C 语言 编写,两者混合编程就可以实现优势互补。 4指出下面程序的语法错误: #include main() a=C; int a=7,C delay(10) void delay(); cgar i; for(i=O; i main() a=C; /a 和 C 必须先定义才可使用 int a=7,C /缺分号,应该提在使用前说明 delay(10) /延时子程序必须先定义,或先有函数原型说明 void delay(); /作为函数定义,有函数定义不能嵌套的问题, /即不能在一个函数内定义另一个函数,而且“”前不应有分号 /作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体 cgar i; /字符型应该是 unsigned char for(i=O; i void main() #pragma asm MOV A,20H MOV B,35H MUL AB MOV DPTR,#1234H MOVX DPTR,A INC DPTR MOV A,B MOVX DPTR,A #pragma endasm 方法二:单用 C 语言编程实现 #include #include int movdata(char); void main() unsigned int xdata x; unsigned 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 14 #include char getdata(char); void main() char a=0x25,c; float f; c=getdata(a); f=sqrt(c); ;用汇编语言编写的取数据子函数,只有一个地址参数在 R7 中,返回值为指定 地址单元中的内容,用 R7 返回主函数。 PUBLIC _GETDATA DE SEGMENT CODE RSEG DE _GETDATA: MOV A,R7 ;取地址参数 MOV R0,A MOV A,R0 MOV R7,A ;返回地址单元中的内容 EXIT: RET END 方法二:单用 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将外部 RAM 10H15H 单元的内容传送到内部 RAM 10H15H 单元。 解:方法一:采用 C 语言与汇编语言混合编程 /用 C 语言编写的主函数 MAIN.C #include char movdata(char,char); void main() 15 char a=0x10,b=0x06; movdata(a,b); ;用汇编语言编写的移动数据子函数 MOVDATA,其中第一个参数在 R7 中为首地 址,第二个参数在 R5 中为字节数 PUBLIC _MOVDATA DE SEGMENT CODE RSEG DE _MOVDATA: MOVA,R7 ;取参数 MOV R0,A LOOP: MOVX A,R0 MOV R0,A DJNZ R5,LOOP EXIT: 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; /将两数中的较大者赋给 z ptr=0x24; /指向地址为 0x24 的目标单元 *ptr=z; /将大数存入目标单元 16 方法二: #include #include void main() unsigned int x,y,z; x=DBYTE0X20*256+DBYTE0X21; y=DBYTE0X22*256+DBYTE0X23; z=(xy)?x:y; /将两数中的较大者赋给 z DBYTE0X24=z/256; DBYTE0X25=z%256; 方法三: #include unsigned int x _at_ 0x20; unsigned int y _at_ 0x22; unsigned int z _at_ 0x24; void main() z=(xy)?x:y; 第 4 章 单片机的 C51 语言 习题 1C 语言的优点是什么?C 程序的主要结构特点是什么? 答:C 语言是一种高级语言,学习比低级容易,不需要具体组织、分配存储器 资源和处理端口数据,可以直接驱动单片机的所有资源。 C 程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程 序的入口,其他函数由主函数直接或间接调用。程序可以由一个文件或多个文 件组成。文件类型包括头文件和 C 语言源文件,也可以是汇编语言文件,C 程 序可与汇编语言混合编程。 2C51 语言的变量定义包含哪些关键因素?为何这样考虑? 答:C 语言的变量定义格式如下: 存储种类 数据类型 存储类型 变量名 其中: 存储种类与标准 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 区 (code)。 17 只所以比标准 C 语言多了存储类型,就是因为 MCS51 单片机的存储结构 中有四个物理存储空间(片内 RAM、片内 ROM,片外 RAM,片外 ROM),三个逻辑 地址空间(片内 RAM,片外 RAM,ROM),而且有多种寻址方式(直接寻址、间接 寻址、页面寻址、位寻址)所致,所以在定义变量时,要根据其所在位置和寻 址方式明确指定存储类型。 3C51 与汇编语言的特点各有哪些?怎样实现两者的优势互补? 答:C51 是结构化语言,代码紧凑;接近自然语言,程序可读性强,易于调试、 维护;库函数丰富,编程工作量小,可使产品开发周期短;具有机器级控制能 力,功能很强,适合于嵌入式系统开发;汇编指令无关,易于掌握,上手快。 汇编语言优点是编写的程序代码精炼、执行速度快,在相同功能下,汇编 语言程序可能比 C 语言程序效率高。缺点是对程序员要求高,必须对单片机的 硬件结构非常熟悉才能编程,不便于编写比较复杂的程序。 可根据需要对要求时间性很强的代码用汇编语言编写,其它部分用 C 语言 编写,两者混合编程就可以实现优势互补。 4指出下面程序的语法错误: #include main() a=C; int a=7,C delay(10) void delay(); cgar i; for(i=O; i main() a=C; /a 和 C 必须先定义才可使用 int a=7,C /缺分号,应该提在使用前说明 delay(10) /延时子程序必须先定义,或先有函数原型说明 void delay(); /作为函数定义,有函数定义不能嵌套的问题, /即不能在一个函数内定义另一个函数,而且“”前不应有分号 /作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体 cgar i; /字符型应该是 unsigned char for(i=O; i void main() #pragma asm MOV A,20H MOV B,35H MUL AB MOV DPTR,#1234H MOVX DPTR,A INC DPTR MOV A,B MOVX DPTR,A #pragma endasm 方法二:单用 C 语言编程实现 #include #include int movdata(char); void main() unsigned int xdata x; unsigned 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 #include char getdata(char); 19 void main() char a=0x25,c; float f; c=getdata(a); f=sqrt(c); ;用汇编语言编写的取数据子函数,只有一个地址参数在 R7 中,返回值为指定 地址单元中的内容,用 R7 返回主函数。 PUBLIC _GETDATA DE SEGMENT CODE RSEG DE _GETDATA: MOV A,R7 ;取地址参数 MOV R0,A MOV A,R0 MOV R7,A ;返回地址单元中的内容 EXIT: RET END 方法二:单用 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将外部 RAM 10H15H 单元的内容传送到内部 RAM 10H15H 单元。 解:方法一:采用 C 语言与汇编语言混合编程 /用 C 语言编写的主函数 MAIN.C #include char movdata(char,char); void main() char a=0x10,b=0x06; movdata(a,b); 20 ;用汇编语言编写的移动数据子函数 MOVDATA,其中第一个参数在 R7 中为首地 址,第二个参数在 R5 中为字节数 PUBLIC _MOVDATA DE SEGMENT CODE RSEG DE _MOVDATA: MOVA,R7 ;取参数 MOV R0,A LOOP: MOVX A,R0 MOV R0,A DJNZ R5,LOOP EXIT: 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; /将两数中的较大者赋给 z ptr=0x24; /指向地址为 0x24 的目标单元 *ptr=z; /将大数存入目标单元 方法二: 21 #include #include void main() unsigned int x,y,z; x=DBYTE0X20*256+DBYTE0X21; y=DBYTE0X22*256+DBYTE0X23; z=(xy)?x:y; /将两数中的较大者赋给 z DBYTE0X24=z/256; DBYTE0X25=z%256; 方法三: #include unsigned int x _at_ 0x20; unsigned int y _at_ 0x22; unsigned int z _at_ 0x24; void main() z=(xy)?x:y; 第 5 章 单片机的中断系统 习题 1什么是中断、中断源、中断优先级和中断嵌套? 答:中断是指单片机内部有一个中断管理系统,它对内部的定时器事件、串行 通信的发送和接收及外部事件(如键盘按键动
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁波无尘室施工方案范本(3篇)
- 厕所土建施工方案(3篇)
- 致敬缅怀英烈活动方案策划(3篇)
- 景区节庆活动策划方案模板(3篇)
- 活动内容策划方案范文大全(3篇)
- 双绞网线施工方案(3篇)
- 安徽省马鞍山市雨山区2024-2025学年高二上学期期中考试历史试题含参考答案
- 项目管理 课件 第六章-项目成本管理
- 行政事务处理与活动策划工具
- 时空旅行高中政治课件
- GB/T 6553-2024严酷环境条件下使用的电气绝缘材料评定耐电痕化和蚀损的试验方法
- 2024年苏教版四年级数学上册全册教案
- 2024新科普版英语七年级上单词默写表
- 金融行业高质量发展专题研究报告
- 知识题库-人社练兵比武竞赛测试题及答案(五)
- 委托办理城市排水许可证授权书
- 多功能报告厅设计
- 学校生活指导老师面试问题
- 安防项目视频周界报警系统招投标书范本
- 烹饪概论高职全套教学课件
- 建筑装饰施工技术课件
评论
0/150
提交评论