目录
首先补充一个知识点:
MCS-51:MCS-51从广义上讲是指所有的51系列单片机,从狭义上讲是指Intel公司生产的51系列,一般称为标准51系列.主要产品为8031/8051/8052/8751/8752,包含NMOS型和CMOS型。
8051与80C51的区别:
80C51单片机是在8051的基础上发展起来的,也就是说在单片机的发展过程中是先有8051,然后才有80C51的。
8051单片机与80C51单片机从外形看是完全一样的,其指令系统、引脚信号、总线等完全一致(完全兼容),也就是说在8051下开发的软件完全可以在80C51上应用,反过来,在89C51下开发的软件也可以在8051上应用。这两种单片机是完全可移植的。
8051与80C51单片机的主要差别就在于芯片的制造工艺上。80C51的制造工艺是在8051基础上进行了改进。
????8051系列单片机采用的是HMOS工艺:高速度、高密度;
????80C51系列单片机采用的是CHMOS工艺:高速度、高密度、低功耗;也就是说80C51单片机是一种低功耗单片机。
RAM:内部数据存储器
用于存放可读/写数据,芯片上由256个RAM单元。RAM分为低128个单元和高128个单元。低128个单元区称为内部 RAM,可以被用户使用;
RAM 低128单元区可以分为三部分: 寄存器区、位寻址区、用户RAM区,内部RAM的前32个单元为寄存器,共分为4组。每组有8个寄存器,在组中按照 R7~R0编号。
高128个单元区为专用寄存器 (SFR)区,不能被用户使用。所以常说的内部RAM区指的是低128单元。
常用的专用寄存器:
①累加器Acc(8位)
需要ALU处理的数据和计算结果多数要经过A累加器,相当于十字路口的警察。累加器在算术运算中存放操作数和运算结果。
②寄存器B(8位)
与A累加器配合执行乘、除运算,也可用作通用寄存器
乘法时:B为乘数并存放乘积的高八位; 除法时:B为除数并存放余数。
③程序计数器PC(16位)
PC的内容为将要执行的指令地址。
PC不在上述RAM存储器内,是唯一不可寻址的专用寄存器,用户不可对其进行读、写,在执行转移、调用、返回的指令时能自动改变其内容,以改变程序的执行顺序。复位时:PC = 0000H,程序从此单元开始执行,访问范围:0000H~FFFH即64K。
④程序状态字PSW(8位)
存放ALU运算过程的标志状态,用来存放程序状态信息,而且某些指令的执行结果会自动影响到PSW的有关标志位,有些标志位可用指令来设置。
程序状态字寄存器的结构:
⑤堆栈指针SP(8位)
堆栈是一种数据结构,专门存放向上生长堆栈的栈顶位置对堆栈共有两种操作:进栈和出栈,遵循“后进先出”的原则。
堆栈主要用于子程序调用及返回和中断处理断点的保护及返回,系统复位时,SP=07H。实际应用中,应该将堆栈指针SP设置为30H之后,也就是用户RAM区中,以免占用寄存器区与位寻址区。
ROM:内部程序存储器
51单片机所支持的最大程序存储器空间为64KB,其地址指针就是16位程序计数器PC
芯片中共有4KB 的ROM,用于存放程序和原始数据。对于4KB程序存储器的单片机(8051或8751)。若EA接Vcc(+5V),当程序计数器PC的值是0000H~0FFFH,CPU则从内部程序存储器取指令;当PC值大于0FFFH时,则从外部存储器取指令。如果EA接Vss(地),则内部的程序存储器被忽略,CPU总是从外部程序存储器中取指令。
以下为6个特殊的单元区域:
0000H~ 0002H???????系统的启动单元,单片机复位后(PC)=0000H,程序从0000H单开始取指令。0003H-0004H????????外部中断0中断地址区
000BH-0012H????????定时/计数器0中断地址区。
0013H-001AH????????外部中断1中断地址区
001BH-0022H????????定时/计数器1中断地址区
0023H-002AH????????串行中断地址区
(1)主电源引脚
Vcc:接+SV电源
Vss:接电源地。
(2)时钟电路引脚
XTAL1:接外部晶体的一端。在单片机内部,它是反相放大器的输入端,该放大器成了片内振荡器。在采用外部时钟电路时,对于HMOS单片机,此引脚必须接地对CHMOS单片机,此引脚作为驱动端。XTAL2:接外部晶体的另一端。在单片机内部,它是反相放大器的输出端。若采用外部时钟电路时,对于HMOS单片机,该引脚输入外部时钟脉冲:对于CHMOS单片机,此引脚应悬空。3
(3)控制信号引脚
RST/VPD:复位/备用电源输入端。单片机上电后,只要在该引脚上输入24个振荡周期(2个机器周期)宽度以上的高电平就会使单片机复位。RST/VPD具有复用功能,可接上+5V备用电源。当Vcc下掉到低于规定的电平,而VPD在其规定的电压范围内时,VPD就向片内RAM提供备用电源,以保持片内RAM中的信息不丢失。
?
(4)ALE(Address Latch Enable):低8位地址锁存使能输出端。当CPU访问外部存储器时,ALE可向低8位地址锁存器输出锁存控制信号;当不访问外部存储器时,ALE端仍以时钟振荡频率的1/6固定地输出正脉冲。因此,它可用作外部定时或其他需要但要注意的是:每当访问外部数据存储器时会丢失一个脉冲。ALE端可驱动8个LSTTL负载。
?
(5)(Program Store Enable):外部程序存储器读选通信号。
CPU在访问外部程序存储器期间,每个机器周期,信号两次有效。当访问外部数据存储器时,则不会出现信号。端可以驱动8个LSTTL负载。
(6)(Enable Address):外部程序存储器地址允许使能端。
当输入高电平时,CPU从片内程序存储器开始执行程序,当程序计数器PC 的值超过内部程序存储器的最高地址(对于 8051为OFFFH)时,将自动转向片外程序存储器取指令并执行。
当输入低电平时,CPU 仅访问片外程序存储器。对于 8031 来说,由于片内无程序存储器,所以EA 端必须接低电平。
(7)80C51共有40个引脚,其中I/O口为:
P0.0~P0.7:P0口8位准双向复用I/O端口
P1.0~P1.7:P1口是一个内部带上拉电阻的8位准双向I/O端口
P2.0~P2.7:P2口是一个内部带上拉电阻的8位准双向复用I/O端口
P3.0~P3.7:P3口是一个内部带上拉电阻的8位多功能双向复用I/O端口
其中P3含有第二功能,第二功能如下:
P3口线的第二功能都是单片机重要的控制信号。因此在使用时,总是按需要优先选用他的第二功能,剩下不用的才作为I/O口使用。P3口能驱动4个LSTIL负载。
1.中断的概念:
CPU识别中断申请的依据:
CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。
中断源:产生中断的请求源
中断请求:中断源向CPU提出的处理请求
中断响应:CPU检测到中断请求后进入中断服务
中断服务:CPU 根据中断请求进行的相应处理
中断返回:退出中断服务返回主程序( RETI)
中断响应过程:CPU对事件的整个处理过程
中断系统:能够实现中断处理功能的部件
2.中断源:
中断系统如下所示:
80C51提供了5个中断源,2个中断优先级控制,可实现2个中断服务嵌套,可通过程序设置中断的允许和屏蔽,设置中断的优先级。
●5个中断源
外部中断源(中断标志为IE0和IE1)
外部中断0 :由INT0(P3.2)端口线引入,低电平或下降沿引起。
外部中断1 :由INT1(P3.3)端口线引入,低电平或下降沿引起。
内部中断源(中断标志为TF0,TF1和TI/RI)
定时/计数器T0中断:由T0回零溢出引起。
定时/计数器T1中断:由T1回零溢出引起。
串行口中断:完成一帧字符发送/接收引起。
●4个中断控制寄存器
①中断标志及中断控制寄存器TCON(地址:88H)
TF0/TF1:定时器/计数器中断申请标志位(由硬件自动置位)
? ? ? ? =0:定时器/计数器未溢出;
? ? ? ? =1:定时器/计数器溢出(T0/T1由全"1"变成全"0")
由硬件自动置位,中断响应后由硬件自动清零
IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软件设置)
? ? ? ? =0:电平触发。在INT0/INT1端申请中断的信号低电平有效。
? ? ? ? =1:跳沿触发。在INT0/INT1端申请中断的信号负跳变有效。
IE0/IE1:外部中断申请标志位
? ? ? ? =0:没有外部中断申请;
? ? ? ? =1:有外部中断申请。
由硬件自动置位,跳沿触发方式时,中断响应后,由硬件自动清0电平触发方式时,中断响应后,需软件清0。即
跳沿触发方式:
硬件自动置位,硬件自动清0
电平触发方式:
硬件自动置位,软件清0
②串行控制寄存器SCON(地址:98H)
TI/RI:串行口中断申请标志位,TI是发送完一个字节产生的中断,RI是接收完一个字节产生的中断。
? ? ? ? =0:没有串行口中断申请;
? ? ? ? =1:有串行口中断申请。
由硬件自动置位,必须由用户在中断服务程序中用软件清0。
③中断允许控制寄存器IE(地址:A8H)
EX0/EX1/ET1/ET0/ES位:分别是INT0/INT1,T0/T1,串行口的中断允许控制位。
? ? ? ? =0:禁止中断;
? ? ? ? =1:允许中断。
EA:总CPU中断允许控制位(总开关)
? ? ? ? =0:禁止全部中断;
? ? ? ? =1:允许中断。
改变IE的内容,可由位操作指令来实现,即:
SETB bit ;
CLR bit。
也可用字节操作指令实现,即
MOV IE,#data;????????MOV IE,A
ORL IE,#data;? ? ? ? ANL IE,#data
例1:若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求,写设置IE的相应程序段(不允许外部中断0,外部中断1以及串行中断)
④中断优先级控制寄存器IP(地址:0B8H)
80C51有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或
低中断优先级,可以实现两级中断嵌套。
80C51内部中断系统对同级中断优先权的规定,称为自然优先级(也称为系统缺省优先级)。如下表所示:
80C51单片机的中断优先级采用了自然优先级和人工设置高、低优先级的策略,中断处于同一级别时,就由自然优先级确定。开机时,每个中断都处于低优先级,通过软件设置寄存器IP来设定各
中断的优先级。
IP寄存器的结构:
PX0/PX1:INT0/INT1优先控制位
? ? ? ? =0:属于低优先级;
? ? ? ? =1:属于高优先级。
PT0/PT1:T0/T1 中断优先级控制位
? ? ? ? =0:属于低优先级;
? ? ? ? =1:属于高优先级;
PS:串行口中断优先级控制位
? ? ? ? =0:属于低优先级;
? ? ? ? =1:属于高优先级;
若中断子程序(二)大于中断子程序(一),那么就要先执行中断子程序(二),再执行中断子程序(一)
中断优先级结构:
80C51的中断系统有两个不可寻址的"优先级激活触发器":
●高优先级激活触发器置1,指示某高优先级的中断正在执行,所有后来的中断均被阻止。
●低优先级激活触发器置1,指示某低优先级的中断正在执行,所有同级中断都被阻止,但不阻断优先级的中断请求。
●用RETI指令可以清0对应的优先级激活触发器。
?例2:设置IP寄存器的初始值,使2个外中断请求为高优先级,其它中断请求为低优先级。
●中断响应的条件:
一个中断请求被响应,需满足以下必要条件:
1.IE寄存器中的中断总允许位EA=1
2.该中断源的中断允许位=1,即该中断没有被屏蔽
3.该中断源发出中断请求,即该中断源对应的中断请求标志为“1”
4.无同级或更高级中断正在被服务
●中断响应应被封锁:
1.CPU正在处理同级的或更高优先级的中断
2.所查询的机器周期不是所当前正在执行指令的最后一个机器周期。只有在当前指令执行完毕后,才能进行中断响应
3.正在执行的指令是RETI或是访问IE或IP的指令。需要再去执行完一条指令,才能响应新的中断请求。
●中断响应的主要过程 :
首先由硬件自动生成一条长调用指令:?
LCALL addr16
接着就由CPU执行该指令,该指令将PC的内容压入堆栈以保护断点再将中断入口地址装入PC。
●中断响应的最短响应时间:3个机器周期
1.中断请求标志位查询占1个机器周期
2.硬件子程序调用指令LCALL转到相应的中断服务程序入口,需2个机器周期
●中断响应的最长响应时间:8个机器周期
1.发生在CPU进行中断标志查询时,刚好是开始执行RETI或是访问IE或IP的指令,查询最长需2个机器周期,且把当前指令执行完再继续执行一条指令后,才能响应中断
2.接着再执行一条指令,按最长指令( 乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。
3.加上硬件子程序调用指令LCALL的执行,需要2个机器周期。
如果正在处理同级或高级中断,外部中断响应最长时间取决于正在执行的中断服务程序的处理时间,所以响应时间就无法计算了。
MCS-51单片机芯片内部有一个高增益反相放大器,用于构成时钟振荡电路,XTAL1为该放大器的输入端、XTAL2为该放大器的输出端,但要形成时钟还需附加其他电路。
1.内部时钟方式:
内部方式的时钟电路如图所示利用51内部的高增益反相放大器在和引脚上外接定时元件,内部振荡电路便产生自激振荡。定时元件一般采用石英晶体和电容组成的并联谐振回路。晶体可以在 1.2~12MHz之间任选,,晶振频率越高,单片机运行速度就越快。电容可以在5~30pF之间选择,电容C和C的大小可起频率微调的作用,电容大小要和晶体的容性负载阻抗相匹配。否则不易起振。
2.外部时钟方式:
外部时钟方式常用于多机系统,以便各个单片机能够同步工作。对外部振荡信号无特殊要求,但需保证脉冲宽度不小于20ns,且频率应低于单片机所支持的最高频率。
对于8051单片机,外部脉冲由引入内部电路,接地,具体电路如图所示。
对于80C51单片机,外部脉冲由引入,悬空,具体电路如图所示
单片机的工作过程就是不断地执行指令的过程。CPU每执行一条指令,都要经过取指(取操作码)、取操作数和执行等几个过程。详细地它们又可分为若干个基本的微操作,这些微操作必须在统一的时钟脉冲控制下严格按时间节拍一拍一拍地进行,而这个脉冲就是由CPU的定时控制器提供的。CPU 执行一条指令的各个微操作所对应时间顺序称为 CPU 时序。为了直观地展现 CPU的时序,把执行一条指令时相应信号线上有关信息的变化,按时间序列以特定的波形表示出来,这就是时序图。
由于指令的字节数不同,执行的操作也不同,因而执行不同的指令所需要的时间差别较大。为了便于说明,人们按指令的执行过程定义了几种时序定时单位,即振荡周期(节拍)、时钟周期、机器周期和指令周期。
1.振荡周期
为单片机提供时钟信号的振荡源的周期,也称节拍,用P表示。如果为内部时钟方式,振荡周期即为石英晶体的振荡周期。
2.时钟周期
时钟周期又称为状态周期(用S表示),是由振荡周期经2分频后获得的,所以时钟周期是振荡周期的2倍。时钟周期被分为P1拍节和P2拍节。在每个时钟周期的前半周期内P1 信号有效,这时通常完成算术逻辑操作;而在后半周期内,P2 信号有效,完成内部寄存器之间的传送操作。
3.机器周期
MCS-51采用定时控制方式,因此它有固定的机器周期。MCS-51单片机的一个机器周期由6个状态(12个振荡脉冲)组成,包含 12个拍节,依次表示为SIP1、SIP2、……、S6P1、S6P2,每个拍节持续一个振荡周期,每个状态持续两个振荡周期。
4.指令周期
CPU执行一条指令所需要的时间称为指令周期。一个指令周期一般由若千个机器周期组成。不同的指令所需要的机器周期数不同,通常,一个指令周期含有 1~4 个机器周期。通常称包含1个机器周期的指令为单周期指令,包含两个机器周期的指令为双周期指令。
?举例:
51单片机的指令系统尽管有 111 指令,但从指令字节数和执行周期两个方面总可以将指令分成单字节单周期、单字节双周期、单字节 4 周期、双字节单周期、双字节双周期、双字节3周期和3字节2周期指等类别。以下为几种51单片机的典型指令的取指和执行时序。
(1)单字节单周期指令
如图a所示为单字节单周期指令的时序,以“INC A”指令为例,由于是单字节,因此只需进行一次读指操作。当第二个 ALE 有效时,由于 CPU 封锁住程序计数器 PC,使其不能加 1,所以读出的还是原指令,本次操作属于无效操作,在 S6P2 结束时完成指令的整个操作。
(2)双字节单周期指令
如图b所示为双字节单周期指令的时序,以“ADD A,#data”指令为例,对应于ALE 信号两次操作都是有效的。第一次 ALE 信号有效期间读的是指令操作码,第二次 ALE有效期间读的是指令操作数,在S6P2 结束时完成指令的整个操作。
(3)单字节双周期指令
如图c所示为单字节双周期指令的时序,以“INC DPTR”指令为例,在两个机器周期内进行4 次读操作码的操作。由于是单字节指令,所以后3 次读操作无效,在第二机器周期的S6P2结束时完成指令的整个操作。
(4)访问外部RAM的单字节双周期指令
如图d所示为访问外部RAM 的指令时序。以“MOVX A,@Ri”为例,它是一条单字节双周期指令,第一机器周期时与其他指令一样,在 S1P2 期间取指令操作码,S4P2期间的读操作无效。第二机器周期时与一般单字节双周期指令不同,该周期进行外部 RAM 访问,此时与ALE信号无关,因此不产生取指操作。
定时器/计数器的结构如下:
?定时器/计数器的内部结构如下:
/:当n=0,表示T0相关的计数器,当n=1,表示T1相关的计数器,TL表示低位,TH表示高位,合起来可以组成16位计数器。
TR0/TR1:表示T0/T1的运行控制位:与其它条件一起控制定时器启动或停止。
TF0/TF1:T0/T1溢出标志位 :当T0/T1计满溢出时由硬件置1,向CPU申请中断。
GATE:与其他条件一起控制定时器的启动与停止。
C/T:方式选择位,C/T=1为计数方式,C/T=0为定时方式。
M1/M0:表示4种状态
模式0(M0,M1=0,0):
TL0使用的是低5位,TH0使用的是高8位,TL0/TH0计的是内部机器周期和外部计数脉冲,计完后溢出,TCON对应的标志位置1,并向CPU提出终端申请。
最大计数值:2^13=8192
最大定时时间:2^13*T机器周期
计数方式:
模式1(M0,M1=1,0):
16位计数器,计数溢出后,使响应的TCON置位,并向CPU发出中断申请。
最大计数值:2^16=65536
最大定时时间:2^16*T机器周期
计数方式:
方式2(M0,M1=0,1):
当TL0中断计数满时,一是向CPU发出中断申请,二是向TH0中高八位的值装入到TL0中,TL0是8位计数器,TH0是用来存放初值的,方式2特别适用于脉冲信号发生器。
最大计数值:2^8=256
最大定时时间:2^8*T机器周期
计数方式:
方式3(M0,M1=1,1):
仅有T0有此模式,对于T1的方式3则停止工作。TL0为是8位计数器,可以计内部机器周期,也可以是外部计数脉冲,TL0计数溢出时,TF置1,并向CPU提出中断申请,TH0只作为定时器。
上面C/T=0,为定时模式,现在来介绍计数模式(C/T=1)
(1)对外部脉冲信号计数是通过引脚T0(P3.4)和T1(P3.5)实现的
(2)CPU在每个机器周期对引脚T0(P3.4)和T1(P3.5)的输入电平进行来样的。若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加1。
(3)由于检测一个由1至0的跳变需要两个机器周期,而一个机器周期是外部晶振的12分频,所以最高计数频率为振荡频率的二十四分之一
(4)虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。
门控作用:
当GATE=0时:
仅由TR0控制与门的开启
与门输出1时,控制开关接通,计数开始。
当GATE=1时:
情况如图所示,当TR0=1时,与门的输出状态取决于INT0,若INT0=1,与门置1,才会进入计数阶段。
这种方式用来测量INT0引脚上正脉冲的宽度。
ET0?= 1;启动TF0中断功能
ET0?= 0;停用TFO中断功能
ET1 = 1;启动TF1中断功能
ET1 = 0:停用TF1中断功能
PT0?= 1;TF0为高优先级
PT1 = 1;TF1为高优先级
复位是单片机的初始化操作,使CPU和各个部件处在一个确定的初始状态,并从这个状态由用户程序开始引导工作。
复位方式:
冷启动:当系统初始加电的时候--上电复位
热启动:当程序运行死机的时候--按钮复位
单片机复位的条件:
51单片机有一个复位引脚RST,引脚内有一个拉低电路。当振荡器起振后,只要该引脚上出现2个机器周期(24个振荡周期)以上的高电平时即可确保使器件复位。复位完成后,如果RST端继续保持高电平,51单片机一直处于复位状态,只有RST恢复低电平后,单片机才能进入其他工作状态。
单片机复位后不会影响内部RAM中的数据,,仅将PC指向0000H,SP指向07H,保证单片机复位信号撤除后CPU 能从起始地址 000H 开始执行程序。当单片机由于外界干扰等原因造成程序跑飞或进入死循环(称为死机)时,可用复位信号重新启动程序。
复位操作还对单片机的个别引脚有影响,使 P0~P3置位输入方式,使ALE=1,使=1。
复位操作后,部分专用寄存器 (SFR)及引脚的初始化状态如下表:
复位电路
80C51基本复位电路有两种:
(1)上电自动复位电路
对于HMOS(High-speed Metal Oxide Semiconductor,高速金属氧化物半导体)型单片机,只要在 RST复位端接一个电容至 Vcc和一个电阻至Vss(地),就能实现上电自动复位,(对于CHMOS器件中只要接一个电容至 Vcc),如图所示。在加电瞬间,电容通过电阻充电,就在 RST端出现一定宽度的高电平,只要高电平时间足够长,就可以使 MCS-S有效复位。RST端在加电时应保持的高电平时间包括 Vcc的上升时间和振荡器起振的时间。
Vcc上升时间约为10ms,振荡器起振时间和频率有关。10MHz时约为1ms,1MHz时约10ms,所以一般为了可靠地复位,RST 在上电时应保持20ms 以上的高电平。图中RC时间常数越大,上电时 RST端保持高电平的时间越长。当振荡频率为 12MHz 时,典型值为C=10uF,R=8.2
若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运转。
(2)按键手动复位
按键手动复位有电平方式和脉冲方式两种。
按键电平复位是通过使复位端经电阻与Vcc接通而实现的,其电路如图b所示。
按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路如图c所示。
(3)系统复位
在单片机的应用系统中,除单片机本身需复位以外,外部扩展的IO接口电路等也需要复位,因此需要一个系统的同步复位信号。即单片机复位后,CPU开始工作时,外部的电路一定要准备好,以保证CPU有效地对外部电路进行初始化编程。如上所述,MCS-51的复位端RST是一个施密特触发器,高电平有效,而I/O接口电路的复位端一般为TTL电平输入通常也是高电平有效,但这两种复位输入端复位有效的电平不完全相同。若将单片机的复位端和I/O接口电路复位端简单相连,将使CPU和I/O接口的复位不同步,CPU对I/O初始化编程无效,使系统不能正常工作。解决的办法就是通过延时一段时间以后,再对外部电路进行初始化编程。有效的系统复位电路(上电自动复位和按键手动复位)如图所示。
图中a为,将复位电路产生的复位信号,经施密特电路(74LS14)整形后作为系统复位信号加到单片机和外部I/O接口电路的复位端;图中b为,将单片机的复位信号和I/O接口的复位信号分别由各自的复位电路产生,分别调节RC参数,使CPU 和外部电路同步复位。
程序执行方式是单片机的基本工作方式。所执行的程序可以在内部ROM、外部ROM或者同时放在内外 ROM中。若程序放在外部 ROM 中(如对8031),则应使EA=0;否则可令EA=1。由于复位之后PC=0000H,所以程序的执行总是从地址0000H开始的。但真正的程序一般不一定从0000H 开始存放,此时需要在0000H 单元存放一条指令,使程序跳转到真正的程序入口处。
在单片机应用系统的开发调试阶段,有时需要观察每条指令执行后的结果,此时就需要用到单步执行方式。
单步执行方式是使程序的执行处于外加脉冲(通常用一个按健产生)的控制下,一条指令一条指令地执行,即按一次键,执行一条指令。
单步执行方式可以利用MCS-51 的外部中断来实现。MCS-51中断系统规定:从中断服务程序返回以后至少要执行一条指令后才能重新响应新的中断请求。据此,如果将外加脉冲从INT0引脚输入,平时保证INT0为低电平,并通过初始化设定外部中断0为高优先级和低电平触发方式,就能保证单片机平时处于中断响应状态。在中断服务子程序中配合使用下面的指令就能实现按压一次按键只执行一条指令的单步操作。
CHMOS型的80C51单片机有两种低功耗操作方式:待机操作方式和掉电操作方式。在待机方式时,CPU 停止工作,而 RAM、定时器、串行口和中断系统继续工作。在掉电方式时,仅给片内 RAM供电,片内所有其他的电路均不工作。HMOS的 8051单片机只有一种低功耗方式:掉电操作方式。
(1) HMOS型单片机的掉电操作方式
正常操作时,80S1的内部RAM由Vcc供电,当RST/端的电压超过Vcc时,内部RAM将改由 RST/端的电源供电。若 RST/?端接有备用电源,则当Vcc掉电时,此备用电源就可保护内部RAM的数据不丢失。
在用户系统中,可以利用这一特点。一旦发现主电源故障(掉电)或人为地迫使电源掉电,就通过向CPU发出中断请求。在主电源掉到低于下限工作电压之前,中断服务程序把一些必须保存的信息转存到RAM中,并把备用电源接至RST/引脚,主电源恢复正常后,引脚仍要维持一段时间,在完成复位操作后电源才能撤掉。
?
(2) CHMOS型单片机的低功耗方式
80C51单片机用软件来选择低功耗,由电源控制寄存器PCON 中的有关位控制,PCON寄存器格式如下:
?IDL:待机方式位。
当IDL=1时,激活待机工作方式
?PD:掉电方式位。
当PD=1时,激活掉电工作方式。
?GF1、GFO:通用标志位。
?SMOD:串行波特率倍增位。
(1)待机方式
执行一条置位IDL的指令后,80C51就进入待机方式。这时提供给CPU的时钟信号被切断,但时钟信号仍提供给 RAM、定时器、中断逻辑和串行口。同时CPU的工作状态在待机期间被保起来,也就是堆指针 SP、程序计数器 PC、程序状态字 PSW、累加器ACC及通用寄存器的内容。在待机方式下Vcc仍为5V,但消耗电流由正常工作方式的24mA降为3.7mA。
PCON中的标志位GF0和GF1可以用作软件标志,若置IDL=1的同时也置GF0/GF1=1,则待机方式中激活的中断服务程序查询到此标志便可以确定服务的性质。
可以有两条途径退出待机方式恢复到正常方式:
?一种途径是有任一种中断被激活,此时 IDL位将被硬件清除,随之待机状态被结束。系统退出待机方式,进入正常工作方式。
?退出待机方式的另一种方法是靠硬件复位,复位后PCON中各位均被清“0”
(2)掉电方式
CHMOS型单片机的掉电方式与 HMOS型不同,备用电源由 Vcc输入,而不像HMOS那样由RST/输入。
执行一条置位PD的指令后,80C51就进入掉电工作方式。掉电后,片内振荡器停止工作,时钟冻结,一切工作都停止,只有片内 RAM 的内容被保持,SFR 内容也被破坏。掉电方式下Vcc可以降到2V,耗电仅50uA。
退出掉电方式恢复正常工作方式的惟一途径是硬件复位。应在 Vcc恢复到正常值后再进行复位,复位时间需10ms,以保证振荡器再启动并达到稳定,实际上复位本身只需25个振荡周期(2~4us)。但在进入掉电方式前,Vcc不能掉下来,因此要有掉电检测电路。
对于内部集成有EPROM的8751单片机,可以进入编程或校验方式
(1)内部EPROM编程
编程时,时钟频率应在4~6MHz的范围内,有关引脚的接法和用法如下:
P2.0~P2.3为EPROM单元高位地址输入,P1口为低8位地址;P0口为编程数据输入;P2.4~P26以及应保持为低电平; P2.7和RST应为高电平,RST的高电平可为2.5V,其余的都以TTL的高低电平为准;/VPP端另加12.5V的编程脉冲,此电压要求稳定,不能大于12.5V,否则会破坏EPROM;在/VPP出现正脉冲期间,ALE/端上加50ms的负脉冲,完成一次写。
8751的EPROM编程一般要用专门的单片机编程器(如ALL-11等)来完成入。
(2)EPROM程序校验
在程序的加密位尚未设置的状态下,无论在写入的当时或写入之后,均可将片内程序存储器的内容读出进行校验。在读出时,除P2.7脚保持为TTL低电平之外,其它引脚与EPROM的连接方式相同。要读出的程序存储器单元地址由 P1口和2口的P2.0~2.3 送入,P2口的其它引脚及保持低电平,ALE、和RST接高电平,校验的单元内容由P0口送出,在校验操作时,需在 P0 的各位外部加上拉电阻 10。
(3)程序存储器的加密位
8751内部有一个加密位。一旦此加密位被编程后,就可禁止用任何外部手段对片内程序存储器进行读写。将加密位写入以建立保险的过程与正常写入的过程相似,但加密编程时P2.6脚要保持TTL 高电平。而P0口、P1口和P2的P2.0~P2.3的状态随意。加上编程脉冲后就可使加密位写入。
EPROM 加密后,内部程序存储器便不能再被写入和读出校验,而且也不能执行外部程序存储器的程序。只有EPROM全部擦除时,加密位才能被一起擦除,以便再次写入。