?? ds1820.c
字號:
#include"msp430x14x.h"
#include"DS1820.h"
void delay(int nUs)
{
int nCount;
int i;
int j;
nCount = 3;
for(i = nUs; i > 0; i--)
{
for(j = nCount;j > 0;j--) ;
}
return;
}
char DS1820_Reset(void)
{
char presence;
// 設定管腳為輸出方向
P1DIR |= DQ;
// 將DQ管腳拉低
P1OUT &= ~(DQ);
// 延時480微妙
delay(480);
// 將DQ管腳拉高
P1OUT |= DQ;
// 延時60微妙
delay(60);
// 設定管腳為輸入方向
P1DIR &= ~(DQ);
// 讀取數據
presence = (char)(P1IN & DQ);
// 延時60微妙
delay(25);
return(presence);
}
char DS1820_ReadByte(void)
{
char i;
char value = 0;
char presence;
for (i = 8;i > 0;i--)
{
value >>= 1;
// 設定管腳為輸出方向
P1DIR |= DQ;
// 將DQ管腳拉低
P1OUT &= ~(DQ);
// 將DQ管腳拉高
P1OUT |= DQ;
// 延時1微妙
delay(1);
// 設定管腳為輸入方向
P1DIR &= ~(DQ);
// 讀取數據
presence = (char)(P1IN & DQ);
if(presence) value |= 0x80;
// 延時1微妙
delay(60);
}
return value;
}
void DS1820_WriteByte(char val)
{
char i;
char nBit;
for (i=8; i>0; i--)
{
// 設定管腳為輸出方向
P1DIR |= DQ;
// 將DQ管腳拉低
P1OUT &= ~(DQ);
// 輸出數據
nBit = val & 0x01;
if (nBit)
{
P1OUT |= DQ;
}
else
{
P1OUT &= ~(DQ);
}
// 延時50微妙
delay(50);
// 將DQ管腳拉高
P1OUT |= DQ;
val >>= 1;
}
// 延時5微妙
delay(5);
}
char Read_Temperature(void)
{
union
{
char c[2];
int x;
} temp;
// 復位
DS1820_Reset();
// Skip ROM
DS1820_WriteByte(0xCC);
// 開始轉換
DS1820_WriteByte(0x44);
// Read Scratch
DS1820_WriteByte(0xBE);
//讀取溫度數據
temp.c[1]=DS1820_ReadByte();
temp.c[0]=DS1820_ReadByte();
// 返回數據
return temp.x;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -