久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
stc單片機(jī)IAP讀寫規(guī)則
[打印本頁(yè)]
作者:
hujia
時(shí)間:
2015-2-18 00:58
標(biāo)題:
stc單片機(jī)IAP讀寫規(guī)則
/*IAP讀寫規(guī)則******************************************
1:EEPROM讀取沒有規(guī)則,按地址讀取就可以了.
2:并不需要按地址順序讀取和寫入,兩種操作都可以設(shè)置隨機(jī)地址.
3:除非進(jìn)行IAP過(guò)程,否則寫入EEPROM的數(shù)據(jù)即使在刷程序后仍然存
在.
4:寫操作時(shí),如果當(dāng)前地址已經(jīng)寫入過(guò)一次,則沒有進(jìn)行擦除操作時(shí)
,寫操作將在原數(shù)據(jù)上疊加,結(jié)果會(huì)造成讀取錯(cuò)誤.
5:擦除操作的地址是扇區(qū)地址,而非字節(jié)地址,例如60S2有兩個(gè)扇區(qū)
,擦除0x0000H將擦除從0x0000H到0x01FFH的所有512字節(jié)數(shù)據(jù)擦
除0x0001H將擦除從0x0200H到0x03FFH地址內(nèi)的所有數(shù)據(jù)
******************************************************/
#include "intrins.h"
//IAP相關(guān)端口定義(備忘,不須寫)
/*
sfr IAP_DATA = 0xC2; //Flash 數(shù)據(jù)寄存器
sfr IAP_ADDRH = 0xC3; //Flash 高位地址
sfr IAP_ADDRL = 0xC4; //Flash 低位地址
sfr IAP_CMD = 0xC5; //Flash 命令寄存器
sfr IAP_TRIG = 0xC6; //Flash 命令觸發(fā)
sfr IAP_CONTR = 0xC7; //Flash 控制寄存器
*/
//IAP命令常數(shù)
#define CMD_IDLE 0 //待機(jī)
#define CMD_READ 1 //位-讀
#define CMD_WRITE 2 //位-程序
#define CMD_ERASE 3 //扇區(qū)-擦除
//IAP時(shí)間常數(shù)
#define ENABLE_IAP 0x80 //如果系統(tǒng)時(shí)鐘<30MHz
//#define ENABLE_IAP 0x81 //如果系統(tǒng)時(shí)鐘<24MHz
//#define ENABLE_IAP 0x82 //如果系統(tǒng)時(shí)鐘<20MHz
//#define ENABLE_IAP 0x83 //如果系統(tǒng)時(shí)鐘<12MHz
//#define ENABLE_IAP 0x84 //如果系統(tǒng)時(shí)鐘<6MHz
//#define ENABLE_IAP 0x85 //如果系統(tǒng)時(shí)鐘<3MHz
//#define ENABLE_IAP 0x86 //如果系統(tǒng)時(shí)鐘<2MHz
//#define ENABLE_IAP 0x87 //如果系統(tǒng)時(shí)鐘<1MHz
#define IAP_ADDRESS 0x0000 //STC12C5A60S2 系列 EEPROM 起點(diǎn)地址
//void Delay(unsigned char n);
void IapIdle(); //退出IAP過(guò)程
unsigned char IapReadByte(unsigned int addr); //IAP讀
void IapWriteByte(unsigned int addr, unsigned char dat); //IAP寫
void IapEraseSector(unsigned int addr); //擦除扇區(qū)
/**********************************************************
** 函數(shù)名稱: void IapIdle();
** 功能描述: 退出IAP過(guò)程
**********************************************************/
void IapIdle()
{
IAP_CONTR = 0; //關(guān)閉 IAP 功能
IAP_CMD = 0; //清除命令寄存器進(jìn)入待機(jī)模式
IAP_TRIG = 0; //清除觸發(fā)寄存器
IAP_ADDRH = 0xFF; //IAP指針移動(dòng)到非 EEPROM 區(qū)域
IAP_ADDRL = 0xFF;
}
/**********************************************************
** 函數(shù)名稱: unsigned char IapReadByte(unsigned int addr);
** 功能描述: 讀EEPROM
** 輸 入: unsigned int addr 地址
** 輸 出: unsigned char dat 數(shù)據(jù)
**********************************************************/
unsigned char IapReadByte(unsigned int addr)
{
unsigned char dat; //數(shù)據(jù)緩沖
IAP_CONTR = ENABLE_IAP; //打開 IAP 過(guò)程, 并設(shè)置等待時(shí)間
IAP_CMD = CMD_READ; //設(shè)置 ISP/IAP/EEPROM 為讀命令
IAP_ADDRL = addr; //設(shè)置 ISP/IAP/EEPROM 低位地址
IAP_ADDRH = addr >> 8; //設(shè)置 ISP/IAP/EEPROM 高位地址
IAP_TRIG = 0x5a; //發(fā)送觸發(fā)命令 1 (0x5a)
IAP_TRIG = 0xa5; //發(fā)送觸發(fā)命令 2 (0xa5)
_nop_(); //MCU 延遲等待 ISP/IAP/EEPROM 作業(yè)完成
_nop_(); //兼容15F104E一個(gè)bug,NOP3次
_nop_(); //
dat = IAP_DATA; //讀取 ISP/IAP/EEPROM 數(shù)據(jù)
IapIdle(); //關(guān)閉 ISP/IAP/EEPROM 過(guò)程
return dat; //返回 Flash 數(shù)據(jù)
}
/**********************************************************
** 函數(shù)名稱: void IapWriteByte(unsigned int addr, unsigned char dat);
** 功能描述: 寫EEPROM扇區(qū)
** 輸 入: unsigned int addr 寫地址
unsigned char dat 寫數(shù)據(jù)
**********************************************************/
void IapWriteByte(unsigned int addr, unsigned char dat)
{
IAP_CONTR = ENABLE_IAP; //打開 IAP 過(guò)程, 并設(shè)置等待時(shí)間
IAP_CMD = CMD_WRITE; //設(shè)置 ISP/IAP/EEPROM 為寫命令
IAP_ADDRL = addr; //設(shè)置 ISP/IAP/EEPROM 低位地址
IAP_ADDRH = addr >> 8; //設(shè)置 ISP/IAP/EEPROM 高位地址
IAP_DATA = dat; //寫 ISP/IAP/EEPROM 數(shù)據(jù)
IAP_TRIG = 0x5a; //發(fā)送觸發(fā)命令 1 (0x5a)
IAP_TRIG = 0xa5; //發(fā)送觸發(fā)命令 2 (0xa5)
_nop_(); //MCU 延遲等待 ISP/IAP/EEPROM 作業(yè)完成
_nop_(); //兼容15F104E一個(gè)bug,NOP3次
_nop_(); //
IapIdle(); //關(guān)閉 ISP/IAP/EEPROM 過(guò)程
}
/**********************************************************
** 函數(shù)名稱: void IapEraseSector(unsigned int addr);
** 功能描述: 擦除EEPROM扇區(qū)
** 輸 入: unsigned int addr 擦除地址
**********************************************************/
void IapEraseSector(unsigned int addr)
{
IAP_CONTR = ENABLE_IAP; //打開 IAP 過(guò)程, 并設(shè)置等待時(shí)間
IAP_CMD = CMD_ERASE; //設(shè)置 ISP/IAP/EEPROM 為擦除命令
IAP_ADDRL = addr; //設(shè)置 ISP/IAP/EEPROM 低位地址
IAP_ADDRH = addr >> 8; //設(shè)置 ISP/IAP/EEPROM 高位地址
IAP_TRIG = 0x5a; //發(fā)送觸發(fā)命令 1 (0x5a)
IAP_TRIG = 0xa5; //發(fā)送觸發(fā)命令 2 (0xa5)
_nop_(); //MCU 延遲等待 ISP/IAP/EEPROM 作業(yè)完成
_nop_(); //兼容15F104E一個(gè)bug,NOP3次
_nop_(); //
IapIdle(); //關(guān)閉 ISP/IAP/EEPROM 過(guò)程
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一级a性色生活片久久毛片波多野
|
日韩精品成人网
|
欧美一级免费看
|
一区天堂
|
国内精品一区二区三区
|
99热在这里只有精品
|
最新高清无码专区
|
日本成人中文字幕在线观看
|
www网站在线观看
|
国产精品久久久久久久久久久久冷
|
国产激情免费视频
|
亚洲h在线观看
|
成人动漫视频网站
|
羞羞的视频在线看
|
91精品久久久久久久久
|
免费看国产精品视频
|
亚洲一级黄色
|
欧美bondage紧缚视频
|
免费观看a级毛片在线播放 黄网站免费入口
|
亚洲免费人成在线视频观看
|
九九热在线视频
|
久婷婷
|
三级欧美
|
va在线
|
黄片毛片在线观看
|
久草视频2
|
亚洲欧美日韩精品久久亚洲区
|
麻豆91精品91久久久
|
日韩成人在线视频
|
青草青草久热精品视频在线观看
|
日韩快播电影
|
在线国产视频
|
久久噜噜噜精品国产亚洲综合
|
性色网站
|
精品一区二区三区在线观看国产
|
国产精品成人久久久久
|
欧美久久久网站
|
无码一区二区三区视频
|
精品一区二区三区四区外站
|
日韩一区不卡
|
久久久久久久av
|