一、 硬件结构
1 内部结构
AT89C51单片机的内部结构与MCS-51系列中的MCS-8051的内部结构基本相同。由图1可知,AT89C51单片机主要由CPU、片内RAM、片内ROM及4个标准输入输出I/O口等组成。片内4KB ROM为程序存储器,这里面主要存放指挥CPU进行操作的指令代码。4KB ROM共有4096个存储单元,每个单元可存放一个字节共8位二进制数字。程序存储器中的每个单元都有一个确定的地址,4K空间地址范围为0000H至0FFFH。128B RAM为128个字节的可读写数据存储器,主要放置需频繁处理的数据。其地址空间为00H至7FH,其中00H至07H这8个单元是一组工作寄存器,由于对它们的操作另有专用指令,所以将这几个单元又分别记作R0、R1、R2、R3、R4、R5、R6、R7。4个标准输入输出I/O口P0、P1、P2、P3与CPU内部的一些特殊功能寄存器,如定时器控制寄存器(TCON)、串行口控制寄存器(SCON)等是统一编址的。这些存储器离散地分布在80H至FFH地址空间内。其中P0、P1、P2、P3的地址分别是80H、90H、A0H和B0H。有了确定的地址,才能准确无误地对它们进行操作。比如我们要向P0口送一个数,只要用一个送数指令,将数“写”到80H这个存储单元就完成了。也就是说把要送的数存到P0口锁存器之中,再通过驱动器,就可将数据各位代表的高低电位输出到P0.0至P0.7的这8条口线引脚上了。
2 引脚功能
单片机具备了CPU、程序存储器、数据存储器和输入输出口等硬件资源之后,还需要供电电源、时钟触发和复位等控制的支持才能正常工作。而这些输入都是通过引脚与单片机连接的。图2是单片机AT89C51的引脚排布图。由图2可知,AT89C51是标准的40线双列直插式封装(也有其它封装形式)的集成电路,其引脚与MCS-51系列单片机完全兼容。这40条引脚大致可分为电源(Vcc、Vss、VPP、VPD)、时钟(XTAL1、XTAL2)、专用控制线(ALE、RST、PROG、PSEN、EA)、通用多功能输入输出标准I/O口(P0~P3)等4大部分。该单片机有6条引脚是保证基本工作所必须连接的:40脚Vcc和20脚Vss 为整个芯片提供电源;18脚、19脚是时钟振荡引脚,它们的内部连接一个高增益放大器,外部接一晶振选频产生振荡脉冲,并可配接一些电容、电感使振荡更精确。此振荡脉冲,为整个CPU及其定时等有效操作系统提供时钟。另外两条引脚是EA和RST。31脚EA是程序存储器片内片外选择脚,如果EA接低电位,CPU不从片内ROM中取指;EA接高电位,CPU先从片内程序存储器取指。第9脚RST的主要功能是使单片机复位。当单片机接通以上5脚后,只要在第9脚上加一个宽度不小于24个振荡周期,也就是2个机器周期的正脉冲,它就能使系统复位。系统复位就是意味着CPU里各种寄存器等功能部分有一种标准的、固定的状态,这样有利于系统设计。比如系统复位后,能使P0口至P3口的数据为FFH,也就是各口线皆呈高电位,不然就会出现每通一次电,系统就呈现一种不同的状态,给负载电路的设计带来困难。系统复位后,还能使程序地址寄存器PC的值为0000H,这就保证系统从程序存储空间的0000H单元取指,使程序有个起始,保证系统能有条不紊地运行。因此,程序存储器从第一单元开始一般放一条无条件跳转指令,指出主程序的入口,引导系统进入主程序运行。
3 I/O口的介绍
在图2中,还有P0~P3引脚。这些引脚可以将单片机输出的高低电位信号传送给片外的负载,也可将片外其它设备输出的高低电位号输入至单片机,因此,在单片机中,这些引脚就叫做输入输出端口,简称I/O口。一个标准的I/O口一般由8条I/O口线组成。标准I/O口的主要功能相当于一个8位锁存器,能存储一个字节的二进制数据,以保持与之相连接的8条口线各自电位的高低状态。在图2中,AT89051的第1脚至第8脚相对应的8条口线P1.0至P1.7组成的标准口记作P1口,第10脚至第17脚相对应的口线P3.0至P3.7组成的P3口,第21脚至28脚相对应的8条口线P2.0至P2.7组成了P2口,第32脚至39脚相对应的8条口线P0.0至P0.7组成了P0口。有了这些标准输入输出口,使用起来就很方便了。这样,我们可编制一段程序,向这些标准口中存入一定的数据(这些数据也可叫控制字),各口线引脚就会呈现出不同的高低电位。比如我们向P0、P1、P2、P3口中送入数据#00H,则每个口的各口线电位状态就会为“0000 0000”,也就是各条口线皆呈低电位。我们再向P0口送入数据#03H。P0.0至P0.7各条口线所呈电位为“0000 0011”,也就是只有P0.0和P0.1两条口线所对应的引脚呈高电位。另外,还应知道,P0口的P0.0~P0.7的位地址是80H至87H,P1口的P1.0至P1.7的位地址是90H至97H,P2.0至P2.7和P3.0至P3.7的位地址分别是A0H至A7H和B0H至B7H。
4 I/O口结构
AT89C51单片机或其它与之兼容的单片机,作为初学者还必须掌握它的I/O口结构和电流负载能力。比如AT89C2051口线负载能力达25mA,AT89C51可达15mA等等。下面以P1.0口线为例,谈一下I/O口结构,图3为P1.0口线的内部驱动器电原理图。由图可知,驱动器的输入端是和锁存器的Q相连接的,驱动器的输出部分由4只场效应管组成,N型管VT4为下拉管,P型的VT1、VT2、VT3为上拉管。依次为强上拉、弱上拉和中上拉。当我们向P1.0位写“1”时,Q呈低电位,于是,VT4截止,VT1、VT2、VT3导通。其中VT1导通过程稍复杂一些,图3中VT1的栅极与Q之间接有一个延时器件F1,此延时器件的导通态维持时间是2个振荡周期。也就是说,当Q为低电位时,延时器F1导通,VT1也迅速导通,经过两个振荡周期以后,延时电路处于开路状态,于是VT1截止。所以,VT1只是在CPU向P1.0写“1”后很短的时间内导通,以较强的电流拉动能力将P1.0引脚的电位拉起。经过2个振荡周期以后,VT1截止,只有VT2和VT3导通。如果此时P1.0引脚的负载不是严重超载,P1.0引脚的电位会高于2.1V,此电位高于非门F3的门限电压,F3的输出端为低电位,与之相接的VT3的栅极亦为低电位,VT3导通,提供中度的上拉电流,使P1.0输出的电流达到额定值;如果P1.0引脚严重超载,比如被SB1对地短路,P1.0引脚的输出电位将很低,几乎为零,此电位低于非门F3的门限电压,F3的输出端为高电位,VT3截止,只有VT2提供微安级的弱上拉电流。而当SB1释放后VT3又重新导通,P1.0引脚的电位和上拉负载能力均恢复。单片机标准口的这种结构,既安全,又可靠。由上述我们不难得出这样的结论:这些口线不论在什么状态下都不怕对地短路,但绝不能直接与Vcc相接。因为当口线处于低电位时,VT4导通,如果此时口线直接与Vcc相连接,VT4就可能被烧坏。许多开发者曾用此方法将某些口线烧坏来实现加密。当然这样是以牺牲单片机的口资源为代价的。
二、 CPU的工作过程
CPU尽管结构复杂,靠程序的支持来实现其强大的功能,但在运行程序中执行每条指令的过程却是非常简单的,就是不断地从程序存储器中取出程序代码,按照代码所代表的含义去完成一种单一的操作。上述程序存储器的这4096个存储单元,就好像4096个小抽屉,而程序代码就好像放在小抽屉里的工作说明。CPU就像是一个只能依照抽屉里的说明,而且是每次只能完成一条说明的识读来依次完成简单操作的弱智人一样。这个人开始时一定会先打开第1个抽屉,如果第1个抽屉里的纸条上写着“请到第2个和第3个抽屉里的纸条上所标明的抽屉里去找指定的工作做”,他就会打开第2个和第3个抽屉取出纸条来准确地识读,确认第3个抽屉的号码。如果这两张纸条上分别写着“10”和“08”,他就会打开第1008个抽屉取出纸条去完成操作。此过程就相当于CPU执行了一条无条件转移指令,一下子从程序的开始,跳到了第1008个单元去运行主程序。如果第1008个抽屉中的这张纸条上写着:“把第18#黑板上的会议通知中的时间由下午2点改成下午3点,”这个人就会将第18#黑板上的2擦掉改成3。这18#黑板就好像RAM的第18单元,此次操作相当于CPU执行了一条送数指令。前述向各I/O口送数的过程亦如此。
单片机只是一个可以读懂人给予它的命令并能按照这种命令去完成某种操作的高级电路而已,由它构成的各种智能系统的智力在程序中,完成操作的能力在执行设备中。而程序必须由人来编制。所以,我们学习单片机,要在认识它的结构和功能的基础上学会编程,能够设计出各种系统的硬件和软件才行。结合机器码学习程序便于深刻理解,特别适合于爱好电路制作的电子爱好者,能学到真功夫。但机器码不容易记忆,在编较长的程序时,会遇到许多不便。所以,当你能熟练地使用一些高级开发设备时,还必须掌握汇编语言。▲