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

📄 main.lst

📁 DS18B20的驱动程序。通过KEIL C编译
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  05/06/2008 01:03:27 PAGE 1   


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

stmt level    source

   1          #include <reg51.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int 
   4          #define SEND P1
   5          
   6          sbit E=P3^5;
   7          sbit RW=P3^6;
   8          sbit RS=P3^7;
   9          
  10          sbit D=P2^7;
  11          
  12          static uchar disp1[]="Test temperature";   
  13          static uchar disp2[]="Temperature 22.2";   
  14          
  15          void delay(uchar j);   /* 7,16us  29,60us 119,240us  149,300us*/
  16          
  17          void read_1602_state();
  18          void write_1602(bit k,uchar j);
  19          void init_1602();
  20          void disp_1602();
  21          
  22          void init_18b20();
  23          void write_18b20(uchar j);
  24          uint read_18b20();
  25          
  26          void dell_data(uint j);
  27          
  28          void main()
  29          {
  30   1              uchar temp1;
  31   1              uint temp;
  32   1      
  33   1              init_1602();    
  34   1              while(1)
  35   1              {
  36   2                      init_18b20();
  37   2                      write_18b20(0xcc);
  38   2                      write_18b20(0x44);
  39   2                      init_18b20();
  40   2                      write_18b20(0xcc);
  41   2                      write_18b20(0xbe);
  42   2              temp1=read_18b20();
  43   2                      temp=read_18b20();
  44   2                      temp<<=8;
  45   2                      temp=temp|temp1;
  46   2              dell_data(temp);        
  47   2                      disp_1602();
  48   2              }       
  49   1      }
  50          
  51          void read_1602_state()
  52          {
  53   1              uchar j;
  54   1      
  55   1              RW=1;
C51 COMPILER V7.06   MAIN                                                                  05/06/2008 01:03:27 PAGE 2   

  56   1      aa:
  57   1              SEND=0xff;
  58   1              RS=0;
  59   1              E=0;
  60   1              delay(30);
  61   1              E=1;
  62   1              delay(30);
  63   1              j=SEND;
  64   1              E=0;
  65   1              if((j&0x80)!=0)
  66   1                      goto aa;   
  67   1      }
  68          void write_1602(bit k,uchar j)
  69          {
  70   1              read_1602_state();   
  71   1              E=0;
  72   1              RW=0;
  73   1              RS=k;
  74   1              SEND=j;
  75   1              E=0;
  76   1                      delay(20);
  77   1              E=1;
  78   1                      delay(20);
  79   1              E=0;
  80   1      }
  81          void delay(uchar j)
  82          {
  83   1              while(--j);
  84   1      }
  85          void init_1602()
  86          {
  87   1              write_1602(0,0x01);                     /* clear disp*/
  88   1                      delay(20);
  89   1              write_1602(0,0x38);                     /* 16*2 */
  90   1                      delay(20);
  91   1              write_1602(0,0x06);                     /* clear disp*/
  92   1                      delay(20);
  93   1              write_1602(0,0x0e);                     /* open disp*/
  94   1                      delay(20);
  95   1              write_1602(0,0x0f);
  96   1                      delay(20);
  97   1      }
  98          void disp_1602()
  99          {
 100   1              uchar i,j;
 101   1      
 102   1              write_1602(0,0x80);             
 103   1              for(i=0;i<16;++i)
 104   1              {       
 105   2                      j=disp1[i];             
 106   2              write_1602(1,j);
 107   2                      delay(20);
 108   2              }
 109   1      
 110   1              write_1602(0,0xc0);     
 111   1              for(i=0;i<16;++i)
 112   1              {       
 113   2                      j=disp2[i];     
 114   2                      write_1602(1,j);
 115   2                      delay(10);      
 116   2              }       
 117   1      }
C51 COMPILER V7.06   MAIN                                                                  05/06/2008 01:03:27 PAGE 3   

 118          
 119          void init_18b20()
 120          {
 121   1      INIT:
 122   1          D=1;
 123   1              delay(5);
 124   1              D=0;
 125   1              delay(149);  /* 300us */
 126   1              delay(149);  /* 300us */
 127   1              D=1;
 128   1              delay(29);/* 60us */
 129   1              delay(29);
 130   1              if(D==1)
 131   1                      goto INIT;
 132   1              delay(119);  /* 240us */
 133   1              if(D==0)
 134   1                  {delay(119);
 135   2                      goto INIT;}
 136   1              delay(119);
 137   1              delay(119);
 138   1      }
 139          void write_18b20(uchar j)
 140          {
 141   1              uchar k;
 142   1      
 143   1              for(k=0;k<8;k++)
 144   1              {
 145   2                      D=1;
 146   2                      delay(5);
 147   2                      D=0;
 148   2                      D=0;
 149   2                      D=j&0x01;
 150   2                  delay(29); /*60us*/                 
 151   2                      j=j>>1; 
 152   2              }
 153   1              delay(4);
 154   1      }
 155          uint read_18b20()
 156          {
 157   1              uchar j,k=0;
 158   1              for(j=0;j<8;j++)
 159   1              {
 160   2                      D=0;
 161   2                      k=k>>1;
 162   2                      D=1;     /* male D is input*/
 163   2                      delay(6);/* 15us*/
 164   2                      if(D)
 165   2                      k=k|0x80;
 166   2                      delay(22); /*45us*/
 167   2               }
 168   1              return k;
 169   1      } 
 170          void dell_data(uint j)
 171          {       float k;
 172   1          uint y;
 173   1              k=0.625*j;      
 174   1              y=(int)k;
 175   1              disp2[12]=(y/100)+0x30; y=y%100;        /*because disp must ASCII ,so then data +0x30 */
 176   1              disp2[13]=(y/10)+0x30;
 177   1              disp2[15]=(y%10)+0x30;
 178   1      }
 179          
C51 COMPILER V7.06   MAIN                                                                  05/06/2008 01:03:27 PAGE 4   

 180          
 181          
 182          
 183          


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