初始化时序
写1时序
写0时序和读时序
#define DQ_PIN xxx
#define DQ_OUT xxx
#define DQ_IN xxx
#define tRSTL 480//-
#define tRSTH 480//-
#define tPDH 15//-60
#define tPDL 60//-240
#define tSLOT 60//60-120
#define tLOW1 1//1-15
#define tREC 1//1-
#define tLOW0 60//60-120<tSLOT
#define tRELEASE 0//0-45
#define tLOWR 1//1-15
#define tRDV 15
#define tSU 1//<1
bool bsp_one_wire_start(void)
{
DQ_IN;
for(int i=0;i<3;i++){
while( DQ_PIN == 0 );
DQ_OUT;
DQ_PIN = 0;
delay_us( 500 );
DQ_PIN = 1;
delay_us( 35 );
DQ_IN;
int delay_us_count = 460;
while( delay_us_count > 0){
if( DQ_PIN == 0 ){
return true;
}
delay_us( 1 );
delay_us_count--;
}
}
return false;
}
void bsp_one_wire_write(unsigned char *src, int len){
unsigned char data;
//LSB tSLOT > 60us
DQ_OUT;
while( len > 0 ){
data = *src;
for(int i = 0; i < 8 ; i++){
DQ_PIN = 0;
delay_us(8);
DQ_PIN = ( data&0x1 );
data>>=1;
delay_us(52);
DQ_PIN = 1;
delay_us(3);
}
src++;
len--;
delay_us(42);
}
}
void bsp_one_wire_read( unsigned char *src, int len ){
//LSB tSLOT > 60us
while( len > 0 ){
for(int i = 0; i < 8 ; i++){
DQ_OUT;
DQ_PIN = 0;
delay_us(2);
DQ_PIN = 1;
delay_us(2);
DQ_IN;
*src>>=1;
if( DQ_PIN == 1 )
*src|=0x80;
delay_us(56);
}
src++;
len--;
delay_us(42);
}
}