找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4440|回复: 8
收起左侧

STC89C52单片机内部EEPROM程序

  [复制链接]
ID:529657 发表于 2020-7-16 18:57 | 显示全部楼层 |阅读模式
实验外部存储期间不方便 看了内部有2K的数据

代码如下 .C文件可直接移植

#include <STC89C5xRC.H>
#include <intrins.h>
#define Read   0x01                                        //读指令
#define Write  0x02                                        //写指令
#define Erase  0x03                                        //擦除指令
#define ENABLE_IAP   0x81                        //速度20Mhz
//操作完成一次之后 进入待机模式 等待下一次命令  无ISP操作
void ISP_IAP_disable(void)   
{   
    ISP_CONTR = 0x00;   
    ISP_CMD = 0x00;   
    ISP_TRIG = 0x00;   
}
//读一个字节   addr是读的地址
unsigned char ReadEeProm(unsigned int addr)
{
        unsigned char dat;
        ISP_CONTR = ENABLE_IAP;
        ISP_CMD = Read;
        ISP_ADDRH = (unsigned char)(addr>>8);
        ISP_ADDRL = (unsigned char)addr;
        ISP_TRIG = 0x46;
        ISP_TRIG = 0xB9;
        _nop_();
        ISP_IAP_disable();
        dat = ISP_DATA;
        return dat;
}
//擦除一个扇区的内容 addr擦除扇区的地址
void EraseEeProm(unsigned int addr)
{
        ISP_CONTR = ENABLE_IAP;
        ISP_CMD = Erase;
        ISP_ADDRH = (unsigned char)(addr>>8);
        ISP_ADDRL = (unsigned char)addr;
        ISP_TRIG = 0x46;
        ISP_TRIG = 0xB9;
        _nop_();
        ISP_IAP_disable();
}
//写一个字节的内容 addr地址 dat待写入数据
void WriteEeProm(unsigned int addr,unsigned char dat)
{
        //EraseEeProm(addr);    //一个字节需要先擦除这个扇区
        ISP_CONTR = ENABLE_IAP;
        ISP_CMD = Write;
        ISP_ADDRH = (unsigned char)(addr>>8);
        ISP_ADDRL = (unsigned char)addr;
        ISP_DATA = dat;
        ISP_TRIG = 0x46;
        ISP_TRIG = 0xB9;
        _nop_();
        ISP_IAP_disable();
}
//连续读多个字节 *str存储读到数据缓冲区  addr从哪个地址开始读 len读多少个字节
void Reading(unsigned char *str,unsigned int addr,unsigned char len)
{
        while(len--)
        {
                *str++ = ReadEeProm(addr++);
        }
}
void ValToString(unsigned char *str,unsigned int dat)
{
        unsigned char len = 0; //计算当前转换到多少
        unsigned char buf[5];
        do{
                buf[len] = dat%10 + '0';
                dat /=10;
                len++;
        }while(dat>0);
        
        while(len--)
        {
                *str++ = buf[len];
        }
        *str = '\0';
        
}
IMG_3416.JPG

内部EEPOM.zip

46.64 KB, 下载次数: 130, 下载积分: 黑币 -5

回复

使用道具 举报

ID:495287 发表于 2020-7-17 22:07 | 显示全部楼层
擦除保留经常用,
寄存内外多练习,
深入理解地址义,
写入读取无难题。


回复

使用道具 举报

ID:617813 发表于 2020-8-27 23:38 | 显示全部楼层
借程序一用
回复

使用道具 举报

ID:253767 发表于 2020-8-28 07:33 | 显示全部楼层
很好。谢谢分享!!!
回复

使用道具 举报

ID:161033 发表于 2021-2-20 17:13 | 显示全部楼层
没有89C52RC.h文件嘛。感谢分享。
回复

使用道具 举报

ID:883031 发表于 2021-2-20 17:49 | 显示全部楼层
好东西
回复

使用道具 举报

ID:45026 发表于 2021-5-18 17:31 | 显示全部楼层
很有用的程序,学习了,感谢!
回复

使用道具 举报

ID:95375 发表于 2021-8-28 00:05 | 显示全部楼层
谢谢分享,开始学习内部存储
回复

使用道具 举报

ID:942558 发表于 2021-11-12 08:45 | 显示全部楼层
楼主,请教一下为什么使用内部epprom后 屏幕就通讯不了了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表