lionlike 发表于 2010-9-15 21:53:35

DTMF软解码中的怪现象,哪位高人给分析一下

从论坛中参考hendry的DTMF软解码程序,但是在使用时始终不间断输出,在电话摘机时按键,串口接收的DTMF解码结果如下:
6666111#####11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111166611777**#####7777788800000**77788999000007777700#####8887788800###7777788888000008877700###DD88877888#####8877788000##0008877788###DD8887788800666AA333##999##########99###############################################################################################999#####00########88111BB000##88899555111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111CC666##AAA99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999966AAA66BBB1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111AAA5#006666666666666663366666666666666666666666666666666666666666666666666666666666666666666666666666666666662227774411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111BB446666666633333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333336663322233555992224411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116
实际DTMF按键为:#、9、6、3
想进行数字滤波处理一下,思路是:连续解码5次,只有连续5次一致时、且不为0时再串口输出,但是一滤波处理,解码数组就变成了0x00不知为何?检查了几遍也没看出问题!哪位高人给看一下!谢谢了!尤其欢迎hendry给出意见
void output_dtmf(void)
{
signed char ch;
unsigned char i, j;
unsigned char ch_num;
       
init_dtmf_decoder();        // 初始化解码器
j = 0;
sei();
do
{
    for(i=0;i<5;i++)
    {
      if(!is_fifo_empty())
      {
      ch = read_fifo();
      ch += -128;
       ch_num = decode_dtmf(ch);
      }
                       
   /* 验证输出测试 1 */
   transmitByte(ch_num);        // 解码结果正常输出!
    }
               
    for(i=0;i<5;i++)        // 一致性比较
   {
      /* 验证输出测试 2 */
      transmitByte(ch_num);        // 输出为NULL!即ch_num变为0!

      if(ch_num==ch_num)
      {
      j++;
                               
      /* 验证输出测试 3 */
      transmitByte(ch_num); // 输出为NULL!即ch_num变为0!
      }
      else
      {
      j = 0;
      break;
      }
   }
               
   if((j==4) && (ch_num!=0))
   {
   transmitByte(ch_num);        // 没有输出!因为是NULL!即ch_num变为0!
   j = 0;
   }
                       
} while( !(PINB & _BV(PB3)) );
cli();
}
这是hendry的DTMF软解码参考程序:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3231035&bbs_page_no=1&search_mode=1&search_text=软解码&bbs_id=1000

cchd20 发表于 2013-8-6 11:28:28

为什么出来那么多1的?
页: [1]
查看完整版本: DTMF软解码中的怪现象,哪位高人给分析一下