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

📄 jbinit.c

📁 电话PSTN线路上FSK处理软件。。。。。。。。。
💻 C
📖 第 1 页 / 共 2 页
字号:
    AutoReadPara(06);
    bReportNum=bParaByte;	
    AutoReadPara(29);
    iResetTime=iParaWord;
    AutoReadPara(30);
    iAutoDelayTime=iParaWord;
    AutoReadPara(31);
    if((iParaWord<320)||(iParaWord>800))
    	iParaWord=320;
    iWaitDDTime=iParaWord;
    AutoReadPara(32);
    iDetectCarrierTime=iParaWord;
    AutoReadPara(33);
    iCancelCodeDelay=iParaWord;
    AutoReadPara(34);
    bStationFDLength=bParaByte;
    AutoReadPara(35);
    iOffHookTime=iParaWord;
    ReadData(1,PARA_36,11,&aNumBuf);	
    bAutoOnOffHookTime=aNumBuf[0];
    bTalkDispTime=aNumBuf[1];
    fSaveFreeTalk=0;
    fSaveInTalk=0;
   	fStartFangDao=0;
   	fFanjiFangDao=0;
   	fPluseFD=0;
   	fDetectDialTone=0;
   	fDispTalkPointer=0;
 	fFDD=0;
    if(aNumBuf[2]!=0)
    	fSaveFreeTalk=1;
    if(aNumBuf[3]!=0)
    	fSaveInTalk=1;
    if(aNumBuf[4]!=0)
    	fStartFangDao=1;
    bOffHookDelay=aNumBuf[5];	
    if(aNumBuf[6]!=0)
    	fFanjiFangDao=1;
    if(aNumBuf[7]!=0)
    	fPluseFD=1;
    if(aNumBuf[8]!=0)
    	fDetectDialTone=1;
    if(aNumBuf[9]!=0)
    	fDispTalkPointer=1;
    if(aNumBuf[10]!=0)
    	fFDD=0;
//	 	fFDD=1;   
    //	
    iTalkLength=499;	
    bDayTotalLength=31;
 	//
 	bStatusWord=S_NEWLOCKWAIT;
}
// End function: NewParaInit()	

/***********************************************************
 *
 *	函	数: SavePowerOnOff()
 *	说	明: 记录计费器开关机记录 
 *	入	口:aRTCTime[]存储当前12887中的时间
 *			aUserRTCBuf[]存储上次关机时的时间
 *
 **********************************************************/
void SavePowerOnOff(void)
{
	byte i,bLen;
	uint iAddr;
	byte xdata *Point0;
	byte xdata *Point1;
	WaitRTC();
	Page(6);
	Point0=&aRTCTime;
	Point1=&aUserRTCBuf;
	if((*(Point1+YEARL)==*(Point0+9))	    // 开关机时间差检查
		&&(*(Point1+MONTH)==*(Point0+8))	
		&&(*(Point1+DAY)==*(Point0+7))	
		&&(*(Point1+HOUR)==*(Point0+4))	
		&&(*(Point1+MINUTE)==*(Point0+2))){
		Page(5);
		return;
	}
	if(fWorkMode){
		iAddr=NEW_POWERONOFF_ADDR;
		bLen=12;
	}	
	else{
		iAddr=OLD_POWERONOFF_ADDR;
		bLen=8;
	}	
	Page(5);
	AutoReadPara(70);
	if(bParaByte>=32)
		bParaByte=0;
	iAddr+=(uint)(bParaByte*bLen);
	if(++bParaByte>=32)
		bParaByte=0;
	AutoWritePara(70);
	//准备本次开关机记录数据:
	Page(6);
	//if(Point1[YEARH]>0x90)
		//aNumBuf[0]=0x19;
	//else	
		aNumBuf[0]=0x20;
	aNumBuf[1]=Point1[YEARL];
	aNumBuf[2]=Point1[MONTH];
	aNumBuf[3]=Point1[DAY];
	aNumBuf[4]=Point1[HOUR];
	aNumBuf[5]=Point1[MINUTE];
	if((aNumBuf[1]>=0x9a)||(aNumBuf[2]>=0x13)||(aNumBuf[3]>=0x32)
	  ||(aNumBuf[4]>=0x24)||(aNumBuf[5]>=0x5a))
	  	return;
	//if(Point0[9]>0x90)
		//aNumBuf[6]=0x19;
	//else	
		aNumBuf[6]=0x20;
	aNumBuf[7]=Point0[9];
	aNumBuf[8]=Point0[8];
	aNumBuf[9]=Point0[7];
	aNumBuf[10]=Point0[4];
	aNumBuf[11]=Point0[2];
	if(!fWorkMode){							//老模式的情况下,开关机记录长度不一至
		for(i=0;i<12;i++)
			aNumBuf[i]=aNumBuf[i+2];
		for(i=4;i<10;i++)	
			aNumBuf[i]=aNumBuf[i+2];
	}
	Page(5);
	memcpy(&aDataBuf,&aNumBuf,bLen);
	iPaNeNum=bLen;
	GeneralWriteData(iAddr);	
}
// End function: SavePowerOnOff()	

