找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1218|回复: 5
打印 上一主题 下一主题
收起左侧

请教51单片机测频率问题

[复制链接]
跳转到指定楼层
楼主
请问利用51单片机怎么测100兆Hz的高频方波,显示在数码管上,如图是Proteus仿真和keil代码,100khz还能测出来,到了1M10Mhz数码管就不显示了,请问为什么,怎么改才行,谢谢大佬们。
  1. #include <REGX51.H>
  2. #include <intrins.h>
  3. unsigned long int count,count_end;
  4. unsigned int ans;
  5. unsigned char flag;
  6. unsigned char b[8];
  7. unsigned char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  8. unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  9. void Delay10us()                //@12.000MHz
  10. {
  11.         unsigned char i;

  12.         _nop_();
  13.         _nop_();
  14.         i = 27;
  15.         while (--i);
  16. }
  17. void delay(unsigned int ms) {
  18.     unsigned int i, j;
  19.     for (i = 0; i < ms; i++) {
  20.         for (j = 0; j < 114; j++) {
  21.             Delay10us();
  22.         }
  23.     }
  24. }

  25. void chushi(){
  26.         TMOD=0x15;       //1定时器 0计数器
  27.         TH0=0;
  28.         TL0=0;
  29.         TH1=(65536-50000)/256;
  30.         TL1=(65536-50000)%256;
  31.         ET1=1;
  32.         ET0=1;
  33.         TR0=1;
  34.         TR1=1;
  35.         EA=1;
  36. }
  37. void main(){
  38.         unsigned int k;
  39.         P0=0xff;
  40.         chushi();
  41.         while(1){
  42.                 if(flag==1){
  43.                 for(k=0;k<8;k++){
  44.                         P2=wei[k];
  45.                         P0=duan[b[k]];
  46.                         Delay10us();
  47.                 }
  48.                 }
  49.         }
  50. }

  51. void it_0() interrupt 1
  52. {
  53.         TH0=0;
  54.         TL0=0;
  55.         count++;
  56. }

  57. void it_1() interrupt 3
  58. {
  59.         ans++;
  60.         TH1=(65536-50000)/256;
  61.         TL1=(65536-50000)%256;
  62.         if(ans==20){
  63.                 count_end=count*65536+((TH0 << 8) | TL0);
  64.                 b[0]=count_end/10000000;      //10M
  65.                 b[1]=(count_end%10000000)/1000000;
  66.                 b[2]=(count_end%1000000)/100000;
  67.                 b[3]=(count_end%100000)/10000;
  68.                 b[4]=(count_end%10000)/1000;
  69.                 b[5]=(count_end%1000)/100;
  70.                 b[6]=(count_end%100)/10;
  71.                 b[7]=count_end%10;
  72.                 flag=1;
  73.                 TR0=0;
  74.                 TR1=0;
  75.         }
  76.         else{
  77.                 delay(10);
  78.         }
  79. }
复制代码

1.png (51.58 KB, 下载次数: 28)

1.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:344848 发表于 2024-6-12 00:59 | 只看该作者
按照香农理论,测100MHz的方波,采样频率至少需要200MHz,这不是普通单片机可以胜的,建议采用DSP。
回复

使用道具 举报

板凳
ID:1080935 发表于 2024-6-12 11:52 | 只看该作者
硬要测的话外加分频电路,对器件要求业蛮高的。
回复

使用道具 举报

地板
ID:1109793 发表于 2024-6-12 13:59 | 只看该作者
用硬件分个频嘛
回复

使用道具 举报

5#
ID:1124868 发表于 2024-6-12 14:33 | 只看该作者
使用高速的外部时钟源或者PLL(Phase Locked Loop,锁相环)将信号预分频到51单片机能处理的范围内,把信号分频到几MHz,然后用51单片机的定时器来测量分频后的频率,再通过除以分频系数得到原始频率。
回复

使用道具 举报

6#
ID:961114 发表于 2024-6-12 16:51 | 只看该作者
没啥意义,还是要上硬件在线仿真啊。USB直接仿真,简单方便,一步步调试看结果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表