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

📄 main.lst

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:35:36 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <absacc.h>
   2          #include <intrins.h>
   3          #include <./Atmel/at89x51.h>
   4          
   5          //定义常量
   6          #define true  1
   7          #define false 0
   8          
   9          //定义变量
  10          unsigned char   data1,data2,data3,data4;
  11          unsigned char   date[7];   /*日期数组date[0]=year,date[1]=month,date[2]=day,date[3]=week,
  12                                                          date[4]=hour,date[5]=minute,date[6]=second*/
  13          //定义IO口
  14          sbit    SDA=P3^0;
  15          sbit    SCL=P3^1;              
  16          
  17          //函数声名
  18          void I2CWait(void);
  19          bit  I2CStart(void);
  20          void I2CStop(void);
  21          void I2CSendAck(void);
  22          void I2CSendNoAck(void);
  23          bit  I2CWaitAck(void);
  24          
  25          void I2CSendByte(unsigned char demand,bit order);
  26          unsigned char I2CReceiveByte(void);
  27          
  28          void I2CWriteStatus(void);
  29          void I2CWriteTime(void);
  30          void I2CReadDate(void);
  31          void Delay(unsigned int nn);
  32          
  33          /*******************************************************
  34          功能:主函数
  35          描述:初始化、实时时间校准、读入时间、显示
  36          参数:无
  37          返回:无
  38          ********************************************************/
  39          main()
  40          {
  41   1              P3=0xFF; 
  42   1              I2CWriteStatus();//设置为24小时制
  43   1              I2CWriteTime();//对实时时间进行校准,一般情况下不需要
  44   1              while(1)
  45   1              {
  46   2                       I2CReadDate();
  47   2                       //此处添加显示程序,可参考5、6、7章
  48   2               Delay(250);
  49   2               Delay(250);
  50   2          }
  51   1      
  52   1      }
  53          
  54          /*******************************************************
  55          功能:I2CWait
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:35:36 PAGE 2   

  56          描述:I2C延时
  57          参数:无
  58          返回:无
  59          ********************************************************/
  60          void I2CWait(void)
  61          {       
  62   1              _nop_();_nop_();_nop_();_nop_();
  63   1      }
  64          
  65          
  66          /*******************************************************
  67          功能:I2CStart
  68          描述:开启SD2000的I2C总线
  69          参数:无
  70          返回:位变量I2CStart,1=I2C总线可用,0=I2C总线不可用
  71          ********************************************************/
  72          bit I2CStart(void)
  73          {
  74   1              SDA=1;
  75   1              SCL=1;
  76   1              I2CWait();
  77   1              if(!SDA)return false;//SDA线为低电平则总线忙,退出
  78   1              SDA=0;
  79   1              I2CWait();
  80   1              while(SDA)return false;//SDA线为高电平则总线出错,退出
  81   1              SCL=0;
  82   1              I2CWait();
  83   1              return true;
  84   1      }
  85          
  86          /*******************************************************
  87          功能:I2CStop
  88          描述:关闭SD2000的I2C总线
  89          参数:无
  90          返回:无
  91          ********************************************************/
  92          void I2CStop(void)
  93          {
  94   1              SDA=0;
  95   1              SCL=0;
  96   1              I2CWait();
  97   1              SCL=1;
  98   1              I2CWait();
  99   1              SDA=1;
 100   1      }
 101          
 102          /*******************************************************
 103          功能:I2CSendAck
 104          描述:发送 ACK
 105          参数:无
 106          返回:无
 107          ********************************************************/
 108          void I2CSendAck(void)
 109          {       
 110   1              SDA=0;
 111   1              SCL=0;
 112   1              I2CWait();
 113   1              SCL=1;
 114   1              I2CWait();
 115   1              SCL=0;
 116   1      }
 117          
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:35:36 PAGE 3   

 118          /*******************************************************
 119          功能:I2CSendNoAck
 120          描述:发送NO ACK
 121          参数:无
 122          返回:无
 123          ********************************************************/
 124          void I2CSendNoAck(void)
 125          {       
 126   1              SDA=1;
 127   1              SCL=0;
 128   1              I2CWait();
 129   1              SCL=1;
 130   1              I2CWait();
 131   1              SCL=0;
 132   1      }
 133          
 134          /*******************************************************
 135          功能:I2CWaitAck
 136          描述:读取ACK信号
 137          参数:无
 138          返回:位变量I2CWaitAck,返回为:1=有ACK,0=无ACK
 139          ********************************************************/
 140          bit I2CWaitAck(void)  
 141          {
 142   1              unsigned char errtime=255;
 143   1              SCL=0;
 144   1              SDA=1;
 145   1              I2CWait();
 146   1              SCL=1;
 147   1              I2CWait();
 148   1              while(SDA)
 149   1              {
 150   2                      errtime--;
 151   2                      if(!errtime)
 152   2                      SCL=0;
 153   2                      return false;
 154   2              }
 155   1              SCL=0;
 156   1              return true;
 157   1      }
 158          
 159          /*******************************************************
 160          功能:I2CSendByte
 161          描述:向SD2000发送一个字节
 162          参数:待发送字节demand,发送顺序指示order
 163                order=1,从HI-->LO发送8bit数据
 164                order=0,从LO-->HI发送8bit数据
 165          返回:无
 166          ********************************************************/
 167          void I2CSendByte(unsigned char demand,bit order)
 168          {
 169   1              unsigned char i=8;                       
 170   1                                              
 171   1              if(order)
 172   1              {
 173   2                      while(i--)
 174   2                      {
 175   3                              SCL=0;
 176   3                              _nop_();
 177   3                              SDA=(bit)(demand&0x80);
 178   3                              demand<<=1;
 179   3                              I2CWait();
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:35:36 PAGE 4   

 180   3                              SCL=1;
 181   3                              I2CWait();
 182   3                      }
 183   2                      SCL=0;
 184   2              }
 185   1           else
 186   1              {
 187   2                      while(i--)
 188   2                       {
 189   3                              SCL=0;
 190   3                              _nop_();
 191   3                              SDA=(bit)(demand&0x01);
 192   3                              demand>>=1;
 193   3                              I2CWait();
 194   3                              SCL=1;
 195   3                              I2CWait();
 196   3                       }
 197   2                       SCL=0;
 198   2              }
 199   1      }
 200          
 201          /*******************************************************
 202          功能:I2CReceiveByte
 203          描述:从SD2000读入一字节
 204          参数:无
 205          返回:读取的字节I2CReceiveByte
 206          ********************************************************/
 207          unsigned char I2CReceiveByte(void)
 208          {
 209   1              unsigned char i=8;
 210   1              unsigned char ddata=0;
 211   1              SDA=1;
 212   1              while(i--)
 213   1              {
 214   2                      ddata>>=1;          //数据从低位开始读取
 215   2                      SCL=0;
 216   2                      I2CWait();
 217   2                      SCL=1;
 218   2                      I2CWait();         //从低位开始 ddata|=SDA;ddata>>=1
 219   2                      if(SDA)
 220   2                      {
 221   3                              ddata|=0x80;
 222   3                      }
 223   2              }
 224   1              SCL=0;
 225   1              return ddata;
 226   1      }
 227          
 228          /*******************************************************
 229          功能:I2CReadDate
 230          描述:读SD2000实时数据寄存器,将结果写入date数组
 231          参数:无
 232          返回:无
 233          ********************************************************/
 234          void I2CReadDate(void)
 235          {
 236   1              unsigned char n;
 237   1              I2CStart();
 238   1              I2CSendByte(0x65,1);       //从年开始读取数据
 239   1              I2CWaitAck();
 240   1              for(n=0;n<7;n++)
 241   1              {
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:35:36 PAGE 5   

 242   2                      date[n]=I2CReceiveByte();
 243   2                      if (n!=6)         //最后一个数据不应答
 244   2                      {
 245   3                              I2CSendAck();
 246   3                      }
 247   2              }
 248   1              I2CSendNoAck();
 249   1              I2CStop();
 250   1      }
 251          
 252          /*******************************************************
 253          功能:I2CWriteStatus
 254          描述:写SD2000状态寄存器命令,设置为24小时制
 255          参数:无
 256          返回:无
 257          ********************************************************/
 258          void I2CWriteStatus(void)
 259          {               
 260   1              I2CStart();
 261   1              I2CSendByte(0x62,1);      //发送SD2000状态寄存器命令,
 262   1              I2CWaitAck();   
 263   1              I2CSendByte(0x40,0);      //24小时制,关所有中断
 264   1              I2CWaitAck();
 265   1              I2CStop();        
 266   1      }
 267          
 268          /*******************************************************
 269          功能:I2CWriteTime
 270          描述:写SD2000时间寄存器命令
 271          参数:无
 272          返回:无
 273          ********************************************************/
 274          void I2CWriteTime(void)
 275          {               
 276   1              
 277   1              unsigned char n;
 278   1                  date[0]=0x06;//year
 279   1              date[1]=0x08;//month
 280   1              date[2]=0x01;//day
 281   1              date[3]=0x02;//week
 282   1              date[4]=0x13;//hour
 283   1              date[5]=0x14;//minute
 284   1              date[6]=0x50;//second   
 285   1              I2CStart();
 286   1              I2CSendByte(0x64,1);      //发送SD2000写时间寄存器命令,
 287   1              I2CWaitAck();   
 288   1              for(n=0;n<7;n++)
 289   1                  {
 290   2                      I2CSendByte(date[n],0);
 291   2                      I2CWaitAck();
 292   2                  }
 293   1              I2CStop();
 294   1                    
 295   1      }
 296          
 297          /*******************************************************
 298          功能:Delay
 299          描述:延时子程序
 300          参数:延时长度nn
 301          返回:无
 302          ********************************************************/
 303          void Delay(unsigned int nn)
C51 COMPILER V7.06   MAIN                                                                  10/29/2006 14:35:36 PAGE 6   

 304          {
 305   1         while(nn--);
 306   1         }
 307          
 308          
 309          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    336    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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