/***********************************************************
 *
 *
 *		函	数:	CheckRTCTime()
 *		说	明: 检查RTC时间值的合法性
 *
 *
 **********************************************************/

byte code aValidTime[][2]={0,99,
	  					   1,12,
						   1,31,
						   0,6,
						   0,23,
						   0,59,
						   0,59};

void CheckRTCTime(void)
{
	byte i;
	WaitRTC();
	Page(6);
	aNumBuf[0]=aRTCTime[9];
	aNumBuf[1]=aRTCTime[8];
	aNumBuf[2]=aRTCTime[7];
	aNumBuf[3]=(aRTCTime[6]&0x0f)-1;
	aNumBuf[4]=aRTCTime[4];
	aNumBuf[5]=aRTCTime[2];
	aNumBuf[6]=aRTCTime[0];
	Page(5);
	for(i=0;i<7;i++){
		if(!CheckValue(i)){
			bErrorCode=ERR_19;
			return;
		}	
	}
}		

bool CheckValue(byte bNum)
{
	byte bTemp;
	if(((aNumBuf[bNum]&0xf0)>0x90)||
	   ((aNumBuf[bNum]&0x0f)>0x09))
	   return FALSE;
	bTemp=((aNumBuf[bNum]>>4)&0x0f)*10+(aNumBuf[bNum]&0x0f);	
	if((bTemp>=aValidTime[bNum][0])&&(bTemp<=aValidTime[bNum][1]))
		return TRUE;
	else
		return FALSE;
}	   
// End function: CheckRTCTime()	

// 当12887即将更新时钟时,先等待。
void WaitRTC(void)
{
	byte bTemp;
	while(TRUE){
		IDLE;
		Page(6);
		bTemp=XBYTE[RTC_CONTROLA];
		Page(5);
		if((bTemp&0x80)==0)
			break;
	} 
}
// End function: WaitRTC()

/*************************************************************
 *
 *		函	数: CheckSumTest()
 *		说  明:	计算参数检验并顺序存入aNumBuf缓冲区中
 *                   
 ************************************************************/
