jkm99的個(gè)人空間 http://selenalain.com/space-uid-71395.html [收藏] [復制] [RSS]

博客

STC89C52RC 內部EEPROM讀寫(xiě)操作

已有 3046 次閱讀2013-6-8 19:59 |個(gè)人分類(lèi):單片機| STC89C52, EEPROM

#ifndef EEPROM_H
#define EEPROM_H
#include "common.h"
sfr ISP_DATA = 0xe2;  //寄存器申明
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD = 0xe5;
sfr ISP_TRIG = 0xe6;
sfr ISP_CONTR = 0xe7;

void eepromErase(uint addr);
void eepromWriteByte(uint addr, uchar dat);
uchar eepromReadByte(uint addr);
void eepromClose(void);

#endif
/**************************************************/
#include "eeprom.h"
#include <reg52.h>
#include <intrins.h>
/*STC89C52RC內部EEPROM詳細地址表*/
/*===========================================================================================
第一扇區                   第二扇區                    第三扇區               第四扇區
起始地址  結束地址     起始地址   結束地址      起始地址   結束地址      起始地址    結束地址
2000h      21FFh       2200h       23FFh        2400h       25FFh        2600h        27FFH
==============================================================================================
第五扇區                    第六扇區                   第七扇區              第八扇區
起始地址   結束地址    起始地址   結束地址      起始地址   結束地址    起始地址    結束地址
2800h       29FFh       2A00h      2BFFh        2C00h      2DFFh        2E00h        2FFFh
==============================================================================================*/

/*
擦除某一扇區(每個(gè)扇區512字節)
入口:addr = 某一扇區首地址*/
void eepromErase(uint addr)

// 打開(kāi) IAP 功能(ISP_CONTR.7)=1:允許編程改變Flash, 設置Flash操作等待時(shí)間
// 0x83(晶振<5M)   0x82(晶振<10M)   0x81(晶振<20M)   0x80(晶振<40M)
 ISP_CONTR = 0x81; 
 ISP_CMD = 0x03; //用戶(hù)可以對"Data Flash/EEPROM區"進(jìn)行扇區擦除
 ISP_ADDRL = addr; // ISP/IAP操作時(shí)的地址寄存器低八位,
 ISP_ADDRH = addr>>8; // ISP/IAP操作時(shí)的地址寄存器高八位。  
 ISP_TRIG = 0x46;  // 在ISPEN(ISP_CONTR.7)=1時(shí),對ISP_TRIG先寫(xiě)入46h,
 ISP_TRIG = 0xB9;  // 再寫(xiě)入B9h,ISP/IAP命令才會(huì )生效。
 _nop_();
 eepromClose();  // 關(guān)閉ISP/IAP
}

/*寫(xiě)一字節
入口:addr = 扇區單元地址 , dat = 待寫(xiě)入數據*/
void eepromWriteByte(uint addr, uchar dat)
{
 ISP_CONTR = 0x81;   
 ISP_CMD = 0x02; //用戶(hù)可以對"Data Flash/EEPROM區"進(jìn)行字節編程
 ISP_ADDRL = addr;       
 ISP_ADDRH = addr>>8;     
 ISP_DATA  = dat; //數據進(jìn)ISP_DATA
 ISP_TRIG = 0x46;         
 ISP_TRIG = 0xB9;         
 _nop_();
 eepromClose(); //關(guān)閉ISP/IAP
}

/*讀一字節
入口:addr = 扇區單元地址
出口:dat  = 讀出的數據*/
uchar eepromReadByte(uint addr)
{  
 uchar dat;
 ISP_CONTR = 0x81;   
 ISP_CMD = 0x01;   // 用戶(hù)可以對"Data Flash/EEPROM區"進(jìn)行字節讀
 ISP_ADDRL = addr;        
 ISP_ADDRH = addr>>8;     
 ISP_TRIG = 0x46;         
 ISP_TRIG = 0xB9;         
 _nop_();
 dat = ISP_DATA; // 取出數據
 eepromClose(); // 關(guān)閉ISP/IAP           
 return dat;
}
/*關(guān)閉ISP/IAP操作*/
void eepromClose(void)
{
 ISP_CONTR = 0; // 關(guān)閉IAP功能
 ISP_CMD = 0; // 待機模式,無(wú)ISP操作
 ISP_TRIG = 0; // 關(guān)閉IAP功能, 清與ISP有關(guān)的特殊功能寄存器
 ISP_ADDRH = 0x80;
 ISP_ADDRL = 0;
}
 
 
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页