📄 smte.h
字号:
#include"sys-head.H"
sbit RING=P2^7;
sbit SW=P2^5;
sbit DTMFDATAOE=P1^3;
sbit DTMFDATADV=P1^4;
sbit DTMFDATAD3=P1^5;
sbit DTMFDATAD2=P1^0;
sbit DTMFDATAD1=P1^2;
sbit DTMFDATAD0=P1^3;
//SONY_EXT int SMCNO[8]={0,0,0,0,0,0,0,0};
Uchar SMCNO[8];
Uchar SMCNOTEMP[8];
Uchar REVDATA[64];
Uchar Revsuc=FORBID;
Uchar BeforData[]={0x5f,0xe7,0xf5,0xfe,0x7f,0x5f,0xe7,0xf5,0xfe,0x7f};
//SONY_EXT Uchar
/******************************************************
**Fun Name:void smeteinit(void)
**
**作用:初始化FSK串口接收
**
**函数接口:
**
**编写信息:
**
*******************************************************/
void smeteinit(void)
{
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1 定时方式2
TCON = 0x40; //设定时器1 开始计数
TH1 = 0xE8; //11.0592MHz 1200 波特率
TL1 = 0xE8;
}
/******************************************************
**Fun Name:void smterev(void)
**
**作用:SMC 和smte建立下传拨号连接
**
**函数接口:
**
**编写信息:
//DTMF话机拨号信号接收函数
**
*******************************************************/
void smterev(void)
{
#ifdef REV_TEST
Uchar dtmfdatabuff[8];
Uchar smteno;
Uchar temp;
//来电检测:等待接收到来电信号
while(RING);
//当检测到有宵DTMF信号
if(DTMFDATADV)
{
for(temp=0;temp<8;temp++)
{
//开启SMTE的DTMF接收功能
DTMFDATAOE =ENABLE;
//读取第一DTMF有效数据,作为有效数据位的高四位
//dtmfdatabuff =((DTMFDATAD3<<7)|(DTMFDATAD2<<6)|(DTMFDATAD1<<5)|(DTMFDATAD0<<4));
dtmfdatabuff[7] =DTMFDATAD3;
dtmfdatabuff[6] =DTMFDATAD2;
dtmfdatabuff[5] =DTMFDATAD1;
dtmfdatabuff[4] =DTMFDATAD0;
smteno =((dtmfdatabuff[7]<<7)|(dtmfdatabuff[6]<<6)|(dtmfdatabuff[5]<<5)|(dtmfdatabuff[4]<<4));
//为了系统的健壮性,延时时间为80ms
dtmfdealy(16);
dtmfdatabuff[3] =DTMFDATAD3;
dtmfdatabuff[2] =DTMFDATAD2;
dtmfdatabuff[1] =DTMFDATAD1;
dtmfdatabuff[0] =DTMFDATAD0;
smteno =((dtmfdatabuff[3]<<3)|(dtmfdatabuff[2]<<2)|(dtmfdatabuff[1]<<1)|dtmfdatabuff[0]);
SMCNOTEMP[temp]=smteno;
}
for(temp=0;temp<8;temp++)
{
//如果为无效的短消息中心号码
if(!(SMCNO[temp]==SMCNOTEMP[temp]))
{
break;
}
}
//显示短信中心号码
for(temp=8;temp<0;temp--)
{
DispOneChar(0,temp,dtmfdatabuff[temp]);
}
//至此电话线路连接成功
//电话摘机
SW =ENABLE;
//置位电话下传连接信息标志
Revsuc =ENABLE;
}
#endif
}
/******************************************************
**Fun Name:void revfskmessage(void)
**
**作用:开启串口接收FSK短信息信号
**
**函数接口:
**
**编写信息:
**
*******************************************************/
void revfskmessage(void)
{
//如果电话连接成功
if(Revsuc)
{
//开启串口接收FSK短信息信号
UARTEN;
uartisr();
}
}
/******************************************************
**Fun Name:void dtmfdealy(Uint n)
**
**作用:DTMF延时函数
**
**函数接口:n,延时5秒*n
**
**编写信息:
**
*******************************************************/
void dtmfdealy(Uint n)
{
Uint temp;
for(temp=n;temp<0;temp--)
{
Delay5Ms();
}
}
/******************************************************
**Fun Name:void uartisr(void)
**
**作用:串口接收FSK短信息信号接收中断服务函数
**
**函数接口:
**
**编写信息:
**
*******************************************************/
void uartisr(void)
{
Uchar rx_cnt;
Uchar counttemp;
while(RI==FORBID)
{
REVDATA[rx_cnt] =SBUF;
RI =FORBID;
rx_cnt++;
//前标志接收-80bits 0-1-0111111111
//First byte=0x5f
//Second byte=0xe7
//Third byte=0xf5
//Forth byte=0xfe
//Firth byte=0x7f
//sixth byte=0x5f
//................
for(counttemp=0;counttemp<10;counttemp++)
{
if(REVDATA[counttemp]==BeforData[counttemp])
{
;
}
else
{
rx_cnt =FORBID;
break;
}
}
//如果收到结束校验标志的正确标志,那么跳出串口接收程序,到现在为此接收到完整的一帧
if(REVDATA[rx_cnt-1]==ENABLE)
{
UARTDISEN;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -