sodapopeiei
Joined: 02 May 2006 Posts: 3
|
my code ds1820 |
Posted: Wed May 03, 2006 5:06 am |
|
|
please check my code ds1820. it doesn't show the results on Hypertyminal . i doesn't understand.
#include <12F675.h>
#use delay(clock=4000000)
#fuses NOWDT,INTRC
#use rs232(baud=9600,xmit=PIN_A2,rcv=PIN_A3)
#define Sensor PIN_A0
int Sensor_Reset(void);
int Sensor_Write(int data);
void Sensor_read(void);
int Temp_H[8],Temp_L[8],i;
void main(){
int temp;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
printf("\r\nWaiting for a Sensor...\r\n");
while (TRUE) {
while(!Sensor_Reset()) ;
Sensor_Write(0xCC);
Sensor_Write(0x44);
delay_ms(200);
if(Sensor_Reset()){
Sensor_Write(0xCC);
Sensor_Write(0xBE);
Sensor_read();
temp=((Temp_H[0]*64)+(Temp_H[1]*32)+(Temp_H[2]*16)+(Temp_H[3]*8)+(Temp_H[4]*4)+(Temp_H[5]*2)+(Temp_H[6]*1)+(Temp_H[7]?0.51:0.01));
printf("\n\rTemp: %d C\n\r",Temp);
// printf("\n\rTemp: %2.1f C%d%d%d%d%d%d%d%d\n\r",(Temp_L[7]?(-1*Temp):Temp),Temp_L[0],Temp_L[0],Temp_L[2],Temp_L[3],Temp_L[4],Temp_L[5],Temp_L[6],Temp_L[7]);
delay_ms(1000);
}
}
}
int Sensor_Reset(void){
int present;
output_low(Sensor);
delay_us(500);
output_float(Sensor);
delay_us(5);
if(!input(Sensor))
return(FALSE);
delay_us(65);
present=!input(Sensor);
delay_us(240);
if(present)
return(TRUE);
else
return(FALSE);
}
int Sensor_Write(int data){
for(i=1;i<=8;++i){
output_low(Sensor);
delay_us(10);
if(shift_right(&data,1,0)){
output_high(Sensor);
delay_us(10);
}
else{
output_low(Sensor);
delay_us(10);
}
delay_us(50);
output_high(Sensor);
delay_us(50);
}
return(TRUE);
}
void Sensor_read(void){
for(i=0;i<8;i++) {
output_low(Sensor);
delay_us(14);
output_float(Sensor);
delay_us(5);
Temp_H[7-i]=input(Sensor);
delay_us(100);
}
} |
|