void timers() interrupt 0
{count++;
TR0=1;
}
void timer0() interrupt 1
{ TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
每一个下降沿到达时conut自加1。开启一个定时器,计算一定时间t内的count值,主程序就好写了,再写一个H=count/t语句,H就是频率了。总体思路就是这样,细节你就自己来写吧。
void mian(viod)
这是什么意思?应该是void main(void)吧,这种细节问题不注意很难写出高质量的程序哦,再说了,TH1=0x3C; TL1=0xAF; //50ms???应该是TH1=0x3C; //50ms
TL1=0xB0;
600脉冲也很简单啊, 用600作初值,算出TH0和TL0,然后写出中断服务程序,主函数中设置点P1口LED灯
50KHz频率不高,直接采用T0计数就可以了,大概思路如下:
T0设置为计数器模式,下降沿计数。T1设置成定时器模式,中断20ms即可,20ms中断时读取T0内部的计数值,然后计算既可以得到频率。
数码管显示采用分时驱动吧,正好利用20ms的中断来刷新每位。具体的应该你也知道,这个是基础。
不过在极低频率,0X HZ估计效果很差,这个需要设置不同的量程来做了,自动量程可以采用不同频率下改变T1中断时间的方法来做,具体也就是说多久才能取到一个脉冲。
TMOD = 0X01; --设置 T0
TH1=0x00;-----用 T1 计时?
TL1=0x00;
T1,是方式一。
a=TH1;
b=TL1;
F=a256+b;--算法有错。
nrz 的两种频率,大约是多少?
以上就是关于编一个51单片机外部中断测频率的程序,急求!!全部的内容,包括:编一个51单片机外部中断测频率的程序,急求!!、本人菜鸟,写了一段单片机(c语言)测频率的程序,有两个问题、请问单片机的数字频率计怎么设计程序要求是0--50KHZ进行计数;要用四个数码显示管显示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)