• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: ds2431  

资源简介

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 *

评论

共有 条评论

相关资源