资源简介
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树代码实现
- 下一篇:清华大学电子工程系各研究所科研方向及导师相关信息
评论
共有 条评论