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. 中新赛克数据可视化_中新赛克——能否构建更安全的世界
  2. 高端计算机教室,又一所高端学校来了,能住校师资力量强大
  3. 【Python】Matplotlib使用Cursor实现UI定位
  4. 航班管家发布《民航运行周报5.10- 5.16》
  5. (137)FPGA面试题-Verilog HDL中function和task的区别(一)
  6. 【Elasticsearch】es fielddata 字段数据
  7. 关于腾讯云服务器不能用公网ip访问的解决方案
  8. java----动态绑定
  9. java debug try catch 打印发生错误的代码的详细信息 代码行数
  10. 用人话讲明白AHP层次分析法(非常详细原理+简单工具实现)
  11. 用BT3和spoonwep2研究学习WEP密码…
  12. 极化码理论及算法研究5-SC算法及matlab仿真
  13. 手机APP测试类型与方法
  14. 【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
  15. 【狂神说笔记—— Java基础19-MyBatis】
  16. 怎么将英文文件翻译成中文
  17. Noip 2016 蛋碎一地晚节不保
  18. Createjs的控件 BitMap、MovieClip、Sprite
  19. Python-常用数据结构(字典)-Dict
  20. 如何配置一个高效的 Mac 工作环境

热门文章

  1. vue element 批量上传图片
  2. 直方图计算文章相似度
  3. Netflix Conductor 简单demo
  4. 后台返回的base64的图片格式,前端如何转为普通的图片格式
  5. textarea文本域宽度和高度(width、height)自己主动适应变化处理
  6. 学习笔记(23):MATLAB基础入门课程-左右反转fliplr
  7. 华为三层交换机命令集合,已经分好类了,网工建议收藏!
  8. 基于注意力机制的细腻度图像分类
  9. 蓝牙资讯|消息称苹果正开发 AirPods Lite 耳机
  10. 面试题 01.05. 一次编辑