请教下ds18b20的驱动程序问题
时间:10-02
整理:3721RD
点击:
这是我的程序,大家看看有没有什么问题
为何我进行串口打印的时候输出的一直是一个很大的值
static void GPIO_Out_Config(){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
static void GPIO_In_Config(){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
static void Tx_signal(){
GPIO_Out_Config();
GPIO_ResetBits(GPIOE,GPIO_Pin_9);
delay(620);
GPIO_SetBits(GPIOE,GPIO_Pin_9);
delay(1);
}
static void Rx_signal(){
GPIO_In_Config();
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_9));
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_9)==0);
delay(300);
GPIO_Out_Config();
}
void ds18b20_Config(){
Tx_signal();
Rx_signal();
}
static void WriteBit(unsigned char data){
char i=0;
GPIO_Out_Config();
for(i=0;i<8;i++){
if(data&0x01){
GPIO_ResetBits(GPIOE,GPIO_Pin_9);
delay(8);
GPIO_SetBits(GPIOE,GPIO_Pin_9);
delay(80);
}else{
GPIO_ResetBits(GPIOE,GPIO_Pin_9);
delay(110);
GPIO_SetBits(GPIOE,GPIO_Pin_9);
delay(5);
}
data>>=1;
}
}
static unsigned char ReadBit(){
char i=0;
unsigned char data;
for(i=0;i<8;i++){
GPIO_Out_Config();
data>>=1;
GPIO_ResetBits(GPIOE,GPIO_Pin_9);
delay(3);
GPIO_In_Config();
delay(1);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_9)){
data=data|0x80;
}
delay(70);
}
GPIO_Out_Config();
return data;
}
unsigned short get_Temp(){
unsigned short a,b;
unsigned short temp;
ds18b20_Config();
WriteBit(0x33);
ds18b20_Config();
WriteBit(0xCC);
WriteBit(0x44);
delay(780);
ds18b20_Config();
WriteBit(0xCC);
WriteBit(0xBE);
a=ReadBit();
b=ReadBit();
temp=(b<<8)|a;
if(b&0xf0){
sign=1;
temp=~temp+1;
temp=temp*0.0625;
}else{
sign=0;
temp=temp*0.0625;
}
return temp;
}