AT89C2051单片机内部有2KB的闪速存储器阵列,一片新的AT89C2051,其存储阵列处于擦除状态(FFH),此时可对其编程,存储阵列一次编程1字节,若编程任何非空字节时,需对整个存储阵列进行片擦除。

编程时,AT89C2051利用内部存储器地址计数器提供寻址存储器的地址信号,RST上升沿将该地址计数器复位至000H,引脚XTAL1所施加的正向连续脉冲使地址计数器不断加1。RST上出现12V(编程电源VPP)高压时,预示着1字节的编程操作开始,这时P3口提供编程所需的控制与状态信号,P1口为数据通道,如图10.3所示。对这些端口或引脚按图10.4所示的时序施加正确的控制组合就可通过P1口将数据编程到内部闪速存储器中。

图10.3编程闪速存储器

图10.4闪速存储器编程和校验时序

AT89C2051根据引脚RST与P3.2~P3.7的状态组合可以产生5种编程模式,如表10.4所示。

1.编程(写代码数据)

AT89C2051编程按下述步骤进行:

(1)上电过程:VCC加电,置RST为“L”(低电平),XTAL1为“L”,其它所有引脚悬空,等待10ms以上;

(2)置RST为“H”(高电平),P3.2为“H”;

(3)在引脚P3.3、P3.4、P3.5、P3.7上施加相应的逻辑电平,选定基本编程模式;

(4)地址信号由内部地址计数器提供(初始值为000H),欲写入该地址中的数据加至引脚P1.0~P1.7上;

(5)将RST电平升至12V启动编程;

(6)给P3.2施加一负脉冲,则编程内部存储器阵列或锁定位的1个字节,字节写周期采用自定时,通常为1.2ms;

(7)若要校验已编程数据,将RST从12V降至逻辑电平“H”,并置引脚P3.3~P3.7为校验模式电平,输出数据即可在P1口读取;

(8)编程下一个地址字节,对XTAL1施加一正脉冲,内部地址计数器加1,然后在P1口上加载欲写入的新数据;

(9)重复步骤(5)~(8),改变数据,递增地址计数器直到2KB存储阵列全部编程或目标文件结束;

(10)下电过程:置XTAL1为“L”,RST为“L”,其它I/O引脚悬空,VCC下电。当前次编程未结束时,不允许开始下一次编程。

如何确定一次编程操作是否结束,AT89C2051提供了以下两种方法。

1)数据查询特性

AT89C2051具有通过数据查询来检测写周期结束的特性。在写期间,读操作将导致P1.7输出写入数据的补码,一旦写完成,所有输出将出现真实数据,这时可开始下一数据编程。利用这一特性,可以在启动某一次编程后不断地查询写入数据,直到查询的数据为真实数据时,就可判定写周期已结束。

2)准备好/忙信号

在编程期间,引脚P3.3(RDY/BSY)提供了编程状态。当引脚P3.2(PROG)电平升高后,引脚P3.1电平下降,表示BUSY,编程结束后P3.1电平抬高,表示READY(见图10.4所示时序)。利用查询该状态信息便可确定编程的结束。

2.校验(读代码数据)

进行编程校验时,AT89C2051芯片各引脚作用如图10.5所示,如果锁定位LB1和LB2未被编程,则可通过下述步骤进行校验:

(1)使RST从“L”变为“H”,地址计数器复位000H;

(2)提供适当的控制信号(见图10.4所示时序),从P1口读取数据与编程写入数据作比较;

(3)给XTAL1施加正脉冲,地址计数器加1;

(4)从P1口读1个代码数据与编程写入数据作比较;

(5)重复步骤(3)、(4),直至整个存储阵列校验完毕。

3.写锁定位

写锁定位完成对闪速存储器加密。

按前述编程模式表操作:先选择写锁定位模式,然后将RST升至12V,P3.2施加编程脉冲,即可将锁定位写入(改变模式选择P3.3、P3.4、P3.5、P3.7的输入组合来实现锁定位LB1、LB2的写入)。不能直接校验锁定位,要通过观察其特性是否被允许来完成。

4.芯片擦除

当编程模式选择为芯片擦除模式并使P3.2引脚上施加10ms的PROG脉冲后,整个闪速存储器(2KB)和2个锁定位即可被擦除。擦除后,存储器阵列全为FFH。

5.读特征字节

特征字节表示AT89C系列芯片的基本特性,由3或4字节组成,存储于程序存储区的低端。AT89C2051芯片的特征字节位于地址000H、001H、002H中,当选择读特征字节模式(P3.3=P3.4=P3.5=P3.7=“L”)并采用类似校验步骤读取数据时,即可获得AT89C2051芯片的特征字:

(000H)=1EH表示该产品由Atmel生产;

(001H)=21H表示是89C2051/89C1051;

(002H)=FFH表示12V编程。