OpenEdv-开源电子网

标题: 51单片机的定时器外部中断测量脉冲频率,大概40-80HZ,程序有问题,大神帮忙看看,在线等 [打印本页]

作者: 生活一秒改变    时间: 2013-6-27 17:03
标题: 51单片机的定时器外部中断测量脉冲频率,大概40-80HZ,程序有问题,大神帮忙看看,在线等

大致思想是,跳变沿从P3.3进入时,启动定时器0,等待跳变沿再次进入,停止定时器,读取定时器的值,然后清零,关闭中断允许,主函数显示,开中断,再次……,结果是显示的数值是随机数,求指点
#include<reg52.h>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int i,j;
char  speed;
bit flag;
//省略了显示函数
void main()
{
TMOD=0X01
TH0=0;
TL0=0;
EX1=1;
IT1=1;
EA=1;
while(1)
{
  if(!flag)
  {  
   j=(unsigned int)(i*1.09);
   speed=1000000/j;
      display(speed);
   delayms(1000) ;
     EX1=1;  
  }   
}
}
void inter() interrupt 2
{
flag=~flag;
if(flag) 
  {
  TR0=1;
  i=0;
  }
  else
   {
   TR0=0;
   i=TH0;
   i<<=8;
   i|=TL0;
   TH0=0;
   TL0=0;
    EX1=0;
   }
}


作者: 正点原子    时间: 2013-6-27 19:35
你的定时器是否存在溢出可能?
作者: as564335sa    时间: 2013-6-27 21:46
回复【楼主位】生活一秒改变:
---------------------------------
换定时器0改成定时器1或者把P3.3改成P3.2试试




欢迎光临 OpenEdv-开源电子网 (https://www.openedv.com/) Powered by Discuz! X3.4