温度传感器18b20的驱动程序
自己亲手调试过 /**************************************************************************** 函数功能:DS18B20初始化子程序 入口参数: 出口参数: ****************************************************************************/ void Init_DS18B20(void) { unsigned char x=0; DDRA|=BIT(2);//设置为输出 DQoff; //发送复位脉冲 delay_nus(550); //延时(>480ms) DQon; //拉高数据线 delay_nus(40); //等待(15~60ms) DDRA&=~BIT(2);//设置为输入 x=PINA&0X04; //取出PA2口的电平 delay_nus(100); DQon;//再次将数据线拉高 } /********************* ******************************************************* 函数功能:向DS18B20读一字节数据 入口参数: 出口参数:dat ****************************************************************************/ uint ReadOneChar(void) { unsigned char i=0; unsigned char dat=0; unsigned x=0; for (i=8;i>0;i--) { dat>>=1; DDRA|=BIT(2);//PA2口设置为输出 DQon;//拉高 delay_nus(2); //延时两微妙 DQoff; //将数据线拉低 delay_nus(6); DQon;//拉高 delay_nus(3); DDRA&=~BIT(2);//PA2口设置为输入 x=PINA&BIT(2); //取出PA2口的电平 if(x==0) { dat&=~0x80; } else dat|=0x80; delay_nus(31); } return(dat); } ******************************************************* 函数功能:向DS18B20读一字节数据 入口参数: 出口参数:dat ****************************************************************************/ uint ReadOneChar(void) { unsigned char i=0; unsigned char dat=0; unsigned x=0; for (i=8;i>0;i--) { dat>>=1; DDRA|=BIT(2);//PA2口设置为输出 DQon;//拉高 delay_nus(2); //延时两微妙 DQoff; //将数据线拉低 delay_nus(6); DQon;//拉高 delay_nus(3); DDRA&=~BIT(2);//PA2口设置为输入 x=PINA&BIT(2); //取出PA2口的电平 if(x==0) { dat&=~0x80; } else dat|=0x80; delay_nus(31); } return(dat); }
用户评论