下面是一个用51单片机的P3.5引脚对一个由555定时器构成的多谐振荡器的振荡频率进行测量的程序,求注释

2020-06-12 财经 492阅读
void cafrequent(void) reentrant 定义cafrequent程序求振荡频率
{
long int l1=0x00;
long int h1=0x00;
float tt=0; //tt用于计算频率
TMOD=(TMOD&0x0F)|0x90; //定时器1工作于模式1(16位计数器),TR1控制运行
TH1=0x00; //计数器初值设为0x0000
TL1=0x00;
ET1=1; //timer1 使能
EA=1; //开中断
while(fw==1); 测得引脚P3^5为高电平
TR1=1; //timer1 开始计数 注:1
while(fw==0); 测得引脚P3^5为低电平
while(fw==1); 测得引脚P3^5为高电平
TR1=0; //timer1 停止计数
l1=TL1; //读当前计数值
h1=TH1;
uu=h1*256+l1+inte*65536; //计算总计数值 这里写成 uu=inte*65536+h1*256+l1 会比较直观一些 注:1
inte=0; //清累计溢出计数
tt=uu/(11.0592*1000000.0/12.0); 求振荡周期
ff=(unsigned long int)(1.0/tt); //频率值 求震荡频率
}
注1:另外还有一个timer1的中断函数你没给出来。该中断函数功能就是当timer的计数值超过0xffff的时候触发中断,在中断内部将对全局变量inte 进行加一操作,以记录timer1的溢出次数,实际也可以理解为16位计数器溢出后的进位,相当于第17位到32位的计数值。
起目的是当被测频率值很低的时候,16位的计数值不足以存放待测频率值的周期,所以需要额外的计数值。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com