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

📄 jbapi.c

📁 电话PSTN线路上FSK处理软件。。。。。。。。。
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************
 *
 *		函数名:	DetectPulse()
 *		说  明:	检测脉冲拨号
 *
 ************************************************************/

void DetectPulse(void) using 1
{
	byte bTemp;
	bTemp=InBuf&0x03;				// 取出OH1.OH2
	if(bTemp==0x03)					// OH1.OH2=11	Hook Off
	{
		cbPulseNegative=0;          // N-
		if(++cbPulsePlus==0)
			cbPulsePlus=128;
		else if(cbPulsePlus==4)
		{
			if(!fPulseDetected)
			{
				fPulseDetected=1;
				cbPulseNum=0;
			}
		}
		else if(cbPulsePlus>L0)		// L0是挂机有效时间
		{
		    fPulseDetected=0;
		    cbPulseNum=0;
		}
	}
	else
	{								// OH1.OH2!=11 Hook On
		cbPulsePlus=0;
		if(bPulseSave!=bTemp){		// add 00/06/11
			bPulseSave=bTemp;
			cbPulseNegative=0;
		}
    	if(++cbPulseNegative==0)
			cbPulseNegative=128;
    	else if(cbPulseNegative==3){
			if(fPulseDetected)
			    ++cbPulseNum;
		}
		else if((cbPulseNegative==L4)&&fPulseDetected){		// L1:
			fPulseDetected=0;		// add
			if(cbPulseNum>=10)
				cbPulseNum=0;
			if(pWriteNumber<16){
			    aNumBuf[pWriteNumber]=cbPulseNum;
			    bDialType|=0xf0;
			    pWriteNumber++;
			}
		}
	}
}
// End function: DetectPulse()

//
// 检测并线盗打
//
void DetectBX(void) using 1
{
	if(fDaoDa){
		if((InBuf&0x08)==0)
			ciDaoDa=0;
		else if(++ciDaoDa>=360)
			ciDaoDa=360;
	}
	else
		ciDaoDa=0;
}


/***************************************************************
 *
 *  	函数名:SetPageInt()
 *  	功	能:中断使用页面设置函数
 *
 *
 **************************************************************/
void SetPageInt(byte bPage) using 1
{
	P1=(P1&0xf8)|bPage;
}
// End function: SetPageInt()

void _ApiTime1(void)
{
	Api_Time1();
}

void _ApiTime2(void)
{
	Api_Time2();
}

void _ApiInt1(void)
{
	Api_Int1();
}

