STC89C52单片机内部带有4K的EEPROM,严格来说,应该是4K的FLASH,它分为8个扇区,每个扇区有512个字节。读写数据只能按字节操作,擦除数据只能按扇区操作。 由于它掉电不易失的特性,可以用来存储程序运行过程中产生的用户数据,掉电可保存。

/*
************************************************************************************
Fuction:STC89C52单片机内部4K的EEPROM操作驱动
Software Designer:Jason
************************************************************************************
*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/******************定义命令字节******************/
#define Read_COM    0x01                    //字节读数据命令
#define Prog_COM    0x02                    //字节编程数据命令
#define Erase_COM    0x03                   //扇区擦除数据命令
#define En_Wait_TIME    0x81                //设置等待时间 ,并使能ISP/IAP
#define Start_ADDRH 0x20                    //扇区地址高位
#define Start_ADDRL 0x00                    //扇区地址低位
/****************特殊功能寄存器声明****************/
sfr ISP_DATA = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD = 0xe5;
sfr ISP_TRIG = 0xe6;
sfr ISP_CONTR = 0xe7;
/*****************关闭ISP&IAP功能*****************/
void ISP_IAP_disable(void)
{
ISP_CONTR = 0x00;
ISP_CMD = 0x00;
ISP_TRIG = 0x00;
}
/*********************字节读**********************/
uchar Byte_read(uint byte_addr)
{
EA = 0;                                        //关中断
ISP_CONTR = En_Wait_TIME;                   //开启ISP&IAP,并送等待时间
ISP_CMD = Read_COM;                         //送字节读命令字
ISP_ADDRH = (uchar)(byte_addr >> 8);         //送地址高字节
ISP_ADDRL = (uchar)(byte_addr & 0x00ff);    //送地址低字节
ISP_TRIG = 0x46;                            //送触发命令字0x46
ISP_TRIG = 0xB9;                           //送触发命令字0xB9
_nop_();
ISP_IAP_disable();                          //关闭ISP&IAP功能
EA = 1;                                     //开中断
return (ISP_DATA);
}
/*********************字节编程*********************/
void Byte_program(uint byte_addr,uchar isp_iap_data)
{
EA = 0;                                     //关中断
ISP_CONTR = En_Wait_TIME;                   //开启ISP&IAP,并送等待时间
ISP_CMD = Prog_COM;                         //送字节编程命令字
ISP_ADDRH = (uchar)(byte_addr >> 8);         //送地址高字节
ISP_ADDRL = (uchar)(byte_addr & 0x00ff);    //送地址低字节
ISP_DATA = isp_iap_data;                    //送数据进ISP_DATA
ISP_TRIG = 0x46;                            //送触发命令字0x46
ISP_TRIG = 0xB9;                           //送触发命令字0xB9
_nop_();
ISP_IAP_disable();                          //关闭ISP&IAP功能
EA = 1;                                     //开中断
}
/*********************扇区擦除*********************/
void Sector_erase(uint sector_addr)
{
EA = 0;                                     //关中断
ISP_CONTR = En_Wait_TIME;                   //开启ISP&IAP;并送等待时间
ISP_CMD = Erase_COM;                        //送扇区擦除命令字
ISP_ADDRH = (uchar)(sector_addr >> 8);       //送地址高字节
ISP_ADDRL = (uchar)(sector_addr & 0X00FF); //送地址低字节
ISP_TRIG = 0X46;                            //送触发命令字0x46
ISP_TRIG = 0XB9;                           //送触发命令字0xB9
_nop_();
ISP_IAP_disable();                          //关闭ISP&IAP功能
EA = 1;
}
void main()
{
Sector_erase(0x2000);                       //扇区擦除
Byte_program(0x2000,0x88);                  //写EEPROM
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P0=Byte_read(0x2000);                      //读EEPROM
while(1);
}        

STC89C52单片机内部EEPROM驱动相关推荐

  1. pic单片机c语言读eeprom,PIC16F877单片机内部EEPROM读写实例

    ;PIC16F877单片机内部EEPROM读写实例*************************************************************************** ...

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

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

  3. 单片机系统测试c语言程序,宏晶最新1T8051单片机内部EEPROM测试C语言程序

    /* --- STC International Limited ---------------- 一个完整的EEPROM 测试程序,用宏晶的下载板可以直接测试 STC12C5AxxAD 系列单片机 ...

  4. STC89C52RC内部EEPROM编程

    这个实验的目的是通过写入一个字节到单片机内部EEPROM,然后再将该字节读取出来,赋值给8位LED端口,点亮部分LED灯. STC89C52单片机内部EEPROM 的读写过程 ISP/IAP1 写入 ...

  5. 51单片机读写内部EEPROM详解

    文档共包含三个程序. 第一个程序最简单易懂,看懂了基本就会读写51单片机内部EEPROM了. 第二个程序和第一个读写EEPROM原理差不多,包含有LCD1602操作方法,有写字符串的方法. 第三个程序 ...

  6. STC51单片机21——EEPROM测试

    STC89C51RC系列单片机内部EEPROM详细地址表: 第一扇区                   第二扇区                    第三扇区                    ...

  7. 单片机成长之路(51基础篇) - 022 N76e003 APROM模拟EEPROM驱动

    N76e003单片机内部没有EEPROM,但是可以使用 APROM模拟EEPROM功能,代码如下: eeprom.h 1 #ifndef _EEPROM_H_ 2 #define _EEPROM_H_ ...

  8. 单片机c语言实训例子基于mega16,基于AVR单片机的mega16内部EEPROM操作C语言程序设计...

    原标题:基于AVR单片机的mega16内部EEPROM操作C语言程序设计 #include #include #include #define uchar unsigned char #define ...

  9. 【SHQi——单片机系列(一)】| STC89C52单片机 | 入门向 | 单片机系列介绍

    单片机系列介绍 1.什么是单片机 单片机,全称:单片微型计算机(Single Chip Microcomputer) 英文:Micro Controller unit,简称为 MCU 是一种集成电路芯 ...

最新文章

  1. nacos动态配置数据源_Jasper 怎么配置动态数据源
  2. Linux X Window System运行原理和启动过程
  3. WCF技术剖析之二十一:WCF基本异常处理模式[中篇]
  4. shell编程之条件判断语句和流程控制语句
  5. Hive的六种UDF完整实例与使用方法汇总
  6. 三极管基本参数介绍与放大电路分析
  7. SQL Server 视图设计器
  8. JPG PNG GIF BMP图片格式的区别
  9. 【CCS2018】SDN跨应用中毒攻击
  10. 正常人一天步行走路多少为宜
  11. Jenkins+Github(Robotframework代码)
  12. 【SQL】分析函数功能-排序
  13. Gradle体验/第一篇:下装、安装、配置、体验
  14. meltdown linux 补丁,宋宝华: ARM64 Linux meltdown修复补丁KPTI的最重要3个patch
  15. 三十九级台阶java_蓝桥杯 -- 第三十九级台阶
  16. stm32实现心电监测-原理图单片机程序C#上位机程序
  17. 应用打包还是测试团队老大难问题?
  18. JAVA中map集合
  19. HTTP编程(Java爬虫-简单爬取网页数据)
  20. Arduino音乐频谱

热门文章

  1. 独立站打造一个更好的品牌形象
  2. 魔百盒刷机固件大汇总!(持续更新)
  3. mysql容器化后的缺点_沙场秋点兵——MySQL容器化性能测试对比
  4. 万用表测量 树莓派 zero 电流
  5. java ftp 教程_Java 中两种ftp操作方式
  6. 03- 目标检测数据集和标注工具介绍 (目标检测)
  7. 简单的计算机琴谱,简单的电子琴儿歌简谱
  8. c# excel转PDF
  9. COMSOL 锂离子电池仿真技术与应用
  10. 电赛-增益可控射频放大器