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

📄 a.lst

📁 16B20 温度探测和两位共阴数码管用的是atm89s52
💻 LST
字号:
C51 COMPILER V6.12  A                                                                      03/18/2008 17:15:41 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE A
OBJECT MODULE PLACED IN .\a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\a.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89X52.H>
   2          #include <intrins.h>
   3          
   4          unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
   5          
   6          
   7          
   8          char info=23;
   9          sbit DQ =P3^7;   //定义通信端口 ;
  10          bit  LOG =0;     //定义正负标志位;
  11          
  12          
  13          unsigned char a[5]={11,11,11,11,11};
  14          unsigned char temp_H,temp_L;//温度的高八位和低八位
  15          
  16          
  17          
  18          void delay02s(void)
  19          {
  20   1      unsigned char i,j;
  21   1      for(i=20;i>0;i--)
  22   1      for(j=20;j>0;j--)
  23   1      //for(k=248;k>0;k--)
  24   1      ;
  25   1      }
  26          
  27          
  28          
  29          /*************************延时程序段************************/
  30          void Delay(unsigned char times)
  31          {
  32   1      do{;}while(--times);
  33   1      }
  34          
  35          void dispchar(char infotext)
  36          {
  37   1      
  38   1      	if (P3_0==0)
  39   1      	{
  40   2      		P3_1=0;
  41   2      		P2=dispcode[infotext/10];
  42   2      		delay02s();
  43   2      		P3_0=1;
  44   2      
  45   2          } else
  46   1      	{
  47   2      		P3_0=0;
  48   2      		P2=dispcode[infotext%10];
  49   2      		delay02s();
  50   2      		P3_1=1;
  51   2      	}
  52   1      	delay02s();
  53   1      
  54   1      }
  55          
C51 COMPILER V6.12  A                                                                      03/18/2008 17:15:41 PAGE 2   

  56          
  57          /******************复位时序或者说是初始化时序***************/
  58          unsigned char reset(void)
  59          {
  60   1        unsigned char Answerback;
  61   1        DQ = 0;           //拉低单总线
  62   1        Delay(240);       //至少480us
  63   1        DQ = 1;           //释放单总线
  64   1        Delay(15);        //等待响应
  65   1        Answerback=DQ;    //得到器件响应
  66   1        Delay(240);       // 延迟480us
  67   1        return(Answerback); //返回器件响应,0=有器件, 1 = 无器件
  68   1      }  
  69          
  70          /****************从 1-wire 总线上读取一个字节***************/
  71          unsigned char read_byte(void)
  72          {
  73   1       unsigned char i;
  74   1       for (i=8;i>0;i--)
  75   1       {
  76   2         DQ = 0;     //拉低 DQ,在15US之内就必须释放单总线。
  77   2         DQ = 1;     //再拉高,即释放单总线。
  78   2         CY=DQ;      //读取数据;
  79   2         CY=ACC&0x01;//将数据循环右移
  80   2         Delay(30);  //不管是读1还是读0都至少需要60us的时间 
  81   2       }
  82   1       return(ACC);//返回读出的数据
  83   1      }
  84          
  85          /*****************向 1-WIRE 总线上写一个字节*****************/
  86          void write_byte(char val)
  87          {
  88   1       unsigned char i;ACC=val;
  89   1       for (i=8;i>0;i--) 
  90   1       {
  91   2         DQ = 0;      //拉低单总线
  92   2         CY= ACC&0x01;//从低位向高位依取出ACC的值
  93   2        
  94   2         DQ =CY;      //把CY的值赋给单总线,?
  95   2         Delay(30);   //至少需要60us的时间 
  96   2         DQ = 1;
  97   2       }
  98   1       Delay(30);     //到120US之间。
  99   1      }
 100          
 101          /***********读取温度并且进行换算以及正负判断等***************/
 102          void Read_Temperature(void)
 103          {
 104   1      
 105   1         while(reset());      //初始化
 106   1         write_byte(0xCC);    //跳过序列号检测
 107   1         write_byte(0xBE);    //读内部单元
 108   1         temp_L=read_byte();  //低八位
 109   1         temp_H=read_byte();  //高八位
 110   1         while(reset());      //初始化
 111   1      
 112   1         write_byte(0xCC);    //跳过 ROM
 113   1         write_byte(0x44);    //开始温度转换
 114   1      
 115   1         if((temp_H&0xf8)!=0x00)//判断是否为负。 
 116   1         {
 117   2         LOG=1;               //为1表示为负数;
C51 COMPILER V6.12  A                                                                      03/18/2008 17:15:41 PAGE 3   

 118   2         temp_H=~temp_H; 
 119   2         temp_L=~temp_L; 
 120   2         if(temp_L==255)      //向高位进1;
 121   2         {temp_H++;temp_L=0;}
 122   2         else
 123   2         {temp_L+=1;}
 124   2         } 
 125   1       
 126   1         temp_H&=0x07;//由于最高可以测量125度所以只取temp_H的最高3位。
 127   1         temp_H<<=4;  //还原整数部分
 128   1         temp_H+=temp_L>>4; //还原整数部分
 129   1       
 130   1         temp_L=(temp_L&0x0f)*25/4;//小数部分0.06的整数倍
 131   1      
 132   1      }
 133          
 134          
 135          void main(void)
 136          {
 137   1          unsigned char result;
 138   1          unsigned char x,n;
 139   1      		
 140   1      
 141   1      
 142   1      while(1)
 143   1      {
 144   2      
 145   2      	Read_Temperature();	
 146   2      
 147   2      		
 148   2      
 149   2      	  
 150   2      
 151   2           	result=temp_H;  
 152   2      		Delay(40000);
 153   2      
 154   2      //		for(n=2000;n>0;n--)
 155   2           {
 156   3      
 157   3      
 158   3      		dispchar(result);
 159   3      		}
 160   2      
 161   2      
 162   2      
 163   2      	
 164   2      
 165   2      	//		dispchar(info);
 166   2      
 167   2      
 168   2      
 169   2      //	dispchar(info);
 170   2      
 171   2      
 172   2        /*
 173   2           while(result/10)//整数部分用数组A[0]~A[2]保存;
 174   2           {
 175   2            a[x]=result%10; 
 176   2            result/=10;x--;
 177   2           } 	  
 178   2           a[x]=result;	  
 179   2      */
C51 COMPILER V6.12  A                                                                      03/18/2008 17:15:41 PAGE 4   

 180   2      
 181   2      /*
 182   2      	 Read_Temperature();
 183   2           result=temp_H;  
 184   2           while(result/10)//整数部分用数组A[0]~A[2]保存;
 185   2           {
 186   2            a[x]=result%10; 
 187   2            result/=10;x--;
 188   2           } 	  
 189   2           a[x]=result;	  
 190   2      
 191   2      
 192   2      
 193   2      	  
 194   2           for(n=0;n<6;n++)//清除显示。以便重新装入显示代码   
 195   2           a[n]=11;
 196   2           result=temp_H;  
 197   2           x=2;
 198   2           while(result/10)//整数部分用数组A[0]~A[2]保存;
 199   2           {
 200   2            a[x]=result%10; 
 201   2            result/=10;x--;
 202   2           }
 203   2      
 204   2           if(LOG==1) //为温度负数LOG等于1
 205   2           {
 206   2            a[x-1]=10;//显示字符-表示为负;
 207   2            LOG=0;    //正负标志复位。
 208   2           }
 209   2           a[3]=temp_L/10;//小数部分用数组A[4]来储存;
 210   2           a[4]=temp_L%10;//小数部分用数组A[5]来储存;
 211   2           for(n=200;n>0;n--)
 212   2           {Display();Display();
 213   2            Display();Display();
 214   2          }	*/ 
 215   2      	  
 216   2      	//dispchar(a[1]+a[0]*10);
 217   2      
 218   2      	}
 219   1      }
*** WARNING C280 IN LINE 138 OF .\A.C: 'x': unreferenced local variable
*** WARNING C280 IN LINE 138 OF .\A.C: 'n': unreferenced local variable
 220          
 221          
 222          /*
 223          void t0(void) interrupt 1 using 0
 224          {
 225          TH0=(65536-4000)/256;
 226          TL0=(65536-4000)%256;
 227          P1=dispcode[dispbuf[dispcount]];
 228          P2=dispbitcode[dispcount];
 229          dispcount++;
 230          if(dispcount==8)
 231          {
 232          dispcount=0;
 233          }
 234          } 
 235          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    261    ----
C51 COMPILER V6.12  A                                                                      03/18/2008 17:15:41 PAGE 5   

   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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