EEPROM多个数据读写
更新时间:2024-05-01 12:12:01 阅读量: 综合文库 文档下载
- eeprom怎么读数据推荐度:
- 相关推荐
#include
typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong;
#define led_port P0 sbit dm=P2^3; sbit wm=P2^2; ulong a,v; //uchar a;
uchar temp1,temp2,temp3,temp4;
uchar code dxian[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码显示区0——9 uchar code wxian[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //选通哪位数码管控制位 uchar bcd[8]; void delay(uint t); void bin_bcd(); void smxs();
//掉电保持寄存器申明 sfr IAP_DATA=0xe2; sfr IAP_ADDRH=0xe3;
//数码管控制芯片段码控制位 //数码管控制芯片位码控制位
//数码管bcd码缓冲区 //延时函数声明
//bcd分离函数
//数码管显示函数
sfr IAP_ADDRL=0xe4; sfr IAP_CMD=0xe5; sfr IAP_TRIG=0xe6; sfr IAP_CONTR=0xe7;
#define CMD_IDLE
0
#define CMD_READ 1 #define CMD_PROGRAM #define CMD_ERASE 3
//定义Flash操作等待时间及允许IAP/ISP/EEPROM操作的常数 //#define ENABLE_IAP 0x82 #define ENABLE_IAP 0x83
//系统工作时钟<20MHZ
2
//系统工作时钟<40MHZ
#define IAP_ADDRESS 0x2000
void cc(uint addr);// 擦除某一扇区 void xcx(uint addr,uchar dat);// 写一字节 uchar dcx(uint addr);// 读一字节 void GB_IAP();//关闭IAP/IAP操作
void delay(uint t) { }
void smxs() {
while(--t);
}
uchar i;
for(i=0;i<8;i++) { }
led_port=0; dm=1; dm=0;
led_port=wxian[i]; wm=1; wm=0;
led_port=dxian[bcd[i]]; if(i==5)
led_port=led_port | 0x80; dm=1; dm=0;
delay(300);
void bin_bcd() {
bcd[0]=a/10000000; bcd[1]=a/1000000; bcd[2]=a/100000;
bcd[3]=(a0000)/10000; bcd[4]=(a000)/1000; bcd[5]=(a00)/100;
}
bcd[6]=(a0)/10; bcd[7]=(a0);
void xs32_8() { }
void xs8_32() {
a =
((ulong)(temp1)<<24)|((ulong)(temp2)<<16)|((ulong)(temp3)<<8)|temp4; }
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:主程序
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void main(void) {
uchar num;
temp1=(a>>24)&0xff; temp2=(a>>16)&0xff; temp3=(a>>8)&0xff; temp4=a&0xff;
/*测试Long型转char型是否正确成功*这里如果要验证请把void xs8_32()中的改成v然后调试哈就可以看出来/
/**********************************
a=99999999; xs32_8(); xs8_32();
*********************************/
/******测试存贮多个数据成功**********/
/*************************************************
cc(IAP_ADDRESS);
// 擦除第1个扇区(2000h~21FFh)
temp1++; temp2++; temp3++; temp4++;
a=temp1+temp2+temp3+temp4; temp1=dcx(IAP_ADDRESS); temp2=dcx(IAP_ADDRESS+1); temp3=dcx(IAP_ADDRESS+2); temp4=dcx(IAP_ADDRESS+3);
xcx(IAP_ADDRESS,temp1); xcx(IAP_ADDRESS+1,temp2); xcx(IAP_ADDRESS+2,temp3); xcx(IAP_ADDRESS+3,temp4);
// 对EEPROM区2002h写入
**************************************************/
temp1=dcx(IAP_ADDRESS); temp2=dcx(IAP_ADDRESS+1); temp3=dcx(IAP_ADDRESS+2); temp4=dcx(IAP_ADDRESS+3); num=dcx(IAP_ADDRESS+4);
}
num++; a=555555+num; xs32_8();
cc(IAP_ADDRESS);
// 擦除第1个扇区(2000h~21FFh)
xcx(IAP_ADDRESS,temp1); xcx(IAP_ADDRESS+1,temp2); xcx(IAP_ADDRESS+2,temp3); xcx(IAP_ADDRESS+3,temp4); xcx(IAP_ADDRESS+4,num); xs8_32(); while(1) { }
bin_bcd(); smxs();
// 对EEPROM区2002h写入
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:擦除某一扇区(每个扇区512字节) 入口:addr = 某一扇区首地址
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void cc(uint addr) {
// 0x83(晶振<5M) 0x82(晶振<10M)
0x81(晶振<20M) 0x80(晶振<40M) IAP_CONTR = ENABLE_IAP;
// 打开 IAP 功能(IAPEN(IAP_CONTR.7)=1:
允许编程改变Flash, 设置 Flash 操作等待时间。
IAP_CMD = CMD_ERASE; 进行扇区擦除
// 用户可以对\区\
IAP_ADDRL = addr; // IAP/IAP操作时的地址寄存器低八位, IAP_ADDRH = addr>>8; // IAP/IAP操作时的地址寄存器高八位。
//EA =0;
IAP_TRIG = 0x46; // 在IAPEN(IAP_CONTR.7)=1时,对IAP_TRIG先写入46h,
IAP_TRIG = 0xB9; // 再写入B9h,IAP/IAP命令才会生效。 //_nop_();
GB_IAP(); }
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:写一字节
入口:addr = 扇区单元地址 , dat = 待写入数据 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void xcx(uint addr,uchar dat) {
IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_PROGRAM; 字节编程
IAP_ADDRL = addr; IAP_ADDRH = addr>>8;
IAP_DATA = dat; // 数据进IAP_DATA //EA = 0;
IAP_TRIG = 0x46; IAP_TRIG = 0xB9; //_nop_();
// 关闭IAP/IAP
// 用户可以对\区\进行
GB_IAP(); }
// 关闭IAP/IAP
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:读一字节
入口:addr = 扇区单元地址 出口:dat = 读出的数据
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ uchar dcx(uint addr) {
uchar dat;
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_READ; // 用户可以对\区\进行字节读 IAP_ADDRL = addr; IAP_ADDRH = addr>>8; //EA = 0;
IAP_TRIG = 0x46; IAP_TRIG = 0xB9; //_nop_(); dat = IAP_DATA; }
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 函数:关闭IAP/IAP操作
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ void GB_IAP()
GB_IAP(); return dat;
// 取出数据
// 关闭IAP/IAP
{
IAP_CONTR = 0; // 关闭IAP功能 IAP_CMD = 0; // 待机模式,无IAP操作
IAP_TRIG = 0; // 关闭IAP功能, 清与IAP有关的特殊功能寄存器 }
IAP_ADDRH = 0x80; IAP_ADDRL =0;
正在阅读:
EEPROM多个数据读写05-01
增值税会计问题的研究毕业设计04-28
江苏省江阴市南闸实验学校七年级英语上册牛津译林版《Unit 7 Sho03-03
某学校办公楼建筑结构设计毕业设计论文04-08
区农业农村局推进农村改革发展工作计划07-30
计算机组成原理复习提纲10-30
石家庄小学排名02-14
2011吉安一中高考二模文综试题及答案12-22
2010年高考语文各地试题分类汇编课件508-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 读写
- 多个
- 数据
- EEPROM
- 北京市劳动合同书(以完成一定工作任务为期限)
- 病房呼叫系统实验报告
- 2019年高考物理总复习(教科版)试题:碰撞与动量守恒综合检测含
- 小学数学四年级下册《折线统计图》教学设计
- 旅行社安全应急预案
- 公务员法律知识考试试题库(一)(含答案)
- 微机原理与接口技术实验内容及报告要求(2011年下期自动化09级)
- 录音棚的基本架构与数字录音棚构建分析
- 浅谈教师教学常规的重要性
- 网络安全知识题库小学组A
- LH-17型注水缓蚀剂安全技术说明书
- 新检测系统性能验证程序
- 第一团购源码、团购程序、团购系统源码、
- 北京80㎡的房子,用什么采暖方式最为节能节钱?
- 施工组织设计abc - 图文
- Linux复习题
- 阳光与阴影——新中国60年60篇深度报道作品精选
- 关于实行对法定不批准出境人员
- XX县食品冷链物流仓储中心项目建设可行性研究报告
- 分析化学第三版答案