首页 stc eeprom字符型数组写操纵子法度模范(带扇区擦除爱惜)[精彩]

stc eeprom字符型数组写操纵子法度模范(带扇区擦除爱惜)[精彩]

举报
开通vip

stc eeprom字符型数组写操纵子法度模范(带扇区擦除爱惜)[精彩]stc eeprom字符型数组写操纵子法度模范(带扇区擦除爱惜)[精彩] #include "STC_NEW_8051.H" //需要上stc官网下载此头文件 #include /* use _nop_() function */ #include /* use _nop_() function */ //sfr16 DPTR = 0x82; /* 新增特殊功能寄存器定义 */ sfr ISP_DATA = 0xe2; sfr ISP_ADDRH = 0xe3; sfr ISP_ADDRL = 0xe4...

stc eeprom字符型数组写操纵子法度模范(带扇区擦除爱惜)[精彩]
stc eeprom字符型数组写操纵子法度模范(带扇区擦除爱惜)[精彩] #include "STC_NEW_8051.H" //需要上stc官网下载此头文件 #include /* use _nop_() function */ #include /* use _nop_() function */ //sfr16 DPTR = 0x82; /* 新增特殊功能寄存器定义 */ sfr ISP_DATA = 0xe2; sfr ISP_ADDRH = 0xe3; sfr ISP_ADDRL = 0xe4; sfr ISP_CMD = 0xe5; sfr ISP_TRIG = 0xe6; sfr ISP_CONTR = 0xe7; /* 定义命令 */ #define ENABLE_ISP 0x84 /* IAP功能使能 */ #define READ_Command 0x01 /* 字节读数据存储区 */ #define PROGRAM_Command 0x02 /* 字节编程数据存储区 */ #define ERASE_Command 0x03 /* 扇区擦除数据存储区 */ typedef unsigned char INT8U; /* 8 bit 无符号整型 */ typedef unsigned int INT16U; /* 16 bit 无符号整型 */ void IAP_Disable(); void Sector_Erase(INT16U add); void Array_Program(INT16U add,INT8U Array[],INT8U n,INT8U m); INT8U Byte_Read(INT16U add); void IAP_Disable() { //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 IAP_CONTR = 0; //关闭IAP 功能 IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用 IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用 IAP_ADDRH = 0; IAP_ADDRL = 0; } //擦除扇区, 入口:DPTR = 扇区地址 void Sector_Erase(INT16U add) { IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = ERASE_Command ; //IAP/ISP/EEPROM 扇区擦除命令 IAP_ADDRH = (add>>8); //设置目标单元地址的高8 位地址 IAP_ADDRL = add&0xff; //设置目标单元地址的低8 位地址 //EA = 0; IAP_TRIG = 0x46; //先送 46h,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; //送完B9h 后,ISP/IAP 命令立即被触发起动 _nop_(); //EA = 1; IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 } //数组编程,add是数组首地址, array是数组内容,n是数组在eeprom中的第一位, //m是数组在eeprom中的最后一位 void Array_Program(INT16U add,INT8U Array[],INT8U n,INT8U m) { INT8U i, Protect_Array[16]; for(i=0;i<16;i++)//该例子只使用到地址0x2E00到0x2E00+15 { IAP_DATA = 0x00; IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = READ_Command; //IAP/ISP/EEPROM 字节读命令 IAP_ADDRH = ((0x2E00+i)>>8); //设置目标单元地址的高8 位地址 IAP_ADDRL = (0x2E00+i)&0xff; //设置目标单元地址的低8 位地址 IAP_TRIG = 0x46; //先送 46h,再送b9h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; //送完b9h 后,ISP/IAP 命令立即被触发起动 _nop_(); Protect_Array[i]=IAP_DATA;//将EEPROM中的数据存入Protect_Array中 } IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, Sector_Erase(add);//删除EEPROM中地址为add所在的扇区 for(i=n;i<=m;i++){ Protect_Array[i]=Array[i-n];}//将要写入的数组Array存入到Protect_Array的n到m位中, IAP_CONTR = ENABLE_ISP; //打开 IAP 功能, 设置Flash操作等待时间 IAP_CMD = PROGRAM_Command; //IAP/ISP/EEPROM 字节编程命令 for(i=0;i<16;i++) { IAP_ADDRH = ((0x2E00+i)>>8); //设置目标单元地址的高8 位地址 IAP_ADDRL = (0x2E00+i)&0xff; //设置目标单元地址的低8 位地址 IAP_DATA = Protect_Array[i]; //要编程的数据先送进IAP_DATA 寄存器 IAP_TRIG = 0x46; //先送 46h,再送b9h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; //送完b9h 后,ISP/IAP 命令立即被触发起动 _nop_(); } IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 } //读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节 INT8U Byte_Read(INT16U add) { IAP_DATA = 0x00; IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = READ_Command; //IAP/ISP/EEPROM 字节读命令 IAP_ADDRH = (add>>8); //设置目标单元地址的高8 位地址 IAP_ADDRL = add&0xff; //设置目标单元地址的低8 位地址 //EA = 0; IAP_TRIG = 0x46; //先送 46h,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; //送完B9h 后,ISP/IAP 命令立即被触发起动 _nop_(); //EA = 1; IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 return (IAP_DATA);
本文档为【stc eeprom字符型数组写操纵子法度模范&#40;带扇区擦除爱惜&#41;[精彩]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_591137
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-12-07
浏览量:8