📄 jbapi.c
字号:
/************************************************************
*
* 函数名: 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 + -