⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430_ds18b20.c

📁 DS18B20的C程序(针对MSP430
💻 C
字号:
void Init_Sys(void)
{
 unsigned char i;
 WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
 //BCSCTL1|=RSEL2+RSEL1+RSEL0;
 //DCOCTL|=DCO2+DCO1+DCO0;

 BCSCTL1 &= ~XT2OFF;                   // XT2on
 do 
 {
  IFG1 &= ~OFIFG;                       // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);           // Time for flag to set
 }
 while ((IFG1 & OFIFG) != 0);          // OSCFault flag still set? 
           
 BCSCTL2 |= DIVM0+DIVM1+SELM1+SELS;    // MCLK = SMCLK = XT2 (safe)

}

void delay(unsigned int useconds)
{
  for(;useconds>0;useconds--);
}

unsigned char ow_reset(void)
{
  unsigned char presence;
  P1DIR |=0x40; //SET  TO OUTPUT
  P1OUT &=0xBF; //pull DQ line low
  delay(90); // leave it low for 600us
  P1OUT |=0x40;// allow line to return high
  delay(10); // wait for presence
  P1DIR &=0xBF; //SET  TO INPUT
  presence = P1IN; // get presence signal
  delay(60); // wait for end of timeslot
  return(presence); // presence signal returned
}     // 0=presence, 1 = no part

unsigned char read_byte(void)
{
  unsigned char i;
  unsigned char value = 0;
 // P1OUT |=0x40; // then return high
  for (i=8;i>0;i--)
  {
   value>>=1;
   P1DIR |=0x40; //SET  TO OUTPUT
   P1OUT &=0xBF; // pull DQ low to start timeslot
   _NOP();
   _NOP();
 //  delay(1);  //for (i=0; i<3; i++); 
   P1DIR &=0xBF; //SET  TO INPUT
   if(P1IN&0x40)value|=0x80;
   delay(8); // wait for rest of timeslot
 }
 return(value);
}

void write_byte(char val)
{
  unsigned char i;
  P1DIR |=0x40; //SET  TO OUTPUT
  for (i=8; i>0; i--) // writes byte, one bit at a time
  {
   P1OUT &=0xBF; // pull DQ low to start time slot
   _NOP();
   if(val&0x01)P1OUT |=0x40;
   else P1OUT &=0xBF;
   delay(12); // hold value for remainder of time slot
   P1OUT |=0x40;
   val>>=1;
  }
  delay(10);
}
//读取温度
unsigned int Read_Temperature(void)
{
  union
  {
   unsigned char c[2];
   int x;
  }temp;
  P1OUT |=0x80;   //PULL UP

  ow_reset();
  write_byte(0xCC); //Skip ROM
  write_byte(0x44); // Start Conversion

  delay(65535);
  
  ow_reset();
  write_byte(0xCC); // Skip ROM
  write_byte(0xBE); // Read Scratch Pad
  temp.c[0]=read_byte();
  temp.c[1]=read_byte();
  
  
  //ow_reset();
  //write_byte(0xCC); //Skip ROM
  //write_byte(0x44); // Start Conversion

  P1OUT &=0x7F;   //PULL DOWN
  return temp.x;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -