資源簡介
DS2431的C51驅動代碼。本人驗證可行。
代碼片段和文件信息
#include?“ds2431.h“
#include?“typedef.h“
bit??DS2431err;???????//DS2431的錯誤標志
void?delay_ms(u16?xms)
{
u16?ij;
for(i=0;i {
for(j=0;j<88;j++)
{;}
}
}
void?delay(u16?num)
{
while(--num);
}
void?Delay()//1us
{
_nop_();
_nop_();
}?
Init_DS2431(void)
{
bit?Presece;
// DQ=1;
// delay(5);
DQ=0;??//將DQ信號線拉低
delay(237);?//保持DQ低電平480us
DQ=1; ??//將DQ信號拉高、釋放總線
? delay(50);//保持DQ高電平70us ?81us
Presece=DQ;//保存當前總線狀態
delay(65);?//189us
return?Presece;//返回是否有設備將總線拉低?
}
read_bit(void)?//從單總線上讀取一個數據位
{
bit?i;
DQ=0;//啟動讀時序
Delay();
Delay();
Delay();
Delay();
Delay();
DQ=1;//釋放總線,等待從機返回數據位
Delay();
Delay();
Delay();
Delay();
i=DQ;
delay(25);//30us
DQ=1;
return?i;//返回總線狀態
}
void?write_bit(u8?bitvalue)??//向單總線設備寫入一個數據位
{
DQ=0;//啟動寫時序
Delay();
Delay();
Delay();
Delay();
Delay();
if(bitvalue)?DQ=1;//寫1
delay(25);//等待寫時序結束25us
DQ=1;//釋放總線
delay(20);//等待寫時序結束?10us???1??????????????????????
}
read_byte(void)//從單總線上讀一個字節數據??
{
u8?ivalue=0;
EA=0;
for(i=0;i<8;i++)
{
if(read_bit())?value=value|(0x01< }
EA=1;?////////////////////////////////////////
delay(2);//等待釋放總線
return?value;?//返回讀取的數據
}
void?write_byte(u8?bytevalue)//向單總線寫一個字節
{
u8?itemp;
EA=0;
for(i=0;i<8;i++)
{
temp=bytevalue>>i;//將要寫的數據字節右移i位
temp=temp&0x01; ??//取出數據字節的第i位.?
write_bit(temp);??//向總線寫一個數據位/?I/
}
EA=1;?///////////////////////////////////////////
delay(4);//等待寫時序結束
}
bit?skip_matchRom(void)//發出跳過ROM匹配命令
{
bit?tmp=1;
if(Init_DS2431())?return?tmp;//如果沒有DS2431,返回1
write_byte(0xcc);//發出跳過ROM匹配的命令
tmp=0;
return?tmp;
}
read_ds2431(u16?Readaddr)
{
u8?ch;
DS2431err=skip_matchRom();//發出跳過ROM匹配命令
write_byte(0xf0);//發出讀存儲器命令
write_byte((u8)Readaddr);
write_byte((u8)(Readaddr>>8));
ch=read_byte();
return?ch;
}
signed?char?*
- 上一篇:R樹代碼實現
- 下一篇:清華大學電子工程系各研究所科研方向及導師相關信息
評論
共有 條評論