找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有没有大佬能用51单片机实现输出频率和占空比都可调的方波,频率要达到108khz

[复制链接]
跳转到指定楼层
楼主
ID:1069127 发表于 2023-3-30 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有没有大佬能用51单片机实现输出频率和占空比都可调的方波,频率要达到108khz,频率最好可调到500khz,因为单片机实际输出到示波器里频率会减小。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:857072 发表于 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输出的频率和占空比。主循环中可以根据需要动态地改变计时器初值和重载值,从而实现频率和占空比的可调节。
回复

使用道具 举报

板凳
ID:996773 发表于 2023-3-31 16:22 | 只看该作者
很简单啊!给寄存器一个数字,io高电平时候让这个数字做减法,减到0变为低电平,

这个数字多少就可以决定占空比,数字越大,做减法时间就越长。
回复

使用道具 举报

地板
ID:401564 发表于 2023-4-1 01:46 | 只看该作者
1: 频率到哪都不会小
2: 500K的PWM这是要干嘛呢?占空比没要求吗?
3: 要学会看数据手册
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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