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

📄 smte.h

📁 座机短信发送平台
💻 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 + -