1测试程序

/*
单片机内置的 EEPROM测试程序
适用
STC89C51
STC89C52
STC89C53
STC89C54
STC89C58
STC89C510
STC89C512
STC89C514测试晶振:11.05926M 12M 都可以用 功能:
读取指定地址的一个字节内容,并显示在8 P1总线上擦除一个扇区,修改取指定地址的一个字节内容,并显示在8 P1总线上*/#include <reg51.h>
#include <intrins.h>/******************EEPROM用到的sfr中的寄存器地址stc型号不同地址不同*****************************************/
sfr IAP_DATA    = 0xE2;   //IAP操作时的数据寄存器(从flash读数据和写数据都在此处)
sfr IAP_ADDRH   = 0xE3;   //IAP操作时的地址寄存器高8位
sfr IAP_ADDRL   = 0xE4;   // IAP操作时的地址寄存器低8位
sfr IAP_CMD     = 0xE5; //IAP命令模式寄存器(需命令触发寄存器触发方生效)3种模式
sfr IAP_TRIG    = 0xE6; //IAP命令触发寄存器,在IAP_CONTR.7=1时;对IAP_TRIG先写//入46h,再写入B9h,IAP命令生效
sfr IAP_CONTR   = 0xE7; //IAP控制寄存器/***********定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数(属于IAP_CONTR寄存器)***********/
#define ENABLE_ISP 0x82     //实测  12M  11.0592M 都可以使用void DELAY_MS (unsigned int a)
{unsigned int i;while ( --a != 0 ){for (i=0;i<=110;i++);}
}/*************关闭IAP功能子程序*****************************/
void IAP_Disable()      //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
{                       //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关    IAP_CONTR = 0;      //关闭IAP 功能IAP_CMD   = 0;      //清命令寄存器,使命令寄存器无命令,此句可不用IAP_TRIG = 0;       //清命令触发寄存器,使命令触发寄存器无触发,此句可不用IAP_ADDRH = 0;      //高八位地址清0IAP_ADDRL = 0;      //低八位地址清0
}/**********EEPROM读一字节子程序***********************/
unsigned char Byte_Read(unsigned int add)      //读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
{IAP_DATA = 0x00;             //IAP数据寄存器清0IAP_CONTR = ENABLE_ISP;      //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x01;              //IAP/ISP/EEPROM 字节读命令IAP_ADDRH = (unsigned char)(add>>8);    //设置目标单元地址的高8 位地址IAP_ADDRL = (unsigned char)(add&0xff);    //设置目标单元地址的低8 位地址EA = 0;IAP_TRIG = 0x46;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9;   //送完 B9h 后,ISP/IAP 命令立即被触发起动_nop_();EA = 1;IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关return (IAP_DATA);
}/************EEPROM字节编程子程序**************************/
void Byte_Program(unsigned int add,unsigned char ch)  //字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
{IAP_CONTR = ENABLE_ISP;         //打开 IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字节编程命令IAP_ADDRH = (unsigned char)(add>>8);    //设置目标单元地址的高8 位地址IAP_ADDRL = (unsigned char)(add&0xff);    //设置目标单元地址的低8 位地址IAP_DATA = ch;                  //要编程的数据先送进IAP_DATA 寄存器EA = 0;IAP_TRIG = 0x46;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9;   //送完 B9h 后,ISP/IAP 命令立即被触发起动_nop_();EA = 1;IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}/*************EEPROM擦除扇区子程序**************************/
void Sector_Erase(unsigned int add)       //擦除扇区, 入口:DPTR = 扇区地址
{IAP_CONTR = ENABLE_ISP;         //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x03;                 //IAP/ISP/EEPROM 扇区擦除命令IAP_ADDRH = (unsigned char)(add>>8);    //设置目标单元地址的高8 位地址IAP_ADDRL = (unsigned char)(add&0xff);    //设置目标单元地址的低8 位地址EA = 0;IAP_TRIG = 0x46;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9;   //送完 B9h 后,ISP/IAP 命令立即被触发起动_nop_();EA = 1;IAP_Disable();     //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}void main (void){unsigned char mydata  = 0x0F;
unsigned int  address = 0x2000;P1 = Byte_Read(address);     //读取当前地址存储的8个bit,并显示出来
DELAY_MS(1000);Sector_Erase(address);       //擦除这个地址所在的扇区
Byte_Program(address,mydata);//写入新的8个bit
P1 = Byte_Read(address);      //读取当前地址存储的8个bit,并显示出来while(1);
}

2证明程序

/*
单片机内置的 EEPROM测试程序
适用
STC89C51
STC89C52
STC89C53
STC89C54
STC89C58
STC89C510
STC89C512
STC89C514测试晶振:11.05926M 12M 都可以用 功能:
读取指定地址的一个字节内容,并显示在8 P1总线上擦除一个扇区,修改取指定地址的一个字节内容,并显示在8 P1总线上*/#include <reg51.h>
#include <intrins.h>/******************EEPROM用到的sfr中的寄存器地址stc型号不同地址不同*****************************************/
sfr IAP_DATA    = 0xE2;   //IAP操作时的数据寄存器(从flash读数据和写数据都在此处)
sfr IAP_ADDRH   = 0xE3;   //IAP操作时的地址寄存器高8位
sfr IAP_ADDRL   = 0xE4;   // IAP操作时的地址寄存器低8位
sfr IAP_CMD     = 0xE5; //IAP命令模式寄存器(需命令触发寄存器触发方生效)3种模式
sfr IAP_TRIG    = 0xE6; //IAP命令触发寄存器,在IAP_CONTR.7=1时;对IAP_TRIG先写//入46h,再写入B9h,IAP命令生效
sfr IAP_CONTR   = 0xE7; //IAP控制寄存器/***********定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数(属于IAP_CONTR寄存器)***********/
#define ENABLE_ISP 0x82     //实测  12M  11.0592M 都可以使用void DELAY_MS (unsigned int a)
{unsigned int i;while ( --a != 0 ){for (i=0;i<=110;i++);}
}/*************关闭IAP功能子程序*****************************/
void IAP_Disable()      //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
{                       //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关    IAP_CONTR = 0;      //关闭IAP 功能IAP_CMD   = 0;      //清命令寄存器,使命令寄存器无命令,此句可不用IAP_TRIG = 0;       //清命令触发寄存器,使命令触发寄存器无触发,此句可不用IAP_ADDRH = 0;      //高八位地址清0IAP_ADDRL = 0;      //低八位地址清0
}/**********EEPROM读一字节子程序***********************/
unsigned char Byte_Read(unsigned int add)      //读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
{IAP_DATA = 0x00;             //IAP数据寄存器清0IAP_CONTR = ENABLE_ISP;      //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x01;              //IAP/ISP/EEPROM 字节读命令IAP_ADDRH = (unsigned char)(add>>8);    //设置目标单元地址的高8 位地址IAP_ADDRL = (unsigned char)(add&0xff);    //设置目标单元地址的低8 位地址EA = 0;IAP_TRIG = 0x46;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9;   //送完 B9h 后,ISP/IAP 命令立即被触发起动_nop_();EA = 1;IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关return (IAP_DATA);
}/************EEPROM字节编程子程序**************************/
void Byte_Program(unsigned int add,unsigned char ch)  //字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
{IAP_CONTR = ENABLE_ISP;         //打开 IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字节编程命令IAP_ADDRH = (unsigned char)(add>>8);    //设置目标单元地址的高8 位地址IAP_ADDRL = (unsigned char)(add&0xff);    //设置目标单元地址的低8 位地址IAP_DATA = ch;                  //要编程的数据先送进IAP_DATA 寄存器EA = 0;IAP_TRIG = 0x46;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9;   //送完 B9h 后,ISP/IAP 命令立即被触发起动_nop_();EA = 1;IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}/*************EEPROM擦除扇区子程序**************************/
void Sector_Erase(unsigned int add)       //擦除扇区, 入口:DPTR = 扇区地址
{IAP_CONTR = ENABLE_ISP;         //打开IAP 功能, 设置Flash 操作等待时间IAP_CMD = 0x03;                 //IAP/ISP/EEPROM 扇区擦除命令IAP_ADDRH = (unsigned char)(add>>8);    //设置目标单元地址的高8 位地址IAP_ADDRL = (unsigned char)(add&0xff);    //设置目标单元地址的低8 位地址EA = 0;IAP_TRIG = 0x46;   //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xB9;   //送完 B9h 后,ISP/IAP 命令立即被触发起动_nop_();EA = 1;IAP_Disable();     //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}void main (void){unsigned char mydata1  = 0xF0;
unsigned char mydata2  = 0x0F;
unsigned int  address1 = 0x2000;
unsigned int  address2 = 0x21FF;Sector_Erase(address1);        //为了数据的写入
Byte_Program(address1,mydata1);
Byte_Program(address2,mydata2);P1 = Byte_Read(address1);     //显示出来
DELAY_MS(500);
P1 = Byte_Read(address2);     //显示出来
DELAY_MS(500); //Sector_Erase(address1);       //无论是擦除address1还是address2
Sector_Erase(address2);
P1 = Byte_Read(address1);     //读取到的是0xFF
DELAY_MS(500);
P1 = Byte_Read(address2);     //读取到的是0xFF
DELAY_MS(500); /*
可以证明:
A和B属于用一个扇区
擦除A或者B 字节的地址
再次读取A或B 都已经改变为0xFF
*/while(1);
}

转载于:https://my.oschina.net/u/3776585/blog/1616776

STC89C51系列 EEPROM测试程序 证明扇区512个字节的擦除相关推荐

  1. STC系列单片机内部EEPROM 测试程序

    硬件电路: P1口接8个LED到VCC. 适用硬件: STC12C2052系列(杜洋工作室改进部分) STC12C5AxxAD系列单片机 STC12C52xxAD系列单片机 STC11xx系列单片机 ...

  2. STM32L0 系列 EEPROM 读写,程序卡死?

    STM32L0 系列EEPROM读写,使用过程必须注意到的问题,踩坑史 = =!......by 矜辰所致 目录 前言 一.写入地址问题 二.写入时候容易死机问题 2.1 问题的原因 2.2 问题的解 ...

  3. 初学24CXX系列EEPROM使用详解STM32库函数I2C总线

    24CXX系列芯片属于EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存 ...

  4. stc89C51系列单片机介绍

    STC89C51 是一款基于 8051 内核的高性价比单片机,由国内的 STC 微电子公司生产.STC89C51 系列单片机的特点是具有高速运行.丰富的外设接口.广泛的应用领域等优点.本文将从以下几个 ...

  5. 开发STC89C51系列单片机需要的单片机技术

    文章目录 1. 端口操作 1.1. 设置端口方向 1.2. 读取端口状态 1.3. 控制端口状态 1.4. 实现按键检测 2. 中断处理 2.1. 定时器/计数器中断 2.2. 外部中断 2.3. 串 ...

  6. 开发STC89C51系列单片机需要用到的C语言技术

    文章目录 1. 概述 2. 数据类型 2.1 整数类型 2.2 浮点类型 2.3 无符号类型 3. 控制语句 3.1 分支语句 3.2 循环语句 4. 数组 7. 中断 8. 延时 1. 概述 STC ...

  7. 硬盘检测 Victoria教程:每个扇区512byte(现在新的硬盘每个扇区有4K)一个块是4K(4096)扇区,1个块由连续的8个扇区组成。Victoria扫描常选块由2048扇区每扇区512字节

    一.注意事项 1. 下载完成后不要在压缩包内运行软件直接使用,先解压: 2. 如果软件无法正常打开,请右键使用管理员模式运行. 3. 为确保检测结果准确 (避免卡深灰块),运行 Victoria 检测 ...

  8. AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序

    一.概述 EEPROM是嵌入式开发中比较常用的芯片,用来保存参数及掉电记忆的数据等,最常用的是ATMEL的AT24Cxx系列的IIC接口,也有其他厂家的如罗姆Rohm的BR24Gxx系列.ST的M24 ...

  9. 【组件】24系列EEPROM/FRAM通用接口

    1.写在前面   "24系列"的EEPROM,一般地我们认为是以i2c为通信接口的一系列串行EEPROM,各大半导体厂商出产的该系列EEPROM都遵循这个规则,而且电路和控制程序上 ...

  10. 汇编语言SD24系列功能测试程序

    ;=============================================================================== ; SD24系列功能测试程序 ; 本程 ...

最新文章

  1. Django MTV结构分析
  2. 现金流为王!中小企业如何“疫”境求生?
  3. AngularJS中关于ng-class和*ngIf指令
  4. go语言基础之工程管理和工作区介绍
  5. 小程序css之字体镂空
  6. (78)Verilog HDL条件编译:`ifdef
  7. Json.Net学习笔记(十二) 协议解析
  8. php-5.6.31安装视频教程_php安装图解教程
  9. 状态规划P4270小奇挖矿2
  10. js foreach用法_36 个JS 面试题为你助力金九银十(面试必读)
  11. Fire Net C++
  12. vmware安装dsm7.0
  13. c语言教程免费ppt,《C语言教程》PPT课件.ppt
  14. Windows安装--拼音分词器
  15. 学习能力篇:“拼图式”学习法
  16. 拼多多商品详情查询V1新版接口
  17. RVB2601应用开发实战系列六:网络播放器设计(二)
  18. c语言程序如何在keil中运行,keil c51中C程序的启动过程
  19. C++多线程详细讲解
  20. 【BI学习心得13-淘宝定向广告演化与天猫用户复购预测】

热门文章

  1. CPE/CPA/CPL/CPC/CPM/CPO/CPS/CPV/CPT/CPP广告
  2. 一个程序员的成长之路(持续更新)
  3. 搜题公众号题库对接教程
  4. python怎么注释作者_python作者注释
  5. Centos7 下配置Samba服务器---犯二的经历
  6. 为什么计算机桌面图标不见了,为什么电脑桌面上的图标全不见了?
  7. 华为云OBS数据桶使用
  8. 电脑桌面没有计算机图标鼠标也点不起来,电脑桌面上的图标不见了,鼠标也没用了该怎么办呢?...
  9. 判断邮箱格式是否正确
  10. Inrie(洪晓军)