0
点赞
收藏
分享

微信扫一扫

单总线主机

萍儿的小确幸 2022-04-18 阅读 73
c语言

初始化时序
在这里插入图片描述
写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);
	}
}
举报

相关推荐

0 条评论