您好,欢迎来电子发烧友网! ,新用户?[免费注册]

当前位置:电子发烧友网 > 图书频道 > 电子 > 《单片机原理与应用》 > 第2章 MCS-51单片机内部结构

第4节 单片机如何运行程序

  知道了单片机通过I/O口与外设打交道,也知道了单片机的程序与数据如何保存,到底单片机是如何运行程序的?原来单片机和其他微机一样,也拥有一个中央处理器(CPU),它是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 它在单片机中的核心地位见图2.10所示。它通过单片机的内部总线,将单片机内部的各个部分:程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等联系在一起,内部总线有三种:数据总线,专门用来传送数据信息,地址总线专门用来传送地址信息,选中各操作单元,控制总线专门用来传送CPU各种控制命令,以便CPU统一指挥协调工作。完成程序所要执行的各种功能。CPU执行程序一般包括两个主要过程:第一,就是从程序存储器中取出指令,指令的地址由PC指针提供,在前面我们已经知道,PC指针在CPU取指后会自动加一,所以PC指针总是指向下一个将要取出的指令代码或操作数。这样,就能保证程序源源不断往下执行。第二,就是执指过程,取出的指令代码首先被送到CPU中控制器中的指令寄存器,再通过指令译码器译码变成各种电信号,从而实现指令的各种功能。

  4. 怎样保证CPU工作?

  现在我们知道了单片机怎样取指、执指,即怎样运行程序了。那么怎样才能保证CPU有序的工作?这就必须提到单片机的两个非常重要的外围电路:单片机的时钟电路和复位电路。在单片机上面有两个引脚,分别是它的第18、19脚,其功能如下。

  Pin19: 时钟XTAL1脚,片内振荡电路的输入端。

  Pin18: 时钟XTAL2脚,片内振荡电路的输出端。

  89S51的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体和振荡电容,振荡电容的值一般取10p~30p。另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。如图2.11

  当时钟电路起振后,产生一定频率的时钟信号,单片机的CPU在时钟信号的控制下,就能一步一步完成自己的工作。通常我们必须了解以下几种周期。

  【振荡周期】:单片机外接石英晶体振荡器的周期。如外接石英晶体的频率若为12MHz,这其振荡周期就是1/12微秒。

  【状态周期】:单片机完成一个最基本的动作所需的时间周期。如扫描一次定时器T0引脚状态所需要的时间。一个状态周期=2个振荡周期。

  【机器周期】:单片机完成一次完整的具有一定功能的动作所需的时间周期。如一次完整的读操作或写操作对应的时间。一个机器周期=6个状态周期。

  【指令周期】:执行完某条指令所需要的时间周期,一般需要1~4个机器周期,如MUL AB指令是四机器周期指令。一个指令周期=1~4个机器周期。

  单片机工作时,除了需要时钟支持外,还必须有一个初始状态,即单片机的复位状态。在单片机外部引脚第9脚,就是专门给单片机提供复位脉冲的。

  Pin9: RESET/Vpd复位信号复用脚,当89S51通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。

  

 

  图2.11

  初始化后,程序计数器PC指向0000H,P0~P3输出口全部为高电平,堆栈指钟写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,89S51的初始态如下表:

  特殊功能寄存器初始态特殊功能寄存器初始态

  ACC00HB00H

  PSW00HSP07H

  DPH00HTH000H

  DPL00HTL000H

  IPxxx00000BTH100H

  IE0xx00000BTL100H

  TMOD00HTCON00H

  SCONxxxxxxxxBSBUF00H

  P0-P31111111BPCON0xxxxxxxB

  表2.5

  89S51的复位方式可以是自动复位,也可以是手动复位,见下图。此外,RESET/Vpd还是一复用脚,Vcc掉电期间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。

  

图2.12

 

  5. 按键为何能打断原来的工作?

  在前面的任务中,我们还看到一个现象,只要按一下S1键,发光管的闪动就停止5秒,这就相当于打断了原来既定的工作,等到5秒延时一到,又恢复原来的工作。这就象我们平时通常所说的“中断”。单片机中也有中断系统,它有5个中断源,它们能打断单片机原来的工作,直到中断结束才能继续原来的工作。我们将在模块五中详细阐述。

  6. 发光二极管为何按一定频率闪烁?

  在前面的任务中,灯有规律的闪动和按键停5秒,都离不开时间。那么,这个时间我们在前面的程序中是怎样得到的?原来,在89S51单片机中有两个定时器T0、T1,我们在前面也已经提到了,它在单片机中能够实现定时或计数功能。详细的用法,在模块五进行讲解。

  7. 单片机的其他资源

  通过本次任务的分析,我们基本上知道MCS-51单片机的结构,它由CPU、程序存储器、数据存储器、并行输入输出口、定时计数器、中断系统等构成,当然除了本次任务用到的以上资源外,51单片机还有一个串行通讯口。

  单片机的引脚除了我们前面介绍的4个并I/O口,两根时钟引脚(18、19脚),一根复位引脚(9脚),两根电源脚(40、20脚)外,还有以下一些引脚。

  Pin30: ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。

        如果单片机是EPROM,在编程其间,将用于输入编程脉冲。

  Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。

  Pin31: EA/Vpp程序存储器的内外部选通线,89S51和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。

  在编程时,EA/Vpp脚还需加上21V的编程电压(8751)。

  其40个引脚的引脚图如下:

  

 

  图2.13