找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3708|回复: 3
收起左侧

51单片机的PWM和占空比是怎样设置的?

[复制链接]
ID:847202 发表于 2020-12-30 18:32 来自手机 | 显示全部楼层 |阅读模式
老师没有教过PWM的知识,无意中看到PWM这个名词,便百度了一下,但是那些资料没有看懂,请问各位大佬,用定时器设置PWM频率和占空比,是怎么设置的?还有他们是怎么算出来的?图片里的中断100次怎么得到1kHZ的频率?是怎么算的?如果有关于PWM的课程可以观看,求推荐!求指导!!
Screenshot_2020-12-30-18-06-47-61_5b19eeae754b18421d48054e4a8744e7.jpg
回复

使用道具 举报

ID:332444 发表于 2020-12-31 07:51 | 显示全部楼层
回复

使用道具 举报

ID:390416 发表于 2020-12-31 11:07 | 显示全部楼层
sbit PWM_OUT=P2^1;        
u8 idata RGB_PWM_Write_Byte[3]=0;
//****************************祁绪电子 2020年5月***
// 定时器0初始化  晶振11059200,12T,输出50Hz的PWM,占空比0~255
// 定时器初值为:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
//****************************祁绪电子 2020年5月***
void PWM_Init(void)
{
        TMOD &= 0xF0;                                        //配置定时器工作模式
        TMOD |= 0x02;                                        //配置定时器工作模式 8位自动重装模式
    TL0 = 0xB8;;                    //定时器初值
    TH0 = 0xB8;                                //定时器重装初值
    TR0 = 1;                        //启动定时器0
    ET0=1;                                                         //允许定时器0申请中断
        EA=1;                                                        //中断总闸闭合
}
//****************************祁绪电子 2020年5月***
//定时器0的CPU处理函数,位置任意写都行
//****************************祁绪电子 2020年5月***
void PWM_Display_timer0() interrupt 1
{
        
        static u8 pwm_t=0;                                 //局部变量,不丢失数据
        if(pwm_t<RGB_PWM_Write_Byte[0])
        {
                PWM_OUT=1;                                 
        }
        else PWM_OUT=0;
        pwm_t++;
}
一、主函数初始化 PWM_Init(void);
二、对RGB_PWM_Write_Byte[0];赋值0~255 即可调节占空比。
三、默认PWM周期是255.如果需要调节周期,可以限制pwm_t的最大值。以及改定时器初值。
四、本代码定时器是自动重装模式。
回复

使用道具 举报

ID:390416 发表于 2020-12-31 15:22 | 显示全部楼层
STC89单片机 定时器做PWM程序 http://www.51hei.com/bbs/dpj-200820-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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