STC单片机EEPROM读写程序.doc

上传人:新** 文档编号:563019031 上传时间:2022-12-11 格式:DOC 页数:7 大小:51.50KB
返回 下载 相关 举报
STC单片机EEPROM读写程序.doc_第1页
第1页 / 共7页
STC单片机EEPROM读写程序.doc_第2页
第2页 / 共7页
STC单片机EEPROM读写程序.doc_第3页
第3页 / 共7页
STC单片机EEPROM读写程序.doc_第4页
第4页 / 共7页
STC单片机EEPROM读写程序.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《STC单片机EEPROM读写程序.doc》由会员分享,可在线阅读,更多相关《STC单片机EEPROM读写程序.doc(7页珍藏版)》请在金锄头文库上搜索。

1、/* STC89C54RD+的flash空间从0x40000xf3ff 共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/* 用户程序需要记忆的数

2、组, 用户实际使用了n-1个数据,数组长度规整到2 4 8 16 32 64 上 */uchar Ttotal16=0x55,/* 作为判别引导头使用,用户程序请不要修改它 */* 用户保存记忆的数据 */0x01,/* 用途说明.*/0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,;uint timerForDelay,/* 专供延时用的变量 */i,/* 循环变量*/EepromPtr;/* eeprom读写指针*/* - 命令定义 - */#define RdCommand0x01/* 字节读 *

3、/#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_CON

4、TR | 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

5、;/* 触发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功能*/return (ISP_DATA);/

6、* 返回读到的数据*/* = 扇区擦除 = */void SectorErase(uint sector_addr)uint iSectorAddr;iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */ISP_ADDRH = (uchar)(iSectorAddr 8);ISP_ADDRL = 0x00;ISP_CMD= ISP_CMD & 0xf8;/* 清空低3位 */ISP_CMD= ISP_CMD | EraseCommand;/* 擦除命令3 */ISPgoon();/* 触发执行*/ISP_IAP_disable();/* 关闭ISP,

7、IAP功能*/* = 字节写 = */void byte_write(uint byte_addr, uchar original_data)ISP_ADDRH =(uchar)(byte_addr 8); /* 取地址 */ISP_ADDRL =(uchar)(byte_addr & 0x00ff);ISP_CMD = ISP_CMD & 0xf8;/* 清低3位*/ISP_CMD = ISP_CMD | PrgCommand;/* 写命令2*/ISP_DATA = original_data;/* 写入数据准备*/ISPgoon();/* 触发执行*/ISP_IAP_disable();/

8、* 关闭IAP功能*/* = 字节写并校验 = */uchar byte_write_verify(uint byte_addr, uchar original_data)ISP_ADDRH = (uchar)(byte_addr 8); /* 取地址 */ISP_ADDRL = (uchar)(byte_addr & 0xff);ISP_CMD = ISP_CMD & 0xf8;/* 清低3位*/ISP_CMD = ISP_CMD | PrgCommand;/* 写命令2*/ISP_DATA = original_data;ISPgoon();/* 触发执行*/* 开始读,没有在此重复给地址

9、,地址不会被自动改变 */ISP_DATA = 0x00;/* 清数据传递寄存器*/ISP_CMD = ISP_CMD & 0xf8;/* 清低3位*/ISP_CMD = ISP_CMD | RdCommand;/* 读命令1*/ISP_TRIG=0x46;/* 触发ISP_IAP命令字节1*/ISP_TRIG=0xb9;/* 触发ISP_IAP命令字节2 */_nop_();/* 延时*/ISP_IAP_disable();/* 关闭IAP功能*/if(ISP_DATA= original_data)/* 读写数据校验*/returnOk;/* 返回校验结果*/elsereturnError

10、;/* = 数组写入 = */uchar ArrayWrite(uint begin_addr, uint len, uchar *array)uinti;uintin_addr;/* 判是否是有效范围,此函数不允许跨扇区操作 */if(len PerSector)return Error;in_addr = begin_addr & 0x01ff; /* 扇区内偏移量 */if(in_addr + len) PerSector)return Error;in_addr = begin_addr;/* 逐个写入并校对 */ISP_IAP_enable();/* 打开IAP功能*/for(i =

11、 0; i 8);ISP_ADDRL = (uchar)(in_addr & 0x00ff);ISP_DATA = arrayi;/* 取数据*/ISP_CMD = ISP_CMD & 0xf8;/* 清低3位 */ISP_CMD = ISP_CMD | PrgCommand;/* 写命令2 */ISP_TRIG = 0x46;/* 触发ISP_IAP命令字节1 */ISP_TRIG = 0xb9;/* 触发ISP_IAP命令字节2 */_nop_();/* 读回来 */ISP_DATA=0x00;ISP_CMD = ISP_CMD & 0xf8;/* 清低3位 */ISP_CMD = ISP_CMD | RdCommand;/* 读命令1 */ISP_TRIG = 0x46;/* 触发ISP_IAP命令字节1 */ISP_TRIG = 0xb9;/* 触发ISP_IAP命令字节2 */_nop_();/* 比较对错 */if(ISP_DATA != arrayi)ISP_IAP_disable();return Error;in_addr+;/* 指向下一个字节*/ISP_IAP_disable();returnOk;/* = 扇区读出 = */* 程序对地址没有作有效性判断,请调用方事先保证他在规定范围内*/void ArrayRe

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号