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

📄 chengxu.lst

📁 可编程继电器模块
💻 LST
字号:
C51 COMPILER V9.00   CHENGXU                                                               03/05/2012 10:22:22 PAGE 1   


C51 COMPILER V9.00, 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          实现功能:定时定次催款应用程序
   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          #define C  10    //开机最大次数(次)
  54          #define T  1     //开机最长时间(小时)
  55          /********************************************************************
C51 COMPILER V9.00   CHENGXU                                                               03/05/2012 10:22:22 PAGE 2   

  56                                      初始定义
  57          *********************************************************************/
  58          #define DUAN P0   //P0口控制段
  59          #define WEI  P2   //P2口控制位
  60          uchar Count,days;
  61          uint fen,cnt;
  62          sbit jdq=P3^3;
  63          sbit key=P3^5;
  64          /********************************************************************
  65                                 函数初始化
  66          *********************************************************************/
  67          void IapIdle();                                       //操作函数
  68          uchar IapReadByte(uint addr);             //读取函数
  69          void IapProgramByte(uint addr,uchar dat); //写入函数
  70          void IapEraseSector(uint addr);           //擦除函数
  71          void cshh();
  72          //============================================================
  73          //延时程序
  74          void delayms(unsigned int x)
  75          {
  76   1          int i,j;                                                                                
  77   1          for(i=0;i<x;i++)                                                                    
  78   1             {
  79   2                   for(j=0;j<260;j++);
  80   2             }                                                                                     
  81   1      }
  82          
  83          /********************************************************************
  84                                      主函数
  85          *********************************************************************/
  86          void main()
  87          {               
  88   1              delayms(600); 
  89   1          Count=IapReadByte(0);                       
  90   1              days=IapReadByte(1);                
  91   1              Count++;                                        
  92   1              IapEraseSector(0);              //擦除扇区      //34us
  93   1              IapProgramByte(0,Count);            //写入数据//38us
  94   1      
  95   1          cshh();                         //定时器中断初始化
  96   1          if(Count<C)
  97   1                 TR0=1;
  98   1      
  99   1          if(Count>=C||days==T)
 100   1              {
 101   2                TR0=0;
 102   2                jdq=1;
 103   2                IapEraseSector(0);            //擦除扇区
 104   2                IapProgramByte(0,C+2);            //写入数据
 105   2              } 
 106   1          while(1)
 107   1              { if(key==0)
 108   2               {
 109   3                while(!key);
 110   3                IapEraseSector(0);           //擦除扇区
 111   3               }
 112   2              }
 113   1      
 114   1      }
 115          
 116          /********************************************************************
 117                                      操作函数
C51 COMPILER V9.00   CHENGXU                                                               03/05/2012 10:22:22 PAGE 3   

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

 180   1      }
 181          
 182          /********************************************************************
 183                                     定时器中断初始化
 184          *********************************************************************/
 185          void cshh()
 186          { 
 187   1       TMOD|=0X01;//定义定时器工作方式
 188   1       TH0=(65536-60000)/256;
 189   1       TL0=(65536-60000)%256;
 190   1       ET0=1;
 191   1       EA=1;      //开中断
 192   1       }
 193          
 194          /********************************************************************
 195                                     定时器中断函数
 196          *********************************************************************/
 197          void timer1(void)interrupt 1
 198          { 
 199   1         TH0=(65536-60000)/256;  //60ms
 200   1         TL0=(65536-60000)%256;
 201   1         cnt++;
 202   1         if(cnt==1000)//1000次一分钟
 203   1          {
 204   2                       cnt=0;
 205   2                       fen++;
 206   2                       if(fen==60)                  //60次为一小时
 207   2                       { 
 208   3                         fen=0;
 209   3                         days++;
 210   3                         IapEraseSector(1);           //擦除扇区
 211   3                     IapProgramByte(1,Count);     //写入数据
 212   3                        
 213   3                       }
 214   2                       if(days==T)
 215   2                       {
 216   3                         jdq=1;
 217   3                         TR0=0;
 218   3                       }
 219   2              }   
 220   1      }
 221           
 222          /********************************************************************
 223                                      结束
 224          *********************************************************************/


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