本文集下的内容主要介绍stc89c51系列单片的基础知识(初学者看会感到乏味,建议培养兴趣爱好之后再来看)
本文主要讲解51单片机的硬件结构,而且只介绍重点知识。
51单片机的硬件结构主要包括以下部分:
1.51单片机的内部结构
-
这个图片看不懂没关系,不必掌握,可以在学完之后再来看,会有一个比较系统的了解
2.微处理器
由上图可以看出,51单片机组成结构包括以下几个部分:
- 运算器(Arithmetic and Logic Unit)
作用:
可完成二进制的加,减,乘,除,加一,减一及BCD加法的十进制调整等算术运算;
还能对8位数据进行逻辑‘与’,‘或’,‘异或’,循环移位,求补,清零等逻辑运算;
并具有数据传输,程序转移等功能。
- 控制器
包括以下器件:
定时和控制电路,指令寄存器,译码器等。
时序信号:一类用于片内各功能的部件的控制,另一类用于片外存储器或IO端口的控制(这个对用户来说是比较重要的,在定时器部分会讲)
这里要弄清的四个概念是:
震荡周期
:这个取决于晶体振荡器的频率,他等于晶体振荡器频率的倒数,12M的晶振时,震荡周期为1/12 us;
状态周期
:震荡周期经过2分频后形成状态周期信号,一个状态周期信号分为两个节拍P1
和P2
,P1期间:通常完成算术逻辑操作;P2期间:通常进行内部寄存器间的传输;
机器周期
:是完成一个基本操作所需要的时间,机器周期是震荡周期的12倍,12M的晶振时,机器周期为1 us;
指令周期
:执行一条指令所花费的时间,单片机的指令中有1个指令周期的,2个指令周期的,4个指令周期的(乘除法指令MUL A,B;DIV A,B),12M的晶振时,1个指令周期的语句执行一遍就要花费1 us(如:INC A),以此类推。
PSW程序状态字(地址:D0H)(可位寻址)
位序号 | PSW.7 | PSW.6 | PSW.5 | PSW.4 | PSW.3 | PSW.2 | PSW.1 | PSW.0 |
---|---|---|---|---|---|---|---|---|
位符号 | CY | AC | F0 | RS1 | RS0 | OV | P | -- |
CY:进位标志。有进、借位,CY=1;无进、借位,CY=0
AC:辅助进、借位(高半字节与低半字节间的进、借位)。
F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。
RS1、RS0:工作寄存器组选择位
RS1 | RS0 | 当前使用的工作寄存器区R0~R7 |
---|---|---|
0 | 0 | 0区(00~07H) |
0 | 1 | 1区(08~0FH) |
1 | 0 | 2区(10~17H) |
1 | 1 | 3区(18~1FH) |
通过修改PSW中的RS1、RS0两位的状态,就能任选一个工作寄存器区。这个特点提高了MCS-51现场保护和现场恢复的速度。对于提高CPU的工作效率和响应中断的速度是很有利的。若在一个实际的应用系统中,不需要四组工作寄存器,那么这个区域中多余单元可以作为一般的数据缓冲器使用。
3.存储器
51单片机的程序就存在程序存储器中(可由ROM或EPROM组成),寻址程序存储器的唯一方式是通过PC(程序计数器:用于存放将要执行的指令地址,每取出指令的一个字节后,其内容自动加一,指向下一字节地址);由于51单片机 PC 为16位,因此,可寻址空间为64KB。
按存储结构可分为二类:一类是哈佛结构,另一类是普林斯顿结构。
①哈佛结构
哈佛结构是程序存储器地址空间与数据存储器地址空间分开的单片机结构,如80C51单片机采用哈佛结构,所以80C51单片机的程序存储器地址空间与数据存储器地址空间是分开的,各有64K存储空间。
②普林斯顿结构
普林斯顿结构是程序存储器地址空间与数据存储器地址空间合并的单片机结构,如MCS-96单片机采用普林斯顿结构,所以MCS-96单片机的程序存储器地址空间与数据存储器地址空间是合并的,共有64K存储空间。
4.并行输入输出接口
P0.0 ~ P0.7(39 ~ 32脚):可做地址总线,也可做数据总线。
P1.0 ~ P1.7(1 ~ 8脚):8位数据输入/输出线。
P2.0 ~ P2.7(21 ~ 28脚):无外部扩展时(包括存储器和IO扩展),作输入/输出线;当外部扩展空间大于等于256字节时,P2口作为系统高8位地址总线。
P3.0 ~ P3.7(10 ~ 17脚):8位数据输入/输出线。
P3口还有第二功能,表如下:
5.定时器/计数器
- 51单片机的定时/计数器可用于定时,也可用于计数,一般用来定时的多,很少会用来计数。
- 定时和计数值都是可变的,这取决于计数器的位数。
- 在到达设定的计数值时,会产生溢出中断请求,我们可以在这个中断服务函数写我们需要让单片机做的事情。
下面是定时器必须用到的几个寄存器:
1.TMOD模式寄存器(地址:89H)(不可位寻址)
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
定时器 | T1 | T1 | T1 | T1 | T0 | T0 | T0 | T0 |
GATE——门控制:
GATE=1时:
当INT0=1且TR0=1;启动定时器T0;
当INT1=1且TR1=1;启动定时器T1。
GATE=0时:
当TR0=1,启动定时器T0。
当TR1=1,启动定时器T1。
C/T——功能选择位
C/T=0时为定时功能: 加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;
C/T=1时为计数功能: 加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;
M0、M1——方式选择功能
M1 | M0 | 工作方式 | 功能说明 |
---|---|---|---|
0 | 0 | 方式0 | 13位定时器/计数器 |
0 | 1 | 方式1 | 16位定时器/计数器 |
1 | 0 | 方式2 | 自动重载8位定时器/计数器 |
1 | 1 | 方式3 | T0分为2个8位独立计数器,T1无方式3 |
2.TCON寄存器(地址:88H)(可位寻址)
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H |
TF1:定时器T1溢出标志,可由程序查询和清零,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。
TF0:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。
TR1:T1充许计数控制位,为1时允许T1计数。
TR0:T0充许计数控制位,为1时允许T0计数。
IE1:外部中断1请示源(INT1,P3.3)标志。IE1=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”IE1(边沿触发方式)。
IE0:外部中断0请示源(INT0,P3.2)标志。IE0=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”IE0(边沿触发方式)。
IT1:外部中断源1触发方式控制位。IT1=0,外部中断1程控为电平触发方式,当INT1(P3.3)输入低电平时,置位IE1。
IT0:外部中断源0触发方式控制位。IT0=0,外部中断1程控为电平触发方式,当INT0(P3.2)输入低电平时,置位IE0。
3.IE中断允许寄存器(地址:A8H)(可位寻址)
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | EA | -- | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
EA (IE.7):EA=0时,所有中断禁止(即不产生中断);EA=1时,各中断的产生由个别的允许位决定
-- (IE.6):保留
ET2(IE.5):定时2溢出中断充许(8052用)
ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)
ET1(IE.3):定时1中断充许
EX1(IE.2):外中断INT1中断充许
ET0(IE.1):定时器0中断充许
EX0(IE.0):外部中断INT0的中断允许
4.IP中断优先级控制寄存器(地址:B8H)(可位寻址)
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | -- | -- | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
-- (IP.7):保留
-- (IP.6):保留
PT2(IP.5):定时2中断优先(8052用)
PS (IP.4):串行口中断优先
PT1(IP.3):定时1中断优先
PX1(IP.2):外中断INT1中断优先
PT0(IP.1):定时器0中断优先
PX0(IP.0):外部中断INT0的中断优先
定时器的功能很强大,掌握定时器能让我们更灵活地使用单片机。
6.串行输入输出口
1.SCON 串行通信控制寄存器(地址:98H)(可位寻址)
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
位地址 | 9FH | 9EH | 9DH | 9CH | 9BH | 9AH | 99H | 98H |
(1)SM0、SM1:串行口工作方式控制位。
SM0 | SM1 | 工作方式 | 说明 |
---|---|---|---|
0 | 0 | 方式0 | 波特率由振荡器频率决定:振荡器频率/12 |
0 | 1 | 方式1 | 波特率由定时器T1或T2的溢出率和SMOD所定:2SMOD ×(T1溢出率)/32 |
1 | 0 | 方式2 | 波特率由振荡器频率和SMOD所定:2SMOD ×振荡器频率/64 |
1 | 1 | 方式3 | 波特率由定时器T1或T2的溢出率和SMOD所定:2SMOD ×(T1溢出率)/32 |
(2)SM2:多机通信控制位。< br> 多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。
工作于方式0时,SM2必须为0。
(3)REN:允许接收位。REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。
(4)TB8:发送接收数据位8。< br> 在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。
(5)RB8:接收数据位8。
在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。
(6)TI:发送中断标志位。
可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。
(7)RI:接收中断标志位。
可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。
若TI 或 RI 被置位,必须用软件清零,硬件不能将其清零。
7.中断系统
中断入口地址
中断源 | 入口地址 | 中断号 |
---|---|---|
外部中断0 | 0003H | 0 |
定时/计数器0 | 000BH | 1 |
外部中断1 | 0013H | 2 |
定时/计数器1 | 001BH | 3 |
串口中断 | 0023H | 4 |
在不设置IP优先级寄存器的话,单片机内部会按这个默认顺序优先级去响应各个中断。
CPU响应中断条件:
1、有中断源发出的中断请求;
2、中断总允许位EA=1,即CPU开中断;
3、申请中断的中断源的中断允许位为1,即中断没有被屏蔽;
4、无同级或更高级中断正在被服务;
5、当前的指令周期已经结束;
6、若现行指令为RETI或是访问IE或IP指令时,该指令以及紧接着的另一条指令已经执行完。
8.复位状态及复位电路
单片机复位后各寄存器的状态
寄存器 | 复位状态 | 寄存器 | 复位状态 |
---|---|---|---|
PC | 0000H | TCON | 00H |
A | 00H | T2CON | 00H |
B | 00H | TH0 | 00H |
PSW | 00H | TL0 | 00H |
SP | 07H | TH1 | 00H |
DPTR | 0000H | TL1 | 00H |
P0 ~ P3 | FFH | SCON | 00H |
上电复位后除端口锁存器,堆栈指针,SBUF外,单片机内部的复位电路向所有的特殊功能寄存器写入00H。SBUF的值是不能确定的。
复位还使ALE和PSEN信号变为无效(高电平),而内部RAM不受影响。但由于VCC上电复位后,RAM内容不定,除非是退回低功耗方式的复位。
1.从表中可以看出,只有SP寄存器是特别的,复位后堆栈在片内RAM的08H单元建立。
2.PSW也为0,由于RS1(PSW.4) = 0,RS2(PSW.3) = 0,复位后单片机默认选中工作寄存器第0组。
3.单片机IO口默认全为高电平。
单片机上电复位所需的最短时间是“震荡建立时间 + 两个机器周期”。
-
51是高电平复位,所以对应的复位电路如下