7复位中断与程序控制Word下载.docx

上传人:b****2 文档编号:13342020 上传时间:2022-10-09 格式:DOCX 页数:28 大小:154.16KB
下载 相关 举报
7复位中断与程序控制Word下载.docx_第1页
第1页 / 共28页
7复位中断与程序控制Word下载.docx_第2页
第2页 / 共28页
7复位中断与程序控制Word下载.docx_第3页
第3页 / 共28页
7复位中断与程序控制Word下载.docx_第4页
第4页 / 共28页
7复位中断与程序控制Word下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

7复位中断与程序控制Word下载.docx

《7复位中断与程序控制Word下载.docx》由会员分享,可在线阅读,更多相关《7复位中断与程序控制Word下载.docx(28页珍藏版)》请在冰豆网上搜索。

7复位中断与程序控制Word下载.docx

内部一些控制寄存器(专用寄存器)的内容不确定,可能导致定时器溢出、程序尚未开始就要中断,串口胡乱向外外设数据……。

因此,任何单片机在开始工作前,都必须进行一次复位过程,使单片机处于一种确定的状态。

单片机进入复位过程有三种途径:

上电(开机)复位、手动复位和监控电路(看门狗或电源监控等)复位。

顾名思义,上电复位就是开机给单片机系统加电时单片机进行复位操作。

手动复位是人为地强行使单片机进行复位操作。

而为了提高系统的可靠性,在单片机应用系统中专门设计了一些电路用以监控系统的电源(如电源电压过低可能导致单片机执行错误的指令与程序)和单片机的状态,如果出现异常,这些电路将强制单片机复位。

7.1.2复位电路

HMOS型8051的复位结构见图1-44。

复位引脚RST(它还是掉电方式下内部RAM的供电端VPD)通过一个斯密特触发器与复位电路相连.斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2由复位电路采样一次.

89C52的内部复位结构见图7-1,

此处复位引脚称为RST。

上电复位电路见图7-2(a)。

上电瞬间RST端的电位与VCC相同,随着充电电流的减小,RST的电位逐渐下降。

按图中所示的电路参数(其中8.2kΩ是斯密特触发器输入端的一个下拉电阻),时间常数为

秒=82毫秒,只要VCC的上升时间不超过1毫秒,振荡器建立时间不超过10毫秒,这个时间常数足以保证完成复位操作。

上电复位所需的最短时间是振荡器建立时间加上2个机器周期,在这段时间内RST端的电平应维持高于斯密特触发器的下阈值。

图7-2(b)和(c)示出外部复位电路的可能方案。

(a)图中的第一方案由外部提供一个复位脉冲,此复位脉冲应保持宽于2个机器周期。

复位脉冲过后,由内部下拉电阻保证RST端为低电平。

(b)图中的第二方案是上电复位与手动复位相结合的方案。

上电复位的工作过程与图7-2(a)的相似。

手动复位时,按下复位按钮,电容C通过电阻R!

迅速放电,使RST迅速变为高电平,复位按钮松开后,电容通过R2和内部下拉电阻充电,逐渐使RST端恢复低电平。

图7-2外部复位电路

7.1.3单片机复位后的状态

在振荡器正在运行的情况下,复位是靠在RST引脚处至少保持2个机器周期(24个振荡器周期)的高电平而实现的。

在RST端出现高电平后的第2个周期,执行内部复位,以后每个周期重复一次,直至RST端变低。

复位后,各内部寄存器的状态如表7-1所列。

表7-189C52复位后各内部寄存器的状态

寄存器

内容

PC

0000H

ACC

00H

B

PSW

SP

07H

DPTR

P0~P3

0FFH

IP

(XX000000)

IE

(0X000000)

TMOD

TCON

T2CON

TH0

TL0

TH1

TL1

TH2

TL2

RLDH

RLDL

SCON

SBUF

不定

PCON

(0XXX0000)

复位时还把ALE和

(它们是准双向口结构的)配置为输入状态,即ALE=1和

=1。

内部RAM不受复位的影响。

VCC通电时,RAM内容是不定的,除非RAM是由低功耗操作方式下返回的。

7.2程序控制

单片机的工作原则绝对地是“一心一意”,只能按照程序的流向一步步地执行下去。

为了使单片机具有“智能”,也就是使单片机根据所检测到的外接状况、或人们给它的命令,以及某种运算、判断的结果来改变程序的流向。

可以说,单片机能处理上述情况的种类越多和作出的改变越复杂,说明单片机的“智能”越高。

控制程序流向的方式有两大类:

硬件和软件。

硬件的方式有复位和中断等,对于89C52来说,硬件使程序流向固定的入口地址。

如复位的入口地址是0000H,各个中断都有各自固定的入口地址。

软件的方式是调用(CALL)指令、跳转(JMP)指令、判断跳转(条件转移,J、CJ和DJ)、布尔量判断跳转(条件转移,J)和子程序返回(RET、RETI)指令。

程序的流向不是固定的:

子程序返回(RET、RETI)由堆栈中保存的返回地址来确定,而其它则由指令中的操作数来指定。

软件的方式又可以分为两类:

