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

📄 ds12c887.lst

📁 12887+1602drive goode luck!!
💻 LST
字号:
C51 COMPILER V6.23a  DS12C887                                                              10/25/2008 20:27:54 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE DS12C887
OBJECT MODULE PLACED IN DS12C887.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS12C887.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89X52.H>
   2          #include "DS12C887.h"
   3          #include <intrins.h>
   4          
   5          #define NOP() _nop_();_nop_();
   6          //===================================================
   7          unsigned char t_hour,t_minute,t_second;
   8          unsigned char At_hour,At_minute,At_second;
   9          unsigned char week;
  10          unsigned char d_year,d_month,d_day;
  11          //===================================================
  12          #if DS12C887_EN_ALE>0
  13          void ALE(void)
  14          {
  15   1        DS12C887_AS=0; 
  16   1        NOP();
  17   1        DS12C887_AS=1;
  18   1        NOP();
  19   1        DS12C887_AS=0;
  20   1      
  21   1        NOP();
  22   1        DS12C887_AS=1;
  23   1        NOP();
  24   1        DS12C887_AS=0; 
  25   1        NOP();
  26   1      }
  27          #endif
  28          //-----------------------------
  29          #if DS12C887_EN_WriteEn>0
              void WriteEn(void)
              {
                DS12C887_RW=1;
                NOP();
                DS12C887_RW=0;
                NOP();
                DS12C887_RW=1;
              }
              #endif
  39          //-----------------------------
  40          #if DS12C887_EN_ReadEn>0
  41          void ReadEn(void)
  42          {
  43   1        DS12C887_DS=1;
  44   1        NOP();
  45   1        DS12C887_DS=0;
  46   1        NOP();
  47   1      }
  48          #endif
  49          //----------------------------
  50          #if DS12C887_EN_init >0
              void DS12C887_init(void)
              {
              //将状态寄存器B的最高位SET设置为1
              //锁存状态寄存器B地址
                DS12C887_Data_Port=0xb;
C51 COMPILER V6.23a  DS12C887                                                              10/25/2008 20:27:54 PAGE 2   

                ALE(); //锁存地址
              //设置状态寄存器B的SET=1,开始设置其他的参数
              //状态寄存器B
              //bit7          bit6            bit5            bit4            bit3            bit2            bit1            bit0
              //SET           PIE                     AIE                     UIE                     SQW                     DM                      24/12           DSF     
              //设置允许      周期中断允许 闹钟中断   时间更新中断 允许方波生成 数据格式      时间格式        夏令时
              //同时设置UIE=0(允许更新中断),DM=1(二进制数据格式),24/12=1(24小时格式)
                DS12C887_Data_Port=0x96;
                WriteEn(); //写入允许
              
              //设置时标寄存器
                DS12C887_Data_Port=0; //锁存秒地址
                ALE(); //锁存地址
                DS12C887_Data_Port=t_second;//写入秒值
                WriteEn();
              
                DS12C887_Data_Port=1; //锁存秒闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=At_second;//写入秒闹钟值
                WriteEn();
              
                DS12C887_Data_Port=2; //锁存分钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=t_minute;//写入分钟值
                WriteEn();
              
                DS12C887_Data_Port=3; //锁存分钟闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=At_minute;//写入分钟闹钟值
                WriteEn();
              
                DS12C887_Data_Port=4; //锁存小时地址
                ALE(); //锁存地址
                DS12C887_Data_Port=t_hour;//写入小时值
                WriteEn(); 
              
                DS12C887_Data_Port=5; //锁存小时闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=At_hour;//写入小时闹钟值
                WriteEn();
              //----------------------------
                DS12C887_Data_Port=6; //锁存星期地址
                ALE(); //锁存地址
                DS12C887_Data_Port=week;//写入星期值
                WriteEn();
              
                DS12C887_Data_Port=7; //锁存日地址
                ALE(); //锁存地址
                DS12C887_Data_Port=d_day;//写入日值
                WriteEn();
              
                DS12C887_Data_Port=8; //锁存月地址
                ALE(); //锁存地址
                DS12C887_Data_Port=d_month;//写入月值
                WriteEn();
              
                DS12C887_Data_Port=9; //锁存年地址
                ALE(); //锁存地址
                DS12C887_Data_Port=d_year;//写入年值
                WriteEn();
              
              //设置寄存器A
C51 COMPILER V6.23a  DS12C887                                                              10/25/2008 20:27:54 PAGE 3   

              //状态寄存器A
              //bit7          bit6            bit5            bit4            bit3            bit2            bit1            bit0
              //UIP           DV2                     DV1                     DV0                     RS3                     RS2                     RS1                     RS0
              //readonly      0                       1                       0                       0                       0                       0                       0       
                DS12C887_Data_Port=0xa; //锁存寄存器A地址
                ALE(); //锁存地址
                DS12C887_Data_Port=0x20;//写寄存器A值
                WriteEn();
              //读取寄存器C,清除中断申请标志位
              //状态寄存器C
              //bit7          bit6            bit5            bit4            bit3            bit2            bit1            bit0
              //IRQF          PF                      AF                      UF                      0                       0                       0                       0
              //All Read Only  
                DS12C887_Data_Port=0xc; //锁存寄存器C地址
                ALE(); //锁存地址
                ReadEn();
                DS12C887_DS=1;
              
              //读取寄存器D,设置VRT位
                DS12C887_Data_Port=0xd; //锁存寄存器D地址
                ALE(); //锁存地址
                ReadEn();
                DS12C887_DS=1;
               
              //设置寄存器B,使得SET=0
                DS12C887_Data_Port=0xb; //锁存寄存器B地址
                ALE(); //锁存地址
                DS12C887_Data_Port=0x16;
                WriteEn(); //写入允许
              }
              #endif
 149          //=============================================
 150          #if DS12C887_EN_GetTime>0
 151          void GetTime(void)
 152          {
 153   1        DS12C887_Data_Port=0x0; //锁存秒地址
 154   1        ALE(); //锁存地址
 155   1        DS12C887_Data_Port=0xff;
 156   1        ReadEn();
 157   1        t_second=DS12C887_Data_Port;//读取秒值
 158   1        DS12C887_DS=1; 
 159   1      
 160   1        DS12C887_Data_Port=0x2; //锁存分钟地址
 161   1        ALE(); //锁存地址
 162   1        DS12C887_Data_Port=0xff;
 163   1        ReadEn();
 164   1        t_minute=DS12C887_Data_Port;//读取分钟值
 165   1        DS12C887_DS=1; 
 166   1      
 167   1        DS12C887_Data_Port=0x4; //锁存小时地址
 168   1        ALE(); //锁存地址
 169   1        DS12C887_Data_Port=0xff;
 170   1        ReadEn();
 171   1        t_hour=DS12C887_Data_Port;//读取小时值 
 172   1        DS12C887_DS=1; 
 173   1      }
 174          #endif
 175          //---------------------------------------
 176          #if DS12C887_EN_GetAlarmTime>0
              void GetAlarmTime(void)
              {
                DS12C887_Data_Port=0x1; //锁存秒闹钟地址
C51 COMPILER V6.23a  DS12C887                                                              10/25/2008 20:27:54 PAGE 4   

                ALE(); //锁存地址
                DS12C887_Data_Port=0xff;
                ReadEn();
                At_second=DS12C887_Data_Port;//读取秒闹钟值
                DS12C887_DS=1; 
              
                DS12C887_Data_Port=0x3; //锁存分钟闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=0xff;
                ReadEn();
                At_minute=DS12C887_Data_Port;//读取分钟闹钟值
                DS12C887_DS=1; 
              
                DS12C887_Data_Port=0x5; //锁存小时闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=0xff;
                ReadEn();
                At_hour=DS12C887_Data_Port;//读取小时闹钟值 
                DS12C887_DS=1; 
              }
              #endif
 201          //---------------------------------------------
 202          #if DS12C887_EN_GetDate>0
 203          void GetDate(void)
 204          {
 205   1        DS12C887_Data_Port=0x9; //锁存年地址
 206   1        ALE(); //锁存地址
 207   1        DS12C887_Data_Port=0xff;
 208   1        ReadEn();
 209   1        d_year=DS12C887_Data_Port;//读取年值
 210   1        DS12C887_DS=1; 
 211   1      
 212   1        DS12C887_Data_Port=0x8; //锁存月地址
 213   1        ALE(); //锁存地址
 214   1        DS12C887_Data_Port=0xff;
 215   1        ReadEn();
 216   1        d_month=DS12C887_Data_Port;//读取月值
 217   1        DS12C887_DS=1; 
 218   1      
 219   1        DS12C887_Data_Port=0x7; //锁存日地址
 220   1        ALE(); //锁存地址
 221   1        DS12C887_Data_Port=0xff;
 222   1        ReadEn();
 223   1        d_day=DS12C887_Data_Port;//读取日值  
 224   1        DS12C887_DS=1; 
 225   1      }
 226          #endif
 227          //---------------------------------------------
 228          #if DS12C887_EN_GetWeek>0
 229          void GetWeek(void)
 230          {
 231   1        DS12C887_Data_Port=0x6; //锁存星期地址
 232   1        ALE(); //锁存地址
 233   1        DS12C887_Data_Port=0xff;
 234   1        ReadEn();
 235   1        week=DS12C887_Data_Port;//读取星期值
 236   1        DS12C887_DS=1; 
 237   1      }
 238          #endif
 239          //================================================
 240          #if DS12C887_EN_SetTime>0
              void SetTime(void)
