📄 ds2438.c
字号:
#include<w78e58b.h>
#include <intrins.h>
sbit dq=P1^2;
sbit dq_find=P1^0;
void ds2438_write(unsigned char dst);
void ds2438_reset(void);
bit ds2438_wait(void);
/************* delay time ******************************/
void ds2438_delay(char t)
{
for(;t>0;t--)
{}
}
/************** wait *****************************/
bit ds2438_wait(void)
{
unsigned char i;
bit x;
x=0;
for(i=0;i<100;i++)
{
if(~dq)
{
if(dq)
{x=1;return x;}
} }
return x;
}
/************** reset ds2438 ************************/
void ds2438_reset(void) // reset ds2438
{
dq_find=0;
dq=0;
ds2438_delay(50);
dq=1;
dq_find=1;
}
/*************** wait responsion ***********************/
/*************** read a bit data ******************************/
bit ds2438_readbit(void)
{
bit x;
dq=0;
_nop_();
_nop_();
_nop_();
_nop_();
dq=1;
x=dq;
return(x);
}
/**************** read a byte data *****************************/
unsigned char ds2438_readbyte(void)
{
unsigned char i,dat,x;
dat=0x00;
for(i=0;i<8;i++)
{
x=ds2438_readbit();
dat=(x<<7)|(dat>>1);
}
return(dat);
}
/******************* write a byte data *******************************/
void ds2438_write(unsigned char dat)
{
unsigned char i,x;
for(i=0;i<8;i++)
{
x=dat&1;
dat>>=1;
if(x==1)
{
dq=0;
ds2438_delay(0);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
dq=1;
}
else {
dq=0;
ds2438_delay(5);
dq=1;
}
}
}
/************ starting ds2438 ********************/
void ds2438_start(void)
{ EA=0;
ds2438_reset();
ds2438_wait();
ds2438_write(0xcc);
ds2438_write(0x44);
ds2438_reset();
ds2438_wait();
ds2438_write(0xcc);
ds2438_write(0xb4);
ds2438_reset();
ds2438_wait();
ds2438_write(0xcc);
ds2438_write(0xb8);
ds2438_write(0x00);
EA=1;
}
/* bit ds2438_readbit_find(void)
{
bit x;
dq_find=0;
ds2438_delay(1);
dq_find=1;
x=dq_find;
return(x);
}
/**************** read a byte data *****************************
unsigned char ds2438_readbyte_find(void)
{
unsigned char i,dat,x;
dat=0x00;
for(i=0;i<8;i++)
{
x=ds2438_readbit_find();
ds2438_delay(1);
dat=(x<<7)|(dat>>1);
}
return(dat);
}
/************** wait *****************************
bit ds2438_wait_find(void)
{
unsigned char i;
bit x;
x=0;
for(i=0;i<100;i++)
{
if(~dq_find)
{
ds2438_delay(0);
if(dq_find)
{x=1;return x;}
} }
return x;
}
/******************* dq_find ***************************
void ds2438_write_find(unsigned char dat)
{
unsigned char i,x;
for(i=0;i<8;i++)
{
x=dat&1;
dat>>=1;
if(x==1)
{
dq_find=0;
ds2438_delay(0);
dq_find=1;
}
else {
dq_find=0;
ds2438_delay(5);
dq_find=1;
}
}
}
/*********** read number ********************************
void ds2438_number(unsigned char xxxxx[8])
{
unsigned char *p;
unsigned char i;
p=xxxxx;
EA=0;
ds2438_reset();
ds2438_wait_find();
ds2438_write_find(0x33);
for(i=0;i<8;i++)
{
*p=ds2438_readbyte_find();
p++;
}
EA=1;
} */
void ds2438_read_integrated_page(unsigned char x,unsigned char d[8],unsigned char dat[8])
{
unsigned char *p;
unsigned char i;
p=d;
EA=0;
ds2438_reset();
ds2438_wait();
ds2438_write(0x55);
for(i=0;i<8;i++)
{
ds2438_write(*p);
p++;
}
p=dat;
ds2438_write(0xbe);
ds2438_write(x);
for(i=0;i<8;i++)
{
*p=ds2438_readbyte();
p++;
}
EA=1;
}
/*void ds2438_write_integrated_page(unsigned char x,unsigned char d[8],unsigned char dat[8])
{
unsigned char *p;
unsigned char i;
p=d;
EA=0;
ds2438_reset();
ds2438_wait();
ds2438_write(0x55);
for(i=0;i<8;i++)
{
ds2438_write(*p);
p++;
}
p=dat;
ds2438_write(0x4e);
ds2438_write(x);
for(i=0;i<8;i++)
{
ds2438_write(*dat);
dat++;
}
ds2438_reset();
ds2438_wait();
ds2438_write(0xcc);
ds2438_write(0x48);
ds2438_write(x);
EA=1;
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -