⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stc89c54rd_flashiap.c

📁 采用STC89C54RD实现的一个完整的流量计控制系统源代码
💻 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 + -