网站导航: 首页 > 设计参考 > 正文 文章搜索
DS1820温度测量的C51程序
 
文章编号:
090106202650
文章分类: 电路 测量/传感器技术
点 击:
...
关 键 词: DS1820,温度测量
文章来源:
网络
摘 要:
DS1820,单芯片温度测量,C51程序

 
  1. //DS1820 C51  子程序    
  2. //这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间    
  3. //sbit DQ =P2^1;//根据实际情况定义端口    
  4.   
  5. typedef unsigned char byte;    
  6. typedef unsigned int  word;    
  7.   
  8. //延时    
  9. void delay(word useconds)    
  10. {    
  11.     for(;useconds>0;useconds--);    
  12. }    
  13.   
  14. //复位    
  15. byte ow_reset(void)    
  16. {    
  17.     byte presence;    
  18.     DQ = 0; //pull DQ line low    
  19.     delay(29); // leave it low for 480us    
  20.     DQ = 1; // allow line to return high    
  21.     delay(3); // wait for presence    
  22.     presence = DQ; // get presence signal    
  23.     delay(25); // wait for end of timeslot    
  24.     return(presence); // presence signal returned    
  25. }     // 0=presence, 1 = no part    
  26.   
  27. //从 1-wire 总线上读取一个字节    
  28. byte read_byte(void)    
  29. {    
  30.     byte i;    
  31.     byte value = 0;    
  32.     for (i=8;i>0;i--)    
  33.     {    
  34.         value>>=1;    
  35.         DQ = 0; // pull DQ low to start timeslot    
  36.         DQ = 1; // then return high    
  37.         delay(1);  //for (i=0; i<3; i++);     
  38.         if(DQ)value|=0x80;    
  39.         delay(6); // wait for rest of timeslot    
  40.     }    
  41.     return(value);    
  42. }    
  43.   
  44. //向 1-WIRE 总线上写一个字节    
  45. void write_byte(char val)    
  46. {    
  47.     byte i;    
  48.     for (i=8; i>0; i--) // writes byte, one bit at a time    
  49.     {    
  50.         DQ = 0; // pull DQ low to start timeslot    
  51.         DQ = val&0x01;    
  52.         delay(5); // hold value for remainder of timeslot    
  53.         DQ = 1;    
  54.         val=val/2;    
  55.     }    
  56.     delay(5);    
  57. }    
  58.   
  59. //读取温度    
  60. char Read_Temperature(void)    
  61. {    
  62.     union  
  63.     {    
  64.         byte c[2];    
  65.         int x;    
  66.     }temp;    
  67.        
  68.     ow_reset();    
  69.     write_byte(0xCC); // Skip ROM    
  70.     write_byte(0xBE); // Read Scratch Pad    
  71.     temp.c[1]=read_byte();    
  72.     temp.c[0]=read_byte();    
  73.     ow_reset();    
  74.     write_byte(0xCC); //Skip ROM    
  75.     write_byte(0x44); // Start Conversion    
  76.     return temp.x/2;    
  77. }    
  78.   

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4