AT89C51的特点.docx
《AT89C51的特点.docx》由会员分享,可在线阅读,更多相关《AT89C51的特点.docx(22页珍藏版)》请在冰豆网上搜索。
AT89C51的特点
AT89C51的特点
·4K字节EPROM/无EPROM
·128字节RAM
·可寻址64K字节外部程序存储器空间
·可寻址64K字节外部数据存储器空间
·四个8位I/O口
·两个16位定时/计数器
·一个全双工串行I/O口(USART)
·五个中断源,两个优先级
1.AT89C51系列单片机各引脚中有四个8位的并行I/O口,共占用32个引脚。
还有8个引脚各为:
Vss,VCC—地和电源端
XTAL1,XTAL2—振荡器反相放大器的输入,输出端
RESET—复位输入端
PSEB—程序存储器使能端
EA/VPP—访问外部存储器使能端/编程电源
ALE/PROG—地址锁存使能端/编程脉冲
读者务必搞清每个引脚的功能,才能得心应手地应用它。
2.要特别注意有“第二”功能的引脚。
有的书上也称特殊功能。
为了避免与后面提到的特殊功能寄存器混淆,本书中都用“第二”功能来表示一个引脚的另一种功能。
有第二功能的引脚如P3口的8个引脚。
要注意的是在使用它的第二功能作为控制线应用时,该引脚不能再用作数据线。
又如P1口的P1.0/T2、P1.1/T2EX这二根线也有第二功能,可用作计数器2的数据和触发输入
3.p0口是一个8位漏极开路的双向并行I/O口。
当扩展外部程序存储器时,它是一个复用的低8位地址数据总路线。
在作编程校验期间,它也用作数据输出。
3.程序状态字PSW
程序状态字PSW是一个8位寄存器,用来寄存当前指令执行的状态,为下条指令的执行提供状态条件,有许多指令的招待结果将影响PSW的某些状态标志位,这些标志可作为下一条指令执行的依据或由用户读出判断指令的招待情况。
PSW寄存器的结构及各状态标志的定义及功能如下:
位序号
CY
AC
F0
RS1
RS0
OV
F1
P
地址D0H
PSW的复位值是00H。
位
定义及功
CY
高位进位标志位。
除了用来寄存运算结果高位进位标志外,还在布尔处理中作位累加器胜,所以又称布尔累加器
AC
辅助进位标志位,常用于BCD运算
F0
通用标志位,可由用户通过软件定义(置位/清零)或检测
RS1RS0
00
01
10
11
寄存器组选择控制位
组0被选择,数据寄存器地址00H~07H
组1被选择,数据寄存器地址08H~0FH
组2被选择,数据寄存器地址10H~17H
组3被选择,数据寄存器地址18H~1FH
OV
溢出标志位,用于符号数运算的溢出。
当运算结果次高位向最高位产生进位,而最高位不产生进位时溢出位置1,否则溢出位置零
F1
通用标志位
P
奇偶校验标志位。
每一指令周期由硬件设置/清零以指示累加器A中“1”位的个数:
偶数个“1”置0,奇数个“1”则置1
4.堆栈指针SP
AT89C51单片机允许用户内部RAM的任一连续区域作为堆栈区。
AT89C51C51型内部RAM为128字节。
AT89C51C51型为256字节,所以堆栈指针SP为8位寄存,指示堆栈栈顶。
压入堆栈时SP先自动加工厂,将欲压栈的数据压入SP所指示的单元。
出栈时将SP所指示的栈顶地址单元内数据弹出,然后SP自动减肥,因而SP总是指向栈顶。
在芯片复位或上电后,栈指针SP总是初始化指向07H单元,所以第一个压入堆栈的数据放08H单元中,并以此为起始单元。
堆栈指针SP的内容可以编程,从而再定位到内部数据存储器RAM的任意位置。
5.16位数据指针DPTR
DPTR是一个独特的16位地址寄存器。
它可以指向64K字节范围的任一地址单元。
它分为二个独立的8位数据指针:
DPH和DPL。
它的功能是存放16位地址,用于间接调用(CSLL)、转移(JMP)以及外部数据传送和查表指令。
6.程序计数器PC
PC的内容是要执行的下一条指令的地址,它决定程序执行的次序。
指令周期是这样进行的:
CPU把PC的内容放在地址总线(片内或片外)上,CPU把指令字(可能是多字节指令——从存储器取出,这时PC自动增量,PC内容指出下一条指令地址。
例如指令是三字节的,则每取一个字节,PC就增1;取出三字节指令后,PC仍指向下一条指令地址。
如此不断执行。
一般指令是按顺序执行的。
若要改变正常的次序,必须把新的数据送入PC,这叫做转移。
必须注意AT89C51系列的PC不在特殊功能寄存SFR中,指令不能直接访问。
振荡器及时钟电路
复位电路
2.4.2具有第二功能的I/O口引脚
P3口的8位是双向功能的(AT89C51C52类还有P1口的2位),它们除正常的并行I/O功能外,还可用作特殊的第二功能(也称变异功能)。
有第二功能的I/O口各位如下表所示。
表2具有第二功能的I/O口
I/O引脚
第二功能
P3.0
RXD——串行数据输入端(异步)或串行数据输入/输出端(同步)
P3.1
TXD——串行数据发送端(异步)或串行时钟输出端(同步)
P3.2
INT0——外部中断0请求输入/定时器0选通控制
P3.3
INT1——外部中断1请求输入/定时器1选通控制
P3.4
T0——计数器0的外部输入端
P3.5
T1——计数器1的外部输入端
P3.6
WR——外部数据存储器写控制,把来自P0口的数据字节锁入外部数据存储器
P3.7
RD——外部数据存储器读控制,把外部数据存储器
AT89C51系列单片机的I/O口作输入时,一定要按单片机使用手册上的要求,先向I/O口写入“1”,否则I/O口工作不正常,这里再强调一下。
低地址RAM区中的00~1FH单元共同社32个单元为工作寄存器区,共分四组,每组8个8位寄存器,称为工作寄存器组0~工作寄存器组3。
在某一时刻只能选用其中一个组工作(通过程序状态字PSW的工作寄存器选择位来选择)。
从20H~2FH共16个字节单元,这16个字节单元既可字节寻址也可位寻址,位地址从00H~7FH,共128位。
从30H~7FH共80个字节单元,为字节寻址的内部RAM区(也称用户RAM区)。
AT89C51系列单片机设有七种寻址方式,即:
·寄存器寻址。
·直接寻址。
·寄存器间接寻址。
·立即寻址。
·基址寄存器加变址寄存器间接寻址。
·相对寻址。
·位寻址。
序号
寻址方式
相应存储器空间
1
寄存器寻址
R0~R7,ACC,B,Cy(位),DPTR
2
直接寻址
内部RAM低地址128字节和特殊功能寄存器
3
寄存器间接寻址
内部RAM(@R1,@R0,SP)外部数据存储器(@R1,@R0,@DPTR)
4
立即寻址
程序存储器立即数
5
基址寄存器加变址寄存器间接寻址
程序存储器(@A+DPTR,@A+PC)
6
相对寻址
以PC的当前值为基地址+指令中给出的偏移量=有效转移地址。
转移范围:
PC当前值的+127~+128字节
7
位寻址
参内部RAM或特殊功能寄存器的某些单元进行位寻址
1TMOD和TCON寄存器
在AT89C51单片机中有二个SFR,即TMOD和TCON寄存器,用来设定定时/计数器的工作方式和有关功能。
当用指令来设定TMOD和TCON时,其内容锁存在这二个寄存器中,而在下个指令的第一个机器周期的S1P1时发生作用。
这二个SFR各位的含义及功能说明如下。
1.定时器方式寄存器TMOD
定时器方式寄存器TMOD的格式如下:
位序号
GATE
C/T
M1
M0
GATE
C/T
M1
M0
TMOD
M1M0
工作方式
功能说明
输入时钟
内部(定时吕器)
外部(计数吕器)
00
方式0
13位定时/计数器
fosc/(12×32)
Fosc/(24×32)
01
方式1
16位定时/计数器
fosc/12
fosc24
10
方式2
具有8位重装的8位定时/计数器
fosc/12
fosc24
11
方式3
定时/计数器0用作一个8位定时/计数器和一个8位定时器。
定时/计数器1停止
fosc/12
fosc24
C/T:
选择定时方式或计数方式。
当。
C/T=1时为计数方式;当C/T=0时为定时方式。
GATE:
门控制。
置“1”时,只有当INT0
(1)引脚为高电平且TR0
(1)置“1”时才运行定时器0
(1);清“0”时,只要TR0
(1)位置“1”就运行定时器0
(1)。
低4位用于定义定时/计数吕器0,高4位用于定义定时/计数吕器1。
复位时TMOD的所有位均清0。
2.定时器控制寄存器——TCON
定时器控制寄存器的格式如下为:
位序号76543210
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TCON
其中:
TF1:
定时器1溢出中断请求标志。
当定时器1溢出时由硬件置1,当主机响应中断,程序
转向中断程序时,由硬件清0。
TR1:
定时器具运行控制行。
由软件置位/复位来开启或关闭定时器1。
TF0:
定时器0溢出中断请求标志。
当定时器0溢出时由硬件置1,当主机响应中断,程序
转向中断服务程序时,由硬件清0。
TR0:
定时器0运行控制位。
由软件置位/复位来开启/关闭定时器0。
IE1:
外中断定跳变中断请求标志。
当检测到INT0引脚上发生由1→0跳变,且IT1=1时,
由硬件置位IE1;当主机响应中断,程序转向中断服务程序时,由硬件清0IE0。
IT1:
用软件置位/清0来选择外中断定的跳变/电平触发中断请求。
如果IT1=1,外中断由
跳变触发,前一周期INT1上为高电平,紧接后一个周期为低电平,即INT1上的跳
变触发产生中断请求;如果IT1=0,则由INT1上的低电平触发产生中断请求。
IT0:
用软件置位/清洗来选择外中断定的跳变/电平触发中断请求。
选择原理同IT1。
2.2.7串行接口
AT89C51的串行I/O为全双工接口,即接收和发送可以同时进行。
它有接收缓冲器,在读出前一个数据字节时,能开始接收第二个数据字节。
如果在第二个字节已接完毕,而第一个字节尚未被读出,则将丢失其中的一个字节,读出SBUF实际就是从接收寄存器中读取信息。
串行I/O有4种工作方式(一种同步方式,三种异步方式),这可通过对SCON控制编程来选择。
串行接口控制寄存器SCON的格式如下:
位序号76543210
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SCON
这个寄存器的内容不仅是方式选择位和控制位,还有发送和接收时的第九数据数(TB8、RB8)和串行口中断位(TI、RI)。
下面详细说明:
SM0、SM1确定串行口的工作方式:
SM0SM1工作方式功能说明波特率
00方式0同步工作方式1/12fOSC
01方式110位可变(定时器溢出率/N)
10方式211位1/64或1/32fOSC
11方式311位可变(定时器溢出率/N)
SM2:
允许方式2和3的多机通讯控制位。
在方式2和3中,如SM2由软件置为1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(RI=0)。
在方式1中,如SM2=1,则只有在接收到有效停止位时才启动RI,没有接收到的效停止位,则RI清0(不启动)。
在方式0中,SM2应为0。
REN:
允许串行I/O接收控制位。
软件置位(REN=1时允许接收,启动串行口的接收器RDX,开始接收数据。
软件复位(REN=0)时,则禁止接收。
TB8:
方式2和3中,要发送的第9位数据,按需要由软件进行置位或清0。
例如可用作数据的奇偶校验位。
RB8:
方式2和3中,是接收到的第9位数据。
在方式1中,若SM2=0,则RB8是接收到的停止位,在方式0中,不使用RB8。
TI:
发送中断标志。
在方式0的串行发送第8位结束时,由硬件置位。
CPU响应中断后,必须用软件清“0”。
在其它方式中,则在停止位开始时置位,必须用软件清“0”。
RI:
接收中断标志。
方式0串行接收到第8位结束时由硬件置位。
在其它方式中,串行接收到停止位的中间时刻硬件置位(例外情况见SM2的说明)。
必须用软件清0。
复位时SCON的所有位都清0。
2.8.1中断源的说明
下面将5个中断请求源说明如下:
INT0:
外部中断0请求,低电平有效。
它由P3。
2引脚输入(第二功能)。
在第个机器周期的S5P2采样P3。
2引脚,并置位或清0SFR中IE的EXO标志。
INT1:
外部中断1请求,低电平有效。
它由P3。
3引脚输入(第二功能),在每个机器周期S5P2采样P3。
3引脚,并置位或清0SFR中IE的EXI标志。
定时器0溢出中断:
当定时器0产生溢出,置位内部定时器0中断请求标志TF0,请求中断处理。
定时器1溢出中断:
当定时器1产生溢出,置位内部定时器1中断请求标志TF1,请求中断处理。
串行中断:
当完成一串行帧的接收/发送时,置位内部串行中断请求标志TI(发送)或RI(接收),请求中断处理。
2.8.2中断允许寄存器IE
是否允许中断由中断允许寄存器IE中的各位决定,通过软件对IE中各位的编程,可分别控制各个中断也可实现总的允许中断或禁止中断的控制、IE寄存器的格式如下:
位序号
EA
__
ET2
ES
ET1
EX1
ET0
EX0
IE
EA(IE·7):
禁止所有中断。
当EA=0,则禁止所有中断响应。
当EA=1,则各中断源的允许或禁止取决于各自中断允许位的状态(置位或清0)。
-(IE·6):
保留,无意义。
ET2(IE·5):
允许或禁止定时器2(52型)的溢出和捕获中断。
ET2=0,禁止中断;ET2=1,允许中断。
ES(IE·4):
允许或禁止串行口的中断。
ES=0,禁止中断;ES=1,允许中断。
ET1(IE·3):
允许或禁止定时器1的溢出中断。
ET1=0,禁止中断;ET1=1,允许中断。
EX1(IE·2):
允许或禁止外中断1(INTI)的中断。
EX1=0禁止中断;EX1=1,允许中断。
ET0(IE·1):
允许或禁止定时器0的溢出中断。
ET0=0,禁止中煌;ET0=1,允许中断。
EX0(IE0):
允许或禁止外中断0(INT0)的中断,EX0=0,禁止中断;EX0=1,允许中断。
2.8.3中断优先级
AT89C51系列单片机的中断具有两级优先级。
每一个中断源都可以通过对中断优先级寄存器IP中的相应位置位或清0,编程为两级中断中的任一级——高优先级或低优先级,置1为高优先级,清0为低优先级。
低优先级可被高优先级所中断,但不能被另一个低优先级中断所中断。
高优先级中断不能被任何中断所中断。
为了实现这些规定,中断系统中设有二个不可寻址的优先级状态触发器,其中一个用来指出正在服务于高优先级中断,并阴止所有其它中断的响应。
另一个则指出正在服务于低优先级中断,并阻止除高优先级中断以外的其它中断的响应。
当同时接收到几个优先级相同的中断请求时,则由内部查询次序来确定响应哪一个中断请求。
因此,在每个中断级中又有按查询次序的中断优先次序。
查询次序如下:
1.IE0(外中断INT0)最先查询
2.TF0(定时器0溢出中断)
3.IE1(外中断INTI)
4.TF1(定时器1溢出中断)
5.RI+TI(串行口中断)
6.TF2+EXF2(定时器2溢出中断)最后查询
这种“同级内的优先次序”仅用来解决相同优先级中断源同时请求中断的情况,而不能中断正在执行的同优先级的中断。
中断优先级寄存器IP的格式始下:
位序号76543210
—
—
PT2
PS
PT1
PX1
PT0
PX0
IP
中断优先级寄存器IP中各位功能说明如下:
PT2(IP·5):
定义定时器2的中断优先级。
通过编程设置PT2=1为高优先级中断,PT2=0为低优先级中断。
PS(IP·4):
定义串行口中断优先级。
通过编程设置PT1=1为高优先级中断,PS=0为低优先级中断。
PT1(IP·3):
定义定时器1中断优先级。
通过编程设置PT=1为高优先级中断,PT1=0为低优先级中断。
PX1(IP·2):
定义外中断定(INT1)的优先级。
通过编程设置PX1=1为高优先级中断,PX1=0为低优先级中断。
PT0(IP·1):
定义定时器0中断优先级。
通过编程设置PT0=1为高优先级中断,PX0=0为低优先级中断。
PX0(IP·0):
定义外中断0(INT0)优先级。
通过编程设置PX0=1为高优先级中断,PX0=0为低优先级中断。
2.8.4中断执行的过程
CPU在每个机器周期的S5P2状态采样中断标志,而在下一个机器周期对采样到的中断进行查询。
如果在前一个机器周期的S5P2有中断标志置位,则在查询周期内便会查询到并按优先级进行中断处理。
中断系统将产生一个长调用(LCALL)指令,控制程序转入相应的中断服务程序。
硬件生成LCALL指令被下列条件所封锁:
1.一个同级或高一级的中断正在处理中。
2.当前周期(即查询周期)不是执行当前指令的最后一个周期。
3.当前正在执行的指令是返回(RETI)指令或对IE或IP寄存器进行读/写指令。
上述三个条件的任一个都能封锁转向中断服务程序的长调用。
其中每二条是保证把当前指令执行完,第三条是保证在当前执行的是返回(RETI)指令或对寄存器IE、IP进行读/写的指令时,必须至少再执行完一条指令之后才响应。
中断查询在每个机器周期中重复执行,所查询到的值为前一个机器周期的S5P2时采样到的中断标志。
这里需注意的是:
如中断标志被置位,但因上述条件之一而未被响应,或上述封锁条件已撤消后标志位已不再存在(已不是置位状态)时,被拖延的中断就不再被响应。
也就是说,对中断标志置位后,未能及时响应转入中断服务程序的状态不作记忆。
每个查询周期都重新进行。
中断源向量地址
IE0(外部中断0)0003H
TF0(定时器0溢出中断)000BH
IE1(外部中断1)0013H
TF1(定时器1溢出中断)001BH
RI+TI(串行口是中断)0023H
IF2+EXF2(定时器2中断)002BH
中断服务程序从向量地址处开始执行,直到执行返回(RETI)指令时为止。
RETI指令的执行,一方面通知中断控制系统,该中断服务程序已经执行完毕;另一方面将原压入堆栈保护的断点地址(PC值)从栈顶弹出装入程序计数器(PC),使被中断的程序继续从断点处恢复执行。
AT89C51系列设有二条返回指令RETI和RET。
返回指令RET虽然也能使程序返回到原被中断的地方继续往下执行,但它不通知断控制系统,致使中断控制系统误认为仍在继续执行中断服务程序。
因此,中断返回一定要用RETI指令,而不能用RET代替。
助记符
说明
字节
振荡器周期
算术运算类
ADD
A,Rn
加寄存器至累加器
1
12
ADD
A,direct
加直接地址内容至累加器
2
12
ADD
A,@Ri
加间接RAM内容至累加器
1
12
ADD
A,#data
加立即数至累加器
2
12
ADDC
A,Rn
带进位加寄存器至累加器
1
12
ADDC
A,direct
带进位加直接地址内容至累加器
2
12
ADDC
A,@Ri
带进位加间接RMA内容至累加器
1
12
ADDC
A,#data
带进位加立即数至累加器
2
12
SUBB
A,@Ri
带借位从Acc减寄存器
1
12
SUBB
A,#Ri
带借位从Acc减直接地址内容
2
12
SUBB
A,#data
带借位从Acc减间接RMA内容
1
12
SUBB
A
带借位从Acc减立即数
2
12
助记符
说明
字节
振荡器周期
算术运算类
INC
A
Acc增1
1
12
INC
Rn
寄存器增1
1
12
INC
Direct
直接地址内容增1
2
12
INC
A,@Ri
间接RAM内容增1
1
12
DEC
A
Acc减1
1
12
DEC
Rn
寄存器减1
1
12
DEC
Direct
直接地址内容减1
2
12
DEC
@Ri
间接RMA内容减1
1
12
INC
DPTR
数据指针增1
1
24
MUL
AB
A乘B
1
48
DIV
AB
A被B除
1
48
DA
A
累加器十进制调整
1
12
逻辑运算类
ANL
A,Rn
寄存器与Acc相与
1
12
ANL
A,direct
直接地址内容与Acc相与
2
12
ANL
A,@Ri
间接RMA内容与Acc相与
1
12
ANL
A,#data
立即数与Acc相与
2
12
ANL
Direct,A
Acc与直接字节相与
2
12
ANL
DIRECT,#data
立即数与直接字节相与
3
24
ORL
A,Rn
寄存器与Acc相或
1
12
ORL
A,direct
直接地址内容与Acc相或
2
12
ORL
A,@Ri
间接RMA内容与Acc相或
1
12
ORL
A,#data
立即数与Acc相或
2
12
ORL
Direct,A
立即数与直接地址内容相或
2
12
ORL
Direct,#data
寄存器与Acc相异或
3
24
XRL
A,Rn
直接地址内容与Acc相异或
1
12
XRL
A,direct
间接RAM内容与Acc相异或
2
12
XRL
A,@Ri
立即数与Acc
1
12
XRL
A,#data
Acc与直接地址内容相或
2
12
XRL
Direct,A
立即数与直接地址内容相异或
3
12
XRL
Direct,#data
清零Acc
1
24
CLR
A
取反Acc
1
12
CPL
A
Acc向左移位
1
12
RLC
A
通过进位位Acc向左移位
1
12
RR
A
Acc向右移位
1
12
RRC
A
通过进位位Acc向右移位
1
12
S
内高低4位互换
1
12
数据传送类
MOV
A,Rn
寄存器内容传送至Acc
1
12
MOV
A,direct
直接地址内容传送至Acc
2
12
MOV
A,@Ri
间接RAM内容Acc
1
12
MOV
A,#data
立即数传送至Acc
2
12
MOV
Rn,A
Acc内容传送至寄存器
1
12
MOV
Rn,direct
直接地址内容传送至寄存器
2
24
MOV
Rn,#data
立即数传送至寄存器
2
12
MOV
Direct,A
Acc内容传送至直接地址
2
12
MOV
Direct,Rn
寄存器内容传送至直接地址
2
24
MOV
Direct,direct
直接地址内容传送到直接地址
3
24