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

📄 3b20.lst

📁 ds18b20在stc89c58rd+下使用C语言调试通过
💻 LST
字号:
C51 COMPILER V8.02   3B20                                                                  07/24/2007 18:01:21 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 3B20
OBJECT MODULE PLACED IN 3b20.OBJ
COMPILER INVOKED BY: d:\program files\Keil\C51\BIN\C51.EXE 3b20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include <reg51.h>
   3          #include<absacc.h>
   4          #define uchar unsigned char 
   5          
   6          sbit TMDAT = P0^1; //根据实实际情况设定
   7          uchar TMP[2],temp[2],TMP1[2],TMP2[2];  //读取后的4个温度值,将其除以2即可得出实际温度;
   8          uchar SN[3][8];  //4个器件的序列号,先读出单个序列号后填上才可以读取温度
   9          uchar f[3];  //结果是否为负温,“0”为正温,“1”为负温。  
  10          
  11          
  12          unsigned int code tab[]={0x88,0xEB,0x4C,0x49,0x2B,0x19,0x18,0x8B,0x08,0x09,0xFF};
  13          
  14          int keyval;
  15          sfr key=0xb0;
  16          sbit S3=P1^0;
  17          sbit S2=P1^1;
  18          sbit S1=P1^2; 
  19          
  20          //////////////////////////////////////////////////////////////////////////
  21          
  22          ////////////////////////////////按键消抖沿时程序//////////////////////////
  23          void delay(void)
  24          {
  25   1              unsigned int i;
  26   1              for(i=0;i<600;i++);
  27   1      }
  28          ////////////////////////////////////////延时部分//////////////////////////
  29          void dmsec (unsigned int count)       //
  30          {         //
  31   1       unsigned int i;        // 
  32   1       while (count)       //
  33   1       {        //
  34   2        
  35   2        i = 115;      //
  36   2        while (i>0) i--;     //
  37   2        count--;      //
  38   2      }         //
  39   1      }         //
  40          //////////////////////////////////////////////////////////////////////////
  41          
  42          /////////////////////////////////////// 发送复位//////////////////////////
  43          void tmreset (void)       //
  44          {         //
  45   1       unsigned int i;       //
  46   1       TMDAT = 0;       //
  47   1       i = 103;       //
  48   1       while (i>0) i--;  // 延时 900 uS(11.0592Mhz时) //
  49   1       TMDAT = 1;       //
  50   1       i = 4;        //
  51   1       while (i>0) i--;      //
  52   1      }         //
  53          //////////////////////////////////////////////////////////////////////////
  54          
  55          //判断DS1820是否存在的子程序。最好不要用,因为当器件不存在时将会进入死循环
C51 COMPILER V8.02   3B20                                                                  07/24/2007 18:01:21 PAGE 2   

  56          
  57          ////////////////////////////////////// 等待存在脉冲///////////////////////
  58          void tmpre (void)   //判断器件是否存在  //
  59          {        //
  60   1       unsigned int i;       //
  61   1       while (TMDAT);       //
  62   1       while (~TMDAT);       //
  63   1       i = 4; while (i>0) i--;      //
  64   1      }         //
  65          //////////////////////////////////////////////////////////////////////////
  66          
  67          ///////////////////////////////////// 读一位//////////////////////////////
  68          bit tmrbit (void)       //
  69          {        // 
  70   1       unsigned int i;       //
  71   1       bit dat;       //
  72   1       TMDAT = 0; i++;       //
  73   1       TMDAT = 1; i++; i++;  //微量延时   //
  74   1       dat = TMDAT;       //
  75   1       i = 8; while (i>0) i--;  // 延时    //
  76   1       return (dat);       //
  77   1      }         //
  78          //////////////////////////////////////////////////////////////////////////
  79          
  80          //////////////////////////////////////// 读一个字节///////////////////////
  81          unsigned char tmrbyte (void)        //
  82          {         //
  83   1       unsigned char i,j,dat;      //
  84   1       dat = 0;       //
  85   1       for (i=1;i<=8;i++)      //
  86   1       {        //
  87   2        j = tmrbit ();      //
  88   2        dat = (j << 7) | (dat >> 1);    //
  89   2       }        //
  90   1       return (dat);       //
  91   1      }         //
  92          //////////////////////////////////////////////////////////////////////////
  93          
  94          /////////////////////////////////////// 写一个字节////////////////////////
  95          void tmwbyte (unsigned char dat)     //
  96          {        //
  97   1       unsigned int i;       //
  98   1       unsigned char j;      //
  99   1       bit testb;       //
 100   1       for (j=1;j<=8;j++)      //
 101   1       {        //
 102   2        testb = dat & 0x01;     //
 103   2        dat = dat >> 1;      //
 104   2        if (testb)      //
 105   2        {       //
 106   3         TMDAT = 0; // 写0  //
 107   3         i++; i++;   //
 108   3         TMDAT = 1;     //
 109   3         i = 8; while (i>0) i--;   //
 110   3        }       //
 111   2        else       //
 112   2        {       //
 113   3         TMDAT = 0; // 写0  //
 114   3         i = 8; while (i>0) i--;   //
 115   3         TMDAT = 1;     //
 116   3         i++; i++;   //
 117   3        }       //
C51 COMPILER V8.02   3B20                                                                  07/24/2007 18:01:21 PAGE 3   

 118   2       }        //
 119   1      }         //
 120          //////////////////////////////////////////////////////////////////////////
 121          
 122          /////////////////////////////////发送ds1820 开始转换//////////////////////
 123          void tmstart (void)       //
 124          {        //
 125   1       tmreset ();  //复位     //
 126   1       tmpre ();  //等待存在脉冲    //
 127   1       dmsec (1);  //延时     //
 128   1       tmwbyte (0xcc);  //跳过序列号命令,对所有器件有效  //
 129   1       tmwbyte (0x44);  //发转换命令 44H,   //
 130   1      }         //
 131          //////////////////////////////////////////////////////////////////////////
 132          
 133          
 134          //////////////////////////////////读取温度////////////////////////////////
 135          void tmrtemp()        //
 136          {        //
 137   1       uchar i,j;       //
 138   1       uchar a,b;       //
 139   1       for(j=0;j<1;j++)      //
 140   1       {        //
 141   2        tmreset();  //复位    //
 142   2        dmsec(1);  //延时    //
 143   2        tmwbyte(0x55);  //发送ROM匹配命令  //      //
 144   2        tmwbyte (0xbe);  //发送读取命令    //
 145   2        a = tmrbyte ();  //连续读取两位温度  //
 146   2        b = tmrbyte ();      //       //
 147   2        }
 148   1      }         //
*** WARNING C280 IN LINE 137 OF 3B20.C: 'i': unreferenced local variable
 149          
 150          //////////////////////////////////////////////////////////////////////////
 151          
 152          
 153          //以下是读取器件序列号的子程序,需要读取序列时可在程序中调用;
 154          //调用时确保总线中只有一只器件,若有多个器件时则读取出来的号码无效;
 155          //将读取出来的序列号填到前面的数组中即可使用;
 156          //平时可以将此子程序删除以节约空间。
 157            
 158          //////////////////////////读取器件序列号子程序////////////////////////////
 159          void rom()         //
 160          {         //
 161   1       //以下是定义8个序列号变量     //
 162   1       uchar sn1;       //
 163   1       uchar sn2;       //
 164   1       uchar sn3;       //
 165   1      
 166   1               //
 167   1       tmreset ();  //复位     //
 168   1       dmsec (1);  //延时     //
 169   1       tmwbyte(0x33);  //发送读序列号子程序   //
 170   1       sn1=tmrbyte();  //读取第一个序列号,应为16H;  //
 171   1       sn2=tmrbyte();  //读取第二个序列号,应为10H;  //
 172   1       sn3=tmrbyte();       //
 173   1      
 174   1      }         //
 175          //////////////////////////////////////////////////////////////////////////
 176          //    main()函数
 177          //////////////////////////////////////////////////////////////////////////
 178          void main()         //
C51 COMPILER V8.02   3B20                                                                  07/24/2007 18:01:21 PAGE 4   

 179          {         //
 180   1       do{      //
 181   2        rom(); //调用读序列号子程序   //
 182   2        tmstart();      //
 183   2        dmsec(100); //如果是不断地读取的话可以不延时 //
 184   2        tmrtemp(); //读取温度,执行完毕温度将存于TMP[]数组中//
 185   2       }while(1); 
 186   1           
 187   1      }         //
 188          //////////////////////////////////////////////////////////////////////////
 189          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    328    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     37       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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