/*****延时子程序*****/ void Delay_DS18B20(int num) {
while(num--) ; }
void delay()//5微秒延时函数 { ;; }
void start() //开始信号 { }
void stop() //终止信号 { }
SDA=1; delay(); SCL=1; delay(); SDA=0; delay();
SDA=0; delay(); SCL=1; delay(); SDA=1; delay();
void respons() //应答 {
uc i; SCL=1; delay();
while((SDA==1)&&(i<250))i++;//如果SDA为低应答有效,或者超过一定时间默
认应答有效 }
void init24c04()//I2C总线初始化 { }
void write_byte(uc date)//写操作 {
SCL=0; delay();
SDA=1; delay(); SCL=1; delay();
uc i,temp; temp=date; for(i=0;i<8;i++) {
temp=temp<<1; SCL=0;
}
delay(); } SCL=0; delay(); SDA=1; delay();
SDA=CY; delay(); SCL=1; delay();
uc read_byte()//读操作 {
uc i,k; SCL=0; delay(); SDA=1; delay();
for(i=0;i<8;i++) {
SCL=1; delay();
k=(k<<1)|SDA; SCL=0; delay();
}
}
return k;
void write_add(uc address,uc date)//往任意地址存数据 { }
uc read_add(uc address)//读随意地址内容 {
start();
write_byte(0xa0);//0xa0代表写入 respons();
write_byte(address); respons(); write_byte(date); respons(); stop();
uc date; start();
write_byte(0xa0);//0xa0代表写入 respons();
write_byte(address); respons(); start();
write_byte(0xa1);//0xa1代表读出 respons();
}
date=read_byte(); stop();
return date;//返回值
/*****初始化DS18B20*****/ void Init_DS18B20(void) {
uc w=0;
DQ = 1; //DQ复位 Delay_DS18B20(8); //稍做延时 DQ = 0; //单片机将DQ拉低
Delay_DS18B20(80); //精确延时,大于480us DQ = 1; //拉高总线 Delay_DS18B20(14);
w = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败 Delay_DS18B20(20); }
/*****读一个字节*****/
unsigned char ReadOneChar(void) {
uc i=0; uc dat = 0; for (i=8;i>0;i--) {
DQ = 0; // 给脉冲信号