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

📄 18b20shu.lst

📁 用18B20数字温度传感器芯片 实现温度采集 并在数码管(用7290)显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
 174          void DELAY60US()
 175          { unsigned char i;
 176   1              for(i=0;i<6;i++); 
 177   1      }
C51 COMPILER V8.02   18B20SHU                                                              05/13/2009 13:23:37 PAGE 4   

 178          
 179          void DELAY80US()
 180          { unsigned char i,j;
 181   1              for(i=0;i<8;i++)
 182   1                      for(j=0;j<1;j++);
 183   1      }
 184          
 185          void DELAY300US()
 186          {  unsigned char i,j;
 187   1              for(i=0;i<33;i++)
 188   1                      for(j=0;j<1;j++);
 189   1      }
 190          
 191          void DELAY()
 192          { unsigned char i,j;
 193   1              for(i=0;i<255;i++)
 194   1                      for(j=0;j<250;j++);  
 195   1      }
 196          //【附录二】由C语言编制的I2C通讯子函数
 197          // 以上的内容如果在主函数的前面已经包含、声明时,可以省略。
 198          //#################################################################################
 199          void STA(void)                                          //启动信号子函数
 200          {        SDA=1;
 201   1           SCL=1;
 202   1           DELAY5US    
 203   1               SDA=0;
 204   1               DELAY5US 
 205   1           SCL=0;
 206   1      }
 207          //#################################################################################
 208          void STOP(void)                                         //停止信号子函数
 209          {   SDA=0;
 210   1          SCL=1;      
 211   1              DELAY5US 
 212   1              SDA=1;
 213   1              DELAY5US        
 214   1      }
 215          //#################################################################################
 216          void MACK(void)                                         //应答信号子函数
 217          {    SDA=0;
 218   1           SCL=1;
 219   1               DELAY5US       
 220   1               SCL=0;
 221   1               SDA=1;
 222   1      }
 223          //#################################################################################
 224          void NMACK(void)                                        //非应答信号子函数
 225          
 226          {    SDA=1;
 227   1           SCL=1;
 228   1               DELAY5US        
 229   1               SCL=0;
 230   1               SDA=0;
 231   1      }
 232          //#################################################################################
 233          void CACK(void)                                 //应答检测子程序
 234          {   
 235   1           SDA=1;
 236   1           SCL=1;
 237   1               DELAY5US        
 238   1               F0=0;
 239   1               if(SDA==1)
C51 COMPILER V8.02   18B20SHU                                                              05/13/2009 13:23:37 PAGE 5   

 240   1               F0=1;
 241   1               SCL=0;
 242   1      }
 243          //#################################################################################
 244          //                             发送一字节子数据程序     WRBYT
 245          //#################################################################################
 246          void WRBYT(unsigned char  *p)
 247          {    unsigned char  i=8,temp;
 248   1           temp=*p;
 249   1               while(i--)
 250   1               {   if((temp&0x80)==0x80)
 251   2                       {  SDA=1; 
 252   3                                  SCL=1;                      
 253   3                                      DELAY5US                                
 254   3                                      SCL=0;                   
 255   3                               }
 256   2                               else
 257   2                               {  SDA=0;
 258   3                                  SCL=1;                              
 259   3                                      DELAY5US                                
 260   3                                      SCL=0;
 261   3                               }
 262   2                               temp=temp<<1;
 263   2               }
 264   1      }
 265          //#################################################################################
 266          //                            接收一字节子数据程序     RDBYT
 267          //#################################################################################
 268          void RDBYT(unsigned char  *p)
 269          {    unsigned char i=8,temp=0;
 270   1           while(i--)
 271   1               {    SDA=1;
 272   2                    SCL=1;
 273   2                        DELAY5US                
 274   2                        temp=temp<<1;
 275   2                        if(SDA==1)
 276   2                              temp=temp|0x01;
 277   2                        else
 278   2                          temp=temp&0xfe;
 279   2                SCL=0;
 280   2               }
 281   1           *p=temp;
 282   1      }
 283          //#################################################################################
 284          //                           发送N个字节子数据程序     WRNBYT
 285          //#################################################################################
 286          void WRNBYT(unsigned char  *R3,unsigned char  *R2,unsigned char  *R0,unsigned char  n)
 287          {                
 288   1       loop:    STA();
 289   1                    WRBYT(R3);
 290   1                    CACK();
 291   1                    if(F0)
 292   1                    goto loop;
 293   1                        WRBYT(R2);
 294   1                        CACK();
 295   1                        if(F0)
 296   1                        goto loop;
 297   1                        while(n--)
 298   1                        {  WRBYT(R0);
 299   2                           CACK();
 300   2                               if(F0)
 301   2                                goto loop;
C51 COMPILER V8.02   18B20SHU                                                              05/13/2009 13:23:37 PAGE 6   

 302   2                                R0++;
 303   2                        } 
 304   1                STOP();
 305   1      }
 306          //#################################################################################
 307          //                            接收N个字节子数据程序     RDNBYT
 308          //#################################################################################
 309          //【子函数入口参数说明】:
 310          //R3是外部器件地址写,R4是外部器件地址读,R2是从器件内部子地址,R0是目标数据块首地址,//n是要读的字节数
 311          void RDNBYT(unsigned char  *R3,unsigned char  *R4,unsigned char  *R2,unsigned char  *R0,unsigned char  n)
 312          {   
 313   1           loop1:  STA();
 314   1                               WRBYT(R3);
 315   1                               CACK();
 316   1                               if(F0)
 317   1                               goto loop1;
 318   1                               WRBYT(R2);
 319   1                               CACK();
 320   1                               if(F0)
 321   1                               goto loop1;
 322   1                               STA();
 323   1                               WRBYT(R4);
 324   1                               CACK();
 325   1                               if(F0)
 326   1                               goto loop1;
 327   1                               while(n--)
 328   1                               {    RDBYT(R0);
 329   2                                  if(n>0)
 330   2                                          {
 331   3                                                MACK();
 332   3                                            R0++;
 333   3                                      }
 334   2                                       else  NMACK();
 335   2                                       }                        
 336   1                               STOP();
 337   1      }
 338          //#################################################################################
 339          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    927    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     44      66
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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