微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请教下ds18b20的驱动程序问题

请教下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;
}
上一篇:ARM project小问题
下一篇:有关51单片机

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top