在内部RAM的20H~2FH这16个单元共128位,它们的位地址为00H~7FH,另一部分位寻址空间在特殊功能寄存器中,凡是字节地址能被8整除的,特殊功能寄存器都有寻址。位寻址用于位操作指令,在其它指令中,位地址变为字节地址。当内部存储器容量不够时,须用扩展的办法增加外部存储器,外部程序存储器一般常使用EPROM型芯片。由于存储器共需要不超过8K的容量,因此选用2764作为程序存储器。
3.1.3 输入输出端口的功能
输出端口,所有端口都是双向的,每个端口都包含一个锁存器,一个输出驱动和一个输入缓冲器。MUX为模拟开关,MUX受CPU控制,当控制信号为0时,输出级与锁存器接通,在此时,与输出为0,输出级中的上拉FET截止,输出级是漏极开始状态下,若驱动NMOS或其它拉电流负载时,需外接上拉电阻,P0口输出级可以驱动8个TCL负载。
端口中的两个三态缓冲器用于直接读端口引脚的数据,当执行一条由端口输入的指令时,读脉冲打开一个三态缓冲器,这样端口上的数据经缓冲器送至内部总线。一个缓冲器并不直接读取端口引脚上的数据。而是读取锁存器Q端地数据,Q端与引脚处的数据是一致地。结构上这样是为了适应“读—修改—写”这一类指令的需要,对于“读—修改—写”指令不去直接接引脚上地数据,而读取锁存器Q端地数据,是为了读错引脚的数据。
作为一般的I/O口使用时,P0口是准双向口,即在输入数据时,应先把口置1(写1)。此时锁存器的Q端为0,这样使输出级的两个FFT均截止,引脚处于悬浮状态,可作高阻输入,在输出数据时,因是漏级开路输出,必须外接上拉电阻,才会有高电平输出,P0口作为地址/数据总线使用时,就不能在作为I/O口使用了。
当P0口作为地址/数据总线使用时,可分为两种情况:一种情况是从P0口输出地址或数据,这时控制信号应为高电平,转换开关把T2相器输出端与下拉FET接通,同时与门打开。输出的地址或数据信号即通过与门去驱动上拉电阻FET,又通过T2相器去驱动下拉FET;另一种情况是从P0口输入数据,这时信号级放应输入缓冲器进
入内部总线。
P0口即可作为通用I/O口使用,又可作为地址/数据总线使用,在一般情况下P0
17
均被地址/数据总线占用。
在输出驱动部分,P1口不同于P0口,它接有由FET构成的内部上拉电阻,当P1口某一位输出高电平时,它可以提供上拉电流负载,不必象P0口那样外接上拉电阻。在P1口某一位用作输入时,也必须先向对应的锁存器写“1”,使工作场效应截止由于片内负载电阻为20~40KV,因而不会对输入的数据有影响[4]。
P2口比P1口多了一个输出转换控制开关MVX,当MVX倒向左侧时,P2口作为通用I/O使用是准双向口,MVX倒向右侧时P2口用于输出高8位地址。在接有外部数据存储器而未接外部程序存储器时,若接有外部数据存储器容量为256字节,使用MVX类指令即可送出8位地址,故P2口仍可作为通用I/O口使用。若外接数据存储器容量较大,需由P0P2送出16位地址时,在读写周期内P2口引脚将保持地址信息,在输出地址时不需要P2锁存器锁存锁存器的内容也不会在输送地址的过程中改变,故访问外部数据存储器结束后,P2锁存器中的内容又会重新出现。在引脚上,若不需要频繁访问外部数据存储器时,P2口仍可在一定限度内作为一般的I/O使用。
P3口是一个多用途端口,在P3口作为一般I/O口使用时,工作原理与P1P2口类似。除作为一般I/O口外,P3口的各个口线还是有第二功能,是引脚部分说明,当P3口的第一位用于第二功能时,读位的锁存器应接1,第二功能信号正常通过与非门,送到引脚输出。而在输入时,端口引脚输入信号通过缓冲器送到第二功能端,不论是作为通用输入口或作为专用输入口,其对应的输出锁存器和第二功能端都应置1,在P3口的引脚信号输入通道中有两个缓冲端,通用输入信号仍取自三次缓冲器的输出端
[5]
。
3.1.4 空闲节电模式
AT89C51有两种可用软件编程的省电模式,它们是空闲模式和掉电模式。这两种方式是控制专用寄存器PCON(即电源中指寄存器)中的PD(PCON.1)和IDL(PCON.0)位来实现的。PD是掉电模式,当PD=1时,激活掉电工作模式,单片机进入掉电工作状态。IDL是空闲等待方式,当IDL=1时,激活空闲工作模式,单片机进入睡眠状态。
如需同时进入两种工作模式,即PD和IDL同时为1,则先激活掉电模式。
18
在空闲工作模式状态,CPU保持睡眠状态而所有片内的外设仍保持激活状态,这种方式由软件产生。此时,片内RAM和所有特殊功能寄存器的内容保持不变。空闲模式可由任何允许的中断请求或硬件复位终止。
终止空闲工作模式的方法有两种,其一是任何一条被允许的中断的事件被激活,IDL被硬件清除,即可终止空闲工作模式,程序会首先响应中断,进入中断服务程序,执行完中断服务程序并紧随RET1指令后,下一条要执行的指令就是使单片机进入空闲模式那条指令后面的一条指令。
其二是通过硬件复位也可将空闲工作模式终止。需要注意的是,当由硬件复位来终止空闲工作模式时,CPU通常是从激活空闲模式那条指令的下一条指令开始继续执行程序的,要完成内部复位操作,硬件复位脉冲要保持两个机器周期有效,在这种情况下,内部禁止CPU访问片内RAM,而允许访问其它端口,为了避免可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不应是一条对端口或外部存储器的写入指令。
3.1.5 掉电模式
在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM 和特殊功能寄存器的内容在终止掉电模式前被冻结。推出掉电模式的唯一方法是硬件复位。
复位后将重新定义全部特殊功能寄存器,但RAM中的内容,在Vcc恢复到正常工作电平前,复位应无效,且必须保持一定时间让振荡器重启动并稳定工作。
3.1.6 中断
AT89C51有5个中断源,分为内部中断源和外部中断源。外部中断源有两个,通常指由外部设备发出的中断请求信号,从P3.2和P3.3(即INT0和INT1)引脚输入单片机,用电平或边沿触发两种方式申请中断。内部中断源有三个两个定时器/计数
器(T0、T1)中断源和一个串行口。中断源T0和T1的中断申请是在它们计数从全“1”变为全“0”溢出时自动向中断系统提出的。串行口中断源的中断申请是在串行口每
19
发送或接受一个8位二进制数后自动向中断系统提出的。
AT89C51在每一个机器周期的S5P2时,对所有中断源都顺序地检查一遍,找到所有已激活的中断请求后,先使相应的中断标志位置位,然后在下一个机器周期的S1状态时检测这些中断标志位的状态,只要不受阻断就开始响应其中最高优先级的中断请求。AT89C51中中断标志位集中安排在定时器控制寄存器TCON和串行口控制寄存器SCON中。
3.1.7 片内Flash闪速存储器的编程
AT89C51单片机内部有4K字节的Flash的EPROM,这个Flash阵列出厂时已经处于擦除状态(即所有存储单元的内容均为FFH),用户随时可对其编程。编程接口可接受高电压(+12V)或者低电压(Vcc)的允许编程信号,低电压编程模式适合于用户再线编程系统,高电压编程模式可与通用EPROM编程器兼容。AT89C51的存储器阵列是采用字节写入方式编程的,每次写入一个字节,要对整个芯片EPROM程序存储器写入一个非空字节,必须用片擦除的方式将整个存储器的内容清除。 AT89C51编程方法如下:
1. 在地址线上加上要编程单元的地址信号; 2. 在数据线上加上要写入的数据字节; 3. 激活相应的控制信号;
4. 在高电压编程方式时,将EA非/Vpp端加上+12V编程电压;
5. 每对Flash存储阵列写入一个字节或每写入一个程序加密位,加上一个ALE/PROG编程结束。每个字节写入周期是自身定时的,通常约为1.5ms。
3.1.8 数据查询
AT89C51单片机用数据查询方式来检测一个写周期是否结束,在一个写周期中如
需读取最后写入的那个字节则读出的数据的最高位(P0.7)是原来写入字节最高位的反码。写周期完成后有效的数据就会出现在所有输出端上此时可进入下一个字节写周期写周期开始后可在任意时刻进行数据查询。
20
Ready/Busy:字节编程的进度可通过“RDY/BSY”输出信号监测,编程期间,ALE变成高电平“H”后P3.4(RDY/BSY)端电平被拉低,表示正在编程状态(忙状态)。编程结束后,P3.4变为高电平准备就绪状态。
3.2 可编程多功能接口8155
3.2.1 8155的组成与接口信号
8155芯片内具有RAM、并行I/O端口和计数器,是可编程多功能接口芯片。8155与MCS—51单片机接口简单,是单片机应用系统中广泛使用的一种芯片。8155的引线图如图3-2所示。 1. 静态RAM
8155芯片内具有256B的静态RAM。 2. 定时器
8155芯片内具有1个14位减法计数器,对引线IMER IN输入的外部脉冲进行计数。当计数溢出时,向引线TIMER OUT输出方波或脉冲信号。定时器由2个8位的寄存器构成如图3-3所示。以其中的低l 4位组成计数器最高2位(M2、M1)用于定义计数器输出信号的形式:
M2M1= 00 单个方波
M2M1= 01 连续方波 M2M1= 10 单个脉冲 M2M1= 11 连续脉冲
21