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

📄 stc12c5410ad_flashiap.lst

📁 一个完整的个人产品开发源代码,包括对单片机STC12C5410的编程(含内部AD采样、自创的内部Flash编程源码等)、LCD1602的驱动编程等。
💻 LST
字号:
C51 COMPILER V8.08   STC12C5410AD_FLASHIAP                                                 10/29/2007 22:49:07 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE STC12C5410AD_FLASHIAP
OBJECT MODULE PLACED IN STC12C5410AD_FlashIAP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE STC12C5410AD_FlashIAP.c BROWSE DEBUG OBJECTEXTEND

line level    source

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

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

 118   1        ISP_IAP_Enable();
 119   1        for (i=0;i<ByteQuantity;i++)                   /* 写入ByteQuantity个字节 */
 120   1        {
 121   2          ISP_ADDRH = (INT8U)(nByteAddr >> 8);         /* 设置扇区地址 */
 122   2          ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
 123   2          ISP_TRIG  = 0x46;
 124   2          ISP_TRIG  = 0xB9;
 125   2          _nop_();
 126   2          nDataBuf[i] = ISP_DATA;                      /* 读取一字节数据,并移动缓冲区指针 */
 127   2          nByteAddr++;                                 /* 准备下一个字节地址 */
 128   2        }
 129   1        ISP_IAP_Disable();
 130   1        return OK;
 131   1      }
 132          
 133          // ------------------------------------------------------------------------------------------------------
 134          /********************************************************************************************************
 135          ** 函数名称: WriteBytes
 136          ** 功能描述: 将nDataBuf缓冲区中的连续ByteQuantity个字节数据写入到STC12C5410AD单片机EEPROM中。
 137          ** 输  入: nByteAddr>>>>>>>>>>要写入的数据缓冲区在EEPROM中的首地址;
 138          **           ByteQuantity>>>>>>>要写入的数据个数;
 139          **           nDataBuf[]>>>>>>>>>要写入的数据。
 140          ** 输  出: 位变量>>>>>>>>>>>>>操作成功则返回OK,否则返回ERROR。
 141          ** 全局变量: 无
 142          ** 全局常量:无
 143          ** 调用模块: ISP_IAP_Enable>>>>>允许对STC12C5410AD单片机的EEPROM进行ISP/IAP操作;
 144          **           ISP_IAP_Disable>>>>禁止对STC12C5410AD单片机的EEPROM进行ISP/IAP操作。
 145          ** 其它说明:详细的操作说明见深圳宏晶公司的数据手册。
 146          **
 147          ** 作  者: 罗建
 148          ** 日  期: 2007年06月29日
 149          **-------------------------------------------------------------------------------------------------------
 150          ** 修改人:
 151          ** 日 期:
 152          **-------------------------------------------------------------------------------------------------------
 153          ********************************************************************************************************/
 154          bit WriteBytes(INT16U nByteAddr, INT8U ByteQuantity, INT8U nDataBuf[])
 155          {
 156   1        INT16U i;  
 157   1        INT16U nSectorAddr;
 158   1        
 159   1        /* 擦除要修改/写入的扇区 */
 160   1        nSectorAddr = (nByteAddr & 0xFE00);            /* 1111,1110,0000,0000; 取扇区地址 */
 161   1        ISP_ADDRH     = (INT8U)(nSectorAddr >> 8);         /* 设置扇区地址 */
 162   1        ISP_ADDRL     = 0x00;
 163   1        ISP_CMD   = ISP_CMD & 0xF8;                    /* 1111,1000 */
 164   1        ISP_CMD   = ISP_CMD | CMD_ERASE_DM;            /* 0000,0011 */
 165   1        ISP_IAP_Enable();
 166   1        ISP_TRIG  = 0x46;                              /* 触发ISP_IAP命令 */
 167   1        ISP_TRIG  = 0xB9;                              /* 触发ISP_IAP命令 */
 168   1        _nop_();
 169   1      
 170   1        /* 写入连续ByteQuantity个字节,并校验 */    
 171   1        for (i=0;i<ByteQuantity;i++)                   /* 读取ByteQuantity个字节 */
 172   1        {
 173   2          /* 写一个字节 */    
 174   2                ISP_ADDRH = (INT8U)(nByteAddr >> 8);         /* 设置扇区地址 */
 175   2          ISP_ADDRL = (INT8U)(nByteAddr & 0x00FF);
 176   2          ISP_DATA  = nDataBuf[i];                     /* 设置要编程的数据,并移动缓冲区指针 */
 177   2          ISP_CMD   = ISP_CMD & 0xF8;                  /* 1111,1000 */
 178   2          ISP_CMD   = ISP_CMD | CMD_PROGRAM_DM;        /* 0000,0010 */
 179   2          ISP_IAP_Enable();                            /* 允许IAP编程 */
C51 COMPILER V8.08   STC12C5410AD_FLASHIAP                                                 10/29/2007 22:49:07 PAGE 4   

 180   2          ISP_TRIG  = 0x46;                            /* 触发ISP_IAP命令 */
 181   2          ISP_TRIG  = 0xB9;                            /* 触发ISP_IAP命令 */
 182   2          _nop_();
 183   2          /* 读回来 */
 184   2          ISP_DATA  = 0x00;
 185   2          ISP_CMD   = ISP_CMD & 0xF8;                  /* 1111,1000 */
 186   2          ISP_CMD   = ISP_CMD | CMD_READ_DM;           /* 0000,0001 */
 187   2          ISP_TRIG  = 0x46;                              /* 触发ISP_IAP命令 */
 188   2          ISP_TRIG  = 0xB9;                            /* 触发ISP_IAP命令 */
 189   2          _nop_();
 190   2          /*  比较对错 */
 191   2          if(ISP_DATA != nDataBuf[i])
 192   2          {
 193   3            ISP_IAP_Disable();
 194   3            return ERROR;
 195   3          }
 196   2          nByteAddr++;                                 /* 准备下一个字节地址 */
 197   2        }
 198   1        ISP_IAP_Disable();                             /* 禁止IAP编程 */
 199   1        return OK;
 200   1      }    


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    240    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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