微控制器的应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 单片机的结构

下面以AT89S52为例来介绍单片机结构。AT89S52是一个低功耗、高性能的CMOS 8位微控制器,并且在系统中集成了8KB的可编程闪存。AT89S52兼容标准80C51指令集和引脚。AT89S52是一个功能强大的微控制器,具有较高的性价比,可在许多嵌入式控制中应用。

AT89S52单片机在一块芯片中集成了CPU、8KB的Flash、256B内存、32条输入/输出线、看门狗定时器、两个数据指针、3个16位定时器/计数器、6矢量两个级别的中断结构、一个全双工串行口、片内振荡器和时钟电路。

1.2.1 AT89S52单片机的内部构件

AT89S52单片机内包含下列几个部件:

(1)一个8位CPU;

(2)一个片内振荡器及时钟电路;

(3)8KB可重复擦写的Flash程序存储器;

(4)256B内部RAM;

(5)3个16位定时器/计数器;

(6)32条可编程的I/O线(四个8位并行I/O端口);

(7)一个可编程全双工串行口;

(8)6个中断源、两个优先级。

AT89S52基本结构如图1.4所示。

1.CPU

CPU是单片机的核心部件,它由运算器和控制器组成。

图1.4 AT89S52基本结构

1)运算器

运算部件是以算术逻辑单元ALU为核心,加上累加器ACC、寄存器B、暂存器、程序状态字PSW以及十进制调整电路和布尔处理器等许多部件组成的。

(1)8位算术和逻辑运算的ALU单元

ALU单元可以对4位(半字节)、8位(一字节)和16位(双字节)数据进行操作。完成算术四则运算和逻辑运算,以及位操作、循环移位等逻辑操作,操作结果的状态信息送至状态寄存器(PSW)。

(2)累加器ACC

累加器ACC,在指令中用助记符A来表示。A是一个8位寄存器,是CPU中工作最繁忙的寄存器。在算术逻辑运算中,用来存放一个操作数或运算结果(包括中间结果)。在与外部存储器和I/O接口打交道时,其完成数据传送。

(3)寄存器B

B可做通用寄存器,在乘、除法运算中使用。做乘法运算时,寄存器B用来存放乘数及积的高位字节;做除法运算时,寄存器B用来存放除数及余数;不做乘、除法运算时,寄存器B可做通用寄存器。

(4)程序状态字寄存器PSW(程序状态标志寄存器)

PSW是8位寄存器,用于存放当前指令执行后操作结果的某些特征,以便为下一条指令的执行提供依据。PSW的各位定义如表1.1所示。

表1.1 PSW的各位定义

① Cy:进位标志位。

在执行某些算术运算和逻辑指令时,Cy可以被硬件或软件置位或清0。在算术运算中它可作为进位标志;在位运算中,它做累加器使用;在位传送、位与及位或等位操作中,都要使用进位标志位。

② AC:辅助进位标志位。

进行加法或减法操作时,当发生低4位向高4位进位或借位时,AC由硬件置位,否则AC位被置0。执行十进制调整指令时,将借助AC状态进行判断。

③ F0:用户标志位。

该位为用户定义的状态标志,用户根据需要用软件对其置位或清0,也可以用软件测试F0来控制程序的跳转。

④ RS1和RS0:寄存器组选择控制位。

此两位通过软件置0或1来选择当前工作寄存器组,如表1.2所示。

表1.2 工作寄存器组选择

CPU通过对PSW中的D4、D3位内容的修改,就能任选一个工作寄存器组。例如:

SETB PSW.3
CLR PSW.4   ;选定第1组
SETB PSW.4
CLR PSW.3   ;选定第2组
SETB PSW.3
SETB PSW.4   ;选定第3组

若不设定则为第0组,也称为默认值,这个特点使单片机具有快速现场保护功能。特别注意的是,如果不加设定,在同一段程序中工作寄存器R0~R7只能用一次,若用两次程序会出错。

⑤ OV:溢出标志位。

当执行算术指令时,在带符号的加减运算中,OV=1表示有溢出(或借位)。反之,OV=0表示运算正确,即无溢出产生。

⑥ P:奇偶标志位。

P用来表示累加器A中1的个数的奇偶性,它常常用于手机通信。若累加器中1的个数为奇数则P=1,否则P=0。

(5)布尔处理器

布尔处理器完成布尔代数逻辑运算。

2)控制器

控制器是CPU的大脑中枢,是单片机的指挥控制部件。它由程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、数据指针(DPTR)、堆栈指针(SP)以及定时控制电路等部件组成,对来自存储器中的指令进行译码,通过定时控制电路在规定的时刻发出各种操作所需的控制信号,使各部分协调工作,完成指令所规定的功能。

(1)程序计数器PC

程序计数器PC是16位专用寄存器,寻址范围为64KB,用于存放CPU执行的下一条指令的地址,具有自动加1的功能。当一条指令按照PC所指的地址从程序存储器中取出后, PC会自动加1,指向下一条指令。

(2)指令寄存器IR和指令译码器ID

指令寄存器IR是8位寄存器,用于暂存待执行的指令,等待译码;指令译码器ID对指令寄存器中的指令进行译码,即将指令转变为所需的电平信号。

译码器输出的电平信号,再经定时控制电路即可定时产生执行该指令所需要的各种控制信号。

(3)数据指针DPTR

数据指针DPTR是16位专用寄存器。它可以对64KB的外部数据存储器和I/O口进行寻址,也可作为两个8位寄存器,主要用做外部数据存储器的地址指针。

(4)堆栈指针SP

堆栈指针SP是8位特殊功能寄存器,在片内RAM(128B)中开辟栈区,并随时跟踪栈顶地址,它按“先进后出”的原则存取数据,上电复位后,SP指向07H。

2.存储器及特殊功能寄存器

AT89S52外部有两个独立的存储器空间:64KB的程序存储器空间和64KB的数据存储器空间。

1)程序存储器

EA=0:片内ROM不起作用,完全执行片外程序存储器指令。外部ROM的地址为0000H~0FFFFH,可达64KB。

EA=1:执行片内程序存储器指令,地址为0000H~1FFFH;当指令地址超过1FFFH后,自动转向片外ROM取指令,地址为2000H~0FFFFH。

2)数据存储器

数据存储器分为内部数据存储器和外部数据存储器。

(1)内部数据存储器

AT89S52有256B的片内RAM,地址空间为00H~0FFH。其中,低128B(地址为00H~7FH)是真正的RAM区;高128B(地址为80H~0FFH)与片内特殊功能寄存器(SFR)区(80H~0FFH)地址完全重合,但在物理上是完全独立的,单片机采用不同的寻址方式,以区分这两个重叠的逻辑地址空间。

访问(80H~0FFH)区间的SFR时,只能用直接寻址方式。如:

MOV 0A0H, #data

其中,指令的目的操作数是直接地址,将立即数“#data”送入SFR中的0A0H单元中。

访问(80H~0FFH)区间的片内RAM时,只能用间接寻址方式。如:

MOV R0, #0A0H
MOV @R0, #data

其中,指令的目的操作数是间接地址,将立即数“#data”存入片内RAM的0A0H单元中。堆栈操作是间接寻址的典型例子,因为栈指针SP为栈顶单元地址。片内RAM 80H~0FFH空间也可用做栈区空间。

AT89S52片内共有32个特殊功能寄存器。表1.3列出了AT89S52 SFR的地址及复位值。

表1.3 AT89S52 SFR的地址及复位值

续表

在80H~FFH地址空间中,SFR并没有被完全占用。对于余留的空间,用户不可使用。

(2)外部数据存储器

外部数据存储器地址范围为0000H~0FFFFH,可达64KB,用MOVX指令进行访问。

1.2.2 AT89S52单片机引脚功能

AT89S52的引脚和封装共有四种形式,如图1.5所示。

下面以40引脚塑料双列直插式封装(PDIP)芯片为例,介绍各个引脚功能。

(1)电源引脚VCC和GND。

① GND(20):接地端。

② VCC(40):正常操作时为+5V电源。

通常在VCC和GND引脚之间接0.1μF高频滤波电容。

(2)外接晶振引脚XTAL1和XTAL2。

① XTAL1(19):内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。

② XTAL2(18):内部振荡电路反相放大器的输出端,是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。

(3)控制或与其他电源复用引脚RST、ALE/PROGPSENEA/Vpp

① RST(9):当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位。

图1.5 AT89S52的引脚和封装

② ALE/PROG(30):地址锁存允许/编程脉冲输入。在访问外部程序存储器和外部数据存储器时,该引脚输出一个地址锁存脉冲ALE,其下降沿可将低8位地址锁存于片外地址锁存器中。

在编程时,向该引脚输入一个编程负脉冲PROG

正常操作时为ALE功能(允许地址锁存),将地址的低字节锁存在外部锁存器中,ALE引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。

PSEN(29):外部程序存储器读选通信号输出端,低电平有效。在从外部程序存取指令(或数据)期间,PSEN在每个机器周期内两次有效。在访问外部数据存储器时,PSEN无效。

EA/Vpp(31):内部程序存储器和外部程序存储器选择端。当EA/Vpp为高电平时,访问内部程序存储器;当EA/Vpp为低电平时,则访问外部程序存储器。

在Flash编程时,该引脚可连接21V的编程电源Vpp

(4)输入/输出引脚P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7。

① P0口(32~39):一个8位漏极开路型双向I/O口。

当用做通用I/O口时,每个引脚可驱动8个TTL负载;当用做输入时,每个端口首先置1。

在访问外部存储器时,它分时传送低字节地址和数据总线,此时,P0口内含提升电阻。

② P1口(1~8):一个带有内部提升电阻的8位准双向I/O口。

当用做通用I/O口时,每个引脚可驱动8个TTL负载。当用做输入时,每个端口首先置1。

P1.0和P1.1引脚也可用做定时器2的外部计数输入(P1.0/T2)和触发器输入(P1.1/T2EX)。

③ P2口(21~28):一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动4个TTL负载。当用做输入时,每个端口首先置1。

④ P3口(10~17):一个带有内部提升电阻的8位准双向I/O口,能驱动4个TTL负载。当用做输入时,每个端口首先置1。P3口还可用于第二功能,如表1.4所示。

表1.4 P3口的第二功能