?? stc89c54rd_flashiap.c
字號:
/********************************************************************************************************
** STC89C54RD+單片機(jī)Flash EEPROM的IAP操作例程源文件
**
** 版權(quán)所有 (c) 2007,羅建
** 保留所有權(quán)利
**
** V1.00
**
**
**-------------------------------------------------文件信息----------------------------------------------
**文 件 名: STC89C54RD_FlashIAP.H
**創(chuàng) 建 人: 羅 建
**最后修改日期: 2007年02月09日
**描 述: STC89C54RD+單片機(jī)Flash EEPROM的IAP操作例程頭文件。本文件中的例程借鑒了深圳宏晶公司的相關(guān)
** 例程。
**
**-----------------------------------------------歷史版本信息--------------------------------------------
** 創(chuàng)建人: 羅建
** 版 本: V1.00
** 日 期: 2007年02月08日
** 描 述: 原始版本。
**
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**-------------------------------------------------------------------------------------------------------
**-----------------------------------------------當(dāng)前版本修訂--------------------------------------------
** 修改人: 羅建
** 日 期: 2007年02月09日
** 描 述: 增加了文件頭注釋。
**
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <AT89X52.H>
#include <Intrins.h>
#include "STC89C54RD_FlashIAP.h"
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函數(shù)名稱: ISP_IAP_Enable
** 功能描述: 允許對STC89C54RD+單片機(jī)的EEPROM進(jìn)行ISP/IAP操作。
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 全局常量:無
** 調(diào)用模塊: 無
** 其它說明:詳見有關(guān)ISP_CONTR寄存器的說明。
**
** 作 者: 羅建
** 日 期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ISP_IAP_Enable(void)
{
EA = 0; /* 關(guān)中斷 */
ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
ISP_CONTR = ISP_CONTR | WAIT_TIME; /* 設(shè)置等待時(shí)間 */
ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
}
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函數(shù)名稱: ISP_IAP_Disable
** 功能描述: 禁止對STC89C54RD+單片機(jī)的EEPROM進(jìn)行ISP/IAP操作。
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 全局常量:無
** 調(diào)用模塊: 無
** 其它說明:詳見有關(guān)ISP_CONTR和ISP_TRIG兩個(gè)寄存器的說明。
**
** 作 者: 羅建
** 日 期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ISP_IAP_Disable(void)
{
ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
ISP_TRIG = 0x00;
EA = 1; /* 開中斷 */
}
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函數(shù)名稱: ReadBytes
** 功能描述: 讀STC89C54RD+單片機(jī)EEPROM中的連續(xù)ByteQuantity個(gè)字節(jié)數(shù)據(jù)到nDataBuf緩沖區(qū)中。
** 輸 入: nByteAddr>>>>>>>>>>要讀出的數(shù)據(jù)緩沖區(qū)在EEPROM中的首地址;
** ByteQuantity>>>>>>>要讀出的數(shù)據(jù)個(gè)數(shù);
** nDataBuf[]>>>>>>>>>要讀出的數(shù)據(jù)。
** 輸 出: 位變量>>>>>>>>>>>>>操作成功則返回OK(實(shí)際上永遠(yuǎn)返回OK)。
** 全局變量: 無
** 全局常量:無
** 調(diào)用模塊: ISP_IAP_Enable>>>>>允許對STC89C54RD+單片機(jī)的EEPROM進(jìn)行ISP/IAP操作;
** ISP_IAP_Disable>>>>禁止對STC89C54RD+單片機(jī)的EEPROM進(jìn)行ISP/IAP操作。
** 其它說明:詳細(xì)的操作說明見深圳宏晶公司的數(shù)據(jù)手冊。
**
** 作 者: 羅建
** 日 期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
bit ReadBytes(INT16U nByteAddr, INT8U ByteQuantity, INT8U nDataBuf[])
{
INT8U i;
ISP_CMD = ISP_CMD & 0xF8; /* 1111,1000 */
ISP_CMD = ISP_CMD | CMD_READ_DM; /* 0000,0001 */
ISP_IAP_Enable();
for (i=0;i<ByteQuantity;i++) /* 寫入ByteQuantity個(gè)字節(jié) */
{
ISP_ADDRH = (INT8U)(nByteAddr >> 8); /* 設(shè)置扇區(qū)地址 */
ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
nDataBuf[i] = ISP_DATA; /* 讀取一字節(jié)數(shù)據(jù),并移動緩沖區(qū)指針 */
nByteAddr++; /* 準(zhǔn)備下一個(gè)字節(jié)地址 */
}
ISP_IAP_Disable();
return OK;
}
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函數(shù)名稱: WriteBytes
** 功能描述: 將nDataBuf緩沖區(qū)中的連續(xù)ByteQuantity個(gè)字節(jié)數(shù)據(jù)寫入到STC89C54RD+單片機(jī)EEPROM中。
** 輸 入: nByteAddr>>>>>>>>>>要寫入的數(shù)據(jù)緩沖區(qū)在EEPROM中的首地址;
** ByteQuantity>>>>>>>要寫入的數(shù)據(jù)個(gè)數(shù);
** nDataBuf[]>>>>>>>>>要寫入的數(shù)據(jù)。
** 輸 出: 位變量>>>>>>>>>>>>>操作成功則返回OK,否則返回ERROR
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -