单片机原理及接口技术-习题答案第四版李朝青(修订后)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理及接口技术-习题答案第四版李朝青(修订后)
单片机原理及接口技术课后习题答案(第四版)李朝青
第一章
1.什么是微处理器(CPU)、微机和单片机?
答微处理器本身不是计算机,但它是小型计算机或微机的控制和处理部分。
微机则是具有完整运算及控制功能的计算机,除了微处理器外还包括存储器、接口适配器以及输入输出设备等。
单片机是将微处理器、一定容量的RAM、ROM以及I/O口、定时器等电路集成在一块芯片上,构成的单片微型计算机。
2.单片机具有哪些特点
(1)片内存储容量越来越大。
(2 抗干扰性好,可靠性高。
(3)芯片引线齐全,容易扩展。
(4)运行速度高,控制功能强。
(5)单片机内部的数据信息保存时间很长,有的芯片可以达到100年以上。
3. 微型计算机怎样执行一个程序?
答:通过CPU指令,提到内存当中,再逐一执行。
4. 微型计算机由那几部分构成?
微处理器,存储器,接口适配器(即I/O接口),I/O设备
第二章
1.89C51单片机内包含哪些主要逻辑功能部件?
答:80C51系列单片机在片内集成了以下主要逻辑功能部件:
(l)CPU(中央处理器):8位
(2)片内RAM:128B
(3)特殊功能寄存器:21个
(4)程序存储器:4KB
(5)并行I/O口:8位,4个
(6)串行接口:全双工,1个
(7)定时器/计数器:16位,2个
(8)片内时钟电路:1个
9. 读端口锁存器和“读引脚”有何不同?各使用哪种指令?
答:读锁存器(ANL P0,A)就是相当于从存储器中拿数据,而读引脚是从外部拿数据(如MOV A,P1 这条指令就是读引脚的,意思就是把端口p1输入数据送给A)
传送类MOV,判位转移JB、JNB、这些都属于读引脚,平时实验时经常用这些指令于外部通信,判断外部键盘等;字节交换XCH、XCHD算术及逻辑运算ORL、CPL、ANL、ADD、ADDC、SUBB、INC、DEC控制转移CJNE、DJNZ都属于读锁存器。
10. 89C51 P0~P3口结构有何不同?用作通用I/O口输入数据时,应注意什么? 答:P0口内部没有上拉电阻,可以用做16位地址的低8位;
P3有第二功能;
P2口可以用做16位地址的高8位;
需要上拉电阻。
OC门电路无法输出高低电平,只有靠上拉电阻才能实现
11. 89C51单片机的EA信号有何功能?在使用8031时,EA信号引脚应如何处理?
答:(1)80C51单片机的EA信号的功能
EA为片外程序存储器访问允许信号,低电平有效;在编程时,其上施加21V 的编程电压
EA引脚接高电平时,程序从片内程序存储器开始执行,即访问片内存储器;EA引脚接低电平时,迫使系统全部执行片外程序存储器程序。
(2)在使用80C31时,EA信号引脚的处理方法
因为80C31没有片内的程序存储器,所以在使用它时必定要有外部的程序存储器,EA 信号引脚应接低电平。
12. 89C51单片机有哪些信号需要芯片引脚以第2功能的方式提供?
答:第一功能第二功能
串行口:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
中断:
P3.2 INT0外部中断0
P3.3 INT1外部中断1
定时器/计数器(T0、T1):
P3.4 T0(定时器/计数器0的外部输入)
P3.5 T1(定时器/计数器1的外部输入)
数据存储器选通:
P3.6 WR(外部存储器写选通,低电平有效,输出) P3.7 RD(外部存储器读选通,低电平有效,输出)
定时器/计数器(T2):
P1.0 T2(定时器T2的计数端)
P1.1 T2EX(定时器T2的外部输入端)
13. 内部RAM低128字节单元划分为哪3个主要部分?各部分主要功能是什么? 答:片内RAM低128单元的划分及主要功能:
(l)工作寄存器组(00H~lFH)
这是一个用寄存器直接寻址的区域,内部数据RAM区的0~31(00H~lFH),共32个单元。
它是4个通用工作寄存器组,每个组包含8个8位寄存器,编号为R0~R7。
(2)位寻址区(20H~2FH)
从内部数据RAM区的32~47(20H~2FH)的16个字节单元,共包含128位,是可位寻址的RAM区。
这16个字节单元,既可进行字节寻址,又可实现位寻址。
(3)字节寻址区(30H~7FH)
从内部数据RAM区的48~127(30H~7FH),共80个字节单元,可以采用间接字节寻址的方法访问。
14. 使单片机复位有几种方法?复位后机器的初始状态如何?
答:(1)单片机复位方法
单片机复位方法有:上电自动复位、按键手动复位和两种方式
(2)复位后的初始状态
复位后机器的初始状态,即各寄存器的状态:PC之外,复位操作还对其他一
些特殊功能寄存器有影响,它们的复位状态如题表2-1所例
15. 开机复位后,CPU使用的是哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器组?
答:一般开机复位后都是选择第一组通用工作寄存器作为工作寄存器的,一共有4组,分别为0.1.2.3连续位于00h到1FH地址,
然后在机器中有个程序状态字PSW,它的第四和第三位RS1,RS0是用来选择工作寄存器组的,可能不同机器地址稍有不同。
他们俩的值和寄存器组的关系:RS1/RS0 0/0 0/1 1/0 1/1
使用的工作寄存器 0 1 2 3
地址 00-07 08-0F 10-17 18-1F
写程序的时候就是通过定义程序状态字来选择使用不同的寄存器组。
也可以直接对RS1和RS0赋值。
(最后一问同题7)
16. 程序状态寄存器PSW的作用是什么?常用标志有哪些位?作用是什么?
答:PSW是一个SFR(特殊功能寄存器)
位于片内RAM的高128B
具体地址D0H(00H~FFH)(片内RAM的编址)(8bits编址方法)
PSW=Program Status Word(程序状态字)
PSW的常用标志位有哪些?
CY=Carry(进位标志位)
AC=Auxiliary Carry(辅助进位标志位)(半进位标志位)
F0用户标志位
RS1,RS0,用来选择当前工作寄存器组(R0~R7)(4选1)
OV=Overflow(溢出标志位)
P=Parity(奇偶校验位)
17. 位地址7CH与字节地址7CH如何区别?位地址7CH具体在片内RAM中的什么位置?
答:用不同的寻址方式来加以区分,即访问128个位地址用位寻址方式,访问低128字节单元用字节寻址和间接寻址。
具体地址为2F的第五位,即为7C。
18. 89C51单片机的时钟周期与振荡周期之间有什么关系?什么叫机器周期和指令周期?
答:时钟信号的周期称为机器状态周期,是振荡周期的两倍。
一个机器周期是指CPU访问存储器一次所需的时间。
指令周期是执行一条指令所需的时间。
19. 一个机器周期的时序如何划分?
答:一个机器周期=12个震荡周期=6个时钟周期(状态周期)
S1P1,S1P2,S2P1,S2P2,S3P1,S3P2,S4P1,S4P2,S5P1,S5P2,S6P1,S6P2 其中s=state(状态),p=phase(相位)
20. 什么叫堆栈?堆栈指针SP的作用是什么?89C51单片机堆栈的容量不能超过多少字节?
答:堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
要点:堆:顺序随意栈:后进先出(Last-In/First-Out) 在调用子程序时需要保存调用函数的CPU寄存器PC指针,PC指针是被CALL 指令自动压入SP所指向的片内存储器,CPU寄存器要由用户用PUSH指令自行保存,因此SP的作用就是一个指针,当进行中断调用,子函数调用时将现场数据压入SP所指向的存储器,SP自动增加1或2,当中断结束RETI,调用返回RET,POP 时将SP数据弹出,SP自动减1或,2
8051最大为128字节的片内存储器,
21. 89C51有几种低功耗方式?如何实现?
答:空闲方式和掉电方式
空闲方式和掉电方式是通过对SFR中的PCON(地址87H)相应位置1而启动的。
当CPU执行完置IDL=1(PCON.1)的指令后,系统进入空闲工作方式。
这时,内部时钟不向CPU提供,而只供给中断、串行口、定时器部分。
CPU的内部状态维持,即包括堆栈指针SP、程序计数器PC、程序状态字PSW、累加器ACC所有的内容保持不变,端口状态也保持不变。
ALE和PSEN保持逻辑高电平。
当CPU执行一条置PCON.1位(PD)为1的指令后,系统进入掉电工作方式。
在这种工作方式下,内部振荡器停止工作。
由于没有振荡时钟,因此,所有的功能部件都停止工作。
但内部RAM区和特殊功能寄存器的内容被保留,而端口的输出状态值都保存在对应的SFR中,ALE和PSEN都为低电平。
22. PC与DPTR各有哪些特点?有何异同?
答:(1)程序计数器PC作为不可寻址寄存器的特点
程序计数器PC是中央控制器申最基本的寄存器,是一个独立的计数器,存放着下一条将程序存储器中取出的指令的地址。
程序计数器PC变化的轨迹决定程序的流程。
程序计数器的宽度决定了程序存储器可以
寻址的范围。
程序计数器PC的基本工作方式有:
①程序计数器PC自动加1。
这是最基本的工作方式,也是这个专用寄存器被称为计数
器的原因。
②执行条件或无条件转移指令时,程序计数器将被置入新的数值,程序的流向发生变化。
变化的方式有下列几种:带符号的相对跳转SJMP、短跳转AJMP、长跳转LJMP及JMP @A+DPTR等。
③在执行调用指令或响应中断时:
●PC的现行值,即下一条将要执行的指令的地址送入堆栈,加以保护;
●将子程序的入口地址或者中断矢量地址送入PC,程序流向发生变化,执行子程序或中断服务程序;
●子程序或中断服务程序执行完毕,遇到返回指令RET或RETI时,将栈顶的内容送到PC寄存器中,程序流程又返回到原来的地方,继续执行。
(2)地址指针DPTR的特点
地址指针DPTR的特点是,它作为片外数据存储器寻址用的地址寄存器(间接寻址)。
(3)地址指针DPTR与程序计数器PC的异同
①相同之处:
●两者都是与地址有关的、16位的寄存器。
其中,PC与程序存储器的地址有关,而
DPTR与数据存储器的地址有关。
●作为地址寄存器使用时,PC与DPTR都是通过P0和P2口(作为16位地址总线)输
出的。
但是,PC的输出与ALE及PSEN有关;DPTR的输出,则与ALE、RD 及WR相联系。
②不同之处:
●PC只能作为16位寄存器对待,由于有自动加1的功能,故又称为计数器; DPTR可以作为16位寄存器对待,也可以作为两个8位寄存器对待。
●PC是不可以访问的,有自己独特的变化方式,它的变化轨迹决定了程序执行的流程;
DPTR是可以访问的,如MOV DPTR,#XXXXH,INC DPTP。
23. 89C51端口锁存器的“读—修改—写”操作与“读引脚”操作有何区别?答:指令系统中有些指令读锁存器的值, 有些指令则读引脚上的值。
读锁存器指令是从锁存器中读取一个值并进行处理, 把处理后的值(原值或已修改后的值)重新写入锁存器中。
这类指令称为读-修改-写指令。
对于读-修改-写指令。
直接读锁存器而不是读端口引脚, 是因为从引脚上读出的数据不一定能真正反映锁存器的状态。
第三章
1、指令:CPU根据人的意图来执行某种操作的命令
指令系统:一台计算机所能执行的全部指令集合
机器语言:用二进制编码表示,计算机能直接识别和执行的语言
汇编语言:用助记符、符号和数字来表示指令的程序语言
高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言
2、见第1题
3、操作码[目的操作数] [,源操作数]
4、
寻址方式寻址空间
立即数寻址程序存储器ROM
直接寻址片内RAM低128B、特殊功能寄存器
寄存器寻址工作寄存器R0-R7、A、B、C、DPTR
寄存器间接寻址片内RAM低128B、片外RAM
变址寻址程序存储器(@A+PC,@A+DPTR)
相对寻址程序存储器256B范围(PC+偏移量)
位寻址片内RAM的20H-2FH字节地址、部分SFR
5、要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式?
答SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址
6、MOV A,40H ;直接寻址(40H)→A
MOV R0,A ;寄存器寻址(A)→R0
MOV P1,#0F0H ;立即数寻址0F0→P1
MOV @R0,30H ;直接寻址(30H)→(R0)
MOV DPTR,#3848H ;立即数寻址3848H→DPTR
MOV 40H,38H ;直接寻址(38H)→40H
MOV R0,30H ;直接寻址(30H)→R0
MOV P0,R0 ;寄存器寻址(R0)→P0
MOV 18H,#30H ;立即数寻址30H→18H
MOV A,@R0 ;寄存器间接寻址((R0))→A
MOV P2,P1 ;直接寻址(P1)→P2
最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H
注意:→左边是内容,右边是单元
7、对89C51/S51片内RAM的高128字节的地址空间寻址要注意什么?
答用直接寻址,位寻址,寄存器寻址
8、指出下列指令的本质区别?
MOV A,DATA ;直接寻址2字节1周期
MOV A,#DATA ;立即数寻址2字节1周期
MOV DATA1,DATA2 ;直接寻址3字节2周期
MOV 74H,#78H ;立即数寻址3字节2周期
如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A
9、
MOV A,@R0 ;((R0))=80H→A
MOV @R0,40H ;(40H)=08H→(R0)
MOV 40H,A ;(A)=80→40H
MOV R0,#35H ;35H→R0
最后结果:(R0)=35H (A)=80H,(32H)=08H,(40H)=80H
10、如何访问SFR?
用直接寻址,位寻址,寄存器寻址
11、如何访问片外RAM?
只能采用寄存器间接寻址(用MOVX指令)
12、如何访问片内RAM?
低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7)高128字节:直接寻址,位寻址,寄存器寻址
13、如何访问片内外ROM?
采用变址寻址(用MOVC指令)
14、说明十进制调整的原因和方法
答:压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。
用DA A指令调整(加06H,60H,66H)15、说明89C51/S51的布尔处理机功能
答:用来进行位操作
16、ANL A,#17H ;83H∧17H=03H→A
ORL 17H,A ;34H∨03H=37H→17H
XRL A,@R0 ;03H⊕37H=34H
CPL A ;34H求反等于CBH
所以(A)=CBH
17、(1)SETB ACC.0或SETB E0H ;E0H是累加器的地址
(2)CLR ACC.7
CLR ACC.6
CLR ACC.5
CLR ACC.4
(3)CLR ACC.6
CLR ACC.5
CLR ACC.4
CLR ACC.3
18、MOV 27H,R7
MOV 26H,R6
MOV 25H,R5
MOV 24H,R4
MOV 23H,R3
MOV 22H,R2
MOV 21H,R1
MOV 20H,R0
19、MOV 2FH,20
MOV 2EH,21
MOV 2DH,22
20、CLR C
MOV A,#5DH ;被减数的低8位→A
MOV R2,#B4H ;减数低8位→R2
SUBB A,R2 ;被减数减去减数,差→A
MOV 30H,A ;低8位结果→30H
MOV A,#6FH ;被减数的高8位→A
MOV R2,#13H ;减数高8位→R2
SUBB A,R2 ;被减数减去减数,差→A
MOV 31H,A ;高8位结果→30H
注意:如果在你的程序中用到了进位位,在程序开始的时候要记得清0进位位21、(1)A≥10
CJNE A,#0AH,L1 ;(A)与10比较,不等转L1
LJMP LABEL ;相等转LABEL
L1:JNC LABEL ;(A)大于10,转LABEL
或者:
CLR C
SUBB A,#0AH
JNC LABEL
(2)A>10
CJNE A,#0AH,L1 ;(A)与10比较,不等转L1
RET ;相等结束
L1:JNC LABEL ;(A)大于10,转LABEL
RET ;(A)小于10,结束
或者:
CLR C
SUBB A,#0AH
JNC L1
RET
L1:JNZ LABEL
RET
(3)A≤10
CJNE A,#0AH,L1 ;(A)与10比较,不等转L1
L2:LJMP LABEL ;相等转LABEL
L1:JC L2 ;(A)小于10,转L2
RET
或者:
CLR C
SUBB A,#0AH
JC LABEL
JZ LABEL
RET
22、(SP)=23H,(PC)=3412H
参看书上80页
23、(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H
参看书上79页
24、不能。
ACALL是短转指令,可调用的地址范围是2KB。
在看这个题的时候同时看一下AJMP指令。
同时考虑调用指令ACALL和LCALL指令和RET指令的关系。
25、MOV R2,#31H ;数据块长度→R2
MOV R0,#20H ;数据块首地址→R0
LOOP:MOV A,@R0 ;待查找的数据→A
CLR C ;清进位位
SUBB A,#0AAH ;待查找的数据是0AAH吗
JZ L1 ;是,转L1
INC R0 ;不是,地址增1,指向下一个待查数据
DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找
MOV 51H,#00H ;等于0,未找到,00H→51H
RET
L1:MOV 51H,#01H ;找到,01H→51H
RET
26、MOV R2,#31H ;数据块长度→R2
MOV R0,#20H ;数据块首地址→R0
LOOP:MOV A,@R0 ;待查找的数据→A
JNZ L1 ;不为0,转L1
INC 51H ;为0,00H个数增1
L1:INC R0 ;地址增1,指向下一个待查数据
DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找
RET
27、MOV DPTR,#SOURCE ;源首地址→DPTR
MOV R0,#DIST ;目的首地址→R0
LOOP:MOVX A,@DPTR ;传送一个字符
MOV @R0,A
INC DPTR ;指向下一个字符
INC R0
CJNE A,#24H,LOOP ;传送的是“$”字符吗?不是,传送下一个字符
RET
28、MOV A,R3 ;取该数高8位→A
ANL A,#80H ;取出该数符号判断
JZ L1 ;是正数,转L1
MOV A,R4 ;是负数,将该数低8位→A
CPL A ;低8位取反
ADD A,#01H ;加1
MOV R4,A ;低8位取反加1后→R4
MOV A,R3 ;将该数高8位→A
CPL A ;高8位取反
ADDC A,#00H ;加上低8位加1时可能产生的进位
MOV R3,A ;高8位取反加1后→R3
L1:RET
29、CLR C ;清进位位C
MOV A,31H ;取该数低8位→A
RLC A ;带进位位左移1位
MOV 31H,A ;结果存回31H
MOV A,30H ;取该数高8位→A
RLC A ;带进位位左移1位
MOV 30H,A ;结果存回30H
30、MOV R2,#04H ;字节长度→R2
MOV R0,#30H ;一个加数首地址→R0
MOV R1,#40H ;另一个加数首地址→R1
CLR C ;清进位位
LOOP:MOV A,@R0 ;取一个加数
ADDC A,@R1 ;两个加数带进位位相加
DA A ;十进制调整
MOV @R0,A ;存放结果
INC R0 ;指向下一个字节
INC R1 ;
DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找
RET
31、MOV R2,#08H ;数据块长度→R2
MOV R0,#30H ;数据块目的地址→R0
MOV DPTR,#2000H ;数据块源地址→DPTR
LOOP:MOVX A,@ DPTR ;传送一个数据
MOV @R0,A
INC DPTR ;指向下一个数据
INC R0 ;
DJNZ R2,LOOP ;数据块长度减1,没传送完,继续传送
RET
32、(1)MOV R0,0FH ;2字节,2周期4字节4周期(差)
MOV B,R0 ;2字节,2周期
(2)MOV R0,#0FH ;2字节,1周期4字节3周期(中)
MOV B,@R0 ;2字节,2周期
(3)MOV B,#0FH ;3字节,2周期3字节2周期(好)
33、(1)功能是将片内RAM中50H~51H单元清0。
(2)7A0A(大家可以看一下书上,对于立即数寻址的话,后面一个字节存放的是立即数)7850(第一个字节的后三位是寄存器,前一个条指令是010也就是指的R2,在这里是R0,所以应该是78,后一个字节存放的是立即数)DAFC (这里涉及到偏移量的计算,可以参考书上56页)
34、INC @R0 ;(7EH)=00H
INC R0 ;(R0)=7FH
INC @R0 ;(7FH)=39H
INC DPTR ;(DPTR)=10FFH
INC DPTR ;(DPTR)=1100H
INC DPTR ;(DPTR)=1101H
35、解:(1000H)=53H (1001H)=54H (1002H)=41H
(1003H)=52H (1004H)=54H (1005H)=12H
(1006H)=34H (1007H)=30H (1008H)=00H
(1009H)=70H
36、MOV R0,#40H ;40H→R0
MOV A,@R0 ;98H→A
INC R0 ;41H→R0
ADD A,@R0 ;98H+(41H)=47H→A
INC R0
MOV @R0,A ;结果存入42H单元
CLR A ;清A
ADDC A,#0 ;进位位存入A
INC R0
MOV @R0,A ;进位位存入43H
功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H单元,(R0)=43H,(A)=1,(40H)=98H,(41H)=AFH,(42H)=47H,(43H)=01H
37、MOV A,61H ;F2H→A
MOV B,#02H ;02H→B
MUL AB ;F2H×O2H=E4H→A
ADD A,62H ;积的低8位加上CCH→A
MOV 63H,A ;结果送62H
CLR A ;清A
ADDC A,B ;积的高8位加进位位→A
MOV 64H,A ;结果送64H
功能:将61H单元的内容乘2,低8位再加上62H单元的内容放入63H,将结果的高8位放在64H单元。
(A)=02H,(B)=01H,(61H)=F2H,(62H)=CCH,(63H)=B0H,(64H)=02H
39、MOV A,XXH
ORL A,#80H
MOV XXH,A
40、(2)MOV A,XXH
MOV R0,A
XRL A,R0
第五章
1、什么是中断和中断系统?其主要功能是什么?
答:当CPU正在处理某件事情的时候,外部发生的某一件事件请求CPU迅速去处理,于是,CPU暂时中止当前的工作,转去处理所发生的事件,中断服务处理完该事件以后,再回到原来被终止的地方,继续原来的工作。
这种过程称为中断,实现这种功能的部件称为中断系统。
功能:(1)使计算机具有实时处理能力,能对外界异步发生的事件作出及时的处理
(2)完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率
(3)实现实时控制
2、试编写一段对中断系统初始化的程序,使之允许INT0,INT1,TO,串行口中断,且使T0中断为高优先级中断。
解:MOV IE,#097H
MOV IP,#02H
3、在单片机中,中断能实现哪些功能?
答:有三种功能:分时操作,实时处理,故障处理
4、89C51共有哪些中断源?对其中端请求如何进行控制?
答:(1)89C51有如下中断源
①:外部中断0请求,低电平有效
②:外部中断1请求,低电平有效
③T0:定时器、计数器0溢出中断请求
④T1:定时器、计数器1溢出中断请求
⑤TX/RX:串行接口中断请求
(2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现各种中断控制功能
5、什么是中断优先级?中断优先处理的原则是什么?
答:中断优先级是CPU相应中断的先后顺序。
原则:
(1)先响应优先级高的中断请求,再响应优先级低的
(2)如果一个中断请求已经被响应,同级的其它中断请求将被禁止
(3)如果同级的多个请求同时出现,则CPU通过内部硬件查询电路,按查询顺序确定应该响应哪个中断请求
查询顺序:外部中断0→定时器0中断→外部中断1→定时器1中断→串行接口中断
6、说明外部中断请求的查询和响应过程。
答:当CPU执行主程序第K条指令,外设向CPU发出中断请求,CPU接到中断请求信号并在本条指令执行完后,中断主程序的执行并保存断点地址,然后转去响应中断。
CPU在每个S5P2期间顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如果查询到某个中断标志为1,将在接下来的机器周期S1期间按优先级进行中断处理,中断系统通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务程序。
中断服务完毕后,CPU返回到主程序第K+1条指令继续执行。
7、89C51在什么条件下可响应中断?
答:
(1)有中断源发出中断请求
(2)中断中允许位EA=1.即CPU开中断
(3)申请中断的中断源的中断允许位为1,即中断没有被屏蔽
(4)无同级或更高级中断正在服务
(5)当前指令周期已经结束
(6)若现行指令为RETI或访问IE或IP指令时,该指令以及紧接着的另一条指令已执行完毕
8、简述89C51单片机的中断响应过程。
答:CPU在每个机器周期S5P2期间顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为1,将在接下来的机器周期S1期间按优先级进行中断处理,中断系统通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务程序。
一旦响应中断,89C51首先置位相应的中断“优先级生效”触发器,然后由硬件执行一条长调用指令,把当前的PC值压入堆栈,以保护断点,再将相应的中断服务的入口地址送入PC,于是CPU接着从中断服务程序的入口处开始执行。
对于有些中断源,CPU 在响应中断后会自动清除中断标志。
9、在89C51内存中,应如何安排程序区?
答:主程序一般从0030H开始,主程序后一般是子程序及中断服务程序。
在这个大家还要清除各个中断的中断矢量地址。
10、试述中断的作用及中断的全过程。
答:作用:对外部异步发生的事件作出及时的处理
过程:中断请求,中断响应,中断处理,中断返回
11、当正在执行某一个中断源的中断服务程序时,如果有新的中断请求出现,试问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求?答:(1)符合以下6个条件可响应新的中断请求:
a) 有中断源发出中断请求
b) 中断允许位EA=1,即CPU开中断
c) 申请中断的中断源的中断允许位为1,即中断没有被屏蔽
d) 无同级或更高级中断正在被服务
e) 当前的指令周期已结束
f) 若现行指令为RETI或访问IE或IP指令时,该指令以及紧
接着的另一条指令已被执行完
12、89C51单片机外部中断源有几种触发中断请求的方法?如何实现中断请求?答:有两种方式:电平触发和边沿触发
电平触发方式:CPU在每个机器周期的S5P2期间采样外部中断引脚的输入电平。
若为低电平,使IE1(IE0)置“1”,申请中断;若为高电平,则IE1(IE0)清零。
边沿触发方式:CPU在每个机器周期S5P2期间采样外部中断请求引脚的输入电平。
如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下一个机器周期采样到外部中断请求为低电平,则使
IE1(IE0)置“1”申请中断;否则,IE1(IE0)置0。
13、89C51单片机有五个中断源,但只能设置两个中断优先级,因此,在中断优先级安排上受到一定的限制。
试问以下几种中断优先顺序的安排(级别由高到低)是否可能:若可能,则应如何设置中断源的中断级别:否则,请简述不可能的理由。
⑴定时器0,定时器1,外中断0,外中断1,串行口中断。
可以,MOV IP,#0AH
⑵串行口中断,外中断0,定时器0,外中断1,定时器1。
可以,MOV IP,#10H
⑶外中断0,定时器1,外中断1,定时器0,串行口中断。
不可以,只能设置一级高级优先级,如果将INT0,T1设置为高级,而T0级别高于INT1.
⑷外中断0,外中断1,串行口中断,定时器0,定时器1。
可以,MOV IP,#15H
⑸串行口中断,定时器0,外中断0,外中断1,定时器1。
不可以
⑹外中断0,外中断1,定时器0,串行口中断,定时器1。
不可以
⑺外中断0,定时器1,定时器0,外中断1,串行口中断。
可以,MOV IP,#09H
14、89C51各中断源的中断标志是如何产生的?又是如何清0的?CPU响应中断
时,中断入口地址各是多少?
答:各中断标志的产生和清“0”如下:
(1)外部中断类
外部中断是由外部原因引起的,可以通过两个固定引脚,即外部中断0和外部中断1输入信号。
外部中断0请求信号,由P3.2脚输入。
通过IT0来决定中断请求信号是低电平有效还是下跳变有效。
一旦输入信号有效,则向CPU申请中断,并且使IE0=1。
硬件复位。
外部中断1请求信号,功能与用法类似外部中断0
(2)定时中断类
定时中断是为满足定时或计数溢出处理需要而设置的。
当定时器/计数器中的计数结构发生计数溢出的,即表明定时时间到或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志位。
这种中断请求是在单片机芯片内部发生的,无需在芯片上设置引入端,但在计数方式时,中断源可以由外部引入。
TF0:定时器T0溢出中断请求。
当定时器T0产生溢出时,定时器T0请求标志TF0=1,请求中断处理。
使用中断时由硬件复位,在查询方式下可由软件复位。
TF1:定时器T1溢出中断请求。
功能与用法类似定时器T0
(3)串行口中断类
串行口中断是为串行数据的传送需要而设置的。
串行中断请求也是在单片机芯片内部发生的,但当串行口作为接收端时,必须有一完整的串行帧数据从RI端引入芯片,才可能引发中断。
RI或TI:串行口中断请求。
当接收或发送一串帧数据时,使内部串行口中断请求标志RI或TI=1,并请求中断。
响应后必须软件复位。
CPU响应中断时,中断入口地址如下:
中断源入口地址
外部中断0 0003H
定时器T0中断000BH
外部中断1 0013H
定时器T1中断001BH
串行口中断0023H
15、中断响应时间是否为确定不变的?为什么?
答:中断响应时间不是确定不变的。
由于CPU不是在任何情况下对中断请求都予以响应的;此外,不同的情况对中断响应的时间也是不同的。
下面以外部中断为例,说明中断响应的时间。
在每个机器周期的S5P2期间,端的电平被所存到TCON的IE0位,CPU在下一个机器周期才会查询这些值。
这时满足中断响应条件,下一条要执行的指令将是一条硬件长调用指令“LCALL”,使程序转入中断矢量入口。
调用本身要用2个机器周期,这样,从外部中断请求有效到开始执行中断服务程序的第一条指令,至少需要3个机器周期,这是最短的响应时间。
如果遇到中断受阻的情况,这中断响应时间会更长一些。
例如,当一个同级或更高级的中断服务程序正在进行,则附加的等待时间取决于正在进行的中断服务程序:如果正在执行的一条指令还没有进行到最后一个机器周期,附加的等待时间为1~3个机器周期;如果正在执行的是RETI指令或者访问IE或IP的指令,则附加的等待时间在5个机器周期内。
若系统中只有一个中断源,则响应时间为3~8个机器周期。
16、中断响应过程中,为什么通常要保护现场?如何保护?
答:因为一般主程序和中断服务程序都可能会用到累加器,PSW寄存器及其他一些寄存器。
CPU在进入中断服务程序后,用到上述寄存器时,就会破坏它原来存在寄存器中的内容;一旦中断返回,将会造成主程序的混乱。
因而在进入中断服务程序后,一般要先保护现场,然后再执行中断处理程序,在返回主程序以前再恢复现场。
保护方法一般是把累加器、PSW寄存器及其他一些与主程序有关的寄存器压入堆栈。
在保护现场和恢复现场时,为了不使现场受到破坏或者造成混乱,一般规定此时CPU不响应新的中断请求。
这就要求在编写中断服务程序时,注意在保护现场之前要关中断,在恢复现场之后开中断。
如果在中断处理时允许有更高级的中断打断它,则在保护现场之后再开中断,恢复现场之前关中断。
17、清叙述中断响应的CPU操作过程,为什么说中断操作是一个CPU的微查询过程?
答:在中断响应中,CPU要完成以下自主操作过程:
a) 置位相应的优先级状态触发器,以标明所响应中断的优先级别
b) 中断源标志清零(TI、RI除外)。