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

📄 stc89c54rd_flashiap.lst

📁 采用STC89C54RD实现的一个完整的流量计控制系统源代码
💻 LST
字号:
C51 COMPILER V8.02   STC89C54RD_FLASHIAP                                                   02/13/2007 17:34:12 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE STC89C54RD_FLASHIAP
OBJECT MODULE PLACED IN STC89C54RD_FlashIAP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE STC89C54RD_FlashIAP.c OMF2 MODP2 DEBUG

line level    source

   1          /********************************************************************************************************
   2          **                                              STC89C54RD+单片机Flash EEPROM的IAP操作例程源文件
   3          **
   4          **                                          版权所有 (c) 2007,罗建
   5          **                                               保留所有权利
   6          **
   7          **                                                  V1.00
   8          **
   9          **
  10          **-------------------------------------------------文件信息----------------------------------------------
  11          **文   件   名: STC89C54RD_FlashIAP.H
  12          **创   建   人: 罗 建
  13          **最后修改日期: 2007年02月09日
  14          **描        述: STC89C54RD+单片机Flash EEPROM的IAP操作例程头文件。本文件中的例程借鉴了深圳宏晶公司的相关
  15          **              例程。
  16          **
  17          **-----------------------------------------------历史版本信息--------------------------------------------
  18          ** 创建人: 罗建
  19          ** 版  本: V1.00
  20          ** 日 期: 2007年02月08日
  21          ** 描 述: 原始版本。
  22          **
  23          **-------------------------------------------------------------------------------------------------------
  24          ** 修改人:
  25          ** 版  本:
  26          ** 日 期:
  27          ** 描 述:
  28          **
  29          **-------------------------------------------------------------------------------------------------------
  30          **-----------------------------------------------当前版本修订--------------------------------------------
  31          ** 修改人: 罗建
  32          ** 日 期: 2007年02月09日
  33          ** 描 述: 增加了文件头注释。
  34          **
  35          **-------------------------------------------------------------------------------------------------------
  36          ********************************************************************************************************/
  37          #include <AT89X52.H>
  38          #include <Intrins.h>
  39          #include "STC89C54RD_FlashIAP.h"
  40          
  41          // ------------------------------------------------------------------------------------------------------
  42          /********************************************************************************************************
  43          ** 函数名称: ISP_IAP_Enable
  44          ** 功能描述: 允许对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
  45          ** 输  入: 无
  46          ** 输  出: 无
  47          ** 全局变量: 无
  48          ** 全局常量:无
  49          ** 调用模块: 无
  50          ** 其它说明:详见有关ISP_CONTR寄存器的说明。
  51          **
  52          ** 作  者: 罗建
  53          ** 日  期: 2007年02月09日
  54          **-------------------------------------------------------------------------------------------------------
  55          ** 修改人:
C51 COMPILER V8.02   STC89C54RD_FLASHIAP                                                   02/13/2007 17:34:12 PAGE 2   

  56          ** 日 期:
  57          **-------------------------------------------------------------------------------------------------------
  58          ********************************************************************************************************/
  59          void ISP_IAP_Enable(void)
  60          {
  61   1        EA = 0;                                            /* 关中断 */
  62   1        ISP_CONTR     = ISP_CONTR & 0x18;                  /* 0001,1000 */
  63   1        ISP_CONTR     = ISP_CONTR | WAIT_TIME;             /* 设置等待时间 */
  64   1        ISP_CONTR     = ISP_CONTR | 0x80;                  /* 1000,0000 */
  65   1      }
  66          
  67          // ------------------------------------------------------------------------------------------------------
  68          /********************************************************************************************************
  69          ** 函数名称: ISP_IAP_Disable
  70          ** 功能描述: 禁止对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
  71          ** 输  入: 无
  72          ** 输  出: 无
  73          ** 全局变量: 无
  74          ** 全局常量:无
  75          ** 调用模块: 无
  76          ** 其它说明:详见有关ISP_CONTR和ISP_TRIG两个寄存器的说明。
  77          **
  78          ** 作  者: 罗建
  79          ** 日  期: 2007年02月09日
  80          **-------------------------------------------------------------------------------------------------------
  81          ** 修改人:
  82          ** 日 期:
  83          **-------------------------------------------------------------------------------------------------------
  84          ********************************************************************************************************/
  85          void ISP_IAP_Disable(void)
  86          {
  87   1        ISP_CONTR     = ISP_CONTR & 0x7f;                      /* 0111,1111 */
  88   1        ISP_TRIG      = 0x00;
  89   1        EA = 1;                                            /* 开中断 */
  90   1      }
  91          
  92          // ------------------------------------------------------------------------------------------------------
  93          /********************************************************************************************************
  94          ** 函数名称: ReadBytes
  95          ** 功能描述: 读STC89C54RD+单片机EEPROM中的连续ByteQuantity个字节数据到nDataBuf缓冲区中。
  96          ** 输  入: nByteAddr>>>>>>>>>>要读出的数据缓冲区在EEPROM中的首地址;
  97          **           ByteQuantity>>>>>>>要读出的数据个数;
  98          **           nDataBuf[]>>>>>>>>>要读出的数据。
  99          ** 输  出: 位变量>>>>>>>>>>>>>操作成功则返回OK(实际上永远返回OK)。
 100          ** 全局变量: 无
 101          ** 全局常量:无
 102          ** 调用模块: ISP_IAP_Enable>>>>>允许对STC89C54RD+单片机的EEPROM进行ISP/IAP操作;
 103          **           ISP_IAP_Disable>>>>禁止对STC89C54RD+单片机的EEPROM进行ISP/IAP操作。
 104          ** 其它说明:详细的操作说明见深圳宏晶公司的数据手册。
 105          **
 106          ** 作  者: 罗建
 107          ** 日  期: 2007年02月09日
 108          **-------------------------------------------------------------------------------------------------------
 109          ** 修改人:
 110          ** 日 期:
 111          **-------------------------------------------------------------------------------------------------------
 112          ********************************************************************************************************/
 113          bit ReadBytes(INT16U nByteAddr, INT8U ByteQuantity, INT8U nDataBuf[])
 114          {
 115   1        INT8U  i;
 116   1        
 117   1        ISP_CMD = ISP_CMD & 0xF8;                      /* 1111,1000 */
C51 COMPILER V8.02   STC89C54RD_FLASHIAP                                                   02/13/2007 17:34:12 PAGE 3   

 118   1        ISP_CMD = ISP_CMD | CMD_READ_DM;               /* 0000,0001 */
 119   1        ISP_IAP_Enable();
 120   1        for (i=0;i<ByteQuantity;i++)                   /* 写入ByteQuantity个字节 */
 121   1        {
 122   2          ISP_ADDRH = (INT8U)(nByteAddr >> 8);         /* 设置扇区地址 */
 123   2          ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
 124   2              ISP_TRIG  = 0x46;
 125   2          ISP_TRIG  = 0xB9;
 126   2          _nop_();
 127   2          nDataBuf[i] = ISP_DATA;                      /* 读取一字节数据,并移动缓冲区指针 */
 128   2              nByteAddr++;                                 /* 准备下一个字节地址 */
 129   2        }
 130   1        ISP_IAP_Disable();
 131   1        return OK;
 132   1      }
 133          
 134          // ------------------------------------------------------------------------------------------------------
 135          /********************************************************************************************************
 136          ** 函数名称: WriteBytes
 137          ** 功能描述: 将nDataBuf缓冲区中的连续ByteQuantity个字节数据写入到STC89C54RD+单片机EEPROM中。
 138          ** 输  入: nByteAddr>>>>>>>>>>要写入的数据缓冲区在EEPROM中的首地址;
 139          **           ByteQuantity>>>>>>>要写入的数据个数;
 140          **           nDataBuf[]>>>>>>>>>要写入的数据。
 141          ** 输  出: 位变量>>>>>>>>>>>>>操作成功则返回OK,否则返回ERROR

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -