单片机原理及接口技术课后答案李朝青第三版教学文稿
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.微处理器, RAM,ROM, 以及 I/O 口,定时器,构成的微型计算机称为单片机。
2•指令寄存器(IR)保存当前正在执行的一条指令;指令译码器(ID)对操作码进行译码。
3 •程序计数器(PC)指示出将要执行的下一条指令地址,由两个 8位计数器PCH及PCL 组成。
4. 80C31片内没有程序存储器,80C51内部设有4KB的掩膜ROM程序存储器,87C51 是将80C51
片内的ROM换成EPROM, 89C51则换成4KB的闪存FLASHROM,51增强型的程序存储器容量是普通
型的 2倍。
5. 89C51的组成:一个8位的80C51的微处理器,片内256字节数据存储器RAM/SFR用来存放可以读 /写的数据,片内 4KB 程序存储器 FLASHROM 用存放程序、数据、表格, 4 个8位并行
I/O端口 P0-P3,两个16位的定时器/计数器,5个中断源、两个中断个优先级的中断控制系统,一个全双工 UART 的串行口 I/O 口,片内振荡器和时钟产生电路,休闲方式和掉电方式。
6. 89C51片内程序存储器容量为4KB,地址从0000-0FFFH开始,存放程序和表格常数,片外最多可扩展64KBROM地址1000-FFFFH,片内外统一编址。
单片机的内部存储空间分为数据存储器
和程序存储器。
7. 内部数据存储器:共 256字节单元,包括低 128个单元和高 128个单元。
低 128字节又分成3个区域:工作寄存器区(00H~1FH),位寻址区(20H~2FH)和用户RAM区
(30H~7FH)存放中间结果,数据暂存及数据缓冲。
高128字节是供给特殊功能寄存器(S FR)使用的,因此称之为特殊功能寄存器区(80H〜FFH),访问它只能用直接寻址。
内部程序存储器:在8031片内无程序存储器,8051片内具有4KB掩模ROM,8751片内具有4KBEPROM 。
8. 引脚是片内外程序存储器的选择信号。
当端保持高电平时,访问内部程序存储器,但在PC (程序计数器)值超过0FFFH (对于8051/8751/80C51)或仆FFH (对于8052)时,将自动转向访问外部程序存储器。
当端保持低电平时,不管是否有内部程序存储器,则只访问外部程序
存储器。
由于 8031 片内没有程序存储器,所以在使用 8031 时,引脚必须接低电平。
9. RST复位信号输入端,高电平有效。
保持两个机器周期(24个时钟振荡周期)的高电平有效,完成复位,复位后, CPU 和系统都处于一个确定的初始状态,在这种状态下,所有的专用寄存
器都被赋予默认值,除 SP=07H, P0~P3 口为FFH夕卜,其余寄存器均为0。
ALE/ : ALE输出正
脉冲,频率为振荡周期的1/6,CPU访问片外存储器时,ALE输出信号作为锁存低8位地址的控制信号,看芯片好坏可以用示波器看ALE 端是否有脉冲信号输出。
PSEN程序存储允许输出信号端,也可以检查芯片好坏,有效即能读出片外ROM的指令,
引脚信号RD/WR有效时可读/写片外RAM或片外I/O接口。
10. P0作为输出口时,必须外接上拉电阻才能有高电平输出,作为输入口时,必须先向锁存器
写“ 1”;作为普通I/O 口使用或低8位地址/数据总线使用。
P1 口有上拉电阻,对 FLASHROM 编程和校验是 P1 接收低八位地址;只用作普通 I/O 口使用。
P2 口比P1 口多了一个转换控制开关;作为普通I/O 口使用或高8位地址线使用时访问外部程
序存储器和 16位地址的外部数据存储器。
P3 口比P1 口增加了与非门和缓冲器;具有准双向I/O功能和第二功能。
P0, P1,P2,P3 准双
向口。
上述 4个端口在作为输入口使用时,应注意必须先向端口写“ 1”。
11. 普林斯顿结构:一个地址对应唯一的存储单元,用同类访问指令。
哈佛结构:程序存储器和数据存储器分开的结构。
CPU访问片内外ROM用MOVC,访问片外RAM用M OVX,访问片内RAM用M OV. 此文档仅供学习和交流
12.
SP总是初始化到内部RAM地址07H,堆栈的操作PUSH、POP。
DPTR是数据指针寄存器,是一个16位寄存器,用来存放16位存储器的地址,以便对64KB片外RAM作间接寻址。
DPTR由高位字节DPH和低位字节DPL组成。
13 .指令周期:执行一条指令所需要的时间。
机器周期:CPU完成一个基本操作所需要的时间,6个状态周期和12个振荡周期。
当晶振频率为12MHz时,一个机器周期为1卩§当晶振频率为6 MHz时,一个机器周期为2卩,复位时间超过4卩。
14.复位操作有:电自动,按键手动,看门狗。
15 .空闲方式是CPU停止工作而RAM,定时器/计数器,串行口及中断系统都工作。
掉电一切功能都暂停,保存 RAM中内容。
退出空闲方式;硬件将PCON.0清0,硬件复位。
当CPU执行PCON .1为1,系统进入掉电方式。
推出掉电只有硬件复位。
16.
17. 单片机的寻址方式:寄存器寻址,直接寻址,立即数寻址,寄存器间接寻址,变址寻址,相对寻址,位寻址。
18. AJMP和SJMP的区别有:
⑴跳转范围不同。
AJMP addr1 ;短跳转范围:2KB °SJMP rel ;相对跳转范围:-128~+127 ⑵指令长度不同。
(3)指令构成不同。
AJMP、LJMP后跟的是绝对地址,而SJMP后跟的是相对地址。
不能用AJMP指令代替程序中的SJMP指令,因为如果改变的话,程序跳转到的新PC值指向的地址会不同,导致程序出现错误。
19. 在89c51 片内RAM 中30H)=38H,38H=40H,40H=48H,48H=90H。
情分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果?
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
;寄存器间接寻址 ((RO )) - 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 注意:-左边是 内容,右边是单元
20. 已知R3和R4中存放有一个16位的二进制数,高位在 R3中,地位在R4中,请编程
CLR C ;清进位位 C
;取该数低 8 位- A ;带进位位左移 1 位
;结果存回 31H ;取该数高8位一 A ;带进位位左移 1 位 ;结果存回 30H /计数器中断,禁止其他中断。
设置 用字节操作指令: MOV IE #8AH 或 MOV A8H,#A8H
用位操作指令: SETB ET0
SETB ET1 SETB EA
23. 设89 C51的片外中断为高优先级,片内为低优先级,设置 IP 值
用字节操作指令:MOV IP,#05H 或MOV 0B8H,#05H 用位操作指令 :SETB PX0
SETB PX1
CLR PS CLR PT0 CLE PT1
24. 89C51 单片机内有两个 16位定时器/计数器,即 T0,T1. 第三章
1、指令:CPU 根据人的意图来执行某种操作的命令 指令系统:一台计算机所能执行的全部指令集合 机器语言:用二进制编码表示,计算机能直接识别和执行的语言 汇编语言:用助记符、符号和数字来表示指令的程序语言 高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性
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 RET
将其求补,并存回原处。
MOV A, R3 ;取该数高8位一 A L1 : 21.已知30H 和31H 中村有一个16位的二进制数,高位在前,低位在后,请编程将他们 乘以 2,在存回原单元中。
MOV A , 31H
RLC A MOV 31H , A
MOV A , 30H
RLC A
MOV 30H , A
22.假设允许片内定时器 IE 值
此文档收集于网络,如有侵权请联系网站删除 语言
5、 SFR: 直接寻址,位寻址,奇存器寻址;片外 RAM :奇存器间接寻址
6、 MOV MOV MOV MOV MOV
MOV MOV MOV MOV MOV
MOV 最后结果: A ,40H ;直接寻址 (40H)f A
R0, A ;寄存器寻址 (A )f R0 P1, #0F0H ;立即数寻址 0F0— P1 @R0,30H ;直接寻址 (30H) R0)
DPTR,#3848H ;立即数寻址 3848H —DPTR 40H,38H ;直接寻址 (38H) f 40H R0,30H ;直接寻址 (30H) f R0 P0,R0 ;寄存器寻址 (R0 )f P0 18H , #30H ;立即数寻址 30Hf 18H A , @R0
;寄存器间接寻址 ((R0)) f A
P2, P1
;直接寻址 (P1)f P2 (R0) =38H, (A) =40H, (P0) =38H, (P1) = (P2) =0F0H, (DPTR) =3848H, (18H) =30H, (30H) =38H, (38H) =40H, (40H) =40H, (48H) =38H 注意:f 左边是内容,右边是单兀
7、 用直接寻址,位寻址,寄存器寻址 8、 MOV A,DATA ;直接寻址 2字节1周期 MOV A,#DATA ;立即数寻址 2字节1周期 MOV DATA1,DATA2 ;直接寻址 3字节2周期 MOV 74H,#78H ;立即数寻址 3字节2周期
如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录 A
2、 见第1题
3、 操作码 [目的操作数][,源操作数] 4
9、MOV
MOV
MOV
MOV 最后结果:A,@R0 ;((R0))=80Hf A
@R0,40H ;(40H)=08H f (R0)
40H,A ;(A)=80 f 40H
R0,#35H ;35H f R0
(R0) =35H (A) =80H, (32H) =08H, (40H) =80H
10、用直接寻址,位寻址,寄存器寻址
此文档收集于网络,如有侵权请联系网站删除
11、只能采用寄存器间接寻址(用 MOVX 指令)
12、低 128 字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址( R0~R7) 高 128 字节:直接寻址,位寻址,寄存器寻址 13、采用变址寻址(用 MOVC 指令)
14、压缩 BCD 码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理, 此时得到的结果不正确。
用 DA A 指令调整(加 06H , 60H ,66H ) 15、用来进行位操作
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、 M OV 27H ,R7 MOV 26H ,R6 MOV 25H ,R5 MOV 24H ,R4 MOV 23H ,R3 MOV 22H ,R2 MOV 21H ,R1 MOV 20H ,R0 19、 M OV 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
注意:如果在你的程序中用到了进位位,在程序开始的时候要记得清
;(A )与10比较,不等转L1 ;相等转 LABEL
;(A )大于 10,转 LABEL
16、ANL A ,#17H
ORL 17H ,A
XRL A ,@R0 CPL A 所以( A )=CBH
;83H A 17H=03H —A ;34H V 03H=37H — 17H
;03H ® 37H=34H 0 进位位
21、(1) A > 10 CJNE A ,#0AH ,L1 LJMP LABEL L1 :JNC LABEL
或者:
CLR C
SUBB A ,#0AH JNC LABEL (2) A > 10
CJNE A ,#0AH ,L1 RET
L1 :JNC LABEL
RET 或者: CLR C SUBB
A ,#0AH JNC L1 RET L1 :JNZ LABEL RET
(3) A < 10 CJNE A ,#0AH ,L1 L2:LJMP LABEL L1 :JC 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
;(A )与10比较,不等转L1 ;相等结束 ;(A )大于 10,转 LABEL ;(A )小于10,结束 ;(A )与10比较,不等转L1
;相等转 LABEL
;(A )小于10,转L2
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
;传送的是“ $”字符吗?不是,传送下一个字符
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
RET
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
MOV R2, #04H
;字节长度— R2 MOV R0, #30H
;一个加数首地址— R0 MOV R1, #40H
;另一个加数首地址— R1 CLR C ;清进位位
MOV A , @R0
;取一个加数 ADDC A, @R1 ;两个加数带进位位相加 DA A ;十进制调整 MOV @R0, A ;存放结果 INC R0 ;指向下一个字节 INC R1 ?
DJNZ R2, LOOP ;数据块长度减 1,不等于 0,继续查找
RET
28、
L1: 29、 30、 LOOP :
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。
( 27A0A (大家可以一下书上,对于立即数寻址的话,后面一个字节存放的是立
即数) 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
MOV B,#02H
MUL AB ADD A ,
62H ;F2H —A
;02H— B
;F2H X O2H=E4H—A
;积的低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)=BOH,(64H)=02H
39、MOV A , XXH
ORL A , #8OH
MOV XXH , A
40、( 2) MOV A , XXH
MOV RO, A
XRL A , RO
第五章
1 、什么是中断和中断系统?其主要功能是什么?
答:当 CPU 正在处理某件事情的时候,外部发生的某一件事件请求CPU 迅速去处理,于是, CPU 暂时中止当前的工作,转去处理所发生的事件,中断服务处理完该事件以后,再回到原来被终止的地方,继续原来的工作。
这种过程称为中断,实现这种功能的部件称为中断系统。
功能:
( 1)使计算机具有实时处理能力,能对外界异步发生的事件作出及时的处理
(2)完全消除了 CPU 在查询方式中的等待现象,大大提高了 CPU 的工作效率
( 3)实现实时控制
2、试编写一段对中断系统初始化的程序,使之允许INTO, INT1,TO,串行口中断,且使TO 中断为高优先级中断。
解: MOV IE,#O97H
MOV IP,#O2H
3、在单片机中,中断能实现哪些功能?答:有三种功能:分时操作,实时处理,故障处理
4、89C51 共有哪些中断源?对其中端请求如何进行控制?
答:(1)89C51有如下中断源
①: 外部中断 O 请求,低电平有效
②:外部中断 1 请求,低电平有效
③TO:定时器、计数器0溢出中断请求
④T1 :定时器、计数器1溢出中断请求
⑤TX/RX :串行接口中断请求
(2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现各种中断控制功能
5、什么是中断优先级?中断优先处理的原则是什么?
答:中断优先级是 CPU 相应中断的先后顺序。
原则:
( 1)先响应优先级高的中断请求,再响应优先级低的
( 2)如果一个中断请求已经被响应,同级的其它中断请求将被禁止
(3)如果同级的多个请求同时出现,则 CPU 通过内部硬件查询电路,按查询顺序确定应该响应哪个中断请求
查询顺序:外部中断0^定时器0中断f外部中断1^定时器1中断f串行接口中断
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(IEO)清零。
边沿触发方式:CPU在每个机器周期S5P2期间采样外部中断请求引脚的输入电平。
如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下此文档仅供学习和交流
一个机器周期采样到外部中断请求为低电平,则使IE1(IE0)置“1”申请中断;否则,IE1(IEO)置 0。
1 3、89C5 1 单片机有五个中断源,但只能设置两个中断优先级,因此,在中断优先级安排上受到一定的限制。
试问以下几种中断优先顺序的安排(级别由高到低)是否可能:若可能,则应如何设置中断源的中断级别:否则,请简述不可能的理由。
⑴定时器 0,定时器 1 ,外中断 0,外中断 1 ,串行口中断。
可以, MOV IP,#0AH
⑵串行口中断,外中断 0,定时器 0,外中断 1,定时器 1。
可以, MOV IP,#10H
⑶外中断 0,定时器 1,外中断 1,定时器 0,串行口中断。
不可以,只能设置一级高级优先级,如果将INTO,T1设置为高级,而TO级别高于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的IEO位,CPU在下一个机器周期才会查询这些值。
这时满足中断响应条件,下一条要执行的指令将是一条硬件长调用指令“LCALL ”,使程序转入中断矢量入口。
调用本身要用2个机器周期,这样,从外部中断请求有效到开始执行中断服务程序的第一条指令,至少需要 3 个机器周期,这是最短的响应时间。
如果遇到中断受阻的情况,这中断响应时间会更长一些。
例如,当一个同级或更高级的中断服务程序正在进行,则附加的等待时间取决于正在进行的中断服务程序:如果正在执行的一条指令还没有进行到最后一个机器周期,附加的等待时间为 1~3 个机器周期;如果正在执行的是RETI指令或者访问IE或IP的指令,贝U附加的等待时间在5个机器周期内。
若系统中只有一个中断源,则响应时间为 3~8 个机器周期。
16、中断响应过程中,为什么通常要保护现场?如何保护?
答:因为一般主程序和中断服务程序都可能会用到累加器,PSW寄存器及其他一些寄存器。
CPU 在进入中断服务程序后,用到上述寄存器时,就会破坏它原来存在寄存器中的内容;一旦中断返回,将会造成主程序的混乱。
因而在进入中断服务程序后,一般要先保护现场,然后再执行中断处理程序,在返回主程序以前再恢复现场。
保护方法一般是把累加器、PSW寄存器及其他一些与主程序有关的寄存器压入堆栈。
在保护现场和恢复现场时,为了不使现场受到破坏或者造成混乱,一般规定此时 CPU 不响应新的中断请求。
这就要求在编写中断服务程序时,注意在保护现场之前要关中断,在恢复现场之后开中断。
如果在中断处理时允许有更高级的中断打断它,贝在保护现场之后再开中断,恢复现场之前关中断。
17、清叙述中断响应的 CPU 操作过程,为什么说中断操作是一个 CPU 的微查询过程?答:在中断响应中,CPU要完成以下自主操作过程:
a) 置位相应的优先级状态触发器,以标明所响应中断的优先级别
b) 中断源标志清零( TI、 RI 除外)
c) 中断断点地址装入堆栈保护(不保护 PSW)
d) 中断入口地址装入PC,以便使程序转到中断入口地址处
在计算机内部,中断表现为CPU的微查询操作。
89C51单片机中,CPU在每个机器周期的S6状态,查询中断源,并按优先级管理规则处理同时请求的中断源,且在下一个机器周期的 S1 状态中,响应最高级中断请求。
但是以下情况除外:
a) CPU 正在处理相同或更高优先级中断
b) 多机器周期指令中,还未执行到最后一个机器周期
c) 正在执行中断系统的SFR操作,如RETI指令及访问IE、IP等操作时,要延后一条指令
18、在中断请求有效并开中断状况下,能否保证立即响应中断?有什么条件?答:在中断请求有效并开中断状况下,并不能保证立即响应中断。
这是因为,在计算机内
部,中断表现为CPU的微查询操作。
89C51单片机中,CPU在每个机器周期的S6状态下,查询中断源,并按优先级管理规贝处理同时请求的中断源,且在下一个机器周期的 S1 状态中,响应最高级中断请求。
此文档收集于网络,如有侵权请联系网站删除 在以下情况下,还需要有另外的等待:
a ) CPU 正在处理相同或更高优先级中断
b ) 多机器周期指令中,还未执行到最后一个机器周期
c ) 正在执行中断系统的SFR 操作,如RETI 指令及访问IE 、IP 等操作时,要延后一条
指令 第 6 章习题答案
1、定时器模式 2 有什么特点?适用于什么场合? 答:
(1) 模式2把TLO (或TL1)配置成一个可以自动重装载的8位定时器/计数器。
TL0 计数溢出时不仅使溢出中断标志位 TFO 置1,而且还自动把THO 中的内容重新装载到TLO 中。
TLO 用作8位计数器,THO 用以保存初值。
(2) 用于定时工作方式时间(TFO 溢出周期)为,用于计数工作方式时,最大计数 长度(THO 初值=0)为28=256个外部脉冲。
这种工作方式可省去用户软件重装初值的语句,并可产生相当精确定时时间,特别适于 作串行波特率发生器。
2、单片机内部定时方式产生频率为1OOKHZ 等宽矩形波,假定单片机的晶振频率为12MHZ 请编程实现。
答:TO 低5位:1BH
TO 高 8 位: FFH
;设置5ms 定时初值
;启动 TO
;查询到定时时间到?时间到转 L1 ;时间未到转LOOP 继续查询 ; 重新置入定时初值
MOV THO,#OFFH
CPL P1.O ; 输出取反,形成等宽矩形波
SJMP LOOP ;重复循环
3、 89C51 定时器有哪几种工作模式?有何区别? 答:有四种工作模式:模式 0,模式1,模式2,模式3
(1) 模式0:选择定时器的高8位和低5位组成一个13位定时器/计数器。
TL 低5 位溢出时向TH 进位,TH 溢出时向中断标志位TF 进位,并申请中断。
定时时间t=(213-初值)X 振荡周期X 12;计数长度位213=8192个外部脉冲
(2) 模式1:与模式0的唯一差别是寄存器TH 和TL 以全部16位参与操作。
定时时 间t=(216-初值)X 振荡周期X 12;计数长度位216=65536个外部脉冲
(3) 模式2:把TLO 和TL1配置成一个自动重装载的8位定时器/计数器。
TL 用作8 位计数器,TH 用以保存初值。
TL 计数溢出时不仅使TF0置1,而且还自动将TH 中的内容 重新装载到 TL 中。
定时时间t=(28-初值)X 振荡周期X 12;计数长度位28=256个外部脉冲
(4) 模式3:对T0和T1不大相同
若设T0位模式3, TLO 和TH0被分为两个相互独立的8位计数器。
TLO 为8位计数器,功 能与模式 O 和模式 1 相同,可定时可计数。
TH0仅用作简单的内部定时功能,它占用了定时器 T1的控制位TR1和中断标志位TF1,启 动和关闭仅受TR1控制。
定时器T1无工作模式3,但T0在工作模式3时T1仍可设置为0~2 此文档收集于网络,如有侵权请联系网站删除
4、 89C51内部设有几个定时器/计数器?它们是由哪些特殊功能寄存器组成? 答:89C51单片机内有两个16位定时器/计数器,即TO 和T1。
TO 由两个8位特殊功能寄存器THO 和 TLO 组成;T1由TH1和TL1组成。
5、 定时器用作定时器时,其定时时间与哪些因素有关?作计数器时,对外界计数频率有 何限制? MOV TMOD,#OOH ;设置定时器TO 工作于模式O MOV TLO,#1BH
MOV THO,#OFFH SETB TRO
LOOP:JBC TFO,L1 SJMP LOOP L1: MOV TLO,#1BH。