|
昨天提得那个数据乱的问题已经解决了,是硬件上的问题,PB0管位有点虚焊,所以造成数据很乱,
也很感谢eblc1388的解答,不过elbc1388可能没看我的程序,我的程序就是和你所说的那样啊。
今天做了几组数据的测试,发现误差很大啊,这是正常吗???
晶振是8M,不分频,定时器也不分频
把我测的数据贴上来:
700us: 5760----5775 * 0.125 720us------722us
1490us: 12345--- 12400 * 0.125 1543us----1550us
2280us: 18945---19000 * 0.125 2368us---2375us
输入的信号源决对稳定,测出的数据怎么感觉比用定时器测得误差还大呢??
再把相关程序也贴出,让大家帮我看看问题出在哪
初始化程序为
void time1_init(void)
{
TCCR1A=0x00; //普通计数
TCCR1B=0xc1; //捕捉使能,上升沿触发,不分频
TIMSK1=0X20; //开中断
}
捕捉中断程序
void INcatch_ser(void)
{
uint a,b;
if(PINB&0X01) //读脚位电平
{
a=ICR1L;
b=ICR1H;
num1=(b<<8)|a;
TCCR1B &= 0XBF; //改触发方式,下降沿
TIFR|=(1<<ICF1); //改变触发方式后立即清中断标志
m=1; //上升沿捕捉完成标志
}
else
{
a=ICR1L;
b=ICR1H;
num2=(b<<8)|a;
TCCR1B |= 0X40; //改触发方式,上升沿
TIFR|=(1<<ICF1); //改变触发方式后立即清中断标志
n=1; //下降沿捕捉完成标志
}
if((m==1)&&(n==1)) //表示一个完整的高电平脉宽检测完
{
if(num1<num2) num3= num2-num1; //判断定时器是否溢出
else num3=0xffff-num1+num2;
n=0;m=0;
}
}
|
|