找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5463|回復(fù): 8
收起左側(cè)

STC89C52單片機(jī)內(nèi)部EEPROM程序

  [復(fù)制鏈接]
ID:529657 發(fā)表于 2020-7-16 18:57 | 顯示全部樓層 |閱讀模式
實(shí)驗(yàn)外部存儲(chǔ)期間不方便 看了內(nèi)部有2K的數(shù)據(jù)

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

#include <STC89C5xRC.H>
#include <intrins.h>
#define Read   0x01                                        //讀指令
#define Write  0x02                                        //寫(xiě)指令
#define Erase  0x03                                        //擦除指令
#define ENABLE_IAP   0x81                        //速度20Mhz
//操作完成一次之后 進(jìn)入待機(jī)模式 等待下一次命令  無(wú)ISP操作
void ISP_IAP_disable(void)   
{   
    ISP_CONTR = 0x00;   
    ISP_CMD = 0x00;   
    ISP_TRIG = 0x00;   
}
//讀一個(gè)字節(jié)   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;
}
//擦除一個(gè)扇區(qū)的內(nèi)容 addr擦除扇區(qū)的地址
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();
}
//寫(xiě)一個(gè)字節(jié)的內(nèi)容 addr地址 dat待寫(xiě)入數(shù)據(jù)
void WriteEeProm(unsigned int addr,unsigned char dat)
{
        //EraseEeProm(addr);    //一個(gè)字節(jié)需要先擦除這個(gè)扇區(qū)
        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();
}
//連續(xù)讀多個(gè)字節(jié) *str存儲(chǔ)讀到數(shù)據(jù)緩沖區(qū)  addr從哪個(gè)地址開(kāi)始讀 len讀多少個(gè)字節(jié)
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; //計(jì)算當(dāng)前轉(zhuǎn)換到多少
        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

內(nèi)部EEPOM.zip

46.64 KB, 下載次數(shù): 135, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報(bào)

ID:495287 發(fā)表于 2020-7-17 22:07 | 顯示全部樓層
擦除保留經(jīng)常用,
寄存內(nèi)外多練習(xí),
深入理解地址義,
寫(xiě)入讀取無(wú)難題。


回復(fù)

使用道具 舉報(bào)

ID:617813 發(fā)表于 2020-8-27 23:38 | 顯示全部樓層
借程序一用
回復(fù)

使用道具 舉報(bào)

ID:253767 發(fā)表于 2020-8-28 07:33 | 顯示全部樓層
很好。謝謝分享。。
回復(fù)

使用道具 舉報(bào)

ID:161033 發(fā)表于 2021-2-20 17:13 | 顯示全部樓層
沒(méi)有89C52RC.h文件嘛。感謝分享。
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2021-2-20 17:49 | 顯示全部樓層
好東西
回復(fù)

使用道具 舉報(bào)

ID:45026 發(fā)表于 2021-5-18 17:31 | 顯示全部樓層
很有用的程序,學(xué)習(xí)了,感謝!
回復(fù)

使用道具 舉報(bào)

ID:95375 發(fā)表于 2021-8-28 00:05 | 顯示全部樓層
謝謝分享,開(kāi)始學(xué)習(xí)內(nèi)部存儲(chǔ)
回復(fù)

使用道具 舉報(bào)

ID:942558 發(fā)表于 2021-11-12 08:45 | 顯示全部樓層
樓主,請(qǐng)教一下為什么使用內(nèi)部epprom后 屏幕就通訊不了了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表