STC8H1K17T-TSSOP20系列实验之五----简易频率计
本帖最后由 xxkj2010 于 2024-1-12 12:56 编辑在梁工的大力支持和帮助下,完成了用STC8H1K17T对RT8025的32.768K信号进行测频实验(测得的结果由串口输出到电脑),代码和实现思路基本上参考了梁工的STC32虚拟示波器的例程,在此再次感谢梁工!
也想抛砖引玉一下,希望得到各位大佬的指教,谢谢!
主程序:
/*******************************************************************************
实验:简易频率计
单片机:STC8H1K17T
IRC频率:24MHz
2024.1.12
*******************************************************************************/
#include "STC8Hxxx.h"
#include <intrins.h>
#include <stdio.h>
#include "config.h"
#include "delay.h"
bit fBusy;
bit B_FrequencyOk = 0;
u8 freq_H;
u32 frequency;
#define LED P54 // LED
/*******************************************************************************
*******************************************************************************/
void UartInit(); // 串口、定时器初始化
void main()
{
fBusy = 0;
delay_ms(15); // 等待稳定
UartInit(); // 串口、定时器初始化
while (1)
{
if (B_FrequencyOk)
{
printf("频率:%ld", frequency);
B_FrequencyOk = 0;
LED = ~LED; // 测试端口
PWMB_CR1 = 0x01;
PWMB_IER = 0x01;
TR1 = 1;
}
}
}
void UartInit() // 串口及定时器初始化
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x01;
P3M1 = 0x00;
P5M0 = 0x10;
P5M1 = 0x00;
P_SW2 |= 0x80; // 使能访问XFR
// 串口设置
T2L = BAUD;
T2H = BAUD >> 8;
AUXR = 0x15;
SCON = 0x50;
ES = 1;
TR1 = 0;
AUXR |= (1 << 6); // 1T
TMOD |= (1 << 6);
TL1 = 0;
TH1 = 0;
// TF1 = 0;
ET1 = 1;
TR1 = 1;
EA = 1;
// PWMB 设置
PWMB_PSCR = 24000 - 1;
PWMB_ARR = 1000;
PWMB_IER = 0x01;
PWMB_CR1 = 0x01;
}
void PWMB_Isr() interrupt 27
{
if (PWMB_SR1 & 0x01)
{
frequency = ((u32)freq_H << 16) + ((u32)TH1 << 8) + (u32)TL1;
PWMB_CR1 = 0x00;
PWMB_IER = 0x00;
PWMB_SR1 &= ~0x01;
PWMB_CNTR = 0;
TR1 = 0;
freq_H = 0;
TH1 = 0;
TL1 = 0;
B_FrequencyOk = 1;
}
}
void Timer1_Isr(void) interrupt 3
{
freq_H++;
}
char putchar(char dat)
{
while (fBusy)
;
fBusy = 1;
SBUF = dat;
return dat;
}
void uart_isr() interrupt 4
{
if (TI)
{
TI = 0;
fBusy = 0;
}
if (RI)
{
RI = 0;
}
}
测试结果:
请问各位大佬,用这种方法测频率,单片机主频率24MHz,一般最大可以测多大频率的脉冲? 可测6MHZ的脉冲,最好用外部晶振,有条件上温补晶振。
不过,最小频率要1HZ才有意义。 STC8H1K08T, STC8H2K08U 系列的 PWM
===可以用 PLL-144MHz的时钟【64MHz ~ 192MHz】
===测量 占空比 50% 的方波,理论极限可以到 72MHz 附近,所以测方波 24MHz 以下就小儿科了
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=1360&pid=17769
神农鼎 发表于 2024-1-12 15:47
STC8H1K08T, STC8H2K08U 系列的 PWM
===可以用 PLL-144MHz的时钟【64MHz ~ 192MHz】
===测量 占空比 50%...
意思是用STC32的PWM的捕捉功能来测频率,可以测得更高的频率? xxkj2010 发表于 2024-1-12 13:39
请问各位大佬,用这种方法测频率,单片机主频率24MHz,一般最大可以测多大频率的脉冲? ...
24MHz主频,可以测量最高频率为略小于12MHz的方波。 社区闲人 发表于 2024-1-12 15:29
可测6MHZ的脉冲,最好用外部晶振,有条件上温补晶振。
不过,最小频率要1HZ才有意义。 ...
定时器每个主频周期检测一次是否有计数,所以最高测频略小于主频一半的方波,即略小于12MHz。 神农鼎 发表于 2024-1-12 15:47
STC8H1K08T, STC8H2K08U 系列的 PWM
===可以用 PLL-144MHz的时钟【64MHz ~ 192MHz】
===测量 占空比 50%...
请问STC8H8K64U的PWM时钟就无法达到64MHz ~ 192MHz吧?