在单片机的开发应用中,常常希望对现场输入的数据能够在断电的情况下长久保存,以避免下次开机时的重新输入。此项工作通常采用AT24C02芯片来完成。AT24C02是带12C总线接口的E2PROM,其容量为256x8.它的特点是无需特殊设备,单片机本身就可对它进行读/写操作,写入数据在断电情况下可保存十年以上,使用非常方便。但由于80C51单片机没有IIC总线接口,故不能直接使用。通常采用虚拟IIC总线技术来解决这个问题。
1.AT24C02与80C51的接口电路
AT24C02的封装引脚示意图如上图所示。它与80C51的连接电路如下图所示。
单片机要想与其连接的某一器件进行通信,该器件必须有一个地址。
AT24C02的地址是一个8位二进制数,其格式为:
其中:A2、A1、AO为引脚地址,其数值由连接电路决定。当接电源时取“1”,接地时取“0”。R/W为数据方向位,当R/=1W时,表示从AT24C02中读取数据,当R/=O时,表示向AT24C02中写入数据。
2.AT24C02的数据操作格式
IIC总线中,对AT24C02内部存储单元读/写时,除了要确定该器件的读/写地址外,还要指定片内的读/写子地址(SUBADR)。由于片内子地址采用8位地址指针寻址,故子地址(SUBADR)为OOH~FFH。按照AT24C02器件手册,读/写N个字节的数据格式如下:
2.1写N个字节的操作格式
其中白色单元格为单片机发送,AT24C02接收;灰色单元格为AT24C02发送,单片机接收。S为起始信号.P为终止信号.A为应答信号,A为非应答信号。SLAW为写地址.SLAR为读地址。按照上图的连接方式SLAW=AOH.SLAR=AIHoDatal~DataN为写入/读出的N个字节数据。从读操作格式中可以看出,在读N个字节前,首先要进行一个子地址(SUBADR)的写操作,然后才进行读操作。
3. 80C51控制下虚拟IIC总线程序
3.1典型信号的时序要求
根据IIC总线上数据操作格式图,IIC总线数据传送时,有起始位(S),终止位(P).发送“0”及应答位(A),发送“1”及非应答位(A)等信号。按照典型IIC总线传送速率要求,这些信号时序如下图所示。
3.2虚拟IIC总线汇编程序包VIIC
为了在80C51上使用AT24C02,设计了一个80C51控制下的虚拟IIC总线程序包VIIC。此程序包有信号模和通用子程序CACK、WRBYT、RDBYT、WRNBYT、RDNBYT共九个子程序组成。设80C51单片机的系统时钟为6MHz,通用软件包VIIC程序清单如下:
STA:SETBVSDA;启动IIC总线子程序
CACK:SETBVSDA:置VSDA为输入方式SETBVSCL;使VSDA上数据有效CLRFO:预设FO=OMOVC,VSDA输入VSDA引脚状态JNCCEND:检查VSDA状态,正确应答转CEND,且FO=OSETBFO:无正常应答,FO=1CEND:CLRVSCL;子程序结束,使VSCL=ORETWRBYT:MOVRO,#08H:8位数据长度送RO中WLP:RLCA:发送数据左移,使发送位进入CJCWR1:判断发送“1”还是“0”,发“1”转WR1AJMPWRO:发“O”转WROWLPl:DJNZRO,WLP;8位数据发送完否?未完转WLPRETWRl:SETBVSDA:发送“1”程序段
RDBYT:MOVRO,#08H:8位数据长
度入RO
RLP.SETBVSDA置VSDA为输入方式
SETBVSCL使VSDA上数据有效
MOVC,VSDA:将VSDA引脚
状态送入进位C
RLCA.将进位C内容移入累加器A
CLRVSCL:使VSCL=O可继
续接收数据位
MOVR2.#10H
DJNZR2.$
DJNZRO,RLP:8位读完否?未
完转RLP
RET
WRNBYT:MOVR3,NUMBYT;
LCALLSTA:发送启动位启动
IIC总线
MOVA.SLAW:将写数据地址
(SLAW)送入A
LCALLWRBYT
LCALLCACK:检查应答位
JBFO.WRNBYT;非应答位则重发
MOVA.SUBADR;将数据子地
址(SUBADR)送入A
LCALLWRBYT
LCALLCACK:检查应答位
JBFO,WRNBYT;非应答位则重发
节数据注:①在使用上述程序包时,若单片机主时钟不是6MHz,应适当调整NOP的个数,以满足时序要求。
②该通用软件占用的资源有RO.Rl.R2,R3,FO,C。使用的符号单元有:
MTD发送数据缓冲区首址单元
MRD接收数据缓冲区首址单元
SUBADR数据子地址存放单元
SLAW寻址字节写存放单元
LSAR寻址字节读存放单元
NUMBYT传送字节数存放单元
VSDA虚拟IIC总线数据线
VSCL虚拟IIC总线时钟线
在使用虚拟IIC总线设计应用程序时,应首先将汇编程序包VIIC嵌入到程序存储器的任一空间,并根据系统的资源分配,在汇编程序时通过赋值语句给这些符号单元赋值。
4.AT24C02应用实例
假设AT24C02与80C51的连接如下图所示,且VIIC已安放在程序存储器中,并对其中符号标记已进行了如下伪指令定义。即:
那么,对AT24C02的读,写操作可用下列子程序来完成。
4.1写入AT24C02子程序
假设要将N(≤8)个字节数据写入AT24C02以20H单元开始的N个单元中,其写入子程序VAT24W清单如下: