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

📄 ds1302.lst

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.08   DS1302                                                                04/19/2008 21:34:32 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include        <reg52.h>                                                               //头文件
   2          #include        <stdio.h>
   3          
   4          #define uchar unsigned char                                             //宏定义
   5          
   6          sbit SCLK = P1^3;                                                               //声明接口引脚
   7          sbit I_O   = P1^4;
   8          sbit RSTB = P1^5;
   9          
  10          void            ResetDS1302();                                          //复位函数声明
  11          void            InitDS1302();                                                   // DS1302初始化函数声明
  12          void            WriteClkByte();                                                 //时钟字节写入函数声明
  13          void            WriteRamByte();                                         // RAM字节写入函数声明
  14          uchar   ReadByteDS1302();                                               //字节读取函数声明
  15          void            WriteByteDS1302(uchar);                                 //字节写入函数声明
  16          void            Display(uchar);                                                 //显示时钟寄存器内容函数声明
  17          void            BurstReadRAM();                                         //多字节突发方式读取RAM函数声明
  18          void            BurstWriteRAM();                                                //多字节突发方式写入RAM函数声明
  19          
  20          void main (void)                                                                //主函数
  21          {
  22   1      uchar Key, Key1,Key2;
  23   1          SCON  = 0x50;                                                               //设置串行口: 方式 1, 8位UART, 允许接收
  24   1          TMOD  |= 0x20;                                                      //设置定时器T1, 方式 2, 8位自动重装
  25   1      PCON  =0x80;                                                            //设置SMOD=1
  26   1      TL1    =0xF4;                                                           //波特率4800bit/s,初值
  27   1      TH1   =0xF4;
  28   1          TR1   = 1;                                                          //开启定时器1
  29   1          TI     = 1;
  30   1      
  31   1              printf("***********AT89S52 CONTROL DS1302***********\n\n");
  32   1              printf("Initialize the DS1302.\n");
  33   1              InitDS1302();                                                           //初始化DS1302
  34   1              while (1) 
  35   1              { 
  36   2              printf("\nEnter DS1302 Menu Selection:");
  37   2              printf("c or C: Run the Clock Routine\n");
  38   2              printf("i or I: Initialize the DS1302\n");
  39   2              printf("r or R: Run the RAM Routine\n");
  40   2      
  41   2              Key = _getkey();                                                        //获取输入字符
  42   2              switch(Key) 
  43   2              {
  44   3                      case 'c':                                                               //执行时钟操作
  45   3                      case 'C':
  46   3                              printf("\rRun the Clock Routine\n");
  47   3      
  48   3                              Key1 = _getkey();                                       //获取输入字符
  49   3                              switch(Key1) 
  50   3                              {
  51   4                                      case 'd':                                               //显示
  52   4                                      case 'D':
  53   4                                              Display(1);                     
  54   4                                              break;
  55   4                              case 'w':                                               //时钟字节写入
C51 COMPILER V8.08   DS1302                                                                04/19/2008 21:34:32 PAGE 2   

  56   4                              case 'W':       
  57   4                                              WriteClkByte(); 
  58   4                                              break;
  59   4                              }
  60   3                              break;
  61   3      
  62   3                      case 'i':                                                               //初始化DS1302
  63   3                      case 'I':       
  64   3                              InitDS1302();
  65   3                              break;
  66   3      
  67   3                      case 'r':                                                               //RAM操作
  68   3                      case 'R':
  69   3                              printf("\rRun the RAM Routine\n");
  70   3      
  71   3                              Key2 = _getkey();                                       //获取输入字符
  72   3                              switch(Key2) 
  73   3                              {
  74   4                                      case 'b':                                               //RAM字节写入
  75   4                                      case 'B':       
  76   4                                              WriteRamByte(); 
  77   4                                              break;
  78   4                                      case 'r':                                               //多字节突发方式读取RAM
  79   4                                      case 'R':
  80   4                                              BurstReadRAM(); 
  81   4                                              break;
  82   4                                      case 'w':                                               //多字节突发方式写入RAM
  83   4                                      case 'W':       
  84   4                                              BurstWriteRAM();        
  85   4                                              break;
  86   4                              }
  87   3                      break;
  88   3              }
  89   2         }
  90   1      }
  91          
  92          void ResetDS1302() 
  93          {
  94   1         SCLK = 0;
  95   1         RSTB = 0;
  96   1         RSTB = 1;
  97   1      }
  98          
  99          uchar ReadByteDS1302()
 100          {
 101   1      uchar i;
 102   1      uchar RByte;
 103   1      uchar TempByte;
 104   1      
 105   1              RByte = 0x00;
 106   1              I_O = 1;
 107   1              for(i=0; i<8; ++i)                                                      //逐位读取字节数据
 108   1      {
 109   2                      SCLK = 1;                                                               //时钟操作
 110   2                      SCLK = 0;
 111   2                      TempByte = (uchar)I_O;
 112   2                      TempByte <<= 7;                                         //移位
 113   2                      RByte >>= 1;
 114   2                      RByte |= TempByte; 
 115   2              }
 116   1              return RByte;                                                           //返回结果
 117   1      }
C51 COMPILER V8.08   DS1302                                                                04/19/2008 21:34:32 PAGE 3   

 118          
 119          
 120          
 121          void WriteByteDS1302(uchar W_Byte) 
 122          {
 123   1      uchar i;
 124   1              for(i = 0; i < 8; ++i)                                                  //循环逐位写入
 125   1      {
 126   2                      I_O = 0;
 127   2                      if(W_Byte & 0x01) I_O = 1;
 128   2                      SCLK = 0;                                                               //时钟操作
 129   2                      SCLK = 1;
 130   2                      W_Byte >>= 1;                                                   //移位
 131   2          }
 132   1      }
 133          
 134          
 135          
 136          void WriteClkByte() 
 137          {
 138   1      uchar Address;
 139   1      uchar Data;     
 140   1      
 141   1              printf("\nWrite Clock Function:");  
 142   1      printf("\nWrite Clock ADDRESS:");  
 143   1              scanf("%bu", &Address);                                                 //获取地址
 144   1              printf("\nWrite Clock DATA:");
 145   1              scanf("%bx", &Data);                                            //获取数据
 146   1              
 147   1              Address = ((Address * 2) | 0x80);                               //时钟数据写入命令
 148   1              ResetDS1302();                                                  //复位DS1302
 149   1              WriteByteDS1302(Address);                                       //写地址
 150   1              WriteByteDS1302(Data);                                          //写数据
 151   1              ResetDS1302();                                                  //复位DS1302

⌨️ 快捷键说明

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