EEPROM应用程序设计

来源:本站
导读:目前正在解读《EEPROM应用程序设计》的相关信息,《EEPROM应用程序设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《EEPROM应用程序设计》的详细说明。
简介:实现功能:EEPROM应用程序
使用芯片:STC15F104E
晶振:12MHZ
编译环境:Keil

/********************************************************************实现功能:EEPROM应用程序使用芯片:STC15F104E晶振:12MHZ编译环境:Keil*********************************************************************//********************************************************************/#include "reg52.h" #include <intrins.H>#define uchar unsigned char //宏定义字符型变量#define uint  unsigned int  //宏定义整型变量/********************************************************************                            寄存器设置*********************************************************************/ sfr IAP_DATA  =0xc2;     //数据寄存器sfr IAP_ADDRH =0xc3;     //地址寄存器sfr IAP_ADDRL =0xc4;     //地址寄存器sfr IAP_CMD   =0xc5;     //命令寄存器sfr IAP_TRIG  =0xc6;     //触发寄存器sfr IAP_CONTR =0xc7;     //擦除寄存器sbit  P33=P3^3;          //定义继电器控制输出脚/********************************************************************                            命令定义*********************************************************************/#define CMD_IDLE     0   //EEPROM无操作#define CMD_READ     1   //读取字节#define CMD_PROGRAM  2   //写入字节#define CMD_ERASE    3   //擦除字节/********************************************************************                       编程周期由晶振决定*********************************************************************///#define ENABLE_IAP 0X80    //编程周期由晶振决定(如果<30MHZ选用此项)//#define ENABLE_IAP 0X81    //编程周期由晶振决定(如果<24MHZ选用此项)//#define ENABLE_IAP 0X82    //编程周期由晶振决定(如果<20MHZ选用此项)  #define ENABLE_IAP 0X83    //编程周期由晶振决定(如果<12MHZ选用此项)//#define ENABLE_IAP 0X84    //编程周期由晶振决定(如果<6MHZ选用此项)//#define ENABLE_IAP 0X85    //编程周期由晶振决定(如果<3MHZ选用此项)//#define ENABLE_IAP 0X86    //编程周期由晶振决定(如果<2MHZ选用此项)//#define ENABLE_IAP 0X87    //编程周期由晶振决定(如果<1MHZ选用此项)#define IAP_ADDRESS 0X0000   //内部EEPROM地址/********************************************************************                       函数初始化*********************************************************************/void Delay(uchar n);             //延时函数void IapIdle();              //操作函数uchar IapReadByte(uint addr); //读取函数void IapProgramByte(uint addr,uchar dat); //写入函数void IapEraseSector(uint addr); //擦除函数/********************************************************************                            主函数*********************************************************************/void main(){ uint i; //定义整型变量i P33=0; Delay(10);//延时 IapEraseSector(IAP_ADDRESS);  //擦除扇区 for(i=0;i<512;i++)            //擦除512个字节的扇区 {   if(IapReadByte(IAP_ADDRESS+i)!=0xff)//判断是否完全擦除   goto Error;                         //如果没有擦除跳转到报错位置  }Delay(10); //延时for(i=0;i<512;i++)//对512个字节进行数据写入{IapProgramByte(IAP_ADDRESS+i,(uchar)i);  //写入数据} Delay(10);//延时 for(i=0;i<512;i++)//读取512个字节的数据 {   if(IapReadByte(IAP_ADDRESS+i)!=(uchar)i)//判断数据是否完整   goto Error;                             //如果没有擦除跳转到报错位置  }while(1);  //循环一次Error:     //错误标志位P33=1;     //如果错误执行此操作while(1);  //循环一次}/********************************************************************                            延时函数*********************************************************************/void Delay(uchar n){ uint x; while(n--) { x=0; while(++x); }}/********************************************************************                            操作函数*********************************************************************/void IapIdle(){IAP_CONTR=0;IAP_CMD=0;IAP_TRIG=0;IAP_ADDRH=0X80;IAP_ADDRL=0;}/********************************************************************                            读取一个字节函数*********************************************************************/uchar IapReadByte(uint addr){uchar dat;  IAP_CONTR=ENABLE_IAP;IAP_CMD=CMD_READ;IAP_ADDRL=addr;IAP_ADDRH=addr>>8;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();dat=IAP_DATA;IapIdle();return dat;}/********************************************************************                            写入一个字节函数*********************************************************************/void IapProgramByte(uint addr,uchar dat){IAP_CONTR=ENABLE_IAP;IAP_CMD=CMD_PROGRAM;IAP_ADDRL=addr;IAP_ADDRH=addr>>8;IAP_DATA=dat;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();IapIdle();}/********************************************************************                            擦除一个字节函数*********************************************************************/void IapEraseSector(uint addr){IAP_CONTR=ENABLE_IAP;IAP_CMD=CMD_ERASE;IAP_ADDRL=addr;IAP_ADDRH=addr>>8;IAP_TRIG=0X5A;IAP_TRIG=0XA5;_nop_();_nop_();_nop_();IapIdle();} /********************************************************************                            结束*********************************************************************/

提醒:《EEPROM应用程序设计》最后刷新时间 2024-03-14 01:02:37,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《EEPROM应用程序设计》该内容的真实性请自行鉴别。