📄 stc89c54rd_flashiap.c
字号:
/********************************************************************************************************
** STC89C54RD+单片机Flash EEPROM的IAP操作例程源文件
**
** 版权所有 (c) 2007,罗建
** 保留所有权利
**
** V1.00
**
**
**-------------------------------------------------文件信息----------------------------------------------
**文 件 名: STC89C54RD_FlashIAP.H
**创 建 人: 罗 建
**最后修改日期: 2007年02月09日
**描 述: STC89C54RD+单片机Flash EEPROM的IAP操作例程头文件。本文件中的例程借鉴了深圳宏晶公司的相关
** 例程。
**
**-----------------------------------------------历史版本信息--------------------------------------------
** 创建人: 罗建
** 版 本: V1.00
** 日 期: 2007年02月08日
** 描 述: 原始版本。
**
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**-------------------------------------------------------------------------------------------------------
**-----------------------------------------------当前版本修订--------------------------------------------
** 修改人: 罗建
** 日 期: 2007年02月09日
** 描 述: 增加了文件头注释。
**
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <AT89X52.H>
#include <Intrins.h>
#include "STC89C54RD_FlashIAP.h"
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: ISP_IAP_Enable
** 功能描述: 允许对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 全局常量:无
** 调用模块: 无
** 其它说明:详见有关ISP_CONTR寄存器的说明。
**
** 作 者: 罗建
** 日 期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ISP_IAP_Enable(void)
{
EA = 0; /* 关中断 */
ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
ISP_CONTR = ISP_CONTR | WAIT_TIME; /* 设置等待时间 */
ISP_CONTR = ISP_CONTR | 0x80; /* 1000,0000 */
}
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: ISP_IAP_Disable
** 功能描述: 禁止对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 全局常量:无
** 调用模块: 无
** 其它说明:详见有关ISP_CONTR和ISP_TRIG两个寄存器的说明。
**
** 作 者: 罗建
** 日 期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ISP_IAP_Disable(void)
{
ISP_CONTR = ISP_CONTR & 0x7f; /* 0111,1111 */
ISP_TRIG = 0x00;
EA = 1; /* 开中断 */
}
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: ReadBytes
** 功能描述: 读STC89C54RD+单片机EEPROM中的连续ByteQuantity个字节数据到nDataBuf缓冲区中。
** 输 入: nByteAddr>>>>>>>>>>要读出的数据缓冲区在EEPROM中的首地址;
** ByteQuantity>>>>>>>要读出的数据个数;
** nDataBuf[]>>>>>>>>>要读出的数据。
** 输 出: 位变量>>>>>>>>>>>>>操作成功则返回OK(实际上永远返回OK)。
** 全局变量: 无
** 全局常量:无
** 调用模块: ISP_IAP_Enable>>>>>允许对STC89C54RD+单片机的EEPROM进行ISP/IAP操作;
** ISP_IAP_Disable>>>>禁止对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
** 其它说明:详细的操作说明见深圳宏晶公司的数据手册。
**
** 作 者: 罗建
** 日 期: 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个字节 */
{
ISP_ADDRH = (INT8U)(nByteAddr >> 8); /* 设置扇区地址 */
ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
nDataBuf[i] = ISP_DATA; /* 读取一字节数据,并移动缓冲区指针 */
nByteAddr++; /* 准备下一个字节地址 */
}
ISP_IAP_Disable();
return OK;
}
// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: WriteBytes
** 功能描述: 将nDataBuf缓冲区中的连续ByteQuantity个字节数据写入到STC89C54RD+单片机EEPROM中。
** 输 入: nByteAddr>>>>>>>>>>要写入的数据缓冲区在EEPROM中的首地址;
** ByteQuantity>>>>>>>要写入的数据个数;
** nDataBuf[]>>>>>>>>>要写入的数据。
** 输 出: 位变量>>>>>>>>>>>>>操作成功则返回OK,否则返回ERROR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -