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

📄 www.ourhc.cn.lst

📁 STC15F104E单片机最小系统开发板
💻 LST
字号:
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/11/2012 15:35:32 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE WWW_OURHC_CN
OBJECT MODULE PLACED IN www.ourhc.cn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE www.ourhc.cn.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2                                      汇诚科技
   3          
   4          实现功能:STC15F104E系列单片机之EEPROM应用程序
   5          使用芯片:STC15F104E系列单片机
   6          晶振:11.0592MHZ
   7          波特率:9600
   8          编译环境:Keil
   9          作者:zhangxinchun
  10          网站:www.ourhc.cn
  11          淘宝店:
  12          汇诚科技 http://ourhc.taobao.com
  13          郑兴电子直销部 http://shop68451856.taobao.com
  14          【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
  15          
  16          *********************************************************************/
  17          /********************************************************************/
  18          #include "reg52.h" 
  19          #include <intrins.H>
  20          #define uchar unsigned char //宏定义字符型变量
  21          #define uint  unsigned int      //宏定义整型变量
  22          /********************************************************************
  23                                      寄存器设置
  24          *********************************************************************/ 
  25          sfr IAP_DATA  =0xc2;     //数据寄存器
  26          sfr IAP_ADDRH =0xc3;     //地址寄存器
  27          sfr IAP_ADDRL =0xc4;     //地址寄存器
  28          sfr IAP_CMD   =0xc5;     //命令寄存器
  29          sfr IAP_TRIG  =0xc6;     //触发寄存器
  30          sfr IAP_CONTR =0xc7;     //擦除寄存器
  31          
  32          sbit  P33=P3^3;                  //定义继电器控制输出脚
  33          /********************************************************************
  34                                      命令定义
  35          *********************************************************************/
  36          #define CMD_IDLE     0   //EEPROM无操作
  37          #define CMD_READ     1   //读取字节
  38          #define CMD_PROGRAM  2   //写入字节
  39          #define CMD_ERASE    3   //擦除字节
  40          /********************************************************************
  41                                 编程周期由晶振决定
  42          *********************************************************************/
  43          //#define ENABLE_IAP 0X80        //编程周期由晶振决定(如果<30MHZ选用此项)
  44          //#define ENABLE_IAP 0X81        //编程周期由晶振决定(如果<24MHZ选用此项)
  45          //#define ENABLE_IAP 0X82        //编程周期由晶振决定(如果<20MHZ选用此项)
  46            #define ENABLE_IAP 0X83        //编程周期由晶振决定(如果<12MHZ选用此项)
  47          //#define ENABLE_IAP 0X84        //编程周期由晶振决定(如果<6MHZ选用此项)
  48          //#define ENABLE_IAP 0X85        //编程周期由晶振决定(如果<3MHZ选用此项)
  49          //#define ENABLE_IAP 0X86        //编程周期由晶振决定(如果<2MHZ选用此项)
  50          //#define ENABLE_IAP 0X87        //编程周期由晶振决定(如果<1MHZ选用此项)
  51          
  52          #define IAP_ADDRESS 0X0000       //内部EEPROM地址
  53          /********************************************************************
  54                                 函数初始化
  55          *********************************************************************/
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/11/2012 15:35:32 PAGE 2   

  56          void Delay(uchar n);                     //延时函数
  57          void IapIdle();                          //操作函数
  58          uchar IapReadByte(uint addr); //读取函数
  59          void IapProgramByte(uint addr,uchar dat); //写入函数
  60          void IapEraseSector(uint addr); //擦除函数
  61          /********************************************************************
  62                                      主函数
  63          *********************************************************************/
  64          void main()
  65          {
  66   1       uint i; //定义整型变量i
  67   1       P33=0;
  68   1       Delay(10);//延时
  69   1      
  70   1       IapEraseSector(IAP_ADDRESS);  //擦除扇区
  71   1       for(i=0;i<512;i++)                        //擦除512个字节的扇区
  72   1       {
  73   2         if(IapReadByte(IAP_ADDRESS+i)!=0xff)//判断是否完全擦除
  74   2         goto Error;                                             //如果没有擦除跳转到报错位置
  75   2        }
  76   1      
  77   1      
  78   1      Delay(10); //延时
  79   1      for(i=0;i<512;i++)//对512个字节进行数据写入
  80   1      {
  81   2      IapProgramByte(IAP_ADDRESS+i,(uchar)i);  //写入数据
  82   2      }
  83   1      
  84   1       Delay(10);//延时
  85   1       for(i=0;i<512;i++)//读取512个字节的数据
  86   1       {
  87   2         if(IapReadByte(IAP_ADDRESS+i)!=(uchar)i)//判断数据是否完整
  88   2         goto Error;                                                     //如果没有擦除跳转到报错位置
  89   2        }
  90   1      
  91   1      while(1);  //循环一次
  92   1      Error:     //错误标志位
  93   1      P33=1;     //如果错误执行此操作
  94   1      while(1);  //循环一次
  95   1      }
  96          /********************************************************************
  97                                      延时函数
  98          *********************************************************************/
  99          void Delay(uchar n)
 100          {
 101   1       uint x;
 102   1       while(n--)
 103   1       {
 104   2       x=0;
 105   2       while(++x);
 106   2       }
 107   1      }
 108          /********************************************************************
 109                                      操作函数
 110          *********************************************************************/
 111          void IapIdle()
 112          {
 113   1      IAP_CONTR=0;
 114   1      IAP_CMD=0;
 115   1      IAP_TRIG=0;
 116   1      IAP_ADDRH=0X80;
 117   1      IAP_ADDRL=0;
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/11/2012 15:35:32 PAGE 3   

 118   1      }
 119          
 120          /********************************************************************
 121                                      读取一个字节函数
 122          *********************************************************************/
 123          uchar IapReadByte(uint addr)
 124          {
 125   1      uchar dat;  
 126   1      IAP_CONTR=ENABLE_IAP;
 127   1      IAP_CMD=CMD_READ;
 128   1      IAP_ADDRL=addr;
 129   1      IAP_ADDRH=addr>>8;
 130   1      IAP_TRIG=0X5A;
 131   1      IAP_TRIG=0XA5;
 132   1      _nop_();
 133   1      _nop_();
 134   1      _nop_();
 135   1      dat=IAP_DATA;
 136   1      IapIdle();
 137   1      return dat;
 138   1      }
 139          
 140          /********************************************************************
 141                                      写入一个字节函数
 142          *********************************************************************/
 143          void IapProgramByte(uint addr,uchar dat)
 144          {
 145   1      
 146   1      IAP_CONTR=ENABLE_IAP;
 147   1      IAP_CMD=CMD_PROGRAM;
 148   1      IAP_ADDRL=addr;
 149   1      IAP_ADDRH=addr>>8;
 150   1      IAP_DATA=dat;
 151   1      IAP_TRIG=0X5A;
 152   1      IAP_TRIG=0XA5;
 153   1      _nop_();
 154   1      _nop_();
 155   1      _nop_();
 156   1      IapIdle();
 157   1      }
 158          /********************************************************************
 159                                      擦除一个字节函数
 160          *********************************************************************/
 161          void IapEraseSector(uint addr)
 162          {
 163   1      IAP_CONTR=ENABLE_IAP;
 164   1      IAP_CMD=CMD_ERASE;
 165   1      IAP_ADDRL=addr;
 166   1      IAP_ADDRH=addr>>8;
 167   1      IAP_TRIG=0X5A;
 168   1      IAP_TRIG=0XA5;
 169   1      _nop_();
 170   1      _nop_();
 171   1      _nop_();
 172   1      IapIdle();
 173   1      }
 174           
 175          /********************************************************************
 176                                      结束
 177          *********************************************************************/


C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/11/2012 15:35:32 PAGE 4   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    224    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   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 + -