标题: 有没有大佬能用51单片机实现输出频率和占空比都可调的方波,频率要达到108khz [打印本页]

作者: ytt88    时间: 2023-3-30 19:42
标题: 有没有大佬能用51单片机实现输出频率和占空比都可调的方波,频率要达到108khz
有没有大佬能用51单片机实现输出频率和占空比都可调的方波,频率要达到108khz,频率最好可调到500khz,因为单片机实际输出到示波器里频率会减小。
作者: a185980800    时间: 2023-3-30 22:50
以下是一个实现输出频率和占空比可调的方波的C语言程序,并加入中文注释,便于理解:  #include <reg51.h>  // 定义计时器初值和重载值,可根据需要调整 // 对于108kHz的PWM信号,初值为65536-108=65428 // 对于500kHz的PWM信号,初值为65536-500=65036 #define T_INIT 65428 #define T_RELOAD 65428  // 定义PWM输出端口和计时器编号 sbit PWM_OUT = P1^0; sfr TCON_PWM = 0x88;  // 声明计时器中断处理函数 void Timer0_ISR() interrupt 1 {     static unsigned int count = 0;     count++;     if (count >= T_RELOAD) {         count = 0;         PWM_OUT = !PWM_OUT;   // 切换PWM输出状态     }     // 重新赋初值和重载值     TH0 = T_INIT / 256;     TL0 = T_INIT % 256; }  int main() {     // 初始化定时器/计数器T0     TMOD |= 0x01;   // 设定T0为模式1(16位定时器)     ET0 = 1;        // 打开定时器中断允许     EA = 1;         // 打开总中断允许     TH0 = T_INIT / 256;     TL0 = T_INIT % 256;     TCON_PWM |= 0x10;   // 开启定时器T0      // 主循环中控制PWM频率和占空比     while(1) {         // 这里可以根据需要修改计数器初值和重载值,从而改变PWM输出的频率和占空比         TH0 = T_INIT / 256;         TL0 = T_INIT % 256;           } } 该程序使用了定时器/计数器T0来生成PWM波形,以及计时器中断处理函数来周期性地切换PWM输出状态,从而实现方波信号的输出。通过修改计时器初值和重载值,即可调整PWM输出的频率和占空比。主循环中可以根据需要动态地改变计时器初值和重载值,从而实现频率和占空比的可调节。
作者: hi等你    时间: 2023-3-31 16:22
很简单啊!给寄存器一个数字,io高电平时候让这个数字做减法,减到0变为低电平,

这个数字多少就可以决定占空比,数字越大,做减法时间就越长。
作者: Y_G_G    时间: 2023-4-1 01:46
1: 频率到哪都不会小
2: 500K的PWM这是要干嘛呢?占空比没要求吗?
3: 要学会看数据手册




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1