void CheckSumTest(void)
{
 	uint iAddr;
 	byte i;
 	Page(6);
 	if(XBYTE[PARA_76]==1){
 		bErrorCode=ERR_99;
	 	Page(5);
	 	memset(aNumBuf,0xff,10);
 		return;
 	}
 	
 	Page(5);
 	if(fWorkMode){
 		AutoReadPara(100);
 		aNumBuf[0]=CalcCSSubA(NEW_SYSTEM_ADDR,iParaWord);
 		AutoReadPara(101);
 		aNumBuf[1]=CalcCSSubA(NEW_DISCOUNT_ADDR,iParaWord);
 		AutoReadPara(102);
 		aNumBuf[2]=CalcCSSubA(NEW_CALLSTATION_ADDR,iParaWord);
 		AutoReadPara(103);
 		aNumBuf[3]=CalcCSSubA(NEW_IDD_CLASS_ADDR,iParaWord);
 		AutoReadPara(104);
 		aNumBuf[4]=CalcCSSubA(NEW_DDD_CLASS_ADDR,iParaWord);
 		AutoReadPara(105);
 		aNumBuf[5]=CalcCSSubA(NEW_LOCAL_CLASS_ADDR,iParaWord);
 		AutoReadPara(106);
 		aNumBuf[6]=CalcCSSubA(NEW_IDD_TARIFF_ADDR,iParaWord);
 		AutoReadPara(107);
 		aNumBuf[7]=CalcCSSubA(NEW_DDD_TARIFF_ADDR,iParaWord);
 		AutoReadPara(108);
 		aNumBuf[8]=CalcCSSubA(NEW_LOCAL_TARIFF_ADDR,iParaWord);
 		ReadData(1,PARA_90,9,&aDataBuf);
	}
	else{
 		aNumBuf[0]=CalcCSSubA(OLD_SYSTEM_ADDR,0x18);
 		aNumBuf[1]=CalcCSSubA(OLD_DISCOUNT_ADDR,0x29);
 		aNumBuf[2]=CalcCSSubA(OLD_DISABLE_ADDR,0x20);
 		aNumBuf[3]=CalcCSSubA(OLD_IDD_CLASS_ADDR,0x02*128+0x68);
 		aNumBuf[4]=CalcCSSubA(OLD_DDD_CLASS_ADDR,0x04*128+0x1c);
		aNumBuf[5]=CalcCSSubA(OLD_LOCAL_CLASS_ADDR,0x02*128+0x68);
 		aNumBuf[6]=CalcCSSubB(0xf310);					// IDD国际费率区号表	
		aNumBuf[7]=0xff;	
		aNumBuf[8]=0xff;	
 		iAddress=PARA_232;
 		ReadBytes(1,6);
 		if(aParaBuf[2]==(byte)(aParaBuf[0]+aParaBuf[1])){
	 		iAddr=(uint)(aParaBuf[0]*256)+aParaBuf[1];
	 		iAddr|=0xf000;
 			aNumBuf[7]=CalcCSSubB(iAddr);				// DDD国内费率区号表	
 		}
 		if(aParaBuf[5]==(byte)(aParaBuf[3]+aParaBuf[4])){
	 		iAddr=(uint)(aParaBuf[3]*256)+aParaBuf[4];
	 		iAddr|=0xf000;
 			aNumBuf[8]=CalcCSSubB(iAddr);				// DDD国内费率区号表	
 		}
 		ReadData(1,PARA_223,9,&aDataBuf);
 	}
 	for(i=0;i<9;i++){
 		if(aDataBuf[i]!=aNumBuf[i]){
 			bErrorCode=ERR_10+i;
 			break;
 		}
 	}
}
// End function: CheckSumTest() 
	
// 计算从指定地址开始iLen长度字节的检验和: 
byte CalcCSSubA(uint iAddr,uint iLen)
{
	byte bCheckSum=0;
	if(iLen==0)
		return 0;
	Page(1);
	while((iLen--)!=0)
		bCheckSum+=XBYTE[iAddr++];
	Page(5);
	return bCheckSum;		
}
// End function: CalcCSSumA()

/*************************************************************
 *
 *	函数名:	CalcCSSubB
 *	说  明:	计算区号表中从StartAddr开始至该地址为0xff的检验和
 *
 ************************************************************/
byte CalcCSSubB(uint iAddr)
{
	byte bCheckSum=0,bTemp;
	while(TRUE){
		Page(1);
		bTemp=XBYTE[iAddr++];
		bCheckSum+=bTemp;
		if(bTemp==0xff)
			break;
		if(iAddr<0xe220)
			break;	
	}
	Page(5);
	return bCheckSum;
}
// End function: CalcCSSubB(.)	 

/*************************************************************
 *
 *	函数名:	DispCurrentDate
 *	说  明:	初始显示当前时钟(年-月-日 周).
 *
 ************************************************************/
void DispCurrentDate(void)
{
 	byte i;
 	memset(aLargeBuf,'\0',20);
 	WaitRTC();
	aLargeBuf[0]=aLCDSegment[2];
	aLargeBuf[1]=aLCDSegment[0];
	Page(6);
 	aNumBuf[0]=aLCDSegment[aRTCTime[9]>>4];
 	aNumBuf[1]=aLCDSegment[aRTCTime[9]&0x0f];
 	aNumBuf[2]=aLCDSegment[aRTCTime[8]>>4];
 	aNumBuf[3]=aLCDSegment[aRTCTime[8]&0x0f];
 	aNumBuf[4]=aLCDSegment[aRTCTime[7]>>4];
 	aNumBuf[5]=aLCDSegment[aRTCTime[7]&0x0f];
 	aNumBuf[6]=aLCDSegment[(aRTCTime[6]&0x0f)-1];
	Page(5);
 	aLargeBuf[2]=aNumBuf[0];
 	aLargeBuf[3]=aNumBuf[1];
 	aLargeBuf[4]=0x20;       
 	aLargeBuf[5]=aNumBuf[2];
 	aLargeBuf[6]=aNumBuf[3];
 	aLargeBuf[7]=0x20;
 	aLargeBuf[8]=aNumBuf[4];
 	aLargeBuf[9]=aNumBuf[5];
 	aLargeBuf[11]=aNumBuf[6];
 	if(!fWorkMode){
 		for(i=0;i<8;i++)
 			aLargeBuf[i]=aLargeBuf[i+2];
 		aLargeBuf[8]=aLargeBuf[9]=0;
 		aLargeBuf[10]=aLargeBuf[11];
 		aLargeBuf[11]=0;
 	}	
 	DispOut();
}
// End function: DispCurrentDate()
 
