1.2 单片机结构
1.2.1 单片机的基本结构
单片机的基本结构如图1.1所示。
图1.1 单片机的基本结构框图
下面介绍各组成部分的功能。
1.中央处理器
CPU又称微处理器,是单片机的核心部件,由运算器和控制器组成,它决定了单片机的主要功能特性,在单片机中承担运算和控制作用。
2.存储器
存储器用来存放程序和中断结果,单片机的存储器在物理上分片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器4个空间;在逻辑结构上分成片内外统一编址的程序存储器、片内数据存储器及片外数据存储器,如图1.2所示。
图1.2 单片机存储器结构
(1)程序存储器
程序存储器用来存放操作程序,共64KB空间,片内和片外统一编址。当EA=1时,先访问片内程序存储器,再访问片外存储器;当EA=0时,只访问片外程序存储器。系统复位时PC=0000H。值得注意的是,程序存储器从0003H~0030H共40个单元专供中断服务使用。
(2)数据存储器
数据存储器用来存放中间运算结果。数据存储器由片内和片外两个独立的存储空间组成,如图1.3所示。片内又分成高、低两个128字节,其中高128字节离散分布了具有特别功能的寄存器。
图1.3 单片机数据存储器
(3)特殊功能寄存器
① 累加器Acc:Acc是一个具有特殊用途的8位寄存器,它既可作为通用的寄存器使用,也可作为累加器使用。作为累加器使用时用A表示,作为寄存器使用时用Acc表示。
② 程序状态字(PSW):PSW是一个可位寻址的8位寄存器,如图1.4所示,用来存放当前指令执行后的状态。单片机有许多指令的执行会影响PSW的位状态。
③ 寄存器B:寄存器B是一个8位的通用寄存器,主要用于乘/除法。乘法运算时,B是乘数,乘法操作后,积的高8位存于B中;除法运算时,B是除数,除法操作后,余数存于B中。
图1.4 状态寄存器
④ 数据指针DPTR:数据指针是一个16位地址寄存器,由高位字节DPH和低位字节DPL组成,这两个字节也可单独使用。使用DPTR可以访问64KB外部数据存储器的任一单元。
⑤ 定时器控制寄存器TCON:定时器控制寄存器TCON用来启动定时/计数和设置外部中断触发方式,如图1.5所示。定时控制寄存器可位寻址。
图1.5 定时器控制寄存器
TR0,TR1:启停定时/计数器。当TRx=1时,启动定时/计数;当TRx=0时,停止定时/计数。
TF0,TF1:定时/计数器中断标志。当TFx=1时,表示定时/计数溢出,可用查询或中断来处理。
IE0,IE1:外中断标志。当IEx=1时,表示外部有中断发生(与ITx配合使用);当IEx=0时,表示外部无中断请求。
⑥ 方式控制寄存器TMOD:方式控制寄存器TMOD是专门用来设置定时/计数器的工作方式的SFR寄存器,如图1.6所示,CPU只能通过字节传送类指令来设置TMOD中各位的状态。
当GATE=0时,定时/计数器由定时控制寄存器中的TR0(或TR1)启动。当GATE=1时,定时/计数器由外部中断请求信号(或)与TRx共同启动。
当C/=0时,定时/计数器工作在定时工作方式;当C/=1时,定时/计数器工作在计数方式。
M1M0=00时,定时/计数器工作在方式0;M1M0=01时,定时/计数器工作在方式1;
图1.6 方式控制寄存器
M1M0=10时,定时/计数器工作在方式2;M1M0=11时,定时/计数器工作在方式3。
⑦ 堆栈指针(SP):堆栈指针是专门用来指示堆栈的起始位置的8位寄存器,系统复位时堆栈指针初始化地址为07H,用户开辟堆栈时必须指明SP的初始值(栈底)。堆栈的存储区域一般设置在RAM的30H~7FH之间。进栈用PUSHdirect指令,出栈用POPdirect指令。
⑧ 中断控制寄存器IE:中断允许寄存器是一个SFR,地址为A8H,可以位寻址。通过向IE写入中断控制字,实现CPU对中断的开放和屏蔽,如图1.7所示。
图1.7 中断控制寄存器
⑨ 中断优先级控制寄存器IP:中断优先级控制寄存器用来设置中断的级别,单片机中断系统有高级和低级两种,当IP的对应中断位为1时为高级中断,当IP的对应中断位为0时为低级中断。
PX0:外部中断0中断优先级控制位。
PT0:定时/计数器T0中断优先级控制位。
PX1:外部中断1中断优先级控制位。
PT1:定时/计数器T1中断优先级控制位。
PS:串行口中断优先级控制位。
⑩ 串行控制寄存器SCON:SCON是一个可位寻址的专用寄存器,地址为98H,用于串行数据通信的控制,位功能如下:
SM0,SM1:串行口工作方式选择位,工作方式的选择如表1.5所示。
表1.5 串行口工作方式
SM2:多机通信控制位。在方式2或方式3下,如果SM2=1,当RB8=1时(RB8为收到的第9位数据),接收数据送SBUF,并产生中断请求(RI=1),否则丢失8位数据。在方式2或方式3下,如果SM2=0,无论RB8=0或1,接收数据装入SBUF,并产生中断(RI=1)。在方式1下,如果SM2=1,则只有接收到有效的停止位时,才激活RI;如果SM2=0,接收一帧数据,停止位进入RB8,数据进入SBUF,才激活RI。在方式0下,SM2只能为0。
REN:允许接收位,由软件置位或清0。REN=1,允许接收;REN=0,禁止接收。
TB8:发送数据位。在方式2或方式3下,将要发送的第9位数据放在TB8中。可根据需要由软件置位或复位。在多机通信中,TB8=0表示主机发送的是数据,TB8=1表示主机发送的是地址。
RB8:接收数据位。方式0不使用这位。在方式1下,如果SM2=0,RB8的内容是接收到的停止位。在方式2或方式3下,存放接收到的第9位数据。
TI:发送中断标志位。在方式0下,发送完第8位数据时,TI=1;在其他方式下,开始发送停止位时,TI=1。在任何工作方式下,TI必须由软件清0。
RI:接收中断标志位。在方式0下,接收完第8位数据时,RI=1;在其他方式下,接收到停止位时,RI=1。在任何工作方式下,RI也必须由软件清0。
3.I/O端口
单片机的I/O端口是连接单片机内外的纽带和桥梁,51系列的单片机有P0,P1,P2,P3共4个端口,每个端口有8位,其结构如图1.8所示。
图1.8 单片机I/O端口基本结构
①P0端口
P0端口是一个8位漏极开路的双向I/O端口,当控制信号为低电平时,作为通用的I/O端口使用,当控制信号为高电平时,作为数据/地址总线。值得注意的是,由于P0口作为通用I/O口使用时,漏极处于开路状态,所以需接5~10kΩ的上拉电阻。
②P1端口
P1端口只能作为通用的I/O端口使用。
③P2端口
P2端口既可作为通用的I/O端口使用,也可作地址总线使用。P2端口作地址总线使用时,与P0口一起构成16位地址信号。值得注意的是,当P2口作地址总线使用时,就不能作通用的I/O端口使用。
④P3端口
P3端口除了作通用的I/O端口使用外,还具有第二功能,如表1.6所示。P3端口的第二功能是通过设置相应的寄存器实现的。
表1.6 P3端口的第二功能表
⑤ 端口负载能力
P0端口可带动8个LSTTL负载,P1~P3端口输出可带动4个LSTTL。P0~P3均为双向I/O端口,作输入时,先置“1”。单片机的端口负载能力是动态的,如AT89C2051单片机,共有15个输入/输出端口,端口的负载能力为80mA。从使用经验来看,单个端口输入/输出控制在5mA以下是比较安全的,并且尽量采用灌电流、端口输入以低电平有效的电路结构。通用I/O端口读/写控制:
⑥ 总线端口读/写控制
具有总线结构的单片机应用系统如图1.9所示。
读外部单元:MOVX A,@DPTR
写外部单元:MOVX @DPTR,A
图1.9 总线结构的单片机应用系统框架
1.2.2 单片机的功能单元
1.单片机定时/计数器
(1)定时/计数器结构
定时/计数器是单片机的重要功能部件,51单片机内带有两个16位定时/计数器(T0和T1),它们既可作定时器用,也可作计数器用。在检测、控制及智能仪器等应用中,常用定时器作实时时钟来实现定时检测和定时控制,计数器用于外部脉冲计数。图1.10是定时/计数器内部结构。
图1.10 定时/计数器T0、T1的结构
TMOD:方式控制寄存器,用于设置定时/计数器的工作方式。
TCON:定时器控制寄存器,用于启动定时/计数器。
(2)定时/计数器工作原理
单片机内部定时/计数器的工作原理可用图1.11来说明。当C/=0时,为定时器功能,此时,C与A相连(计数脉冲为机器周期);当C/=1时,为计数功能,此时,C与B相连(计数脉冲从P3.4或P3.5口输入)。Tx、GATE、TRx、共同决定计数器的开关,单片机的计数器是一个16位的加计数器,每来一个脉冲,计数器的值加1,当加到FFFFH时,TFx置1,如果开放中断,则向CPU申请中断。
图1.11 定时/计数器内部结构
(3)定时/计数器工作方式
定时/计数器有4种工作方式,由特殊功能寄存器TMOD中的M1、M0位决定,如表1.7所示。
表1.7 定时/计数器工作方式
(4)定时/计数器初始化
定时/计数器设置由工作方式控制寄存器(TMOD)、定时控制寄存器(TCON)及中断允许寄存器(IE)共同完成。定时/计数器初始化应完成的过程是:
① 依据题目要求确定TMOD的值;
② 给TH1、TL1或TH0、TL0赋初值;
③ 根据题目要求确定是否开放中断;
④ 启动定时/计数器。
2.单片机中断系统
(1)单片机中断
程序在运行过程中,由于某种原因,CPU暂停当前的处理转去执行紧急事件,待紧急事件执行完毕后再转回执行原程序,这就是单片机中断。引起中断的原因叫中断源,中断之后执行的处理称为中断服务,对应的处理程序称为中断服务程序,原程序称为主程序。单片机中断功能的实现是通过设置IE、TCON、SCON、IP等特殊寄存器完成的。
(2)单片机中断系统结构
单片机具有6源5向量,中断系统结构如图1.12所示。
图1.12 单片机中断系统结构
、、T0、T1、TI、RI为中断源,TCON、IE、IP是与中断相关的特殊功能寄存器。
(3)单片机中断控制
中断设置:单片机的中断设置由TCON、SCON、IE、IP4个特殊功能寄存器确定。若开启外部中断0,采用脉冲触发方式的中断设置为:
SETB IT0 MOV IE,#81H
中断处理过程:单片机在每一指令的S5P2期间,CPU采样各中断源,并设置相应的中断标志位。CPU在下一个周期的S6状态期间按优先级顺序查询各中断标志,若查询到某个中断标志为1,将在下一个机器周期的S1状态期间按优先级响应中断。中断处理过程分成3个阶段,即中断响应、中断处理和中断返回。
中断入口地址:单片机响应中断后,将按表1.8规定的地址转入相应的中断入口,因此在系统初始化时要明确相应入口应完成的工作。
表1.8 AT89C51单片机中断入口地址
(4)中断系统扩展
利用定时器扩展外部中断:定时/计数器作计数器用,工作在方式2,计数器初值为#0FFH。这样,当外部来一个脉冲时,计数器产生溢出,用计数器的溢出信号作为中断请求标志。例如,将定时器T1作为外部中断源的程序如下:
MOV TMOD,#60H MOV TL1,#0FFH MOV TH1,#0FFH SETB TR1 SETB EA SETB ET1 ……
利用中断和查询相结合扩展外部中断:如图1.13所示,外部有多个中断信号,只用一个外部中断源,采用中断和查询相结合的方法解决外部多中断请求的问题。
图1.13 单片机中断系统结构
3.单片机串行接口
(1)串行口结构
51单片机内部有一个功能很强大的全双工串行口,可同时接收和发送数据。串行口由发送/接收缓冲器、发送控制器、接收控制器、输出控制门、输入移位寄存器等组成。串行口的结构与工作方式有关,图1.14为方式0的串行口结构,图1.15为方式1、2、3的串行口结构。
单片机发送数据时,由累加器A将数据送入发送缓冲寄存器SBUF,每发送完一帧数据,TI置1。单片机接收数据时,每接收完一帧数据,RI置1。值得注意的是,TI和RI只能用软件复位。接收、发送数据均可工作在查询方式或中断方式。
(2)串行口工作方式
串行口有4种工作方式,如表1.5所示。方式0以固定的波特率通过外接移位寄存器(如74HC164、74HC165等)实现I/O口的扩展。方式1、方式2、方式3均为异步通信,方式1用于双机通信,方式2、方式3主要用于多机通信,也可用于双机通信。
图1.14 串行口方式0结构示意图
图1.15 串行口方式1、2、3结构示意图
(3)串行口波特率设置
波特率反映串行口通信速度的快慢,单片机工作在不同的工作方式,其波特率的设置如下。
① 工作在方式0的波特率:是固定的,为fosc/12。
② 工作在方式2的波特率:波特率=(2SMOD*fosc)/64(其中SMOD为PCON.7)。
③ 工作在方式1和方式3的波特率:设置定时器T1工作在方式2,定时器T1的初值决定串行口的波特率,即
例如,单片机工作在串行方式1,串口波特率为2400bps的设置:
MOV SCOM,#40H ;设置串行口工作在方式 1 MOV TMOD,#20H ;设置T1作定时器工作在方式 2 MOV TH1,#0F4H ;波特率为 2400bps的定时器初值 MOV TL1,#0F4H SETB TR1 ;启动定时器
(4)双机通信
在硬件上,只要将两块单片机的串行口交叉相连,地线连在一起,即可实现双机通信。在程序设计上,单片机工作在方式1(或方式2、3),设置相同波特率,并处于允许接收状态。例如,工作在方式1,以1200bps实现双机通信的初始化程序:
MOV SCON,#30H ;串行口工作在方式 1,允许接收 MOV TMOD,#20 ;设置T1定时工作在方式 2 MOV TH1,#0E8H ;波特率为 1200bps的定时器初值 MOV TL1,#0E8H SETB TR1 ;启动定时器
(5)多机通信
单片机在方式2或方式3下可实现多机通信。图1.16所示是广泛应用的主从式多机通信结构图。主机可以跟任一台从机通信,从机只能同主机通信。
图1.16 主从式多机通信结构
在主从式多机系统中,①先对串行口进行如下设置:主、从机的SM2=1,串行口工作在方式2(或方式3),主、从机的波特率相同,主机的TB8=1,所有从机的REN=1。②主机发出一帧(其中包括8位需要与之通信的从机地址,第9位为1(TB8=1))地址信息。③所有从机接收到信息后,与本机地址相比较,相同地址的从机,使SM2=0,以便接收主机发来的数据;对地址不相符合的从机,仍保持SM2=1的状态。④主机向从机发送数据时,TB8=0,此时只有SM2=0的从机才能接收。