用c语言编写振铃检测程序,单片机检测电话振铃程序

n年前,为了下载USB的东西,上传到PUDN上的一个东东,看看如何?

整个源程序已经找不到了。当时是帮一个朋友写的电话报警主机。为了测试,还专门买了一个电话交换机。

基于KEIL C的RTXTiny操作系统的电话振铃检测程序。单片机为LPC900系列。 本程序并不能直接使用,但足以说明问题。如果您要使用您还需要定义相关变量等内容。 同时您还需要了解KEIL C的RTXTiny操作系统的使用。

#include                     /* special function registers 8052      */

#include                  /* RTX-51 tiny functions & defines      */

#include                     /* standard I/O .h-file                 */

#include                     /* character functions                  */

#include                    /* string and memory functions          */

#include

#include

EXT_MODBUS uchar idata RingCnt;    //振铃计数器

EXT_MODBUS uint idata RingCnt_TimeOut; //振铃超时计数器

EXT_MODBUS uchar idata RING_CNT;

EXT_MODBUS uchar idata RcvMode;

EXT_MODBUS uint idata RingCnt_Tmp;

/*

************************************************************************************************

* Name       : void RingChkTask (void) _task_ RING_CHK_TASK

* Describe   : 振铃检测

* Input      :

* Output     :

* Create by  : xy-mcu@163.com              Date:2003年04月08日 星期二  20:47:28

* Moid   by  :                     Date:

************************************************************************************************

*/

void RingChkTask (void) _task_ RING_CHK_TASK

{

uchar i;

RingCnt =0;

while(1)

{

RingChk_ini();//开始振铃检测,

os_clear_signal(RING_CHK_TASK);

//os_wait(K_SIG,0,0);//等待外部中断的信号。

if(SIG_EVENT == os_wait(K_SIG+K_TMO,250,0))//等待2.5秒。

{

os_wait(K_TMO,OS_TICKS_PER_SEC,0);//等待1秒。

i=RingCnt_Tmp;

if(i>10)RingCnt++;

if(RingCnt== RING_CNT)

{

EX1 = 0;//关闭振铃检测。

os_send_signal(INIT);//检测到,发送信号给处理程序。

RingCnt =0;

//os_wait(K_TMO,OS_TICKS_PER_SEC*3,0);//等待3秒。

os_wait(K_SIG,0,0);//等待信号,(从振铃处理程序回来的。通常是本次电话打入处理完成后,发送该信号。)

//重新开始。

}

else

{

os_wait(K_TMO,OS_TICKS_PER_SEC*2,0);//等待2秒。

os_wait(K_TMO,OS_TICKS_PER_SEC*1,0);//等待2秒。

}

}

else

{

RingCnt =0;//没有收到下一个振铃信号。超时处理。

}

}

}

/*

************************************************************************************************

* Name       :

* Describe   : 振铃检测中断,

* Input      :

* Output     :

* Create by  : xuyong              Date:2005年01月31日 星期一  22:52:38

* Moid   by  :                     Date:

************************************************************************************************

*/

void Ring_Chk_INT(void) interrupt 2 using 3

{

if(RingCnt_Tmp ==0)

{

isr_send_signal(RING_CHK_TASK);

}

RingCnt_Tmp ++;

}

void RingChk_ini(void)  //外部中断1初始化,下降沿中断。

{

TCON|=4;

EX1 =1;

RingCnt_Tmp=0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值