?? 18b20p0.c
字號:
//P0的Pin腳置1 Pin為腳所在地址。如第3腳就是0x04
void Set1toP0(void)
{
P0|=Pin;
}
/**************************************************************/
//P0的Pin腳置0,Pin為腳所在地址。如第3腳就是0x04
void Set0toP0(void)
{
P0&=~Pin;
}
/********************************************************/
//檢查P0的Pin腳電平,為0返回0,為1返回非0
uchar CheckP0Level(void)
{
return(P0&Pin);
}
/**************************************************/
//18B20P0初始化
void Init18b20P0 (void)
{
flag=0;
WorR=1;
_nop_();
Set1toP0();
_nop_();
Set0toP0();
Delay600us(); //delay 600 uS
Set1toP0();
_nop_();
WorR=0;
_nop_();
Delay80us(); //delay 80 uS
if(!CheckP0Level()) flag = 1; //detect 1820 success!
else flag = 0; //detect 1820 fail!
Delay80us();
Delay45us();
WorR=1;
_nop_();
Set1toP0();
}
/*************************************************************/
//單字節寫入P0上18b20子程序
void WriteByteP0 (uchar wr)
{
uchar i;
WorR=1;
_nop_();
for (i=0;i<8;i++)
{
Set0toP0();
if(wr&0x01) Set1toP0();else Set0toP0();
Delay20us(); //delay 45 uS
Set1toP0();
wr >>= 1;
}
}
/***************************************/
//從P0上18b20讀取單字節子程序
uchar ReadByteP0 (void)
{
uchar i,u=0;
for(i=0;i<8;i++)
{
WorR=1;
_nop_();
Set0toP0();
u >>= 1;
Set1toP0();
_nop_();
WorR=0;
_nop_();
if(CheckP0Level()) u |= 0x80;
Delay45us();
_nop_();
}
return(u);
}
/*************************************/
//從P0上18b20連續讀取數個字節子程序
void read_bytesP0 (uchar j)
{
for(i=0;i<j;i++)
{
*p = ReadByteP0();
p++;
}
}
/***********************************************/
//MatchRomP0命令,只有P0上8位ID相同的18b20才能響應以后的命令
void MatchRomP0(void)
{
Init18b20P0();
WriteByteP0(0x55);//發出MatchRomP0命令,后帶8字節rom id
for(i=0;i<8;i++)
{
WriteByteP0(ReceivdID_buff[i]);
}
}
/********************************************************/
//讀取P0上溫度子程序
void GetTempP0 (void)
{
Init18b20P0 ();
MatchRomP0();
WriteByteP0(0xbe); //read Temperature
p = temp_buff;
read_bytesP0(9);
Delay5us();
Delay5us();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -