智能车制作

标题: XS128测输入脉宽问题!!! [打印本页]

作者: 顺⑦.zì繎.    时间: 2013-8-8 22:20
标题: XS128测输入脉宽问题!!!
XS128请问用输入捕捉功能怎样测输入的脉冲宽度?急啊!!!
作者: glacier0    时间: 2013-8-9 02:12
配置为上升下降沿同时触发。
上升沿的时候开启定时器
下降沿的时候停止计数
然后求出从上升到下降的计数值,根据Timer的时钟频率,就可以算出这段时间
作者: 顺⑦.zì繎.    时间: 2013-8-9 22:09
glacier0 发表于 2013-8-9 02:12
配置为上升下降沿同时触发。
上升沿的时候开启定时器
下降沿的时候停止计数

能不能具体一点?那个时钟频率要怎么计算?能不能附带程序?谢谢!

作者: glacier0    时间: 2013-8-10 10:11
顺⑦.zì繎. 发表于 2013-8-9 22:09
能不能具体一点?那个时钟频率要怎么计算?能不能附带程序?谢谢!

我脚着我已经说的很具体了


作者: 1020268548    时间: 2014-2-22 00:21
以通道0用输入捕捉功能测输入脉冲宽度为例:
void ECT_init{
TSCR1_TFFCA = 1;  // 定时器标志位快速清除
TSCR1_TEN = 1;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
TIOS  =0x01;      //指定通道0为输入捕捉方式
TCTL3 = 0x00;            // 后四个通道禁止捕捉
TCTL4 = 0x02;     // 通道0设置为捕捉上升沿和下降沿
TIE   = 0x01;     // 允许通道0定时中断
TSCR2 = 0x07;            // 预分频系数pr2-pr0:111   总线时钟/128
TFLG1 = 0xff;            // 清除各IC/OC中断标志位
TFLG2 = 0xff;     // 清除自由定时器中断标志位
ICSYS_TFMOD=1;//定时器标志设置模式
ICSYS_BUFEN=1;//输入捕捉保持寄存器使能
ICSYS_LATQ=0;//允许输入锁存及队列方式
}

中断函数:
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void capture(void)
{
if(TFLG1_C0F == 1)
time1 = TC0H;//输入捕捉保持寄存器
time2 = TC0;//输入捕捉寄存器
delaytime = time2-time1;
}
#pragma CODE_SEG DEFAULT

delaytime 就是与脉冲宽度相关的参数




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2