1、单片机原理与应用习题答案主编苏珊高如新谭兴国电子科技出版社单片机原理与应用电子科技出版社 主编:苏珊 高如新 谭兴国第一章习题答案1 什么叫单片机?它有哪些主要特点?单片机是将中央处理器( CPU)、随机存储器( RAM)、只读存储器( ROM)、中断系统、定时/计数器、I/O 口等主要计算机部件集成在一片集成电路芯片上的单片微型计算机 (SingleChip Microcomputer )的简称。具有体积小、功耗低、价格便宜、控制功能强等特点。2 请简述单片机的技术发展历史,单片机的主要技术发展方向是什么?单片机技术发展经历了单芯片微机形成阶段、 性能完善提高阶段和微控制器化阶段三个主要阶段
2、。 目前单片机主要技术发展方向是: 大容量高性能化、小容量低价格化、 外围电路内装化、多品种化以及 I/O 接口功能的增强、功耗降低等。3.单片机主要用在哪些方面?由于单片机体积小、功耗低、价格便宜,广泛应用于仪器仪表、家用电器、医用设备、航空航天专用设备的智能化管理及过程控制等领域; 又由于单片机具有较强的实时数据处理能力和控制功能, 可以使系统保持在最佳工作状态, 提高系统的工作效率和产品质量, 所以在工业控测控、航空航天、尖端武器等各种实时控制系统中,都作为控制器件使用。第二章习题参考答案1单片机系统复位后, PC值为( 0000H )。2MCS-51 单片机中,一个机器周期 =( 6
3、) 状态周期 =( 12 )振荡周期。当主频为 12MHz 时,一个机器周期为( 1s )3PSW中 RS1 RS0=01时,寄存器 R2的地址为 ( 10H) PSW中 RS1 RS0=10时,寄存器R2 的地址为 ( 12H)4MCS-51 单片机的 EA =0,程序存储器访问的是(片外 ROM )5MCS-51单片机上有( 4 )个独立的存储空间。6MCS-51 系列单片机在片内集成了哪些主要逻辑功能部件?答:有微处理器 CPU、程序存储器、数据存储器、定时 / 计数器、中断源、并行 I/O 端口等功能部件组成。7程序计数器( PC)作为不可寻址寄存器,它有哪些特点?数据地址指针 DPT
4、R 有哪些特点?答:PC是一个 16 位的特殊功能寄存器,又称程序指针,它具有自动加 1 的功能,始终指向下一条指令的首地址, 以保证程序按顺序执行; DPTR是一个 16 位的专用地址指针寄存器。作间址寄存器使用,用来存储外接 64KB 的数据存储器和 I/O 端口,DPTR也可以拆成两个独立 8 位的寄存器,即 DPH(高 8 位字节)和 DPL(低 8 位字节),分别占据 83H 和 82H两个地址。8MCS-51 单片机片内 256B 的数据存储器可分为几个区?分别作什么用?答:00H1FH 共 32 个单元通常作为工作寄存器区, 20H2FH 可用位寻址区,可直接进行位操作, 30H
5、7FH 共 80 个单元为用户 RAM 区,作堆栈或数据缓冲器用, 80HFFH为特殊功能寄存器区。9开机复位后, CPU使用的是哪组工作寄存器?它们的地址是什么? CPU 如何确定和改变当前工作寄存器组?答:开机复位后,由于 PSW复位值是 00H,CPU使用的是 0 区的工作寄存器 R0R7,它们的地址是 0007H,可以通过改变 PSW的 RS1 RS0 两个位的值确定和改变当前工作寄存器组。10堆栈有哪些功能?堆栈指针( SP)的作用是什么?在程序设计时,为什么还要对 SP重新赋值答:堆栈是一个特殊的存储区,用来暂存数据和地址。堆栈指针 SP 是用来管理堆栈的它指示出堆栈顶部在片内 R
6、AM 中的位置。系统复位后, SP 初始化为 07H,使得堆栈实际上从 08H 单元开始。由于 08H1FH 单元分属于工作寄存器 13 区,20H2FH 为位寻址区,若程序中要用到这些区,应把 SP值改为 30H 或更大的值。11MCS-51 的 SFR占用了什么空间?其寻址方式如何?答:MCS-51 的 SFR占用了片内数据存储器的空间,地址范围为 80HFFH。其寻址方式为直接寻址。12程序状态寄存器 PSW的作用是什么?常用状态位有哪些?它们的作用各是什么?答:PSW 是一个 8 位的特殊功能寄存器。用于存放程序运行中的各种状态信息。常用状态位及其作用:(1) 进位标志位 Cy。在进行
7、加或减运算时,如果操作结果最高位有进位或借位, Cy 由硬件置“ 1”,否则清“ 0”。(2) 辅助进位标志位 Ac 。在进行加或减运算时,如果低四位数向高位有进位或借位,硬件会自动将 Ac 置“l”,否则清“ 0”。(3) 工作寄存器区指针 RSl RS0。用于选择 CPU 当前工作寄存器的工作区。可由用户用软件来改变 RSl RS0 的组合,以切换当前选用的寄存器的工作区。(4) 溢出标志位 OV 。当进行算术运算时,如果产生溢出,则由硬件将 OV 位置“ l”,否则清“ 0”。(5) 奇偶标志位 P。该位始终跟踪累加器 A 中含“ 1”个数的奇偶性。如果 A 中有奇数个“1”,则 P 置
8、“ l”,否则置“ 0”。13MCS-51 单片机复位条件是什么?常用复位电路有哪些?答:复位条件是在单片机的 RST 引脚输入持续至少两个机器周期高电平。 MCS-51 单片机通常采用上电复位和上电 +按钮电平复位两种方式。第三章习题参考答案4.选择题:(1)可以实现片外数据存储器访问的指令是( A )。AMOVX B. MOV C. NOP D. DIV(2)下列指令中,可以实现将累加器 A 的第 0 位置 1(其它位不变)的指令是( B )。AMOV A,#01H B. SETB ACC.0 C. ANL A,#0FFH D. SETB ACC(3)MOVX A DPTR指令中,源操作数
9、的寻址方式是( B )A寄存器寻址 B. 寄存器间接寻址 C.直接寻址 D. 立即寻址(4)LCALL指令操作码地址是 2000H,执行完子程序返回指令后, PC=( D )。A2000H B. 2001H C.2002H D. 2003H(5)对程序存储器的读操作,只能使用 ( B )AMOVX B. MOVC C. PUSH D. MOV(6) 执行下面指令后, 30H 内容是( C )MOV R1,#30HMOV 40H,#0E0HMOV R1, 40HA40H B. 30H C. 0E0H D. FFH(7)下列指令格式正确的是( D )。ADEL:XCHA,30H B. MOV:IN
10、C AC. 2AB:MOV A,#20H D. ABC:MOV 23H,A(8)当执行指令( A )后,累加器 A 的内容为 00H。AANL A,#00H B. ORL A,#00HC. XRL A,#00H D.以上都不对2 比较下面各组指令,并在指令后添加注释(1) MOV A ,20H ; 20H 内容送累加器 AMOV C ,20H ;位地址 20H 内容送位累加器 C(2) MOV A ,20H ;20H 内容送累加器 AMOV R1 ,#20H ;20H 送累加器 AMOV A , R1 ; 20H 指向地址的内容累加器 A(3) CJNE A ,R1,L1 ;比较 A 和 R1
11、 指向地址的内容,若相等程序顺序运行,不相等则转 L1 处DJNZ R2 ,L1 ;R2 内容减 1,不等于 0 转 L1 处,等于 0 则顺序运行3判断下列指令是否正确,并改正错误(1). SUBB 30H,#12H该指令错误, 带进位减法指令目的操作数必须是 A,要将立即数 12H 和 30H 内容相加,可改为: MOV A , 30HSUBB A,#12H(2). MOV A ,2000H该指令错误, MOV 为内部数据传送指令,范围只是在内部数据存储器和累加器传送,地址不超过 FFH。要将外部 2000H 送累加器可改为MOV DPTR ,2000HMOVX A, DPTR(3). A
12、DD R0,0A3H该指令错误,要将 A3H 内容和 R0 内容相加,可改为: MOV A , R0ADD A,0A3H(4). CJNE 20H,#20H,L1该指令错误, CJNE第一操作数可以是 A、寄存器 Rn 或Ri可改为: MOV R1,20HCJNE R1,#20H,L1(5). RLC A该指令正确4设 R0的内容为 32H,A 的内容为 48H,而片内 RAM 32H 单元的内容为 80H,40H 单元的内容为 08H。请指出在执行下列程序段后,上述各单元的内容变化。MOV A,R0 ;R0 指向地址 32H内容送 A,即( A)=80HMOV R0,40H ;32H(40H
13、),即( 32H)=(40H)=08HMOV 40H ,A ;40H(A),即( 40H)=(A)=80HMOV R0 ,#35H ;R035H,(R0)=35H5 根据要求要求写出相应的指令。1).将 R0 的内容送 R1MOV A,R0MOV R1,A2)将 30H 内容送 20H。MOV 20H,30H3)将立即数 30H 送 R0HMOV R0,#30H5)将 R0 的内容送以 R1中内容为地址的存储单元。MOV A,R0MOV R1,A6)将内部 RAM30H 内容送外部 20H 单元。MOV A,30MOV R1,#20HMOVX R1,A7)将外部 RAM3000H 内容送内部
14、30H 单元。MOV DPTR,#3000HMOVX A, DPTRMOV 30H,A8)将 ROM2000H 内容送 R1。MOV DPTR,#3000HMOVC A, A+DPTRMOV R1,A9)将 ROM2000H 内容送内部 30H 单元。MOV DPTR,#2000HMOVC A, A+DPTRMOV 20H,A10)将 ROM2000H 内容送外部 20H 单元。MOV DPTR,#2000HMOVC A, A+DPTRMOV R1,#20HMOVX R1,A6编程将片外数据存储器地址为 40H60H 区域的数据块, 全部搬移到片内 RAM 的同地址区域,并将原数据区全部填为
15、FFH。MOV R0, #40HMOV R1, #33LOOP:MOVX A, R0MOV R0, AMOV A,#0FFHMOVX R0, AINC R0DJNZ R1,LOOPRET7编程找出片外 2000H200FH 数据区中的最小值,结果存放于 R2中。MOV DPT,R #2000HMOV R7, #0FHMOVX A,DPTRMOV B,ALOOP:INC DPTRMOVX A,DPTRCJNE A,B,LOOP1LOOP1:JNC LOOP2MOV B,ALOOP: DJNZ R7,LOOPMOV R7,BRET第四章习题参考答案5.是在外部 RAM 中的 xdata 区定义了无
16、符号字符型的字变量 OUTX2,它的地址是(1002H)。6.(1)编程容易 ;(2)容易实现复杂的数值计算; (3)容易阅读、调试、维护程序;(4)容易实现模块化开发; (5)程序可移植性好。7.bit,data,idata,pdata,code,xdata,sbit,sfr,sfr168.bit 和 sbit 都是 C51扩展的变量类型。bit 是位变量, 编译器在编译过程中分配地址。 除非指定, 否则这个地址是随机分配的。这个地址是整个可寻址空间,也就是内部 RAM、外扩 RAM 和 ROM。sbit 是对应可位寻址空间的一个位, 包括可位寻址区: 20H2FH 和特殊功能寄存器区。一旦
17、用了形如 sbi xxx = REGE6的定义,这个 sbit 量就确定地址了。bit 和 sbit 的最大区别在于, bit 是定义一个变量; sbit 经常用在寄存器中的,方便对寄存器的某位进行操作。9.(1)使用 C51 运行库中的预定义宏; (2)通过指针访问; (3)使用 C51 扩展关键字_at_。10.(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为 void 类型,以明确说明没有返回值。(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因
18、为中断函数的返回是由 8051 单片机的 RETI指令完成的, RETI指令影响 8051 单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数, RETI指令的操作结果会产生一个致命的错误。(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。(5)C51 编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对 ACC、B、DPH、DPL和 PSW入栈,结束时出栈。中断函数未加 usingm 修饰符的,开始时还要将 R0R1入栈,结束时出栈。如中断函数加 using m 修饰符,则在开始将 PSW
19、入栈后还要修改 PSW中的工作寄存器组选择位。(6)C51 编译器从绝对地址 8n+3 处产生一个中断向量, 其中 n 为中断号, 也即 interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。(7)中断函数最好写在文件的尾部,并且禁止使用 extern 存储类型说明。防止其它程序调用。11.有 small,compact 和 large 三种存储器模式。 Small存储器模式参数及局部变量放入可直接寻址的内部存储器(最大 128B,默认存储器类型为 data)compact 存储器模式参数及局部变量放入分页外部数据存储器(最大 256B,默认存储器类型为 pdata)lar
20、ge 存储器模式参数及局部变量直接放入外部数据存储器(最大 64KB,默认存储器类型为 xdata)8. #include main( )int i;unsigned char xdata *p=0x2000; /* 指针指向 2000H 单元 */for(i=0;i256;i+) /* 清零 2000H-20FFH单元 */*p=0; p+;9.(1)unsigned char code dis_code10=0x3f,0x06,0x5b,0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f,0x6f;(2)unsigned char data TL0_L _at_ 0x30
21、;unsigned char data TH0_H _at_ 0x31;(3)unsigned char idata data_buf20 ;(4)unsigned char xdata data_array100 ;(5)unsigned char bdata status;sbit flag_lamp1=status0;sbit flag_lamp2=status1;sbit flag_machine1=status2;sbit flag_machine2=status3;sbit flag_port1=status4;sbit flag_port2=status5;sbit flag_c
22、alcu1=status6;sbit flag_calcu2=status7;第五章习题参考答案1. MCS-51 单片机有 5 个中断源, 2 个中断优先级。优先级由软件填写特殊功能寄存器 IP加以选择。2. 外部中断请求标志位是 IE0 和 IE1。3. 8051 单片机响应中断后,产生长调用指令 LCALL,执行该指令的过程包括:首先把当前PC的内容压入堆栈, 对断点保护, 然后把长调用指令的 16 位地址送 PC,使程序转向执行中断入口地址区。4.8051 单片机的 IP 寄存器功能是设置中断优先级5. 用指令完成下列要求。INT1、T0 开中断,其余禁止中断;MOV IE, #86H
23、全部开中断MOV IE, #FFHINT0、T0 开中断,其余保持不变;SETB EASETB EX0SETB ET0INT1、串行口为高优先级,其余为低优先级;MOV IP, #85H12. 子程序和中断程序有何异同,为什么子程序返回指令 RET和中断返回指令 RETI 不能相互替代?答:中断类似于子程序设计中的调用子程序, 但它们有着本质的区别。 调用子程序是程序员事先安排好的,而中断是由一些特殊事件触发的,是随机的。 RET功能是恢复堆栈中 PC的值,从调用指令的下一条指令开始运行程序,不影响标志位。 RETI 除了具有 RET指令功能外,还清除内部相应的中断状态触发器,因此中断服务程序
24、必须以 RETI 为指令结束。 CPU执行 RETI 指令后至少再执行一条指令,才能响应新的中断请求,因此不能互换。4. 外部中断有几种中断触发方式?对跳变触发和电平触发信号有什么要求?如何设置?答:外部中断有低电平触发和边沿触发两种触发方式。低电平触发时,施加在相应引脚上的低电平在中断返回前必须撤消,否则将再次申请中断造成出错。即施加在 INT i 引脚上的低电平持续时间应大于一个机器周期,且小于中断服务程序的执行时间。在边沿触发方式中,为了保证 CPU 在两个机器周期内能够检测到由高至低跳变的电平,输入的高电平和低电平的持续时间至少要保持 12 个振荡周期(即一个机器周期的时间) 。通过
25、TCON 寄存器的 IT1 和 IT0 来设置。 ITi 设置为 “0”时,相应的外部中断为低电平触发方式;设置为“ 1”时,相应的外部中断为边沿触发方式,4.8052 为何要在程序的首地址安排一条跳转到主程序的指令?在响应中断的过程中为什么要保护现场?应如何保护?答:因为程序的首地址与外中断 0 的入口地址之间只相差 3 各单元, 放不下完整的主程序,一般将主程序放到 0030H以后的单元,故要安排一条跳转到主程序的指令。主程序中通常用到 PSW、工作寄存器和特殊功能寄存器等。如果在中断服务程序中要用这些寄存器, 会造成这些现场寄存器中数据的混乱, 在中断服务前应将它们的内容保护起来称保护现
26、场。通常利用堆栈操作来保护现场。4.8053 利用 INT0 做一个计数器。当 INT0 有脉冲时, A 的内容加 1。并且当 A 的内容大于或等于100 时将 P1.0 置位。ORG 0000HLJMP MIN0ORG 0003HLJMP INTB0ORG 0030HMIN0: MOV SP ,#30H ;主程序SETB IT0SETB EX0SETB EAMOV A,#00MIN1: NOPLJMP MIN1ORG 0100HINTB0: PUSH PSW ; INT0 的中断服务程序ADD A ,#01CJNE A ,#100,INTB1LJMP INTB2INTB1 :JC INTB3
27、INTB2 :SETB P1.0INTB3 :POP PSWRETIEND第六章习题答案1当定时器 T0 工作在方式 3 时,要占用定时器 T1 的 TF1 和 TR1 两个控制位。2在定时器工作在方式 1 下,计数器的计数器的宽度为 16 位,若 fosc=12MHz ,最大定时时间为 1s ,若 fosc=6MHz ,则最大定时时间为 2s。3定时时间与定时器的工作方式、计数初值及晶振频率有关。4MCS-51 的定时器 /计数器作计数器使用时,计数脉冲由外部信号通过引脚 P3.4 和P3.5 提供。5MCS-51 的定时器 /计数器 T0 门控信号 GATE 设置为 1 时,只有 INT0
28、 引脚为高电平且由软件使 TR0 置 1 时,才能启动定时器工作。6MCS-51 系列单片机内部设有几个定时器 /计数器?它们是由哪些专用寄存器组成?有哪几种工作方式?简述各种工作方式的功能特点。MCS-51 单片机内部设有两个 16 位定时器 /计数器 T0 和 T1。分别有的 8 位计数器 TH0 、TL0 和 TH1 、 TL1 组成,各有 4 种工作方式。方式 0 是一个 13 位的定时器 /计数器。只用了 16 位寄存器中的高 8 位(THi )和低 5 位(TLi 的 D4D0 位),TLi 的高 3 位未用。方式 1 为 16 位定时器 /计数器方式, 由 THi 的 8 位和
29、TLi 的 8 位构成 16 位加 1 计数器 , ,当 16 位计数满溢出时,溢出标志位 TFi 置“ 1”。方式 2 为 8 位自动重装计数器。仅 TLi 作为计数器,而 THi 的值在计数中不变。 TLi 溢出时, THi 中的值自动装入 TLi 中。方式 3 只适用定时器 /计数器 T0。T0 在该方式下被拆成两个独立的 8 位计数器 TH0 和TL0 ,TL0 可作 8 位的定时器或计数器用,而 TH0 借用 T1 的控制位和溢出标志位 TR1 和TF1,只可用作简单的定时器使用。该方式下 T1 可用作串行口波特率发生器。7MCS-51 系列单片机定时器 /计数器作定时器或计数器使用
30、时,其计数脉冲分别由谁提供?作定时器使用时, 其实质是在单片机内部对机器周期进行计数, 计数脉冲输入信号由内部时钟提供,每一个机器周期计数器自动加 1。作计数器使用时,其实质是对外部事件进行计数,计数脉冲来自相应的外部输入引脚T1 或 T0,当外部输入脉冲信号由 1 至 0 的跳变时,计数器自动加 1。8采用程序查询方式,由 T1 产生一个 50Hz 的方波,从 P1.1 输出, fosc=12MHz 。解:方波周期 T=1/50=0.02s=20ms ,用 T1 定时 10ms,计数初值为:16 -3 610 10 12 10 12=6553610000=55536=D8F0H 2源程序如下:ORG 0000HLJMP T1BUSORG 0030HT1BUS: MOV TMOD ,#10H ;T1方式 1,定时模式SETB TRl ;启动 T1LOOP :MOV TH1,#0D8H ;送 T1 计数初值MOV TL1 ,#0F0HLOOP1: JNB TF1 ,LOOP1 ;T1没有溢出等待CLR TF1 ;产生溢出清标
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1