900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 用c语言编写振铃检测程序 单片机检测电话振铃程序

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

时间:2021-11-26 12:36:13

相关推荐

用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@ Date: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: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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。