⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hsb.c

📁 驱动程序 收音控制源代码-2051可单独作收音控制程序 
💻 C
字号:
#include <reg51.h>
#include <types.h>
#include <intrins.h>

// 6MHz
//#define TIMEOUT_VAL_200MS			6110			
//#define TIMEOUT_VAL_5MS	        152				// time out is about 10ms

// 12.288MHz
#define TIMEOUT_VAL_200MS			20485			
#define TIMEOUT_VAL_5MS	        	512				// time out is about 10ms

WORD gHSBWord;

sbit PIN_HSB_HOLD = P3^3;
sbit PIN_HSB_SDA  = P3^4;
sbit PIN_HSB_BCK  = P3^5;

//-------------------------------------------------------------------------
//   Read_HSB
//-------------------------------------------------------------------------
BOOL Read_HSB(void){
register BYTE i;
WORD j;

	PIN_HSB_HOLD=1;										// set HOLD to input
	PIN_HSB_SDA=1;										// set PIN_HSB_SDA to input

	if(!PIN_HSB_HOLD){
	 	gHSBWord=0;	

		for(i=8; i>0; --i){
			// Fall
			PIN_HSB_BCK = 0;			
			_nop_(); _nop_(); _nop_(); _nop_();

			for(j=TIMEOUT_VAL_200MS; (j>0) && (!PIN_HSB_HOLD); --j);// Wait HOLD to high
			if(j==0){PIN_HSB_BCK = 1; return 0;}					// if time out, return fail

			_nop_(); _nop_(); _nop_(); _nop_();
			gHSBWord <<= 1; if(PIN_HSB_SDA){gHSBWord |= 0x0001;}

			// Rise
			PIN_HSB_BCK = 1;
			_nop_(); _nop_(); _nop_(); _nop_();

			for(j=TIMEOUT_VAL_200MS; (j>0) && (PIN_HSB_HOLD); --j); // Wait HOLD to low
			if(j==0){PIN_HSB_BCK = 1; return 0;}					// if time out, return fail
			
			_nop_(); _nop_(); _nop_(); _nop_();
			gHSBWord <<= 1; if(PIN_HSB_SDA){gHSBWord |= 0x0001;}
		}

		PIN_HSB_BCK=0;

		for(j=TIMEOUT_VAL_200MS; (j>0) && (!PIN_HSB_HOLD); --j);	// Wait HOLD to high
	                                                
		PIN_HSB_BCK=1;

		if(j>0){	// not timeout, save to the RX queue
			return 1;
		}
		else {
			return 0;
		}
	} // if
	else {
		return 0;
	}
}

//-------------------------------------------------------------------------
//   Write_HSB
//-------------------------------------------------------------------------
BOOL Write_HSB(WORD hsbword){
register BYTE i;
WORD j;	

	PIN_HSB_BCK = 1;						// release BCK
	PIN_HSB_HOLD = 0; 

	for(j=TIMEOUT_VAL_200MS / 2.5; (j>0) && (PIN_HSB_BCK); --j);	// Wait BCK to low
	if (j==0) {PIN_HSB_HOLD=1; PIN_HSB_SDA=1; return 0;}	// Time out, exit

	// 16 bits
	for(i=8; i>0; --i){				
		if (hsbword & 0x8000) PIN_HSB_SDA=1; else PIN_HSB_SDA=0; hsbword <<= 1;
		_nop_(); _nop_(); _nop_(); _nop_(); 

		// Rise
		PIN_HSB_HOLD = 1;
		_nop_(); _nop_(); _nop_(); _nop_(); 

		for(j=TIMEOUT_VAL_200MS; (j>0) && (!PIN_HSB_BCK); --j);	// Wait BCK to high
		if (j==0) {PIN_HSB_HOLD=1; PIN_HSB_SDA=1; return 0;}	// Time out, exit

		if (hsbword & 0x8000) PIN_HSB_SDA=1; else PIN_HSB_SDA=0; hsbword <<= 1;
		_nop_(); _nop_(); _nop_(); _nop_(); 

		// Fall
		PIN_HSB_HOLD = 0;					// 
		_nop_(); _nop_(); _nop_(); _nop_(); 
	
		for(j=TIMEOUT_VAL_200MS; (j>0) && (PIN_HSB_BCK); --j);	// Wait BCK to low
		if (j==0) {PIN_HSB_HOLD=1; PIN_HSB_SDA=1; return 0;}	// Time out, exit
	}
		
	PIN_HSB_HOLD=1; PIN_HSB_SDA=1;			// release HOLD and SDA
	_nop_(); _nop_(); _nop_(); _nop_(); 
	
	for(j=TIMEOUT_VAL_200MS; (j>0) && (!PIN_HSB_BCK); --j);		// Wait BCK to high

	if (j==0) return 0;	
	else return 1; 
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -