找回密码
 立即注册
查看: 4571|回复: 57

STC8H1K17T-TSSOP20系列实验之五----简易频率计

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-1-12 12:38:35 | 显示全部楼层 |阅读模式
本帖最后由 xxkj2010 于 2024-1-12 12:56 编辑

在梁工的大力支持和帮助下,完成了用STC8H1K17T对RT8025的32.768K信号进行测频实验(测得的结果由串口输出到电脑),代码和实现思路基本上参考了梁工的STC32虚拟示波器的例程,在此再次感谢梁工!
也想抛砖引玉一下,希望得到各位大佬的指教,谢谢!


主程序:
  1. /*******************************************************************************
  2. 实验:简易频率计
  3. 单片机:STC8H1K17T
  4. IRC频率:24MHz
  5. 2024.1.12
  6. *******************************************************************************/
  7. #include "STC8Hxxx.h"
  8. #include <intrins.h>
  9. #include <stdio.h>
  10. #include "config.h"
  11. #include "delay.h"
  12. bit fBusy;                           
  13. bit B_FrequencyOk = 0;
  14. u8 freq_H;
  15. u32 frequency;
  16. #define LED P54 // LED
  17. /*******************************************************************************
  18. *******************************************************************************/
  19. void UartInit(); // 串口、定时器初始化
  20. void main()
  21. {
  22.         fBusy = 0;
  23.         delay_ms(15); // 等待稳定
  24.         UartInit();          // 串口、定时器初始化
  25.         while (1)
  26.         {
  27.                 if (B_FrequencyOk)
  28.                 {
  29.                         printf("频率:%ld", frequency);
  30.                         B_FrequencyOk = 0;
  31.                         LED = ~LED;                 // 测试端口
  32.                         PWMB_CR1 = 0x01;
  33.                         PWMB_IER = 0x01;
  34.                         TR1 = 1;
  35.                 }
  36.         }
  37. }
  38. void UartInit() // 串口及定时器初始化
  39. {
  40.         P0M0 = 0x00;
  41.         P0M1 = 0x00;
  42.         P1M0 = 0x00;
  43.         P1M1 = 0x00;
  44.         P2M0 = 0x00;
  45.         P2M1 = 0x00;
  46.         P3M0 = 0x01;
  47.         P3M1 = 0x00;
  48.         P5M0 = 0x10;
  49.         P5M1 = 0x00;
  50.         P_SW2 |= 0x80; // 使能访问XFR
  51.         // 串口设置
  52.         T2L = BAUD;
  53.         T2H = BAUD >> 8;
  54.         AUXR = 0x15;
  55.         SCON = 0x50;
  56.         ES = 1;
  57.         TR1 = 0;                  
  58.         AUXR |= (1 << 6); // 1T
  59.         TMOD |= (1 << 6);
  60.         TL1 = 0;                  
  61.         TH1 = 0;                  
  62.         // TF1 = 0;                        
  63.         ET1 = 1;
  64.         TR1 = 1;
  65.         EA = 1;        
  66.         // PWMB 设置
  67.         PWMB_PSCR = 24000 - 1;
  68.         PWMB_ARR = 1000;           
  69.         PWMB_IER = 0x01;           
  70.         PWMB_CR1 = 0x01;           
  71. }
  72. void PWMB_Isr() interrupt 27
  73. {
  74.         if (PWMB_SR1 & 0x01)
  75.         {
  76.                 frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
  77.                 PWMB_CR1 = 0x00;   
  78.                 PWMB_IER = 0x00;   
  79.                 PWMB_SR1 &= ~0x01;
  80.                 PWMB_CNTR = 0;
  81.                 TR1 = 0;
  82.                 freq_H = 0;
  83.                 TH1 = 0;
  84.                 TL1 = 0;
  85.                 B_FrequencyOk = 1;
  86.         }
  87. }
  88. void Timer1_Isr(void) interrupt 3
  89. {
  90.         freq_H++;
  91. }
  92. char putchar(char dat)
  93. {
  94.         while (fBusy)
  95.                 ;
  96.         fBusy = 1;
  97.         SBUF = dat;
  98.         return dat;
  99. }
  100. void uart_isr() interrupt 4
  101. {
  102.         if (TI)
  103.         {
  104.                 TI = 0;
  105.                 fBusy = 0;
  106.         }
  107.         if (RI)
  108.         {
  109.                 RI = 0;
  110.         }
  111. }
复制代码
测试结果:
01.jpg





2024-01-12简易频率计.mp4

99.9 KB, 下载次数: 141

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-1-12 13:39:17 | 显示全部楼层
请问各位大佬,用这种方法测频率,单片机主频率24MHz,一般最大可以测多大频率的脉冲?

点评

24MHz主频,可以测量最高频率为略小于12MHz的方波。  详情 回复 发表于 2024-1-12 18:19
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2024-1-12 15:29:08 | 显示全部楼层
可测6MHZ的脉冲,最好用外部晶振,有条件上温补晶振。
不过,最小频率要1HZ才有意义。

点评

定时器每个主频周期检测一次是否有计数,所以最高测频略小于主频一半的方波,即略小于12MHz。  详情 回复 发表于 2024-1-12 18:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-12 15:47:05 | 显示全部楼层
STC8H1K08T, STC8H2K08U 系列的 PWM
===可以用 PLL-144MHz的时钟【64MHz ~ 192MHz】
===测量 占空比 50% 的方波,理论极限可以到 72MHz 附近,所以测方波 24MHz 以下就小儿科了



截图202401121546192953.jpg


截图202401121547005713.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-12 15:48:43 | 显示全部楼层
截图202401121548404369.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-12 15:54:18 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-1-12 17:41:26 | 显示全部楼层
神*** 发表于 2024-1-12 15:47
STC8H1K08T, STC8H2K08U 系列的 PWM
===可以用 PLL-144MHz的时钟【64MHz ~ 192MHz】
===测量 占空比 50%  ...

意思是用STC32的PWM的捕捉功能来测频率,可以测得更高的频率?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-1-12 18:19:54 | 显示全部楼层
xxkj*** 发表于 2024-1-12 13:39
请问各位大佬,用这种方法测频率,单片机主频率24MHz,一般最大可以测多大频率的脉冲? ...

24MHz主频,可以测量最高频率为略小于12MHz的方波。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-1-12 18:21:14 | 显示全部楼层
社区*** 发表于 2024-1-12 15:29
可测6MHZ的脉冲,最好用外部晶振,有条件上温补晶振。
不过,最小频率要1HZ才有意义。 ...

定时器每个主频周期检测一次是否有计数,所以最高测频略小于主频一半的方波,即略小于12MHz。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-1-12 18:42:47 | 显示全部楼层
神*** 发表于 2024-1-12 15:47
STC8H1K08T, STC8H2K08U 系列的 PWM
===可以用 PLL-144MHz的时钟【64MHz ~ 192MHz】
===测量 占空比 50%  ...

请问STC8H8K64U的PWM时钟就无法达到64MHz ~ 192MHz吧?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:13 , Processed in 0.226397 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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