在网上看了一堆程序发现还不如自己写一个
关于外部中断这里先就浅浅提一下
1.首先要先开启外部中断
void EXIT() //外部中断
{
EX0 = 1; //开启中断
IT0 = 0; //下降沿
}
2.核心程序
void Pinlu() //数码管显示
{
SEGDot=0x01; //设第一位加上小数点
DspBuf[0] = (currFreq /1000)%10;
DspBuf[1] = (currFreq /100)%10;
DspBuf[2] = (currFreq /10)%10;
DspBuf[3] = (currFreq %10);
}
void time0()interrupt 1
{
static unsigned int TimeCount = 0;
TimeCount++;
if(TimeCount >= 1000)
{
currFreq = count / 2;
count = 0;
}
TimeCount%=1000;
}
void EXT1()interrupt 0
{
count++;
}
1.首先进入外部中断count就会递增,来计算下降沿的个数
2.进入1ms定时器,在定时器中每1s就计算一次频率,count / 2 就得到了最终频率(注意这里定时器为24.000MHz)
3.count = 0;就是把每次得到的值清0,以便下次计算,否者会一直叠加上去
3.下载器的设置
下载时记得把时钟频率调为24Mhz,时钟频率越高测的频率越准。
4.程序效果
实验板显示频率为3.049在示波器实际测量为示波器测量为3.050k。还是有点误差的,但是不多