STC12C5A60S2的EEPROM应用

1.概述

STC12C5A60S2单片机可以使用ISP/IAP技术可将内部Data Flash作为EEPROM使用,EEPROM可以分为多个扇区,每个扇区包含512字节,STC12C5A60S2包含两个扇区。

2.IAP寄存器介绍

IAP_DATA:

数据寄存器,从Flash读出与写入数据都使用此寄存器。

IAP_ADDRH:
地址寄存器,高八位。

IAP_ADDRL:
地址寄存器,低八位。

IAP_CMD:
命令寄存器,指定对Flash区进行读/写/擦除操作

IAP_TRIG:
命令触发寄存器,操作命令时用于触发寄存器,对此寄存器先写入5Ah,再写入A5h,IAP命令才会生效。

IAP_CONTR
控制寄存器,使能IAP读写操作。

3.写EEPROM

void IapProgramByte(unsigned int addr, unsigned char dat){
	IAP_CONTR = ENABLE_IAP;       // 打开IAP方法
	IAP_CMD = CMD_PROGRAM;        // 设置写命令
	IAP_ADDRL = addr;             // 设置低八位地址
	IAP_ADDRH = addr >> 8;        // 设置高八位地址
	IAP_DATA = dat;               // 写数据
	IAP_TRIG = 0x5A;              // 设置触发命令
	IAP_TRIG = 0xa5;              // 设置触发命令
	_nop_();
	IapIdle();                    // 关闭方法
}

4.读EEPROM

unsigned char IapReadByte(unsigned int addr){
	unsigned int dat;
	IAP_CONTR = ENABLE_IAP;       // 打开IAP方法
	IAP_CMD = CMD_READ;           // 设置读命令
	IAP_ADDRL = addr;             // 设置低八位地址
	IAP_ADDRH = addr >> 8;        // 设置高八位地址
	IAP_TRIG = 0x5A;              // 设置触发命令
	IAP_TRIG = 0xa5;              // 设置触发命令
	_nop_();
	dat = IAP_DATA;               // 读取数据
	IapIdle();                    // 关闭方法
	return dat;
}

5.擦除EEPROM扇区

void IapEraseSector(unsigned int addr){
	IAP_CONTR = ENABLE_IAP;       // 打开IAP方法
	IAP_CMD = CMD_ERASE;          // 设置写擦除令
	IAP_ADDRL = addr;             // 设置低八位地址
	IAP_ADDRH = addr >> 8;        // 设置高八位地址
	IAP_TRIG = 0x5A;              // 设置触发命令
	IAP_TRIG = 0xa5;              // 设置触发命令
	_nop_();
	IapIdle();                    // 关闭方法
}

由于STC12C5A60S2使用的是Flash,所以进行写操作的时候只能将0置为1,无法将1置为0,所以在更新数据的时候,先要进行擦除操作,才可以进行写操作。
由于擦除操作是对整个扇区进行擦除的,所以在进行写数据的时候,需要对整个扇区的数据进行缓存,在擦除完成之后进行整个扇区写数据。

6.实例代码下载

EEPROM的应用示例代码(github)

原创文章 7 获赞 139 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qimi923511491/article/details/106121084