void Delay5MS(byte bTime)
{    
	if(bTime==0)
		return;
    cbDelay5MS=bTime;
	fDelay5MS=0;
	while(!fDelay5MS)
	    PCON=0x81;
}
// End function: Delay5MS()

void DelaySecond(byte bSecond)
{
    byte i;
    for(i=0;i<bSecond;i++){
	    cbDelay5MS=200;
		fDelay5MS=0;
		while(!fDelay5MS)
	    	PCON=0x81;
	}    	
}
// End function: DelaySecond()

// 页面切换函数:
void Page(byte bPage)
{
	EA=0;
	P1=(P1&0xf8)|bPage;
	EA=1;
}
// End function: Page()

// End file: jbinit.c 

/***********************************************************************

					JJF24-1B型计费器程序升级记录
					
B050310*:MODEM芯片为CMX644。					

B0503200:2000-08-25 10:32 升级

			修改:1  将MODEM通讯芯片换成73K222

B0503201:2001-03-22 20:14 升级

			修改:1  在SaveReocrd()函数中,未汇报话单指针增加时,要判断
			         其是否越界
			      2  修改并机防盗的检测方法,将并机防盗时间改为800毫秒
			      3  查找费率表时,若折扣时间从1:00开始,程序应能判断
			      4  改进被叫反极防盗方法
			      5  缩短待检状态下CPU的执行时间
			      6  振铃次数为0时的判断
			      7  被叫是否允许基肥和是否自动计费的判断
			      8  增加上海打印报表和打印格式
			      9  取消主叫摘机后的定时锁机功能

B0503202:2001-04-01 13:35 升级 

			修改:1  上海打印报表在打印0时,会将其打印成空格
			      2  将并机防盗时间改为2秒钟

B0503203:2001-04-05 20:22 升级

			修改:1  将SRAM换成 WINBOND 的 w24100 时,计费器很难进行按键
					 开机。原因是因为w24100在上电时,初始值时0xaa,导致器
					 其与用于避免按键重复开机的标志值bEnterFlag相同,从
					 而使计费器无法按键开机。
					 修改时,在主循环外将bEnterFlag首先清为0。
				  2  当拨入201#时,计费器将不显示其后的号码。
				  3  当拨打特服和免费电话时,要注意清除接收号码缓冲区内
				     的值。	 要判断pReadNubmer<pWriteNumber时的情况。增
				     加参数bIs201。

B0503204: 2001-04-28 19:22 升级
		
		    修改:上海专用打印,增加上海打印格式和打印报表结束后的打印走
		    	  纸距离,打印数据前也增加了打印回纸距离。

B0503205: 2001-05-14 08:04 升級

			修改:由于打印口的STB口線沒有被初始化為高,在上電時,從而造成
				  微打工作不正常。
				  查詢費率時每撥一個號碼都要查詢費率。
				  上海打印模式中,话毕不打印F0,F1,F2费。


B0503400: 2001-09-11 09:18 厦门修改
   
            修改:增加来电显示功能。
            
		  2002-03-26 11:34 增加厦门改造
		  
				1。将参数03含义改变:设为00时表示使用来电判断,非零时表示
				   使用振铃摘机功能,建议客户端用下拉表实现。
				2。增加扩充参数80,81.
    			3。增加管理系统号码表。MODEM通讯命令为59,串口通讯命令为54。
    			4。增加相应的MODEM和串口通讯内容。
    			5。和广东的费率设置一样,没有设置的区号作禁拨处理。因此缺省
    			   费率可设为禁拨,即将级数3(缺省级数)的F0和T0都设置为FFFFH。
				6。区号的最大长度增加为16位,客户端要做相应改动。
    			7.通讯联络命令改为66BB。
		  
B0504401: 2002-04-17 15:11 修改
            修改:  增加来电号码的存储功能.和普通话单存储在一起.

***********************************************************************/

⌨️ 快捷键说明

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