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

📄 24.lst

📁 单片机C语言程序设计实训100例
💻 LST
字号:
C51 COMPILER V8.08   24                                                                    08/13/2009 11:21:37 PAGE 1   


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

line level    source

   1          /***************   writer:shopping.w   ******************/
   2          #include <reg52.h>
   3          #include <intrins.h>
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          bit I2C_Busy, NO_Ack,Bus_Fault,point;
   7          
   8          uchar bdata a;
   9          sbit LSB = a^0;
  10          sbit MSB = a^7;
  11          sbit SDA = P3^3;
  12          sbit SCL = P3^2;
  13          uchar Array[] = {'0','1','2','3','4','5','6','7','8','9'};
  14          uchar command_data[]=
  15          {
  16                  0xac,0x00,0xee,0xa1,0x00,0x00,0xa2,0x00,0x00,0xaa
  17          };
  18          uchar Prompt[]="Waiting for a while...\r";
  19          uchar i;
  20          void DelayMS(uint ms)
  21          {
  22   1              uchar i;
  23   1              while(ms--)
  24   1              {
  25   2                      for(i=0;i<120;i++);
  26   2              }
  27   1      }
  28          
  29          void SendStop()
  30          {
  31   1              SDA = 0;
  32   1              SCL = 1;
  33   1              _nop_();
  34   1              SDA = 1;
  35   1              I2C_Busy = 0;
  36   1      }
  37          
  38          void SendByte(uchar wd)
  39          {
  40   1              uchar i;
  41   1              a = wd;
  42   1              for(i=0;i<8;i++)
  43   1              {
  44   2                      SCL = 0;
  45   2                      _nop_();
  46   2                      _nop_();
  47   2                      SDA = MSB;
  48   2                      a <<= 1;
  49   2                      _nop_();
  50   2                      _nop_();
  51   2                      SCL = 1;
  52   2                      _nop_();
  53   2                      _nop_();
  54   2                      SCL = 0;
  55   2              }
C51 COMPILER V8.08   24                                                                    08/13/2009 11:21:37 PAGE 2   

  56   1              SDA = 1;
  57   1              SCL = 1;
  58   1              _nop_();
  59   1              _nop_();
  60   1      
  61   1              if(!SDA)
  62   1              {
  63   2                      SCL = 0;
  64   2                      _nop_();
  65   2                      _nop_();
  66   2              }
  67   1              else
  68   1              {
  69   2                      NO_Ack = 1;
  70   2                      SCL = 0;
  71   2                      _nop_();
  72   2                      _nop_();
  73   2              }
  74   1      }
  75          
  76          void Master(uchar slave_addr)
  77          {
  78   1      
  79   1              I2C_Busy = 1;
  80   1              NO_Ack = 0;
  81   1              Bus_Fault = 0;
  82   1              if(!SCL || !SDA)
  83   1                      Bus_Fault = 1;
  84   1              else
  85   1              {
  86   2                      SDA = 0;
  87   2                      _nop_();
  88   2                      _nop_();
  89   2                      SCL = 0;
  90   2                      _nop_();
  91   2                      _nop_();
  92   2                      SendByte(slave_addr);
  93   2              }
  94   1      }
  95          
  96          uchar RecvByte(uchar cnt)
  97          {
  98   1              uchar i,rcv_data;
  99   1              for(i=0;i<8;i++)
 100   1              {
 101   2                      SDA = 1;
 102   2                      SCL = 1;
 103   2                      _nop_();
 104   2                      LSB = SDA;
 105   2                      if(i<7)
 106   2                              a <<= 1;
 107   2                      _nop_();
 108   2                      SCL = 0;
 109   2                      _nop_();
 110   2              } 
 111   1              
 112   1              if(cnt == 1)
 113   1                      SDA = 1;
 114   1              else
 115   1                      SDA = 0;
 116   1              SCL = 1;
 117   1              _nop_();
C51 COMPILER V8.08   24                                                                    08/13/2009 11:21:37 PAGE 3   

 118   1              SCL = 0;
 119   1              SDA = 1;
 120   1              _nop_();
 121   1              rcv_data = a;
 122   1              return rcv_data;        
 123   1      }
 124          
 125          void SendData(uchar slave_address,uchar start,uchar end)
 126          {
 127   1              Master(slave_address);
 128   1              for(i=start;i<=end;i++)
 129   1                      SendByte(command_data[i]);      
 130   1              SendStop();
 131   1      }
 132          
 133          void InitialiseSerialPort()
 134          {
 135   1              TMOD = 0x20;
 136   1              TH1  = 0xfd;
 137   1              SCON = 0x50;
 138   1              TR1  = 1;
 139   1      }
 140          
 141          void SendCharToSerialPort(uchar ch)
 142          {
 143   1              SBUF = ch;
 144   1              while(!TI);
 145   1              TI = 0;
 146   1      }
 147          
 148          void SendTemperatureToSerialPort(uchar val)
 149          {
 150   1              if(val>200)
 151   1              {
 152   2                      val = 255-val;
 153   2                      SendCharToSerialPort('-');
 154   2                      if(!point)
 155   2                              val+=1;
 156   2              }
 157   1              SendCharToSerialPort(Array[(val/10)/10]);
 158   1              SendCharToSerialPort(Array[(val/10)%10]);
 159   1              SendCharToSerialPort(Array[val%10]);
 160   1              SendCharToSerialPort('.');
 161   1              if(point)
 162   1                      SendCharToSerialPort('5');
 163   1              else
 164   1                      SendCharToSerialPort('0');
 165   1              SendCharToSerialPort(' ');
 166   1              SendCharToSerialPort('C');
 167   1              SendCharToSerialPort('\r');     
 168   1      }
 169          
 170          void SetTemperatureLimit(uchar HI,uchar LO)
 171          {
 172   1              command_data[4] = HI;
 173   1              command_data[5] = 0;
 174   1              command_data[7] = LO;
 175   1              command_data[8] = 0;
 176   1              SendData(0x90,3,5);
 177   1              DelayMS(10);
 178   1              SendData(0x90,6,8);     
 179   1      }
C51 COMPILER V8.08   24                                                                    08/13/2009 11:21:37 PAGE 4   

 180          
 181          void StartConversion()
 182          {
 183   1              SendData(0x90,2,2);
 184   1              DelayMS(750);
 185   1      }
 186          
 187          uchar ReadTemp()
 188          {
 189   1              uchar d;
 190   1              SendData(0x90,9,9);
 191   1              Master(0x91);
 192   1              d = RecvByte(0);
 193   1              point = RecvByte(1)>>7;
 194   1              SendStop();
 195   1              return d;
 196   1      }
 197          
 198          void WriteConfig(uchar c)
 199          {
 200   1              command_data[1] = c;
 201   1              SendData(0x90,0,1);             
 202   1      }
 203          
 204          void main()
 205          {
 206   1              uchar i;
 207   1              InitialiseSerialPort();
 208   1              while(Prompt[i]!='\0')
 209   1                      SendCharToSerialPort(Prompt[i++]);
 210   1              WriteConfig(0x02);
 211   1              StartConversion();
 212   1              SetTemperatureLimit(40,35);
 213   1              while(1)
 214   1              {
 215   2                      DelayMS(50);
 216   2                      SendTemperatureToSerialPort(ReadTemp());
 217   2              }       
 218   1      }
 219          
 220          
 221          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    459    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     46       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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