SSD1963的样例程序 c语言驱动读写程序
/* STC89C54RD+的flash空间从0x4000~0xf3ff 共90个扇区,每扇区512字节*/
//#define BaseAddr0x1000/*51rc*/
//#define EndSectoraddr0x3d00/*51rc*/
//#define EndAddr0x3fff/*51rc 12K eeprom*/
#define BaseAddr0x4000
#define EndSectoraddr0xf200
#define EndAddr 0xf3ff
#define UseAddr 0x1000
/* ------------- 定义扇区大小 ------------- */
#define PerSector512
/* 用户程序需要记忆的数组, 用户实际使用了n-1个数据,数组长度规整到
2 4 8 16 32 64 上 */
uchar Ttotal[16]=
{
0x55,/* 作为判别引导头使用,用户程序请不要修改它 */
/* 用户保存记忆的数据 */
0x01,/* 用途说明....*/
0x02,
0x03,
0x04,
0x05,
0x06,
0x07,
0x08,
0x09,
0x0a,
0x0b,
0x0c,
0x0d,
0x0e,
0x0f,
};
uint timerForDelay,/* 专供延时用的变量 */
i,/* 循环变量*/
EepromPtr;/* eeprom读写指针*/
/* --------------- 命令定义 --------------- */
#define RdCommand0x01/* 字节读 */
#define PrgCommand0x02/* 字节写 */
#define EraseCommand0x03/* 扇区擦除 */
/* 定义常量 */
#define Error 1
#define Ok 0
/* 定义Flash对应于20MHz晶振系统的操作等待时间 */
/* 时钟倍频时WaitTime用 0x00*/
#define WaitTime0x01
/* ================ 打开 ISP,IAP 功能 ================= */
void ISP_IAP_enable(void){
EA=0;/* 关中断 */
ISP_CONTR =ISP_CONTR & 0x18; /* 0001,1000*/
ISP_CONTR =ISP_CONTR | WaitTime;/* 写入硬件延时*/
ISP_CONTR =ISP_CONTR | 0x80; /* ISPEN=1*/
}
/* =============== 关闭 ISP,IAP 功能 ================== */
void ISP_IAP_disable(void){
ISP_CONTR=ISP_CONTR & 0x7f;/* ISPEN = 0 */
ISP_TRIG=0x00;
EA= 1;/* 开中断 */
}
/* ================ 公用的触发代码 ==================== */
void ISPgoon(void){
ISP_IAP_enable();/* 打开 ISP,IAP 功能*/
ISP_TRIG=0x46;/* 触发ISP_IAP命令字节1*/
ISP_TRIG=0xb9;/* 触发ISP_IAP命令字节2*/
_nop_();
}
/* ==================== 字节读 ======================== */
uchar byte_read(uint byte_addr){
ISP_ADDRH = (uchar)(byte_addr >> 8);/* 地址赋值*/
ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD& 0xf8;/* 清除低3位 */
ISP_CMD = ISP_CMD| RdCommand;/* 写入读命令*/
ISPgoon();/* 触发执行*/
ISP_IAP_disable();/* 关闭ISP,IAP功能