1、单片机应用技术复习题及答案一、简答题(回答要点,并简明扼要解释)第一、二章1 MCS51 系列单片机的内部资源有哪些?说出 8031、8051 和 8751 的区别。答:MCS51 系列单片机上有 1 个 8 位 CPU、128B 的 RAM、21 个 SFR、4 个并行口、1 个串行口、2 个定时计数器和中断系统等资源。8031、8051 和 8751 的区别是 8031 内无 ROM;8051 内有 4KB的掩膜 ROM;8751 内有 4KB 的 EPROM。2 在 MCS-51 单片机系统中,外接程序存储器和数据存储器共用 16 位地址线和 8 位数据线,会不会发生冲突,并说明为什么?
2、答:不会。因为 MCS-51 单片机访问外部程序存储器用的指针是 PC,控制线为 ,而访问外部数据PSEN存储器时,使用的指针是 DPTR,有效的控制信号是 , 。所以不会发生冲突。RDW3 MCS-51 单片机的内部 RAM 共有 128 个字节存储单元(00H7FH) ,根据功能可将其划分为三个区域,试述这三个区域的特点及其首末地址答:80C51 单片机的片内 RAM 低 128 单元分为:1)寄存器区(00H1FH) ,32 字节,共有四个寄存器组,由 RS1 和 RS0 设置,主要为寄存器访问方式,常用数据存储。2)位寻址区(20H2FH) ,16 字节,128 个位。主要用于位数据存
3、放,也可用于存放字节数据。3)普通用户 RAM 区(30H7FH) ,80 字节,只用于存放字节数据。4 存储器的容量如下所示,若它的首地址为 0000H,写出它的末地址。(1)存储容量 1KB,末地址为多少?(2)存储容量 4KB,末地址为多少? 答:(1)末地址为 3FFH; (2)末地址为 FFFH 5 简述累加器的 ACC 的作用答:(1)8 位专用寄存器。(2)运算时存放一个操作数。(3)运算后存放运算结果,所以称它为累加器。6 DPTR 是什么寄存器?它的作用是什么?它是由哪几个寄存器组成?答:DPTR 是数据寄存器;作用:1)在访问外部数据存储器时用 DPTR 作为地址指针,寻址
4、整个 64KB 外部数据存储器空间;2)用 DPTR 作为基址寄存器,对程序存储器空间进行访问。DPTR 由 DPL 和 DPH 两个 8 位寄存器构成。7 说明 MCS-51 的外部引脚 EA 的作用? 答:为访问内/外部程序存储器控制信号。 高电平时,对 ROM 的读操作先从内部 4KB 开始,当地址范围超出 4KB 时自动切换到外部进行;当为低电平,对 ROM 的读操作限定在外部程序存储器。 8 开机复位后,CPU 使用的是哪组工作寄存器?它们的地址是什么?CPU 如何确定和改变当前工作寄存器组? 答:开机复位后,CPU 使用的是 0 组工作寄存器; 它们的地址是什么 00H07H; C
5、PU 通过 PSW 的 PSW.4、PSW.3 两位来确定和改变当前工作寄存器组。9 MCS-51 单片机的时钟周期与振荡周期之间有什么关系?一个机器周期的时序如何划分?答:时钟周期是单片机最基本的时间单位。机器周期则是完成某一个规定操作所需的时间。一个机器周期为 6 个时钟周期,共 12 个振荡周期性,依次表示为 S1P1、S1P2、S6P1、S6P2。10 单片机的复位(RST)操作有几种方法,复位功能的主要作用。答: 单片机的复位操作方式有:1、上电复位;2、手动复位。 复位功能的主要作用是:复位时,PC 初始化为 0000H,使 MCS-51 单片机从 0000H 开始执行程序。11
6、简述堆栈。(1)在程序中断或子程序调用时,为了保护返回地址(断点)和保护现场而设立的 RAM区。(2)用 MOV SP,#DATA 指令建立堆栈。(3)存放数据按“后进先出”原则进行。(4)利用 PUSH、POP 指令即可进行进栈、出栈操作。第三章12 MCS-51 指令系统有哪几种寻址方式?答:MCS-51 指令系统有 7 种寻址方式,分别为:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,相对寻址,基址寄存器加变址寄存器间接寻址(变址寻址) ,位寻址等方式。13 MCS-51 单片机对 I/O 口操作有哪几类指令?并要求每类指令写出两条指令答:单片机对 I/O 口操作有两类指令 读引脚指令
7、和读修改写指令 例如读引脚指令 MOV A, P1; ANL A,P1 读修改写指令 ANL P1,#0FH ;ORL P1,#0FH14 若 SP=60H,标号 LABEL 所在的地址为 3456H。LCALL 指令的地址为 2000H,执行指令如下:2000H LCALL LABEL 后,堆栈指针 SP 和堆栈内容发生了什么变化?PC 的值等于什么?如果将指令 LCALL 直接换成 ACALL 是否可以?如果换成 ACALL 指令,可调用的地址范围是什么?答:1)SP=SP+1=61H (61H)=PC 的低字节=03HSP=SP+1=62H (62H)=PC 的高字节=20H2)PC=3
8、456H3)可以4)2KB2048 Byte第四章15 为什么外扩存储器时,P0 口要外接锁存器,而 P2 口却不接?答: P0 口要传送外部数据存储器的低 8 位地址和 8 位数据,而 P2 口只传送外部数据存储器的高 8 位地址。16 常用的 I/O 接口编址有哪两种方式?它们各有什么特点?MCS-51 的 I/O 端口编址采用的是哪种方式?答:一.独立编址方式:独立编址方式就是 I/O 地址空间和存储器地址空间分开编址。独立编址的优点是 I/O 地址空间和存储器地址空间相互独立,界限分明。但是,却需要设置一套专门的读写 I/O 的指令和控制信号。二.统一编址方式:这种编址方式是把 I/O
9、 端口的寄存器与数据存储器单元同等对待,统一进行编址。统一编址的优点是不需要专门的 I/O 指令,直接使用访问数据存储器的指令进行 I/O 操作,简单、方便且功能强大。MCS-51 单片机使用的是 I/O 和外部数据存储器 RAM 统一编址的方式。17 MCS-51 采用 6MHz 的晶振,定时 0.5ms,如用定时器方式 1 时的初值(16 进制数)应为多少?(写出计算过程) 答:T0 初值=2 16-500m/2m =65536-250 = 65286 =FF06H 18 8051 的定时/计数器 T0 的有几种工作模式,对各工作模式作简单的叙述。答: 定时/计数器 T0 的有 4 种工作
10、模式:方式 0:13 位定时/计数器;方式 1:16 位定时/计数器;方式 2:8 位重装初值的定时/计数器;方式 3:2 个独立的 8 位定时/计数器, T1 用作波特率发生器。19 定时/计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关?答:定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号 12 分频后提供。定时时间与时钟频率和定时初值有关。20 THX 与 TLX(X=0,1)是普通寄存器还是计数器?其内容可以随时用指令更改吗?更改后的新值是立即刷新还是等当前计数器计满后才能刷新?答:THX 与 TLX(X=0,1)是由特殊功能寄存器构成的计数器,其内容可以随
11、时用指令更改,更改后的新值是立即刷新。但在读 THX、TLX 的值时,应该先读 THX 值,后读 TLX,再读 THX。若两次读得 THX 相同,则可确定读得的内容正确。若前后两次读得的 THX 有变化,再重复上述过程。21 MCS51 的中断系统有几个中断源?几个中断优先级?如何用指令设置各中断源的优先级别?如果同一级别同时存在多个中断申请时,CPU 按什么顺序响应(按自然优先级顺序写出各个中断源)?各个中断源的入口地址是多少?;答:MCS51 单片机有 5 个中断源,2 个中断优先级,中断优先级由特殊功能寄存器 IP 控制,在出现同级中断申请时,CPU 按如下顺序响应各个中断源的请求:IN
12、T0、T0、INT1、T1、串口,各个中断源的入口地址分别是 0003H、000BH、0013H、001BH、0023H22 定时器 T1 中断,用指令如何实现?CPU 响应中断后,转到何处开始执行服务程序?此中断服务程序的最后一条指令是什么?功能怎样?答: 1)用指令 SETB TF1 产生中断。 2)CPU 响应中断后,转到 001BH 处开始执行服务程序。 3)中断服务程序的最后一条指令是 RETI 4)RETI 的功能是将断点地址弹给 PC,返回断点。23 CPU 响应中断的条件有哪些?答:1、CPU 没有处在一个同级或高级的中断服务中2、查询中断请求的机器周期是当前指令的最后一个机器
13、周期3、当前指令不是返回指令(RET,RETI)或访问 IE、IP 的指令。24 想将中断服务程序放置在程序存储区的任意区域,在程序中应该作何种设置?请举例加以说明。 答:以外部中断 0 为例说明,外部中断 0 的入口地址是 0003H,想将外部中断 0 的中断服务程序放置在程序存储区的任意区域可使用跳转指令。如:ORG 0003H LJMP INT0 INT0: RETI 25 已知一 MCS51 单片机系统使用 12MHZ 的外部晶体振荡器,计算:1)该单片机系统的状态周期与机器周期各为多少? 2)当单片机的定时器 0(T0)工作在方式 2 时,T0 的最大定时时间为多少? 答:1)状态周
14、期=2/f osc=0.167m 机器周期=12/f osc=1m 2)T MAX =28机器周期=2561=256m 26 在由 8031CPU 芯片设计的系统中,若规定外部中断 0 为电平触发方式,高优先级,此时,特殊功能寄存器 TCON、IE、IP 为多少? 答:TCON=00H IE=81H IP=01H 若规定外部中断 1 边沿触发方式,高优先级,写出初始化程序。 答:初始化程序如下:SETB EA SETB EX1 SETB PX1 CLR IT1 27 编制中断服务程序时,为什么在主程序的初始化程序中,必须设置 SETB EA 这条指令,以及在中断服务程序中为什么通常需要保护现场
15、和恢复现场?答:中断允许寄存器 IE 中有 1 个总的开关中断控制位 EA,当 EA=0 时,所有的中断请求被屏蔽,CPU 不接受任何中断;只有当 EA=1 时,CPU 才开放中断。所以主程序的初始化程序中,必须设置 SETB EA 这条指令。现场是指中断时刻单片机中某些寄存器和储存器单元中的数据或状态,为了使中断服务程序的执行不破坏这些数据和状态,以免在中断返回后影响主程序的运行,因此要这些数据和状态送入堆栈保存,这就是现场保护。中断结束后,在返回主程序谦,则需要把保存的现场数据和状态从堆栈中弹出,以恢复那些寄存器和存储器单元中的原有内容,这就是现场恢复。 24. 中断服务子程序返回指令 R
16、ETI 和普通子程序返回指令 RET 有什么区别?答:中断服务子程序返回指令 RETI 和普通子程序返回指令 RET 的区别在于:RETI 指令在返回的同时清除相应的优先级触发器,以允许下次中断。28 8051 的串行通信的有几种工作模式,请对各工作模式作简单的叙述。 答: 串行通信共有 4 种工作模式 ,分别是:模式 0:8 位同步移位寄存器;TXD 时钟端,RXD 数据端,波特率 fosc/12模式 1:10 位两机的异步通信;TXD 数据发送端,RXD 数据接收端,波特率可变,模式 2:11 位可多机的异步通信;TXD 数据发送端,RXD 数据接收端,波特率 fosc/32 或fosc/
17、64。模式 3: 11 位可多机的异步通信;TXD 数据发送端,RXD 数据接收端,波特率可变,波特率可变,公式与模式 1 同。29 通信波特率为 2400bps,fosc=11.2592MHZT1 工作在模式 2,其 SMOD=0 计算 T1 的初值X。答: 通信波特率为 2400bps,fosc=11.2592MHZT1 工作在模式 2,其 SMOD=0 计算 T1 的初值X。根据 波特率= ,得出 n=76800 根据 ,得出 X=244,即 X=F4H 二、编程题 1、 从P1口引脚读入数据,并将该数据写入外部RAM 2100H单元。 MOV P1,#0FFH MOV DPTR,#21
18、00H MOV A,P1 MOV DPTR,A 2、 将内部RAM 30H单元的内容求补后,送回30H单元。 MOV A,30H CPL A ADD A,#1 MOV 30H,A 3、 使外部RAM 2100H单元内容的高两位清“0”,其余位变反。 MOV DPTR,#2100H MOV A,DPTR CPL A ANL A,#3FH MOV DPTR,A 4、 将R6寄存器的内容取反,送到内部RAM 20H单元。 MOV A,R6 CPL A MOV R6,A MOV 20H, A5、 将R6寄存器的内容高4位与低4位交换,送到内部RAM 20H单元。MOV A,R6 SWAP A MOV
19、R6,A MOV 20H, A6、 将程序存储器 0600H单元内容送到内部RAM 30H单元中。 MOV DPTR,#0600H CLR A (或MOV A,#0H) MOVC A,A+DPTR MOV 30H,A 7、 请将ROM 1000H单元内容送外部RAM 1000H单元。MOV DPTR,#1000H CLR A (或MOV A,#0H) MOVC A,A+DPTR MOVX DPTR,A 8、 请将ROM 1000H单元内容送R6单元。MOV DPTR,#1000H CLR A (或MOV A,#0H) MOVC A,A+DPTR MOV R6,A 9、 将外部RAM 2100H
20、单元的内容取反后,送回原单元。 MOV DPTR,#2100H MOVX A,DPTR CPL A MOVX DPTR,A 10、将外部RAM 2200H单元内容的高4位清“0”,低4位不变。 MOV DPTR,#2200H MOVX A,DPTR ANL A,#0FH MOVX DPTR,A 11、将外部RAM 3100H单元的内容求补后,送回原单元中。 MOV DPTR,#3100H MOVX A,DPTR CPL A ADD A,#01H (或 INC A) MOVX DPTR,A 12、将内部RAM 30H单元的内容求补后,送到31H单元。 MOV A,30H CPL A ADD A,
21、#1 (或 INC A ) MOV 31H,A 13、使外部RAM 2000H单元内容的高两位置“1”,其余位变反。 MOV DPTR,#2000H MOVX A,DPTR CPL A ORL A,#0C0H MOVX DPTR,A 14、将工作寄存器R7的内容求补。 MOV A,R7 CPL A INC A (或 ADD A,#1) MOV R7,A 15、编制定时器T1中断初始化程序,采用方式2。MOV TMOD,#20HMOV TL1,#DATAMOV TH1,#DATASETB TR1SETB ET1SETB EA16、编制定时器T0中断初始化程序,采用方式1。MOV TMOD,#01
22、HMOV TL0,#DATA1MOV TH0,#DATA2SETB TR0SETB ET0SETB EA17、编制中断初始化程序,外部中断0开中断(边沿触发),定时器0开中断,定时器1关中断。SETB IT0 SETB EX0STEB ET0CLR ET1SETB EA18、编制中断初始化程序,外部中断1开中断(边沿触发)、定时器0关中断、定时器1开中断、串行口关中断。SETB IT1 SETB EX1CLR ET0SETB ET1CLR ESSETB EA19、编程将内部RAM 25H和26H单元的BCD码转换成压缩BCD码存放在30H单元中。MOV A, 26HSWAP AORL A, 2
23、5HMOV 30H, A20、编程将内部RAM 30H和31H单元中的低4位合并为一个字节,存放在40H单元中.ORG 0000HMOV A, 30HANL A, #0FHSWAP AMOV B, AMOV A,31HANL A,#0FHADD A, B MOV 40H,ARET21、编程将内部RAM 30H3FH单元内容送到外部RAM 1000H100FH单元。ORG 0000HMOV R0,#30HMOV DPTR,#1000HMOV R7,#10HAT0:MOV A,R0MOVX DPTR,AINC R0INC DPTRDJNZ R7,AT0RET22、编程将程序存储器 2000H200
24、FH单元内容送到内部RAM 40H4FH单元。ORG 0000HMOV R0,#40HMOV DPTR,#2000HMOV R7,#10HAT0:CLR AMOVC A, A+DPTRMOV R0,AINC R0INC DPTRDJNZ R7,AT0RET23、编程将外部RAM 1500H1507H单元内容送到内部RAM 30H37H单元。ORG 0000HMOV R0,#30HMOV DPTR,#1500HMOV R7,#8AT0:MOVX A,DPTRMOV R0,AINC R0INC DPTRDJNZ R7,AT0RET24、编写统计内部RAM 20H单元中所存的单字节数二进制位中1的个
25、数,存于21H中。ORG 0000HAT0: MOV R1, #00HMOV R7, #08HMOV A, 20HAT1: JB ACC.7, AT2SJMP AT3AT2: INC R1AT3: RL ADJNZ R7, AT1MOV 21H, R1END25、编写一循环程序,将内部 RAM 的 20H2FH 共 16 个连续单元清零。ORG 0000HAT0: MOV R0,#20HMOV R2, #0FHCLR AAT1: MOVR0, AINC R0DJNZ R2, AT1RET26、编程程序,将外部RAM 4000H40FFH单元内容全部置“1”。ORG 0000HAT0: MOV
26、A, #0FFHMOV R0, #0FFHMOV DPTR, #4000HAT1:MOVX DPTR, AINC DPTRDJNZ R0, AT1END27、试编写程序,查找在内部RAM的40H60H单元中是否有0FFH这一数据。若有,则将51H单元置为“00H”;若未找到,则将51H单元置为“01H”ORG 0000HAT0: MOV R0,#40HMOV R2, #20HAT1: MOV A,R0CJNE A, #0FFH, AT2MOV 51H, #00HSJMP AT3AT2: INC R0DJNZ R2, AT1MOV 51H, #01HAT3: END28、编写一循环程序,查找内部
27、RAM 30H50H单元中出现FFH个数,并将查找搭结果存入51H单元。ORG 0000HAT0: MOV R0,#30HMOV R2, #20HMOV R3 ,#00HAT1: MOV A,R0CJNE A, #0FFH, AT2INC R3AT2: INC R0DJNZ R2, AT1MOV 51H, R3END29、设在内RAM 40H 开始的存储区有若干个字符和数字,已知最后一个为字符 “F”(并且只有一个),试统计这些字符数字的个数,结果存入30H单元中。ORG 0000HAT0: MOV R0, #40HCLR AAT1: CJNE R0, #46H, AT2SJMP AT3AT2
28、: INC AINC R0SJMP AT1AT3: INC AMOV 30H, AEND三、应用题1.设计一个循环灯程序,如图所示,使这些发光二极管每次只点亮一个(高电平亮),依次一个一个地点亮,循环不止(从 D0 开始)。ORG 0000HAT0:MOV R7 ,#8MOV A,#01H AT1:MOV P0,ARL A ACALL D1MS DJNZ R7,AT1SJMP AT0 D1MS:RET END 2.根据图示电路(P0 接 LED) ,设计一个程序,开机后 LED 显示 0,以后每按一次键(P2.7) ,显示的数字加 1,显示 9 后,再回到 0,并照此循环。 (LED 为共阴极,0-9 的字形段码依次为3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7EH,6FH)ORG 0000HAT0:MOV DPTR ,#TABMOV R7,#10MOV R1,#00H AT1:MOV A,R1MOVC A,A+DPTR MOV P0,A JB P2.7,$ INC R1DJNZ R7,AT1SJMP AT0 LAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7EH,6FHEND