转移类和调用子程序类。

转移类又分为条件转移和无条件转移两类。

表7-2列出程序流向控制的分类。

表7-2程序流向控制的分类

硬件

软件(指令)

调用子程序

转移

条件

无条件

复位,中断

LCALL,ACALL

RET,RETI

JB,JNB,CJNE,DJNZ,JZ,JNZ,JC,JNC

LJMP,AJMP

7.3程序流向控制的指令

控制程序转移类指令共有17条,布尔变量控制程序转移的指令有5条,总共22条。

其中有全存贮空间的长调用、长转移和按2KB分块的程序空间内的绝对调用和绝对转移;

全空间和长相对转移及一页范围的短相对转移;

还有不少条件转移指令。

这类指令用到的助记符有ACALL、AJMP、LCALL、LJMP、SJMP、JMP、JZ、JNZ、CJNE、DJNZ、JC、JNC、JB、JNB和JBC。

1.绝对调用

格式:

ACALLaddr11

代码:

操作:

(PC)←(PC)+2

(SP)←(SP)+1

((SP))←(PC7~0)

((SP))←(PC15~8)

(PC10~0)←指令中的2KB区内地址a10~0

说明:

指令的操作码与被调用子程序的入口地址的页号有关。

每一种操作码可分别对应32个页号。

见表7-3。

指令中指定的a10~0为区内地址。

表7-3ACALL和AJMP指令操作码与页面的关系

子程序入口转移地址页面号

操作码

ACALLAJMP

00081018202830384048505860687078

80889098A0A8B0B8C0C8D0D8E0E8F0F8

11

01

01091119212931394149515961697179

81899199A1A9B1B9C1C9D1D9E1E8F1F9

31

21

020A121A222A323A424A525A626A727A

828A929AA2AAB2BAC2CAD2DAE2EAF2FA

51

41

030B131B232B333B434B535B636B737B

838B939BA3ABB3BBC3CBD3DBE3EBF3FB

71

61

040C141C242C343C444C545C646C747C

848C949CA4ACB4BCC4CCD4DCE4ECF4FC

91

81

050D151D252D353D454D555D656D757D

858D959DA5ADB5BDC5CDD5DDE5EDF5FD

B1

A1

060E161E262E363E464E666E666E767E

868E969EA6AEB6BEC6CEE6EEE6EEF6FE

D1

C1

070F171F272F373F474F777F676F777F

878F979FA7AFB7BFC7CFF7FFE7EFF7FF

F1

E1

例如,当调用入口地址为0475H或0AC75H的一个子程序时,操作码都为91H。

被调用的子程序入口地址必须与庙用指令ACALL后一条指令的第一个字节在相同的2KB存贮器区之内。

ACALL把MCS-51子程序存贮空间划分为32个区,每个区为2KB字节,调用指令ACALL的下一条指令第一个字节与子程序的入口地址必须在同一区内,否则将引起程序转移混乱。

如果ACALL指令正好落在区底的两个单元内,如07FEH和07FFH单元或0AFFEH和0AFFFH单元,程序就转移到下一个区中去了。

因为在执行调用操作之前PC先加了2。

指令的执行不影响标志。

2.绝对转移

AJMPaddr11

(PC)←指令中的a10~0

指令的操作码与转移目标地址所在页号有关,每一种操作码可分别对应32个页号,见表2-5。

指令中的a10~0为区内地址。

转移目标地址必须与AJMP下一休指令的第一个字节在同一个2KB存贮器区内。

很明显这条指令与ACALL指令相类似,是为了与MCS-48中的JMP指令兼容而设计的,同样,当ALMP指令正好放在区底时,转移目标将移至下一区中。

因为在执行转移操作之前PC先加了2。

3.长调用

LCALLaddr16

12H

(PC)←(PC)+3

(PC)←指令中的addr15~0

这条调用指令允许子程序放在64KB空间的任何地方。

4.长转移

LJMPaddr16

02H

这条指令允许转移的目标地址在64KB空间的任意单元。

5.短转移

SJMPrel

80H

(PC)←(PC)+相对地址

指令中的相对地址是一个带符号(2的补码)的偏移字节数,其范围为-128~+127。

负数表示向后转移,正数表示向前转移。

CPU根据偏移字节数计算出转移的目的地址。

例如,在0100H单元有一条SJMP指令,若其相对地址为21H(正数)则将转移到0102H+21H=0123H地址上。

若相对地址为F0H(负数),则将转移到0102H+FFF0H=00F2H地址上。

在用汇编语言编写程序时,rel往往是一个标号,由汇编程序在汇编过程中自动计算偏移字节数,并填入指令代码中。

不手工汇编时,则根据该标号的地址按上述方法进行计算。

以后的指令中有关rdl不再重复说明。

当偏移字节数为FEH时,SJMP指令将实现‘原地’转圈的运行状态。

如例16所示在60H地址处有SJMP指令,标号HERE相当于60H。

根据偏移字节数计算得转移目的地址为0062H+FFFEH=0060H。

故代码为80H、0FEH的短相对转移指令执行‘原地’转圈操作。

6.间接长转移

JMP@A+DPTR

73H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1