标题:
请教51单片机测频率问题
[打印本页]
作者:
jiesz185
时间:
2024-6-11 21:20
标题:
请教51单片机测频率问题
请问利用51单片机怎么测100兆Hz的高频方波,显示在数码管上,如图是Proteus仿真和keil代码,100khz还能测出来,到了1M10Mhz数码管就不显示了,请问为什么,怎么改才行,谢谢大佬们。
#include <REGX51.H>
#include <intrins.h>
unsigned long int count,count_end;
unsigned int ans;
unsigned char flag;
unsigned char b[8];
unsigned char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Delay10us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 27;
while (--i);
}
void delay(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 114; j++) {
Delay10us();
}
}
}
void chushi(){
TMOD=0x15; //1定时器 0计数器
TH0=0;
TL0=0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET1=1;
ET0=1;
TR0=1;
TR1=1;
EA=1;
}
void main(){
unsigned int k;
P0=0xff;
chushi();
while(1){
if(flag==1){
for(k=0;k<8;k++){
P2=wei[k];
P0=duan[b[k]];
Delay10us();
}
}
}
}
void it_0() interrupt 1
{
TH0=0;
TL0=0;
count++;
}
void it_1() interrupt 3
{
ans++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(ans==20){
count_end=count*65536+((TH0 << 8) | TL0);
b[0]=count_end/10000000; //10M
b[1]=(count_end%10000000)/1000000;
b[2]=(count_end%1000000)/100000;
b[3]=(count_end%100000)/10000;
b[4]=(count_end%10000)/1000;
b[5]=(count_end%1000)/100;
b[6]=(count_end%100)/10;
b[7]=count_end%10;
flag=1;
TR0=0;
TR1=0;
}
else{
delay(10);
}
}
复制代码
1.png
(51.58 KB, 下载次数: 28)
下载附件
2024-6-11 21:20 上传
作者:
donglw
时间:
2024-6-12 00:59
按照香农理论,测100MHz的方波,采样频率至少需要200MHz,这不是普通单片机可以胜的,建议采用DSP。
作者:
LaoYuTou
时间:
2024-6-12 11:52
硬要测的话外加分频电路,对器件要求业蛮高的。
作者:
xiaobendan001
时间:
2024-6-12 13:59
用硬件分个频嘛
作者:
万法点灯
时间:
2024-6-12 14:33
使用高速的外部时钟源或者PLL(Phase Locked Loop,锁相环)将信号预分频到51单片机能处理的范围内,把信号分频到几MHz,然后用51单片机的定时器来测量分频后的频率,再通过除以分频系数得到原始频率。
作者:
STC庄伟
时间:
2024-6-12 16:51
没啥意义,还是要上硬件在线仿真啊。USB直接仿真,简单方便,一步步调试看结果
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1