单片机技术及应用(C语言版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 AT89S52单片机的硬件资源

一、AT89S52单片机的基本组成

AT89S52单片机内部结构框图如图1-2所示。

AT89S52单片机内部包括:

● 一个8位微处理器(CPU),是单片机的运算和指挥中心。

● 片内8K字节程序存储器(ROM),用于存放程序、原始数据及表格。

● 片内256字节数据存储器(RAM),用于存放临时数据,例如运算的中间结果。

●4组8位并行输入/输出端口(I/O端口)P0~P3,每组端口均有8条I/O线,用于与外部交换信息。

●3个16位的定时器/计数器,均可以根据需要设为定时器或计数器使用。

图1-2 AT89S52单片机的内部结构框图

●1个6向量2级中断结构,有6个中断源和2个中断优先级,中断源分别是两个外部中断(INT0和INT1)、三个定时中断(定时器0、1、2)和一个串行中断。

●1个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与计算机之间的串行通信。

●片内晶振及时钟电路,AT89S52单片机有一个用于构成内部振荡器的反相放大器,外接石英晶体或陶瓷谐振器都可构成自激振荡器;也可从外部时钟源输入时钟信号,最高允许振荡频率为24MHz。

二、AT89S52单片机的中央处理器(CPU)

中央处理器(CPU)也称微处理器,是单片机的核心部件,即单片机的控制和指挥中心。它主要包含运算器和控制器。

1.运算器

运算器可以对数据进行算术运算、逻辑运算和位操作运算。运算器包括算术逻辑运算单元ALU、累加器A、通用寄存器B、暂存器、程序状态字寄存器PSW等。

● 算术逻辑运算单元ALU:可进行4位(半字节)、8位(全字节)、16位(双字节)数据的加、减、乘、除、加1、减1等算术运算,逻辑与、或、异或、求补等逻辑运算,以及数据的位操作。

● 累加器A(Accumulator):8位寄存器。通常,存储的一个运算数经暂存器2进入ALU的输入端,与另一个来自暂存器1的运算数进行运算,运算结果又送回累加器A,即运算前放操作数,运算后放操作结果,是单片机中最忙碌的一个寄存器。

● 通用寄存器B(GeneralPurposeRegister):8位寄存器。在乘、除运算之前存放乘数或除数,运算之后存放乘积的高8位或除法的余数,也可作为一般存储器使用。

●程序状态字寄存器PSW(ProgramStatusWord):8位标志寄存器。用于存放指令执行后的状态信息,供程序查询和判别使用。

2.控制器

控制器由程序计数器PC、指令寄存器IR、指令译码器ID、振荡器及定时电路等组成。

● 程序计数器PC(ProgramCounter):16位寄存器,用于存放将要执行的下一条指令的地址,能自动加1。

● 振荡器及定时电路:AT89S52单片机片内有振荡电路,只需外接石英晶体和频率微调电容就可产生脉冲信号。CPU在这种基本节拍的控制下发出控制信号,协调各部件的工作。

三、AT89S52单片机的存储器

AT89S52单片机内部的存储器一般分为两种:程序存储器ROM和数据存储器RAM。

程序存储器ROM用于存放程序、原始数据或表格,可在线编写程序,掉电后数据保持不变。

数据存储器RAM用于存放运算的中间结果、最终结果或欲显示的数据等,其数据可随时改写,掉电后数据消失。

AT89S52单片机存储器空间配置如图1-3所示。

图1-3 AT89S52单片机存储器空间配置

1.程序存储器

AT89S52单片机片内程序存储器ROM有8K字节,其地址为0000H~1FFFH;片外可接扩展程序存储器ROM,最大达64K字节,地址为0000H~FFFFH,片内外统一编址。CPU访问片内、片外程序存储器ROM时用MOVC指令。

当EA引脚(31脚)接低电平(接地)(EA=0)时,AT89S52单片机片内ROM不起作用,CPU只能从片外ROM(0000H~FFFFH)中取指令。

当EA引脚接高电平(EA=1)时,AT89S52单片机的程序计数器PC只在0000H~1FFFH范围内执行片内ROM中的指令。只有当PC的值超过1FFFH后,CPU才自动转到片外ROM相应的地址(2000H~FFFFH)取指令。

系统在程序存储器低端的一些固定存储单元是特定程序的入口地址。

●0000H:单片机上电复位后主程序的入口地址;

●0003H:外部中断0的中断服务程序入口地址;

●000BH:定时器0的中断服务程序入口地址;

●0013H:外部中断1的中断服务程序入口地址;

●001BH:定时器1的中断服务程序入口地址;

●0023H:串行通信的中断服务程序入口地址;

●002BH:定时器2的中断服务程序入口地址。

当单片机上电复位后,程序计数器PC中的内容清零(PC=0000H),所以CPU总是从0000H单元开始执行程序。通常在该单元中存放一条绝对转移指令(例如LJMP0030H),指明用户程序所在的单元地址(0030H),则CPU会跳转到该地址执行主程序。

除0000H单元外,其他的六个特殊单元分别存放着单片机六种中断源的中断服务程序入口地址。编程时,通常在这些单元中存放一条绝对转移指令,而真正的中断服务程序是从转移地址开始存放的。当发生中断时,CPU会根据指令指示的地址在程序存储器相应的区域找到中断服务程序并执行。

例如在允许中断的情况下,当外部中断引脚INT0(P3.2,12脚)有效(INT0=0)时,即引起中断0请求,CPU响应中断后自动将地址0003H装入PC,程序就自动转向0003H单元开始执行。如果事先在0003H~000AH存放一条转移指令,程序就被引导到指定的中断服务程序空间去执行。

2.数据存储器

AT89S52单片机片内数据存储器RAM有256字节,其地址为00H~FFH;片外可接扩展数据存储器RAM,最大达64K字节,地址为0000H~FFFFH。访问片内RAM时用MOV指令,访问片外RAM时用MOVX指令。

在AT89S52单片机中,片内数据存储器RAM的容量不大,但功能较多,使用较灵活。其中低地址的128B可直接寻址访问,也可间接寻址访问,高地址的128B只能间接寻址访问。它分为工作寄存器区、位寻址区和通用RAM区三部分,如图1-4所示。

图1-4 AT89S52单片机数据存储器结构

(1)工作寄存器区

AT89S52单片机在片内RAM中划分出低地址的32个字节单元(00H~1FH)作为工作寄存器区,供用户使用。工作寄存器区分为4个工作寄存器组。每组有8个寄存器,分别称为R7~R0,占8个字节。

在单片机工作时,只有一组寄存器作为当前工作寄存器组R7~R0使用。当单片机复位后,系统默认工作寄存器0组为当前工作寄存器组。

(2)位寻址区

在工作寄存器区后的20H~2FH共16个字节为位寻址区,共有128位(8×16=128)。每一位都有相应的位地址00H~7FH。利用位寻址可以对某一位进行单独操作,而无须将一个字节的8位全部重新操作一遍。

AT89S52单片机数据存储器位寻址区如图1-5所示。

图1-5 AT89S52单片机数据存储器位寻址区

例如,要将20H存储单元的第7位D7置“1”,可以用一条语句直接实现,使用非常灵活。单片机的位寻址功能是一般计算机所没有的,这也是单片机重要的特点之一。

(3)通用RAM区

AT98S52单片机片内通用RAM区地址为30H~FFH,这里通常设为堆栈区,栈顶的位置由堆栈寄存器SP指定。

系统复位时,SP的初始值为07H。注意,此时SP的初始值在工作寄存器区内,为防止堆栈区的数据将寄存器区数据覆盖,一般要将SP的值重新设置到通用RAM区。

3.特殊功能寄存器SFR

在AT89S52单片机片内80H~0FFH的128个地址中,离散分布了一些特殊功能寄存器SFR,它们与片内RAM高128B数据存储器地址相同,但访问方式不同,特殊功能寄存器只能直接寻址访问,而片内RAM高128B只能间接寻址访问,所以不会混淆。

部分特殊功能寄存器的地址和名称如图1-6所示。其中有12个具有位寻址能力,它们的字节地址正好能被8整除(即16进制的地址码尾数是0或8),在图1-6中标星号的寄存器即可位寻址。

图1-6 AT89S52单片机数据存储器特殊功能寄存器区

特殊功能寄存器SFR的内容与单片机的硬件相关,它起着管理单片机的作用。下面先简要介绍与CPU相关的部分,其他部分将在相应章节中介绍。

① 累加器ACC(E0H)。

累加器ACC是AT89S52最常用、最忙碌的8位特殊功能寄存器,许多指令的操作数取自于ACC,许多运算中间结果也存放于ACC。在指令系统中,用A作为累加器ACC的助记符。

② 寄存器B(F0H)。

在乘、除指令中,用到了8位寄存器B。乘法指令的两个操作数分别取自A和B,乘积存于B和A两个8位寄存器中。除法指令中,A中存放被除数,B中存放除数,商存放于A,余数存放于B。

在其他指令中,B可作为一般通用寄存器使用。

③ 程序状态寄存器PSW(D0H)。

程序状态寄存器PSW是一个8位特殊功能寄存器,它的各位包含了程序执行后的各种状态信息,供程序查询或判别之用。其各位的含义见表1-2。

表1-2 程序状态寄存器PSW功能表

● CY(PSW.7):进/借位标志位。在执行加法(或减法)运算指令时,如果运算结果的最高位(D7位)向前有进位(或借位),则CY位由硬件自动置为1(CY=1);如果运算结果的最高位无进位(或借位),则CY位被清零(CY=0)。

● AC(PSW.6):辅助进/借位标志位。当执行加法(或减法)操作时,如果运算结果(和或差)的低4位(D3位)向高4位(D4位)有半进位(或借位),则AC位将被硬件自动置为1(AC=1);否则AC位被清零(AC=0)。

●F0(PSW.5):用户标志位0。用户可以根据自己的需要对F0位赋予一定的含义,由用户置位或复位,以作为软件标志。

● RS1、RS0(PSW.4、PSW.3):工作寄存器组选择位。在单片机数据存储器中有四组工作寄存器组(寄存器3组、寄存器2组、寄存器1组、寄存器0组),每个寄存器组中有8个寄存器R7~R0。程序运行时只能有一组寄存器组工作,到底是哪组寄存器组工作?我们可以通过设置RS1、RS0的值来进行选取。其选取组合关系见表1-3。

表1-3 工作寄存器组选择表

单片机上电复位时,RS1=RS0=0,CPU自动选择寄存器0组为当前工作寄存器组。

●OV(PSW.2):溢出标志位。当进行算术运算时,如果运算结果超出了-128~+127的范围,则有溢出,OV位由硬件自动置为1(OV=1);否则无溢出,OV位清零(OV=0)。

● F1(PSW.1):用户标志位1(仅AT89S52有)。作用与用户标志位0相同。

● P(PSW.0):奇偶标志位。每条指令执行完后,该位始终跟踪指示累加器ACC中1的个数。如果A中的1为奇数,则P=1;A中的1为偶数,则P=0。此位常用于校验串行通信中的数据传送是否出错。

④ 堆栈指针SP(81H)。

堆栈指针SP是一个8位特殊功能寄存器,SP的内容可指向AT89S52片内00H~FFH RAM的任何单元。系统复位后,SP初始化为07H,即指向地址为07H的RAM单元。

⑤ 数据指针DPTR(83H,82H)。

数据指针DPTR是一个16位特殊功能寄存器,其高位字节寄存器用DPH表示(地址83H),低位字节寄存器用DPL表示(地址82H)。

数据指针DPTR用于存放16位地址,以便对64KB片外RAM作间接寻址。

四、AT89S52单片机的并行端口

AT89S52单片机有4组8位并行准双向I/O端口,分别为P0,P1,P2和P3,共占32个引脚。每个端口均包含一个端口锁存器(特殊功能寄存器P0~P3)、一个输出驱动器和输入缓冲器。每个端口可以8条线一起用做I/O口线传输字节信息,也可以每一根I/O口线单独使用。对端口锁存器进行读/写就可以实现端口的输入/输出。

1.P0口的使用

P0口可作为通用的8位输入/输出端口使用。在单片机外接扩展存储器时,它还可以作为分时复用的低8位地址/数据总线使用,此时高8位地址总线由P2端口担任。P0口的每一位可驱动8个TTL负载。

(1)P0口作为通用输出口,需外接上拉电阻才能输出电平。

(2)P0口作为通用输入口,分为读锁存器和读引脚两种情况。在读端口引脚数据前,应先向端口锁存器写入1。

2.P1口的使用

P1口常作为通用的输入/输出端口,内部有上拉电阻,不需外接电阻。当从端口引脚读入数据时,应先向端口写1,再读引脚数据。P1口每一位可驱动4个TTL负载。

在AT89S52单片机中,P1端口还用于一些复用功能。其复用功能见表1-4。

表1-4 AT89S52单片机P1端口各引脚复用功能表

3.P2口的使用

P2口可作为通用的8位输入/输出端口使用。在单片机外接扩展存储器时,它还可以作为高8位地址总线,与P0口的低8位地址总线一起形成16位I/O口地址。P2口的每一位可驱动4个TTL负载。

P2口作为通用I/O口使用时,不需外接电阻,读引脚状态前,应先向端口写1。

4.P3口的使用

P3口是单片机中使用最灵活、功能最多的一个并行端口,它具有通用的输入/输出功能,还具有多种用途的第二功能(见表1-5)。同样,P3口的每一位也可驱动4个TTL负载。

P3口作为输入使用时,同P0~P2口一样,应先由软件向端口写1,再读引脚数据。P3口也无须外接电阻。

表1-5 AT89S52单片机P3端口各引脚复用功能表

五、AT89S52单片机的封装形式与引脚介绍

1.AT89S52单片机的封装形式

AT89S52单片机有PDIP(双列直插式封装)、PLCC(带引线的塑料芯片载体封装)和TQFP(方形扁平封装)三种封装形式(P指塑料),其引脚分布如图1-7~图1-9所示。

图1-7 TQFP封装

图1-8 PLCC封装

图1-9 PDIP封装

2.AT89S52单片机的引脚介绍

① 电源引脚VCC和GND。

● VCC(40脚):电源端,接+5V。

● GND(20脚):接地端。

② 外接晶体振荡器引脚XTAL1和XTAL2。

●XTAL1(19脚):接外部晶振和微调电容的一端,在片内接振荡电路反相放大器的输入端。当采用外部时钟时,此引脚作为外部时钟信号的输入端。

●XTAL2(18脚):接外部晶振和微调电容的另一端,在片内接振荡电路反相放大器的输出端。当采用外部时钟时,此引脚悬空。

③ 控制信号引脚RST、PSEN、ALE/PROGEA/VPP。

●RST(9脚):复位信号输入端,高电平有效。当此输入端保持2个机器周期的高电平时,就可以完成单片机的复位操作。

PSEN(29脚):外部程序存储器选通信号。当AT89S52单片机从外部程序存储器取指令(或常数)时,每个机器周期输出两次PSEN信号(即2个脉冲信号),作为外部程序存储器选通信号。而在访问外部数据存储器时,无PSEN信号输出。

● ALE/PROG(30脚):地址锁存允许信号输出/编程脉冲输入端。

当AT89S52单片机上电正常工作后,ALE引脚不断向外部输出正脉冲信号,此频率是振荡频率fOSC的1/6。在CPU访问外部程序/数据存储器(执行MOVX或MOVC指令)时,ALE输出信号作为锁存低8位地址的控制信号。在CPU不访问外部程序/数据存储器时,ALE端仍以振荡频率1/6的固定频率输出脉冲,可用来作为外部定时器或时钟使用。有的单片机可以关闭“ALE”输出,用以降低输出干扰。

此引脚的第2功能PROG是在对片内8KFlashROM进行编程写入(固化程序)时,作为编程脉冲输入端。

EA/VPP(31脚):内部与外部程序存储器选择端/片内FlashROM编程电压输入端。

EA引脚接高电平时,CPU只执行内部程序存储器FlashROM中的指令;但当PC(程序计数器)的值超过1FFFH(AT89S52单片机程序存储器为8K)时,CPU将自动转到外部程序存储器相应的地址取指令,并执行该指令。

EA引脚接低电平(接地)时,CPU只执行外部程序存储器中的指令。

此引脚的第2功能VPP在对片内程序存储器FlashROM编程期间,接收编程允许电压VPP12V(如果选用12V电压编程)。

④ 输入/输出端口P0、P1、P2和P3。

六、AT89S52单片机的时钟与时序

单片机时序就是CPU在执行指令时所需控制信号的时间顺序。在执行指令时,CPU首先到程序存储器中取出需要执行指令的指令码存入指令寄存器,通过指令译码器对其译码,并由时序部件产生一系列时钟信号去完成指令的执行。这些指令的时钟控制信号在时间上的相互关系就是CPU时序。单片机通过时钟电路产生时序。

1.单片机系统的时钟电路

AT89S52单片机的时钟信号由两种方式产生:内部振荡方式、外部时钟方式。内部振荡方式电路原理图如图1-10所示。

图1-10 AT89S52单片机的时钟电路—内部振荡方式

(1)内部振荡方式

AT89S52单片机芯片内部有一个振荡器,在引脚XTAL1、XTAL2外接晶体振荡器(简称晶振),就构成了内部振荡方式。典型振荡频率为12MHz和11.0592MHz。

在图1-10中,电容C1、C2起稳定振荡器频率、快速起振的作用,电容值一般为20~40pF。内部振荡方式所得的时钟信号比较稳定,因此使用得较多。

(2)外部时钟方式

这种方式下,外部时钟信号由XTAL1引脚接入单片机(XTAL2悬空),此时单片机将按照外部时钟信号工作。

2.单片机的时钟信号

为了对CPU时序进行分析,需要为其定义一种能够度量各种时序信号出现时间的尺度。这个尺度通常为振荡周期、机器周期和指令周期。

(1)振荡周期

振荡周期T又称为时钟周期,由单片机片内振荡电路的晶振产生,常定义为时钟脉冲频率f的倒数,是时序中最小的时间单位。如果接入的晶振是12MHz,则振荡周期为1/12MHz,即0.083μs。时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏。

(2)机器周期

机器周期定义为实现特定功能所需的时间,通常由若干个振荡周期T构成。AT89S52单片机的机器周期常定义为12个振荡周期。它是计算机执行一种基本操作的时间单位。若晶振是12MHz,则机器周期为12/12MHz,即1μs。

(3)指令周期

指令周期是时序中最大的时间单位,定义为执行一条指令所需的时间。1个指令周期由1~4个机器周期组成。通常将包含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

七、AT89S52单片机的复位

单片机的复位操作完成单片机片内电路的初始化,使单片机从一种确定的状态开始运行。当复位信号(高电平)加到单片机RST引脚并维持2个机器周期时,CPU就可以响应并将系统复位。如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。因此要求单片机复位后能脱离复位状态。

实际应用中,复位操作有两种方式:上电复位,开关复位(图1-11)。

图1-11 单片机复位电路

上电复位要求接通电源后,自动实现复位操作。开关复位要求在电源接通的情况下,用按钮开关操作使单片机复位。

单片机的复位操作使单片机进入初始化状态。初始化后各内部计算器的状态如下。

程序计数器PC:0000H;

累加器ACC:00H;

寄存器B:00H;

程序状态字PSW:00H;

堆栈指针SP:07H;

数据指针DPTR:0000H;

端口锁存器P0~P3:0FFH;

寄存器IP:各有效位为0;

寄存器IE:各有效位为0;

寄存器TCON:00H;

寄存器TMOD:00H;

寄存器T0、T1、T2:00H;

寄存器SCON:00H;

寄存器PCON:各有效位为0;

串行数据缓冲器SBUF:不定。

八、AT89S52单片机的标识

在市场上购买AT89S52单片机时,有必要了解单片机上的标识,下面以图1-1为例介绍。

(1)第1行的标识“ATMEL”,表示单片机生产公司的名称,美国ATMEL(爱特梅尔)公司。

(2)第2行的标识“AT89S52”,表示单片机的型号。

(3)第3行的标识“24PC”

① 数字部分,表示支持的最高系统时钟。

对于AT89S52-24PC,“24”表示可支持最高为24MHz的系统时钟。

② 数字后第一个字母,表示封装形式。“P”:DIP封装;“A”:TQFP封装;“J”:PL-CC封装。对于AT89S52-24PC,“P”表示PDIP封装。

③ 数字后最后一个字母,表示应用级别。“C”:商业级;“I”:工业级(有铅);“U”:工业级(无铅)。对于AT89S52-24PC,“C”表示商业级。

(4)第4行的标识“0525”,表示生产日期。本例中表示2005年的第25周生产。

本单元技能重点考核内容小结:

掌握AT89S52单片机引脚的功能和使用要求,了解单片机的基本硬件知识,学会识别其上的标识。