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

📄 ds1302.lst

📁 基于msc单片机仿真机的仿真程序
💻 LST
字号:
C51 COMPILER V7.07   DS1302                                                                11/28/2006 09:20:52 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //*******************************************************************
   2          //***此程序为调试通过的源程序
   3          //***由南京赛博电子有限公司提供
   4          //***文件名:sy0606.C***//
   5          //***是51系例单片机的最小系统
   6          //***有AT89S51/52的在线下载功能
   7          //***IIC总线芯片为24C02,记存密码
   8          //*******************************************************************
   9          #include"reg52.h"
  10          #include<intrins.h>
  11          #define  uchar unsigned char    
  12          #define  uint  unsigned int
  13          #define  nop  _nop_()       /* 定义空操作指令 */
  14          sbit clk=P1^3;                          /*时钟芯片DS1302时钟输入端*/
  15          sbit DINOUT=P1^4;                       /*DS1302时钟芯片数据输入输出端*/        
  16          sbit RST=P1^5;                          /*DS1302芯片复位起始端*/
  17          sbit en =P1^7;                          /*DTLED-6显示芯片使能端*/       
  18          sbit dout=P1^6;                         /*DTLED-6显示芯片数据读入端*/
  19          sbit ts_clk=P1^3;
  20          uchar dispbuf[9];                       /*显示值存放阵列*/
  21          uchar clocktmp[3];                      /*显示值存放阵列*/
  22          uchar clockbak;         
  23          void tsled(void);                        /*串行发送到DTLED-6副程式*/    
  24          void Rd1302st(void);            /*读时钟芯片DS1302*/
  25          void Rd1302(void);                      /*读时钟芯片DS1302*/
  26          void Wr1302(void);                                      /*写时钟芯片DS1302*/
  27          /***********************************************************************/
  28          void delay (unsigned int value)         /*延时副程式*/
  29           {
  30   1            while (value!=0) value--;         /*10US延时*/
  31   1       }
  32          /***********************************************************************/
  33          void main(void)                                 /*主程式*/
  34          {
  35   1              dispbuf[0]=0x03;        /*小数点位*/
  36   1              dispbuf[7]=0x01;        /*ID号码*/
  37   1          Wr1302();           /*写时钟芯片DS1302*/
  38   1          delay(10);
  39   1          Rd1302st();                 /*启动时钟芯片振荡器*/
  40   1          delay(10);
  41   1          while(1)
  42   1          {
  43   2                 Rd1302();                            /*读时钟芯片DS1302*/
  44   2                 if(dispbuf[1]!=clockbak)     /*秒加一*/      
  45   2                   {
  46   3                         clockbak=dispbuf[1];
  47   3                         tsled();             /*串行发送到DTLED-6副程式*/             
  48   3                        }
  49   2          }
  50   1      }
  51          /*********************************************************************/
  52          //串行发送DTLED-6显示
  53          void tsled(void)                        /*串行发送DTLED-6显示副程式*/   
  54          {   char ts0,i,j;
  55   1              ts_clk=0;
C51 COMPILER V7.07   DS1302                                                                11/28/2006 09:20:52 PAGE 2   

  56   1              en=0;
  57   1              delay(10);
  58   1              for(j=0;j<9;j++)
  59   1              {       ts0=dispbuf[j];
  60   2                      for(i=0;i<4;i++)                /*发小数点码8,4,2,1*/
  61   2                      {
  62   3                      ts_clk=1;
  63   3                      ts0=ts0<<1;     
  64   3                      if(AC==1) 
  65   3                      dout=1;
  66   3                      else      dout=0;
  67   3                      ts_clk=0;
  68   3                      nop;
  69   3                      delay(3);
  70   3                      }
  71   2         }    
  72   1              en=1;
  73   1      }               /*返回主程式*/
  74          
  75          //======================================================================
  76          
  77          void Wr1302(void)                                       /*写时钟芯片DS1302*/
  78          {char i,j,ts0,conb,conbyt;
  79   1              conb=0x80;
  80   1              ts0=conb;
  81   1      //
  82   1      for(j=0;j<3;j++)                        /*写秒,分,时三次循环*/
  83   1              {clk=RST=0;                                     /*DS1302系统初始化*/
  84   2                      nop;nop;
  85   2                      RST=1;
  86   2              for(i=0;i<8;i++)                        /*写控制字到DS1302*/
  87   2                {clk=0;                                       /*清时钟*/
  88   3                      if(conb&0x01) 
  89   3                                      DINOUT=1;
  90   3                      else    DINOUT=0;
  91   3                      clk=1;                                  /*时钟上升沿,发送数据有效*/
  92   3                      conb=conb>>1;   
  93   3                      nop;
  94   3                }
  95   2                      clk=0;                                  /*清时钟*/
  96   2                      conb=ts0+2+j*2;
  97   2              conbyt=clocktmp[j]&0x7f;
  98   2              for(i=0;i<8;i++)                        /*写设定值到DS1302*/
  99   2                {clk=0;                                       /*清时钟*/
 100   3                 if(conbyt&0x01) 
 101   3                                      DINOUT=1;
 102   3                      else    DINOUT=0;
 103   3                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 104   3                      conbyt=conbyt>>1;       
 105   3                      nop;
 106   3                }
 107   2              delay(5);
 108   2              RST=0;
 109   2          nop;
 110   2      }
 111   1              }
 112                          /*返回主程式*/
 113          /******************************************************/
 114          void Rd1302st()                         /*启动时钟芯片振荡器*/
 115          {
 116   1      char i,ts0,conb,conbyt;
 117   1              Rd1302();
C51 COMPILER V7.07   DS1302                                                                11/28/2006 09:20:52 PAGE 3   

 118   1              conbyt=clocktmp[0]&0x7f;
 119   1              conb=0x80;
 120   1              ts0=conb;
 121   1              clk=RST=0;                                      /*DS1302系统初始化*/
 122   1              nop;nop;
 123   1              RST=1;
 124   1              for(i=0;i<8;i++)                        /*写控制字到DS1302*/
 125   1                {     clk=0;                                  /*清时钟*/
 126   2                      if(conb&0x01) 
 127   2                                      DINOUT=1;
 128   2                      else    DINOUT=0;
 129   2                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 130   2                      conb=conb>>1;   
 131   2                      nop;
 132   2                }
 133   1                      clk=0;                                  /*清时钟*/
 134   1              for(i=0;i<8;i++)                        /*写控制字到DS1302*/
 135   1                {     clk=0;                                  /*清时钟*/
 136   2                      if(conbyt&0x01) 
 137   2                                      DINOUT=1;
 138   2                      else    DINOUT=0;
 139   2                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 140   2                      conbyt=conbyt>>1;       
 141   2                      nop;
 142   2                }
 143   1              delay(5);
 144   1              RST=0;
 145   1      nop;
 146   1      }               /*返回主程式*/
 147          /******************************************************/
 148          void Rd1302()                           /*读时钟芯片DS1302*/
 149          {char i,j,ts0,conb;
 150   1              conb=0x81;
 151   1              clocktmp[0]=0;
 152   1              clocktmp[1]=0;
 153   1              clocktmp[2]=0;
 154   1              ts0=conb;
 155   1      for(j=0;j<3;j++)
 156   1         {clk=RST=0;                                  /*DS1302系统初始化*/
 157   2              nop;nop;
 158   2              RST=1;
 159   2              for(i=0;i<8;i++)                        /*写控制字到DS1302*/
 160   2                {
 161   3                      clk=0;                                  /*清时钟*/
 162   3                      if(conb&0x01) 
 163   3                                      DINOUT=1;
 164   3                      else    DINOUT=0;
 165   3                      clk=1;                                  /*时钟上升沿,发送数据有效*/
 166   3                      conb=conb>>1;   
 167   3                      nop;
 168   3                }
 169   2              conb=ts0=ts0+2;
 170   2              clk=0;
 171   2              for(i=0;i<7;i++)                        /*读时钟芯片的时分秒单元*/
 172   2              {
 173   3              if(DINOUT==1) 
 174   3                              clocktmp[j]=clocktmp[j]|0x80;
 175   3              else    clocktmp[j]=clocktmp[j]&0x7f;
 176   3              clk=1;
 177   3              clocktmp[j]=clocktmp[j]>>1;     /*接收暂存单元*/        
 178   3              nop;
 179   3              clk=0;                                  /*时钟下降沿,接收数据有效*/
C51 COMPILER V7.07   DS1302                                                                11/28/2006 09:20:52 PAGE 4   

 180   3              }
 181   2              delay(5);
 182   2              RST=0;
 183   2              delay(10);
 184   2         }
 185   1              dispbuf[1]=clocktmp[0]&0x0f;    /*转换秒分时显示单元*/
 186   1              dispbuf[2]=clocktmp[0]>>4&0x07;
 187   1              dispbuf[3]=clocktmp[1]&0x0f;
 188   1              dispbuf[4]=clocktmp[1]>>4&0x07;
 189   1              dispbuf[5]=clocktmp[2]&0x0f;
 190   1              dispbuf[6]=clocktmp[2]>>4&0x03;
 191   1      }               /*返回主程式*/
 192          //**************************************************************
 193          


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