[技术问答] 新唐N76E003输入捕获的问题

[复制链接]
 楼主| 发表于 2018-8-13 22:17 | 显示全部楼层 |阅读模式
下面是我输入捕获的代码
void Timer2Capture_Init(void)
{
                P01_Input_Mode;
                P01 = 1;
                TIMER2_CAP0_Capture_Mode;
                IC4_P01_CAP0_BothEdge_Capture;
               
//    set_ET2;                                    //Enable Timer2 interrupt
    set_ECAP;                                   //Enable Capture interrupt
    set_TR2;                                    //Triger Timer2
    set_EA;
}
void Capture_ISR (void) interrupt 12
{
//                                uint16_t Pulse;
        clr_CAPF0;     
//                                NumberL = C0L;                                                                                                                // For capture mode CxL/CxH with data capture from I/O pin
//                                NumberH = C0H;
                                Pulse = C0H;
                                Pulse <<= 8;
                                Pulse |= C0L;
                                printf("\n  Single 0x%04X",Pulse);
                                DataAnalyze();
                                clr_TF2;
}
        void DataAnalyze()
        {
                                Time = Pulse/16;//这里做了下运算输入捕获的值就不准了,如果不做运算就可以。
                                printf("\n TM2 Time %u",Time);
                                a=Pulse;
//                                cc =1;
                        if((a>=7520)&&(a<=8480))
                                                {
       
//                                                                        Single = 0X3F; //½ÓÊÕµ½0
                                                                                        printf("\n 0000000 0x%bX",0X3F);
                                                        }
                                                if((a>=3520)&&(a<=4320))
                                                        {
//                                                                                Single = 0X01; //½ÓÊÕµ½0
                                                                                        printf("\n 111111 0x%bX",0X01);
                                                        }
}
 楼主| 发表于 2018-8-14 09:51 | 显示全部楼层
输入捕获,我抓却一个频率固定的波形没问题,一个频率变化的这结果就不对了
发表于 2018-8-14 11:59 | 显示全部楼层
因为是变化的,你怎么确认不对的?
发表于 2018-8-14 12:01 | 显示全部楼层
x/16
可以用x>>4
替换一下试试。除法容易出问题,用移位运算。
发表于 2018-8-14 12:01 | 显示全部楼层
如果替换成移位运算好用的话,给我个回复。谢谢。
 楼主| 发表于 2018-8-14 14:29 | 显示全部楼层
zhuomuniao110 发表于 2018-8-14 11:59
因为是变化的,你怎么确认不对的?

我自己用定时器做的一个频率变化的波形,说是频率变化其实也是有规律的变化的。
 楼主| 发表于 2018-8-14 14:52 | 显示全部楼层
zhuomuniao110 发表于 2018-8-14 12:01
如果替换成移位运算好用的话,给我个回复。谢谢。

换了还是一样的呢,感觉这输入捕获有问题啊,我输入捕获中断不做任何处理那数值那不是正确的
  1. void Capture_ISR (void) interrupt 12
  2. {

  3.                                                         clr_CAPF0;     

  4.                                                         Pulse = C0H;
  5.                                                         Pulse <<= 8;
  6.                                                         Pulse |= C0L;
  7.                                                         printf("\n  Single 0x%04X",Pulse);
  8.                                                         clr_TF2;
  9. }[img][/img]
 楼主| 发表于 2018-8-14 14:54 | 显示全部楼层
 楼主| 发表于 2018-8-14 14:56 | 显示全部楼层
 楼主| 发表于 2018-8-14 14:57 | 显示全部楼层
https://share.weiyun.com/5S8cjbp
 楼主| 发表于 2018-8-14 14:59 | 显示全部楼层
 楼主| 发表于 2018-8-14 15:00 | 显示全部楼层
176265b727dd8bcfb0.png 我那自己做的一个波形是这样的
 楼主| 发表于 2018-8-14 15:02 | 显示全部楼层
Single 0x1F9F
  Single 0x1F9F
  Single 0x1F9E
  Single 0x1F9E
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD7
  Single 0x0FD7
  Single 0x0FD7
  Single 0x0FD6
  Single 0x0FD7
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD7
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD6
  Single 0x0FD7
  Single 0x0FDF
  Single 0x0FDF
  Single 0x0FE0
  Single 0x0FDF
  Single 0x0FE0
  Single 0x0FDF
  Single 0x0FDF
  Single 0x0FDF
  Single 0x0FE0
  Single 0x0FE0
  Single 0x0FE0
  Single 0x0FDF
  Single 0x0FDF
  Single 0x0FE0  串口打印的是这样的
 楼主| 发表于 2018-8-14 19:06 | 显示全部楼层
zhuomuniao110 发表于 2018-8-14 12:01
如果替换成移位运算好用的话,给我个回复。谢谢。

解决了呢printf函数不能在中断中,这个耗时太久了
发表于 2018-8-20 21:59 | 显示全部楼层
是的,printf比较复杂,中间调用了很多函数嵌套。
发表于 2018-8-21 12:53 | 显示全部楼层
最后解决了没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

0

粉丝
快速回复 返回顶部 返回列表