View Single Post
Old 09-03-2009, 02:38 PM   #4
longtu
Đệ tử 6 túi
 
longtu's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Send a message via Yahoo to longtu
Minh chua biet gui file len:
Ban copy lai nhé:
DS1820.c:
Code:
//************* Reset  *******************
void onewire_reset()  
{ 
 output_low(ONE_WIRE_PIN); 
 delay_us( 500 ); // pull 1-wire low for reset pulse 
 output_float(ONE_WIRE_PIN); // float 1-wire high 
 delay_us( 500 ); // wait-out remaining initialisation window. 
 output_float(ONE_WIRE_PIN); 
}
//************* Write data to the chip*******************
void onewire_write(int data) 
{ 
 int count; 

 for (count=0; count<8; ++count) 
 { 
  output_low(ONE_WIRE_PIN); 
  delay_us( 2 ); // pull 1-wire low to initiate write time-slot. 
  output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire 
  delay_us( 60 ); // wait until end of write slot. 
  output_float(ONE_WIRE_PIN); // set 1-wire high again, 
  delay_us( 2 ); // for more than 1us minimum. 
 } 
} 

//****************Read data from the chip********************
int onewire_read() 
{ 
 int count, data; 

 for (count=0; count<8; ++count) 
 { 
  output_low(ONE_WIRE_PIN); 
  delay_us( 2 ); // pull 1-wire low to initiate read time-slot. 
  output_float(ONE_WIRE_PIN); // now let 1-wire float high, 
  delay_us( 8 ); // let device state stabilise, 
  shift_right(&data,1,input(ONE_WIRE_PIN)); // and load result. 
  delay_us( 120 ); // wait until end of read slot. 
 } 

 return( data ) ;
} 

và file Temperature.c

float ds1820_read()
{ 
 int8 busy=0, temp1, temp2; 
 signed int16 temp3; 
 float result; 

 onewire_reset(); 
 onewire_write(0xCC); //SkipRom:cho phep truy cap den DS1820
 onewire_write(0x44); //Convert Command: chuyen doi gia tri nhiet do thanh so nhi phan
///////////////
 delay_ms(100);
///////////////
while (busy == 0) 
 busy = onewire_read(); 

 onewire_reset(); 
 onewire_write(0xCC); 
 onewire_write(0xBE); //cho Phep MU doc data trong DS1820
 temp1 = onewire_read();
 temp2 = onewire_read(); 
 temp3 = make16(temp2, temp1); 
  
 result = (float) temp3 / 2.0;   //Calculation for DS18S20 with 0.5 deg C resolution 
// result = (float) temp3 / 16.0;  //Calculation for DS18B20 with 0.1 deg C resolution 
 
// delay_ms(200); 
 return(result); 
}
Thân,
__________________
--------------------------------------------------------------------------------------
Phùng Minh Tuân
Email: tuan.phmt@gmail.com
"Cuộc đời sóng gió nuôi ta lớn
Bao lần thất bại dạy ta khôn".

thay đổi nội dung bởi: namqn, 09-03-2009 lúc 04:48 PM. Lý do: định dạng code
longtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn