EEPRO使用多个扇区.docx_第1页
EEPRO使用多个扇区.docx_第2页
EEPRO使用多个扇区.docx_第3页
EEPRO使用多个扇区.docx_第4页
EEPRO使用多个扇区.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*存贮多个变量两个long型和一个char型(long型的转换成4个char型)用两个不同的按键控制显示存贮的值*/#include #include typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;#define led_port P0 sbit dm=P23;/数码管控制芯片段码控制位sbit wm=P22;/数码管控制芯片位码控制位sbit gn=P20;sbit gn1=P21;ulong a,a1,v,v1;/uchar a;uchar temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;bit bz1,bz2;uchar code dxian=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/数码显示区0-9uchar code wxian=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/选通哪位数码管控制位uchar bcd8;/数码管bcd码缓冲区void delay(uint t);/延时函数声明void bin_bcd();/bcd分离函数void smxs();/数码管显示函数void anjian();/掉电保持寄存器申明sfr IAP_DATA=0xe2; sfr IAP_ADDRH=0xe3;sfr IAP_ADDRL=0xe4;sfr IAP_CMD=0xe5;sfr IAP_TRIG=0xe6;sfr IAP_CONTR=0xe7;#define CMD_IDLE0#define CMD_READ1#define CMD_PROGRAM2#define CMD_ERASE3/定义Flash操作等待时间及允许IAP/ISP/EEPROM操作的常数/#define ENABLE_IAP 0x82/系统工作时钟20MHZ#define ENABLE_IAP 0x83/系统工作时钟40MHZ#define IAP_ADDRESS 0x2000#define IAP_ADDRESS1 0x2200void cc(uint addr);/ 擦除某一扇区void xcx(uint addr,uchar dat);/ 写一字节uchar dcx(uint addr);/ 读一字节void GB_IAP();/关闭IAP/IAP操作void delay(uint t)while(-t);void smxs()uchar i;for(i=0;i24)&0xff;temp2=(a16)&0xff;temp3=(a8)&0xff;temp4=a&0xff;void xs8_32()a = (ulong)(temp1)24)|(ulong)(temp2)16)|(ulong)(temp3)24)&0xff;temp6=(a116)&0xff;temp7=(a18)&0xff;temp8=a1&0xff;void xs8_321()a1 = (ulong)(temp5)24)|(ulong)(temp6)16)|(ulong)(temp7)8)|temp8;/*函数:主程序*/void main(void)uchar num;temp1=dcx(IAP_ADDRESS);temp2=dcx(IAP_ADDRESS+1);temp3=dcx(IAP_ADDRESS+2);temp4=dcx(IAP_ADDRESS+3);num=dcx(IAP_ADDRESS+4);temp5=dcx(IAP_ADDRESS1+5);temp6=dcx(IAP_ADDRESS1+6);temp7=dcx(IAP_ADDRESS1+7);temp8=dcx(IAP_ADDRESS1+8);num+;a=222222+num;a1=333333+num;xs32_81();/long型转成char型xs32_8();cc(IAP_ADDRESS); / 擦除第1个扇区(2000h21FFh)xcx(IAP_ADDRESS,temp1);xcx(IAP_ADDRESS+1,temp2); / 对EEPROM区2001h写入xcx(IAP_ADDRESS+2,temp3);xcx(IAP_ADDRESS+3,temp4);xcx(IAP_ADDRESS+4,num);cc(IAP_ADDRESS1);xcx(IAP_ADDRESS1+5,temp5);xcx(IAP_ADDRESS1+6,temp6);xcx(IAP_ADDRESS1+7,temp7);xcx(IAP_ADDRESS1+8,temp8);xs8_32(); /char型转成long型xs8_321();while(1) anjian();if(bz1=1)bin_bcd();if(bz2=1)bin_bcd1();smxs();void anjian()bit bzjia,bzjian,djia,djian;gn=1;gn1=1;/置1djia=gn;/读状态djian=gn1;if(djia!=1)if(bzjia!=1)bzjia=1;bz1=1;bz2=0;if(djia=1)bzjia=0;if(djian!=1)if(bzjian!=1)bzjian=1;bz1=0;bz2=1;if(djian=1)bzjian=0;/*函数:擦除某一扇区(每个扇区512字节)入口:addr = 某一扇区首地址 */void cc(uint addr) / 0x83(晶振5M) 0x82(晶振10M) 0x81(晶振20M) 0x80(晶振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(); / 关闭IAP/IAP/*函数:写一字节入口:addr = 扇区单元地址 , dat = 待写入数据*/void xcx(uint addr,uchar dat) IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_PROGRAM; / 用户可以对Data Flash/EEPROM区进行字节编程 IAP_ADDRL = addr; IAP_ADDRH = addr8; IAP_DATA = dat; / 数据进IAP_DATA /EA = 0; IAP_TRIG = 0x46; IAP_TRIG = 0xB9; /_nop_(); GB_IAP(); / 关闭IAP/IAP/*函数:读一字节入口:addr = 扇区单元地址出口:dat = 读出的数据*/uchar dcx(uint addr) uchar dat;IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_READ; / 用户可以对Data Flash/EEPROM区进行字节读 IAP_ADDRL = addr; IAP_ADDRH = addr8; /EA = 0; IAP_TRIG = 0x46; IAP_TRIG = 0xB9; /_nop_(); dat = IAP_DATA; / 取出数据GB_IAP(); / 关闭IAP/IAP r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论