打印
[技术问答]

新唐N76E003输入捕获的问题

[复制链接]
3272|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
下面是我输入捕获的代码
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 | 只看该作者
输入捕获,我抓却一个频率固定的波形没问题,一个频率变化的这结果就不对了

使用特权

评论回复
板凳
zhuomuniao110| | 2018-8-14 11:59 | 只看该作者
因为是变化的,你怎么确认不对的?

使用特权

评论回复
地板
zhuomuniao110| | 2018-8-14 12:01 | 只看该作者
x/16
可以用x>>4
替换一下试试。除法容易出问题,用移位运算。

使用特权

评论回复
5
zhuomuniao110| | 2018-8-14 12:01 | 只看该作者
如果替换成移位运算好用的话,给我个回复。谢谢。

使用特权

评论回复
6
聂路飞|  楼主 | 2018-8-14 14:29 | 只看该作者
zhuomuniao110 发表于 2018-8-14 11:59
因为是变化的,你怎么确认不对的?

我自己用定时器做的一个频率变化的波形,说是频率变化其实也是有规律的变化的。

使用特权

评论回复
7
聂路飞|  楼主 | 2018-8-14 14:52 | 只看该作者
zhuomuniao110 发表于 2018-8-14 12:01
如果替换成移位运算好用的话,给我个回复。谢谢。

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

                                                        clr_CAPF0;     

                                                        Pulse = C0H;
                                                        Pulse <<= 8;
                                                        Pulse |= C0L;
                                                        printf("\n  Single 0x%04X",Pulse);
                                                        clr_TF2;
}[img][/img]

使用特权

评论回复
8
聂路飞|  楼主 | 2018-8-14 14:54 | 只看该作者

使用特权

评论回复
9
聂路飞|  楼主 | 2018-8-14 14:56 | 只看该作者

使用特权

评论回复
10
聂路飞|  楼主 | 2018-8-14 14:57 | 只看该作者
https://share.weiyun.com/5S8cjbp

使用特权

评论回复
11
聂路飞|  楼主 | 2018-8-14 14:59 | 只看该作者

使用特权

评论回复
12
聂路飞|  楼主 | 2018-8-14 15:00 | 只看该作者
我那自己做的一个波形是这样的

使用特权

评论回复
13
聂路飞|  楼主 | 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  串口打印的是这样的

使用特权

评论回复
14
聂路飞|  楼主 | 2018-8-14 19:06 | 只看该作者
zhuomuniao110 发表于 2018-8-14 12:01
如果替换成移位运算好用的话,给我个回复。谢谢。

解决了呢printf函数不能在中断中,这个耗时太久了

使用特权

评论回复
15
zhuomuniao110| | 2018-8-20 21:59 | 只看该作者
是的,printf比较复杂,中间调用了很多函数嵌套。

使用特权

评论回复
16
xiaoqizi| | 2018-8-21 12:53 | 只看该作者
最后解决了没有

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

0

粉丝