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

📄 chengxu.lst

📁 可编程继电器模块
💻 LST
字号:
C51 COMPILER V8.05a   CHENGXU                                                              01/02/2012 21:28:12 PAGE 1   


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

line level    source

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

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    224    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V8.05a   CHENGXU                                                              01/02/2012 21:28:12 PAGE 4   

   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 + -