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

📄 ds1302.lst

📁 0809ADC转换程序汇编
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.02a   DS1302                                                               04/22/2003 22:51:04 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN Ds1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Ds1302.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #pragma small
   2          #include <reg52.h>
   3          #define uchar unsigned char
   4          /************************************引脚连接图*****************************************/
   5          sbit ds1302_clk=P1^0;
   6          sbit ds1302_dat=P1^1;
   7          sbit ds1302_rst=P1^2;
   8          
   9          sbit ACC_0 = ACC^0;
  10          sbit ACC_1 = ACC^1;
  11          sbit ACC_2 = ACC^2;
  12          sbit ACC_3 = ACC^3;
  13          sbit ACC_4 = ACC^4;
  14          sbit ACC_5 = ACC^5;
  15          sbit ACC_6 = ACC^6;
  16          sbit ACC_7 = ACC^7;
  17          
  18          /*************************************函数说明******************************************/
  19          void Read(void);                                                                //写DS1302操作
  20          void Write(void);                                                               //读DS1302操作
  21          uchar ReadRam_Byte(uchar address);                      //从Ram中读出一个字节
  22          uchar ReadRTC_Byte(uchar address);                      //从DS1302中读出一个字节
  23          uchar WriteRam_Byte(uchar address,uchar number);        //向Ram中写入一个字节
  24          uchar WriteRTC_Byte(uchar address,uchar number);        //向DS1302中写入一个字节
  25          void ReadRam(uchar data * buffer,uchar size);                   //从Ram中读出多个字节
  26          void ReadRTC(uchar data * buffer,uchar size);                   //从DS1302中读出多个字节
  27          void WriteRam(uchar data * buffer,uchar size);                  //向Ram中写入多个字节
  28          void WriteRTC(uchar data * buffer,uchar size);                  //向DS1302中写入多个字节
  29          uchar ReadSec(void);                                                    //从DS1302中读出秒字节
  30          uchar ReadMin(void);                                                    //从DS1302中读出分字节
  31          uchar ReadHr(void);                                             //从DS1302中读出时字节
  32          uchar ReadDay(void);                                                    //从DS1302中读出日字节
  33          uchar ReadMonth(void);                                          //从DS1302中读出月字节
  34          uchar ReadWeek(void);                                                   //从DS1302中读出星期字节
  35          uchar ReadYear(void);                                                   //从DS1302中读出年字节
  36          void WriteSec(uchar number);                                            //向DS1302中写入秒字节
  37          void WriteMin(uchar number);                                    //向DS1302中写入分字节
  38          void WriteHr(uchar number);                                     //向DS1302中写入时字节
  39          void WriteDay(uchar number);                                    //向DS1302中写入日字节
  40          void WriteMonth(uchar number);                                  //向DS1302中写入月字节
  41          void WriteWeek(uchar number);                                   //向DS1302中写入星期字节
  42          void WriteYear(uchar number);                                   //向DS1302中写入年字节
  43          void WriteControl(uchar number);                                        //向慢速充电控制寄存器写入控制字节
  44          void EnableWP(void);                                                    //禁止写保护
  45          void DisableWP(void);                                                   //允许写保护
  46          
  47          void Write(void)                                        //写DS1302操作
  48          {
  49   1              ds1302_dat = ACC_0;                     //写DS1302
  50   1              ds1302_clk = 1;                                 //时钟上升沿,发送数据有效
  51   1              ds1302_clk = 0;                         //清零时钟总线
  52   1          ds1302_dat = ACC_1; 
  53   1              ds1302_clk = 1; ds1302_clk = 0;
  54   1          ds1302_dat = ACC_2; 
  55   1              ds1302_clk = 1; ds1302_clk = 0;
C51 COMPILER V7.02a   DS1302                                                               04/22/2003 22:51:04 PAGE 2   

  56   1          ds1302_dat = ACC_3; 
  57   1              ds1302_clk = 1; ds1302_clk = 0;
  58   1          ds1302_dat = ACC_4; 
  59   1              ds1302_clk = 1; ds1302_clk = 0;
  60   1          ds1302_dat = ACC_5; 
  61   1              ds1302_clk = 1; ds1302_clk = 0;
  62   1          ds1302_dat = ACC_6; 
  63   1              ds1302_clk = 1; ds1302_clk = 0;
  64   1          ds1302_dat = ACC_7;
  65   1              ds1302_clk = 1; ds1302_clk = 0;
  66   1      }
  67          
  68          void Read(void)                                 //读DS1302操作
  69          {
  70   1          ACC_0 = ds1302_dat;                         //读取DS1302数据
  71   1              ds1302_clk = 1;                                 //时钟上升沿,发送数据有效
  72   1              ds1302_clk = 0;                                 //清零时钟总线
  73   1          ACC_1 = ds1302_dat; 
  74   1              ds1302_clk = 1; ds1302_clk = 0;
  75   1          ACC_2 = ds1302_dat; 
  76   1              ds1302_clk = 1; ds1302_clk = 0;
  77   1          ACC_3 = ds1302_dat; 
  78   1              ds1302_clk = 1; ds1302_clk = 0;
  79   1          ACC_4 = ds1302_dat; 
  80   1              ds1302_clk = 1;ds1302_clk = 0;
  81   1          ACC_5 = ds1302_dat; 
  82   1              ds1302_clk = 1; ds1302_clk = 0;
  83   1          ACC_6 = ds1302_dat; 
  84   1              ds1302_clk = 1; ds1302_clk = 0;
  85   1          ACC_7 = ds1302_dat; 
  86   1              ds1302_rst = 0; ds1302_clk = 1;
  87   1      }
  88          
  89          uchar ReadRam_Byte(uchar address)       //从RAM中读出一个字节
  90          {
  91   1          ds1302_rst = 0;                             //复位引脚为低电平,所有数据传送中止
  92   1          ds1302_clk = 0;                             //清零时钟总线
  93   1              ds1302_rst = 1;                         //复位引脚为高电平,逻辑控制有效
  94   1              ACC = address;
  95   1              Write();                                //写DS1302操作
  96   1          ds1302_dat = 1;
  97   1              Read();                         //读DS1302操作
  98   1          return ACC;
  99   1      }
 100          
 101          uchar ReadRTC_Byte(uchar address)                       //从DS1302中读出一个字节
 102          {
 103   1          ds1302_rst = 0;                             //复位引脚为低电平,所有数据传送中止
 104   1          ds1302_clk = 0;                             //清零时钟总线
 105   1          ds1302_rst = 1;                             //复位引脚为高电平,逻辑控制有效
 106   1          ACC = address;
 107   1          Write();                            //对DS1302写命令字和地址
 108   1              ds1302_dat = 1;
 109   1              Read();                         //读DS1302操作
 110   1          return ACC;                                 //返回读取的数据
 111   1      }
 112          
 113          uchar WriteRam_Byte(uchar address,uchar number)    //向RAM中写入一个字节
 114          {
 115   1          ds1302_clk = 0; ds1302_rst = 0;ds1302_rst = 1;
 116   1          ACC = address;
 117   1              Write();                                //对DS1302写命令字和地址
C51 COMPILER V7.02a   DS1302                                                               04/22/2003 22:51:04 PAGE 3   

 118   1          ACC = number;
 119   1              Write();                                //对DS1302写命令字和数据
 120   1          ds1302_rst = 0;
 121   1              ds1302_clk = 1;
 122   1          return ACC;
 123   1      }
 124          
 125          uchar WriteRTC_Byte(uchar address,uchar number)    //向DS1302中写入一个字节
 126          {
 127   1          ds1302_clk = 0;
 128   1          ds1302_rst = 0;ds1302_rst = 1;
 129   1          ACC = address;
 130   1          ACC |= 0x80;
 131   1          Write();                            //对DS1302写命令字和地址
 132   1          ACC = number;
 133   1              Write();                                //对DS1302写命令字和数据
 134   1          ds1302_rst = 0; ds1302_clk = 1;
 135   1          return ACC;
 136   1      }
 137          
 138          void ReadRam(uchar data * buffer,uchar size)    //从RAM中读出多个字节
 139          {
 140   1          register uchar a,b;
 141   1          ds1302_clk = 0;
 142   1          ds1302_rst = 0;
 143   1          ds1302_rst = 1;
 144   1          ACC = 0xff;                                 //命令字为FFH
 145   1              Write();                                //对DS1302写命令字和地址
 146   1          ds1302_dat = 1;
 147   1          for(a=0;a<size;a++)
 148   1          {
 149   2              ACC_0 = ds1302_dat;    
 150   2              ds1302_clk = 1; ds1302_clk = 0; ACC_1 = ds1302_dat;
 151   2              ds1302_clk = 1; ds1302_clk = 0; ACC_2 = ds1302_dat;
 152   2              ds1302_clk = 1; ds1302_clk = 0; ACC_3 = ds1302_dat;
 153   2              ds1302_clk = 1; ds1302_clk = 0; ACC_4 = ds1302_dat;
 154   2              ds1302_clk = 1; ds1302_clk = 0; ACC_5 = ds1302_dat;
 155   2              ds1302_clk = 1; ds1302_clk = 0; ACC_6 = ds1302_dat;
 156   2              ds1302_clk = 1; ds1302_clk = 0; ACC_7 = ds1302_dat;
 157   2              b = ACC;
 158   2              *(buffer+a)=b;
 159   2              ds1302_clk = 1; ds1302_clk = 0;
 160   2          }
 161   1          ds1302_rst = 0; ds1302_clk = 1;
 162   1      }
 163          
 164          void ReadRTC(uchar data * buffer,uchar size)            //从DS1302中读出多个字节
 165          {
 166   1          register uchar a,b;
 167   1          ds1302_clk = 0;
 168   1          ds1302_rst = 0;
 169   1          ds1302_rst = 1;
 170   1          ACC = 0xbf;                         //命令字为BFH

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -