1、 1 “单片机原理及应用”课程习题与解答 参考教材:张毅刚主编,单片机原理及应用,普通高等教育“十五”国家级规划教材,高等教育出版社, 2004 年 1 月 第一章 1 3:单片机与普通计算机的不同之处在于其将( )( )和( )三部分集成于一块芯片上。 答: CPU、存储器、 I/O 口 1 8: 8051 与 8751 的区别是: A、内部数据存储但也数目的不同 B、内部数据存储器的类型不同 C、内部程序存储器的类型不同 D、内部的寄存器的数目不同 答: C 第二章 2 4:在 MCS 51 单片机中,如果采用 6MHz 晶振, 1 个机器周期为( )。 答: 2us。 析:机器周期为振荡
2、周期的 1/6。 2 6:内部 RAM 中,位地址为 30H 的位,该位所在字节的字节地址为( )。 答: 26H 2 7:若 A 中的内容为 63H,那么, P 标志位的值为( )。 答: 0 析: P 为偶校验位,因为 A 中 1 的个数为偶数,所以 P=0。 2 8:判断下列说法是否正确: A、 8031 的 CPU 是由 RAM 和 EPROM 所组成。 B、区分片外程序存储器和片外数据存储器的最可靠的方法是看其位于地址范围的低端还是高端。 C、在 MCS-51 中,为使准双向的 I/O 口工作在输入方式 ,必须保证它被事先预置为 1。 D、 PC 可以看成使程序存储器的地址指针。 答
3、:错、错、对、对 2 9: 8031 单片机复位后, R4 所对应的存储单元的地址为( ),因上电时 PSW=( )。这时当前的工作寄存器区是( )组工作寄存器区。 答: 04H、 00H、 0 2 11:判断以下有关 PC 和 DPTR 的结论是否正确? A、 DPTR 是可以访问的,而 PC 不能访问。 B、它们都是 16 位的存储器 C、它们都有加 1 的功能。 D、 DPTR 可以分为两个 8 位的寄存器使用,但 PC 不能。 答:对、对、对、对 2 13:使用 8031 芯片时,需将 /EA 引脚接( )电平,因为其片内无( )存储器。 答:低、程序 2 14:片内 RAM 低 12
4、8 个单元划分为哪 3 个主要部分?各部分的主要功能是什么? 答:工作寄存器区、位寻址区、数据缓冲区 2 15:判断下列说法是否正确 A、 程序计数器 PC 不能为用户编程时直接使用,因为它没有地址。 2 B、 内部 RAM 的位寻址区,只能供位寻址使用,而不能供字节寻址使用。 C、 8031 共有 21 个特殊功能寄存器,它们的位都是可以用软件设置的,因此,是可以进行位寻址的。 答:对、错、错 2 16: PC 的值是 A、当前正在执行指 令的前一条指令的地址 B、当前正在执行指令的地址 C、当前正在执行指令的下一条指令的地址 D、控制器中指令寄存器的地址 答: C 2 17:通过堆栈操作实
5、现子程序调用,首先就要把( )的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到( )。 答: PC、 PC 2 19: MCS 51 单片机程序存储器的寻址范围是由程序计数器 PC 的位数所决定的,因为MCS 51 的 PC 是 16 位的,因此其寻址的范围为( ) KB。 答: 64 2 20:当 MCS 51 单片机运行出错或程序陷入死循环时,如何来摆脱困 境? 答:软件陷阱、复位 2 21:判断下列说法是否正确? A、 PC 是 1 个不可寻址的特殊功能寄存器。 B、 单片机的主频越高,其运算速度越快。 C、 在 MCS 51 单片机中, 1 个机器周期等于 1
6、us。 D、 特殊功能寄存器 SP 内装的是栈顶首地址单元的内容。 答:错、对、错、错 2 22:如果手中仅有一台示波器,可通过观察哪个引脚的状态,来大致判断 MCS 51 单片机正在工作? 答: ALE 析:因为单片机正常工作时, ALE 脚输出时钟频率为振荡周期的 1/6。 第三章 3 1:判断下列指令的正误: 1) MOV 28H,R2 2) DEC DPTR 3) INC DPTR 4) CLR R0 5) CPL R5 6) MOV R0,R1 7) PUSH DPTR 8) MOV F0,C 9) MOV F0,ACC.3 10) MOVX A,R1 11) MOV C,30H 1
7、2) RLC R0 答:错、错、对、错 错、错、错、对 错、对、对、错 3 2:判断下列说法是否正确。 A、 立即寻址方式是被操作的数据本身在指令中,而不是它的地址在指令 中。 B、 指令周期是执行一条指令的时间。 C、 指令中直接给出的操作数称为直接寻址。 答:对、对、错 3 3:在基址加变址寻址方式中,以( )作变址寄存器,以( )或( )作基址寄存器。 答:累加器 A, DPTR、 PC 3 7:指令格式是由( )和( )所组成,也可能仅由( )组成。 答:操作码、操作数、操作码 3 3 8:假定累加器 A 中的内容为 30H,执行指令 1000H: MOVC A,A+PC 后,把程序存
8、储器( )单元的内容送入累加器 A 中。 答: 1031H 3 9:在 MCS 51 中, PC 和 DPTR 都用于提 供地址,但 PC 是为访问( )存储器提供地址,而 DPTR 是为访问( )存储器提供地址。 答:程序、数据 3 10:在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的( )。 答:地址 3 11:下列程序段的功能是什么? PUSH A PUSH B POP A POP B 答:交换 A、 B 的内容 3 12:已知程序执行前有 A=02H, SP=52H,( 51H) =FFH, (52H)=FFH。下述程序执行后: POP DPH PO
9、P DPL MOV DPTR,#4000H RL A MOV B,A MOVC A,A+DPTR PUSH A MOV A,B INC A MOVC A,A+DPTR PUSH A RET ORG 4000H DB 10H,80H,30H,50H,30H,50H 请问: A=( ), SP=( ),( 51H) =( ),( 52H) =( ), PC=( )。 答: A=50H , SP=50H , (51H)=30H , (52H)=50H , PC=5030H 3 14:假定 A=83H,( R0) =17H,( 17H) =34H,执行以下指令: ANL A,#17H ORL 17H,
10、A XRL A,R0 CPL A 后, A 的内容为( )。 答: 0CBH 3 15:假定 A=55H, R3=0AAH,在执行指令 ANL A,R3 后, A=( ), R3=( )。 答: 0、 0AAH 3 16:如果 DPTR=507BH, SP=32H,( 30H) =50H,( 31H) =5FH,( 32H) =3CH,则执行4 下列指令后: POP DPH POP DPL POP SP 则: DPH=( ), DPL=( ), SP=( ) 答: DPH=3CH , DPL=5FH , SP=4FH 3 17:假定, SP=60H, A=30H, B=70H,执行下列指令:
11、PUSH A PUSH B 后, SP 的内容为( ), 61H 单元的内容为( ), 62H 单元的内容为( )。 答: 62H , 30H , 70H 第四章 4 6:试编写 1 个程序,将内部 RAM 中 45H 单元的高 4 位清 0,低 4 位置 1。 答: MOV A, 45H ANL A, #0FH ORL A, #0FH MOV 45H, A 4 7:已知程序执行前有 A=02H, SP=42H,( 41H) =FFH, (42H)=FFH。下述程序执行后: POP DPH POP DPL MOV DPTR,#3000H RL A MOV B,A MOVC A,A+DPTR P
12、USH A MOV A,B INC A MOVC A,A+DPTR PUSH A RET ORG 3000H DB 10H,80H,30H,80H,50H,80H 请问: A=( ), SP=( ),( 51H) =( ),( 52H) =( ), PC=( )。 答: A=80H , SP=40H , (51H)=50H , (52H)=80H , PC=8050H 4 8:计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为 12MHz)。 MOV R3,#15H ;1 个机器周期 DL1:MOV R4,#255 ;1 个机器周期 DL2:MOV P1,R3 ;2 个机器周期 DJNZ
13、 R4,DL2 ;2 个机器周期 DJNZ R3,DL1 ;2 个机器周期 RET ;2 个机器周期 答: 15348us 5 析:( 2 2) 255 1 2) 15 1 2 15348us 4 9:假定 A=83H,( R0) =17H,( 17H) =34H,执行以下指令: ANL A,#17H ORL 17H,A XRL A,R0 CPL A 后, A 的内容为( )。 答: 0CBH 4 10:试编写程序,查找在内部 RAM 的 30H 50H 单元中是否有 0AAH 这一数据。若有,则将 51H 单元置为“ 01H”;若未找到,则将 51H 单元置为“ 00H”。 答: START
14、: MOV R0,#30H MOV R2,#20H LOOP: MOV A,R0 CJNE A,#0AAH,NEXT MOV 51H,#01H LJMP EXIT NEXT: INC R0 DJNZ R2,LOOP MOV 51H,#00H EXIT: RET 4 11:试编写程序,查找在内部 RAM 的 20H 40H 单元中出现“ 00H”这一数据的次数。并将查找到的结果存入 41H 单元。 答: START: MOV 41H,#0 MOV R0,#20H MOV R2,#20H LOOP: MOV A,R0 JNZ NEXT INC 41H NEXT: INC R0 DJNZ R2,LO
15、OP RET 4 12:若 SP=60H,标号 LABEL 所在的地址为 3456H。 LCALL 指令的地址为 2000H,执行指令如下: 2000H LCALL LABEL 后,堆栈指针 SP 和堆栈内容发生了什么变化? PC 的值等于什么?如果将指令 LCALL直接换成 ACALL 是否可以?如果换成 ACALL 指令,可调用的地址 范围是什么? 答: 1) SP=SP+1=61H (61H)=PC 的低字节 =03H SP=SP+1=62H (62H)=PC 的高字节 =20H 2) PC=3456H 3)可以 4) 2KB 2048 Byte 6 第五章 5 4:外部中断 1 所对应
16、的中断入口地址为( ) H。 答: 0013H 5 5:下列说法错误的是: A、 各中断发出的中断请求信号,都会标记在 MCS 51 系统的 IE 寄存器中。 B、 各中断发出的中断请求信号,都会标记在 MCS 51 系统的 TMOD 寄存器中。 C、 各中断发出的中断请求信号,都会标记 在 MCS 51 系统的 IP 寄存器中。 D、 各中断发出的中断请求信号,都会标记在 MCS 51 系统的 TCON 与 SCON 寄存器中。 答: ABC 5 7:中断查询确认后,在下列各种 8031 单片机运行情况中,能立即进行响应的是: A、 当前正在执行高优先级中断处理 B、 当前正在执行 RETI
17、 指令 C、 当前指令是 DIV 指令,且正处于取指令的机器周期 D、 当前指令是 MOV A,R3 答: D 5 8: 8031 单片机响应中断后,产生长调用指令 LCALL,执行该指令的过程包括:首先把( )的内容压入堆栈,以进行断点保护,然后把长调用指令的 16 位地址送 ( ),使程序执行转向( ) 中的中断地址区。 答: PC、 PC、程序存储器 5 9:编写出外部中断 1 为跳沿触发的中断初始化程序。 答: SETB IT1 SETB EX1 SETB EA 5 10:在 MCS 51 中,需要外加电路实现中断撤除的是: A、定时中断 B、脉冲方式的外部中断 C、外部串行中断 D、
18、电平方式的外部中断 答: D 5 12:下列说法正确的是: A、 同一级别的中断请求按时间的先后顺序响应。 B、 同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。 C、 低优先级中断请 求不能中断高优先级中断请求,但是高优先级中断请求能中断低优先级中断请求。 D、 同级中断不能嵌套。 答: ACD 5 13:中断服务子程序返回指令 RETI 和普通子程序返回指令 RET 有什么区别? 答: RETI 指令在返回的同时清除相应的优先级触发器,以允许下次中断 5 14:某系统有 3 个外部中断源 1、 2、 3,当某一中断源变为低电平时,便要求 CPU 进行处理,它们的优先处理次序由高到低
19、依次为 3、 2、 1,中断处理程序的入口地址分别为1000H, 1100H, 1200H。试编写主程序及中断服务程序(转至相应的中断处理程序的入口即 可)。 答:若仅在 /INT0 引脚接 3 个外部中断源,电路如图 5 10( P115) ORG 0000H LJMP MAIN 7 ORG 0003H LJMP INT_EX0 ORG 0030H MAIN: CLR IT0 ; 采用低电平有效中断 SETB EX0 ;允许外部中断 0 SETB EA ; 插入用户程序 WAIT: MOV PCON,#01H ;单片机进入休眠方式等待中断 NOP LJMP WAIT ;以下为外部中断 0 服
20、务子程序 INT_EX0: JNB P1.0,NEXT1 ;判断是不是 1 号中断 LJMP INT_IR1 ;跳转到 1 号中断处理程序 NEXT1: JNB P1.1,NEXT2 ;判断是不是 2 号中断 LJMP INT_IR2 ;跳转到 2 号中断处理程序 NEXT2: LJMP INT_IR3 ;跳转到 3 号中断处理程序 ORG 1000H INT_IR1: ;插入相应中断处理程序 RETI ;中断返回 ORG 1100H INT_IR2: ;插入相应中断处理程 序 RETI ;中断返回 ORG 1200H INT_IR3: ;插入相应中断处理程序 RETI ;中断返回 第六章 M
21、CS-51 的定时 /计数器 1 如果采用晶振的频率为 3MHz,定时器 /计数器工作方式 0、 1、 2 下,其最大的定时时间为多少? 解答:因为机器周期 )(4103 1212 6 sfT OS Ccy , 所以定时器 /计数器工作方式 0 下,其最大定时时间为 )(1 9 2.810422 61313 msTT CM AX ; 同样可以求得方式 1 下的最大定时时间为 262.144ms;方式 2 下的最大定时时间为8 1024ms。 2 定时 /计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关? 答:定时 /计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号 12
22、分频后提供。定时时间与时钟频率和定时初值有关。 3 定时 /计数器用作定时器时,对外界计数频率有何限制? 答:由于确认 1 次负跳变要花 2 个机器周期,即 24 个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的 1/24。 4采用定时器 /计数器 T0 对外部脉冲进行计数,每计数 100 个脉冲后, T0 转为定时工作方式。定时 1ms 后,又转为计数方 式,如此循环不止。假定 MCS-51 单片机的晶体振荡器的频率为 6MHz,请使用方式 1 实现,要求编写出程序。 解答:定时器 /计数器 T0 在计数和定时工作完成后,均采用中断方式工作。除了第一次计数工作方式设置在主程序完
23、成外,后面的定时或计数工作方式分别在中断程序完成,用一标志位识别下一轮定时器 /计数器 T0 的工作方式。编写程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: MOV TMOD,#06H ;定时器 /计数器 T0 为计数方式 2 MOV TL0,#156 ;计数 100 个脉冲的初值赋值 MOV TH0,#156 SETB GATE ;打开计数门 SETB TR0 ;启动 T0,开始计数 SETB ET0 ;允许 T0 中断 SETB EA ; CPU 开中断 CLR F0 ;设置下一轮为定时方式的标志位 WAIT: AJMP WAIT I
24、T0P: CLR EA ;关中断 JB F0,COUNT ; F0=1,转计数方式设置 MOV TMOD,#00H ;定时器 /计数器 T0 为定时方式 0 MOV TH0,#0FEH ;定时 1ms 初值赋值 MOV TL0,#0CH SETB EA RETI COUNT: MOV TMOD,#06H MOV TL0,#156 SETB EA RETI 5. 定时器 /计数器的工作方式 2 有什么特点?适用于哪些应用场合? 答:定时器 /计数器的工作方式 2 具有自动恢复初值的特点,适用于精确定时,比如波特率的产生。 6. 编写程序,要求使用 T0,采用方式 2 定时,在 P1.0 输出周期
25、为 400 s,占空比为 10:1的矩形脉冲。 解答:根据题意,从 P1.0 输出的矩 形脉冲的高低电平的时间为 10:1,则高低电平的时间分别为 363.63 s 和 36.37 s。如果系统采用 6MHz 晶振的话, sTcy 2 ,因此高低电平输9 出取整,则约为 364 s 和 36 s。编写程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: MOV TMOD,#02H ;定时器 /计数器 T0 为定时方式 2 MOV TL0,#4AH ;定时 364 s 初值赋值 SETB TR0 ;启动 T0,开始计数 SETB ET0 ;允许
26、T0 中断 SETB EA ; CPU 开中断 SETB P1.0 WAIT: AJMP WAIT IT0P: CLR EA CLR P1.0 ;关中断 MOV R0,#9 DLY: DJNZ R0,DLY ;延时 26 s MOV TL0,#4AH ;定时 364 s 初值赋值 SETB P1.0 SETB EA RETI 7. 一个定时器的定时时间有限,如何实现两个定时器的串行定时,来实现较长时间的定时? 答:方式一,在第一个定时器的中断程序里关闭本 定时器的中断程序,设置和打开另一个定时器;在另一个定时器的中断程序中关闭本定时中断,设置和打开另一个定时器。这种方式的定时时间为两个定时器定
27、时时间的和。 方式二,一个作为定时器,在定时中断后产生一个外部计数脉冲(比如由 P1.0 接 INT0产生),另一个定时器工作在计数方式。这样两个定时器的定时时间为一个定时器的定时时间乘以另一个定时器的计数值。 8. 当定时器 T0 用于方式 3 时,应该如何控制定时器 T1 的启动和关闭? 答:由 T1(P3.5)口控制定时器 T1的启动和关闭。 9. 定时器 /计数器测量某正单脉冲的宽度, 采用何种方式可得到最大量程?若时钟频率为6MHz,求允许测量的最大脉冲宽度是多少? 答:采用方式 1 定时工作方式。最大脉冲宽度为 131.072ms。 10. 编写一段程序,功能要求为:当 P1.0
28、引脚的电平正跳变时,对 P1.1 的输入脉冲进行计数;当 P1.2 引脚的电平负跳变时,停止计数,并将计数值写入 R0、 R1(高位存 R1,低位存R0)。 解答:将 P1.1 的输入脉冲接入 INT0,即使用 T0 计数器完成对 P1.1 口的脉冲计数。编写程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: JNB P1.0,MAIN MOV TMOD,#05H ;定时器 /计数器 T0 为计数方式 1 SETB TR0 ;启动 T0,开始计数 10 SETB ET0 ;允许 T0 中断 SETB EA ; CPU 开中断 WAIT: JB
29、 P1.2,WAIT CLR EA CLR TR0 MOV R1,TH0 MOV R0,TL0 AJMP $ IT0P: INC R2 RETI 11. THX 与 TLX(X=0,1)是普通寄存器还是计数器?其内容可以 随时用指令更改吗?更改后的新值是立即刷新还是等当前计数器计满后才能刷新? 答: THX 与 TLX(X=0,1)是由特殊功能寄存器构成的计数器,其内容可以随时用指令更改,更改后的新值是立即刷新。但在读 THX、 TLX 的值时,应该先读 THX 值,后读 TLX,再读 THX。若两次读得 THX 相同,则可确定读得的内容正确。若前后两次读得的 THX 有变化,再重复上述过程。
30、 12. 判断下列的说法是否正确? (1) 特殊功能寄存器 SCON,与定时器 /计数器的控制无关。(对) (2) 特殊功能寄存器 TCON,与定时器 /计数器的控制无关。(错) (3) 特殊功 能寄存器 IE,与定时器 /计数器的控制无关。 (错) (4) 特殊功能寄存器 TMOD,与定时器 /计数器的控制无关。(错) 第七章 MCS-51 的串行口 1串行数据传送的主要优点和用途是什么? 答:串行数据传送的主要优点是硬件接口简单,接口端口少( 2 个)。主要用于多个单片机系统之间的数据通信。 2简述串行口接收和发送数据的过程。 答:以方式一为例。发送:数据位由 TXT 端输出,发送 1 帧
31、信息为 10 为,当 CPU 执行 1条数据写发送缓冲器 SBUF 的指令,就启动发送。发送开始时,内部发送控制信号 /SEND变为有效,将起始 位想 TXD 输出,此后,每经过 1 个 TX 时钟周期,便产生 1 个移位脉冲,并由 TXD 输出 1 个数据位。 8 位数据位全部完毕后,置 1 中断标志位 TI,然后 /SEND 信号失效。接收:当检测到起始位的负跳变时,则开始接收。接受时,定时控制信号有 2 种,一种是位检测器采样脉冲,它的频率是 RX 时钟的 16 倍。也就是在 1 位数据期间,有 16 个采样脉冲,以波特率的 16 倍的速率采样 RXD 引脚状态,当采样到 RXD 端从
32、1 到 0 的跳变时就启动检测器,接收的值是 3 次连续采样,取其中 2 次相同的值,以确认是否是真正的起始位的开始,这样能较好地消除干扰引起的 影响,以保证可靠无误的开始接受数据。 3帧格式为 1 个起始位, 8 个数据位和 1 个停止位的异步串行通信方式是方式( 1 )。 4 串行口有几种工作方式?有几种帧格式?各种工作方式的波特率如何确定? 答:串行口有 3 种工作方式:方式 0、方式 1、方式 2、方式 3;有 3 种帧格式,方式 2 和 3具有相同的帧格式;方式 0 的发送和接收都以 fosc/12 为固定波特率, 方式 1 的波特率 =2SMOD/32 定时器 T1 的溢出率 方式 2 的波特率 =2SMOD/64 fosc 方式 3 的波特率 =2SMOD/32 定时器 T1 的溢出率