C51 COMPILER V6.23a  DS12C887                                                              10/25/2008 20:27:54 PAGE 5   

              {
                DS12C887_Data_Port=0x0; //锁存秒地址
                ALE(); //锁存地址
                DS12C887_Data_Port=t_second;//写入秒值
                WriteEn();
              
                DS12C887_Data_Port=0x2; //锁存分钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=t_minute;//写入分钟值
                WriteEn();
              
                DS12C887_Data_Port=0x4; //锁存小时地址
                ALE(); //锁存地址
                DS12C887_Data_Port=t_hour;//写入小时值 
                WriteEn();
              }
              #endif
 259          //---------------------------------------
 260          #if DS12C887_EN_SetAlarmTime>0
              void SetAlarmTime(void)
              {
                DS12C887_Data_Port=0x1; //锁存秒闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=At_second;//写入秒闹钟值
                WriteEn();
              
                DS12C887_Data_Port=0x3; //锁存分钟闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=At_minute;//写入分钟闹钟值
                WriteEn();
              
                DS12C887_Data_Port=0x5; //锁存小时闹钟地址
                ALE(); //锁存地址
                DS12C887_Data_Port=At_hour;//写入小时闹钟值 
                WriteEn();
              }
              #endif
 279          //---------------------------------------------
 280          #if DS12C887_EN_SetDate>0
              void SetDate(void)
              {
                DS12C887_Data_Port=0x9; //锁存年地址
                ALE(); //锁存地址
                DS12C887_Data_Port=d_year;//写入年值
                WriteEn();
              
                DS12C887_Data_Port=0x8; //锁存月地址
                ALE(); //锁存地址
                DS12C887_Data_Port=d_month;//写入月值
                WriteEn();
              
                DS12C887_Data_Port=0x7; //锁存日地址
                ALE(); //锁存地址
                DS12C887_Data_Port=d_day;//写入日值  
                WriteEn();
              }
              #endif
 299          //---------------------------------------------
 300          #if DS12C887_EN_SetWeek>0
              void SetWeek(void)
              {
                DS12C887_Data_Port=0x6; //锁存星期地址
C51 COMPILER V6.23a  DS12C887                                                              10/25/2008 20:27:54 PAGE 6   

                ALE(); //锁存地址
                DS12C887_Data_Port=week;//写入星期值
                WriteEn();
              }
              #endif
 309          


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