//
// FSK 信号检测 278us 中断 yxw 2001-09-11 10:57
//
void Api_Time2(void) using 1
{
	byte bPage;
	byte bTemp;

	TF2=0;
//	if(fTxFSKStart){					// 发送数据时暂不接收 //
//		f833US=1;
//		return;
//	}

	bPage=P1&0x07;
	P1=(P1&0xf8)|0x05;
	FSK=1;
	bTemp=FSK;

//	InitLevel();

	//
	// 准备开始接收数据
	// bNeBuf 记录接收数据个数,数据存储在 aCallID[ ] 中
	//

	//------接收数据字------//
	if(fDataStart){
		CheckLevelNew();									//是否收到有效位
		if(fHaveFSKbit){
			++bLevelCount;
			if(bLevelCount==9){								// 接收到一个完整的字节数据
				fDataStart=0;
				bFSKTimes=0;
	//------存储接收到的数据------//
				if(fFSKFlag2&&(aCallID[99]<97)){			//停止位才是有效数据
					aCallID[aCallID[98]]=bPaBuf;			//aCallID[98]是后指针
					aCallID[98]=(aCallID[98]+1)%97;
					aCallID[99]++;							//aCallID[99]是数据个数
				}
			}
			else{
				bPaBuf>>=1;
				if(fFSKFlag2)								//是‘1’或是‘0’
					bPaBuf|=0x80;
			}
		}
	}
	//------检测数据接收的开始位置------//
	else{
	 	if(!bTemp){
	 		if(++bFSKTimes==3){
		 		bFSKTimes=0;
				bPaBuf=0;
				bLevelCount=0;
				fDataStart=1;
			}
		}
		else{
			if(bFSKTimes>=1){
				bFSKTimes=1;
				fFSKFlag1=1;
				bPaBuf=0;
				bLevelCount=0;
				fDataStart=1;
			}
			else
				bFSKTimes=0;
		}
	}

	P1=(P1&0xf8)|bPage;





//	byte bPage;
//
//	TF2=0;
//	//TT=0;
//
//	bPage=P1&0x07;
//	P1=(P1&0xf8)|0x05;
//
//	FSK=1;
//
//	switch(bFSKWord){
//		case 0:
//			fLow=0;
//			bFSKWord=1;
//			InitLevel();
//		// 检测起始位
//		case 1:
//			if(!FSK){
//				fLow=1;
//				break;
//			}
//			// 检测到第一个 01 上跳
//			else if(fLow){
//				bFSKWord=2;
//			}
//			else
//				break;
//
//		// 接收信道占用信号
//		case 2:
//			CheckLevel();
//			if(!fHaveFSKbit)
//				break;
//			if(fFSKFlag2){
//				if(fLow){
//					fLow=0;
//					// 检测连续 150 个 01 变换
//					if(++bLevelCount>=50){	// 100ms-3600ms的信道占用
//						bLevelCount=0;
//						bFSKWord=3;
//					}
//				}
//				else bFSKWord=0;	// 01-9-14 15:28
//			}
//			else
//			{
//			//	MD_CLK=0;
//				if(!fLow)fLow=1;
//				else bFSKWord=0;	//  01-9-14 15:28
//			}
//			break;
//
//		//等待结束;连续2个1为结束.
//		case 3:
//			CheckLevel();
//			if(!fHaveFSKbit)
//				break;
//			if(fFSKFlag2){
//				if(!fLow){
//						bFSKWord=4;
//				}
//				fLow=0;
//			}
//			else
//			{
//				fLow=1;
//			}
//			break;
//		// 检测标志信号, 179 个 1 组成
//		case 4:
//			CheckLevel();
//			if(!fHaveFSKbit)
//			 	break;
//			if(fFSKFlag2){
//				if(++bLevelCount>=100){ //120bit-240bit
//					bLevelCount=0;
//					bFSKWord=5;
//				//	MD_CLK=~MD_CLK;
//				}
//			}
//			else bFSKWord=0;
//			bFSKTimes=0;
//			fLow=0;
//			break;
//
//			//
//			// 准备开始接收数据
//			// bNeBuf 记录接收数据个数,数据存储在 aCallID[ ] 中
//			//
//
//		// 接收数据字
//		case 5:
//			if(fDataStart){
//				CheckLevelNew();
//				if(!fHaveFSKbit)
//					break;
//				++bLevelCount;
//				if(bLevelCount==8);         // 基偶校验位
//				else if(bLevelCount==9){	// 接收到一个完整的字节数据
//					fDataStart=0;
//					bFSKTimes=0;
//					//
//					//
//					if((bPaBuf==0)||(bPaBuf>0x7f));
//					else{
//						aCallID[bCallSeq]=bPaBuf;
//						if(bCallSeq<50)
//							bCallSeq++;
//					}
//					//
//					//
//					/*
//					aCallID[41]=0;
//					SDA=1;
//					*/
//					aCallID[50]=0;
//					//MD_CLK=1;
//					//TT=1;
//					// 消息长度
//					if(bCallSeq>=2){
//						// 接收长度到达消息长度
//						bCallBuf=aCallID[1];
//						bCallBuf+=2;
//						if(bCallSeq==bCallBuf){
//							fDataOver=1;
//							ET2=0;
//							aCallID[29]=bCallSeq;
//							//aCallID[49]=1;
//						}
//					}
//					//
//					//
//				}
//				else{
//					if(fFSKFlag2)
//						bPaBuf|=0x80;
//					bPaBuf>>=1;
//				}
//			}
//			// 检测数据接收的开始位置
//			else{
//			 	if(!FSK){
//			 		if(++bFSKTimes==3){
//				 		bFSKTimes=0;
//
//						bLevelCount=0;
//						fDataStart=1;
//						if(aCallID[50]!=0){
//							//aCallID[21]++;
//							//aCallID[19]=bCallSeq;
//							//
//							aCallID[bCallSeq]=bPaBuf;
//							if(bCallSeq<50)
//								bCallSeq++;
//							if(bCallSeq>=2){
//								// 接收长度到达消息长度
//								bCallBuf=aCallID[1];
//								bCallBuf+=2;
//								if(bCallSeq==bCallBuf){
//									fDataOver=1;
//									ET2=0;
//									aCallID[29]=bCallSeq;
//									//aCallID[49]=1;
//								}
//							}
//
//							// aCallID[20]=bPaBuf;
//
//							// TT=0;
//						}
//						bPaBuf=0;
//						//MD_CLK=0;
//						aCallID[50]=1;
//						//aCallID[26]++;
//					}
//				}
//				else{
//					if(bFSKTimes>=1){
//						bFSKTimes=1;
//						fFSKFlag1=1;
//						bPaBuf=0;
//						bLevelCount=0;
//						fDataStart=1;
//
//						/*
//						if(aCallID[41]!=0){
//							aCallID[22]++;
//							aCallID[20]=bCallSeq;
//						}
//						aCallID[41]=1;
//						aCallID[27]++;
//						*/
//					}
//					else
//						bFSKTimes=0;
//				}
//			}
//			break;
//
//		default:
//			bFSKWord=0;
//			break;
//	}
//	P1=(P1&0xf8)|bPage;
}



//void CheckLevel(void) using 1
//{
//	fHaveFSKbit=0;
//	++bFSKTimes;
//	if(bFSKTimes==1){
//		if(FSK)fFSKFlag1=1;
//		else fFSKFlag1=0;
//	}
//	if(bFSKTimes==2){
//		if(FSK)
//			fFSKFlag2=1;
//
//		else
//			fFSKFlag2=0;
//		if(fFSKFlag1!=fFSKFlag2){
//			fFSKFlag1=fFSKFlag2;
//			bFSKTimes=1;
//		}
//	}
//	if(bFSKTimes==3){
//		if(FSK)fFSKFlag3=1;
//		else fFSKFlag3=0;
//		// 采样 3 次,以点数最多为准
//		if(fFSKFlag2!=fFSKFlag3)
//		{
//			fFSKFlag1=fFSKFlag3;
//			bFSKTimes=1;
//		}
//		else bFSKTimes=0;
//		fHaveFSKbit=1;
//	}
//}

void CheckLevelNew(void) using 1
{
	fHaveFSKbit=0;
	++bFSKTimes;
	if(bFSKTimes==1){
		if(FSK)
			fFSKFlag1=1;
		else
			fFSKFlag1=0;
	}
	if(bFSKTimes==2){
		if(FSK)
			fFSKFlag2=1;
		else
			fFSKFlag2=0;
		if(fFSKFlag1!=fFSKFlag2){
			fFSKFlag1=fFSKFlag2;
			bFSKTimes=1;
		}
	}
	if(bFSKTimes==3){
		if(FSK)fFSKFlag3=1;
		else fFSKFlag3=0;
		// 采样 3 次,以点数最多为准
		if(fFSKFlag2!=fFSKFlag3)
		{
			fFSKFlag1=fFSKFlag3;
			bFSKTimes=1;
		}
		else bFSKTimes=0;
		fHaveFSKbit=1;
	}
}

void InitLevel(void) using 1
{
	bFSKTimes=0;
	bLevelCount=0;
	fRxDataReady=0;
	bCallSeq=0;
	fDataStart=0;
	fDataOver=0;
	bFSKFlag=0;
}

void Api_Int1(void) using 1
{

}

void Api_Time1(void) using 1
{

}



//
// End file: jbApi.c
//

⌨️ 快捷键说明

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