0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何基于51单片机利用定时器的实现PWM的方法详细概述

GReq_mcu168 来源:未知 作者:易水寒 2018-06-12 20:01 次阅读

51单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。

用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。

下面重点介绍用一个定时器的实现PWM的方法。以周期为1ms(1kHZ)为例,要产生其它频率的PWM波,程序中只需作简单修改即可。用一个定时器时(如定时器T0),首先要确定PWM的周期T和占空比D,确定了这些以后,就可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n。

因为这里我们是产生周期为1ms(1kHZ)的PWM,所以可设置中断的时间基准为0.01ms,,然后中断100次即为1ms。在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句:

1、当time>=100时,time清零(此语句保证频率为1kHZ);

2、当time>n时(n应该在0-100之间变化开),让单片相应的I/O口输出低电平;

3、当time<=n时,让单片相应的I/O口输出高电平,此时占空比就为%n。

下面程序产生30%占空比的pwm:

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitPWM=P2^0;//P2.0输出pwm

uchartime;//定义占空比的变量

voidmain()

{

TMOD=0x01;//定时器0工作方式1

TH0=0xff;//(65536-10)/256;//赋初值定时

TL0=0xf7;//(65536-10)%256;//0.01ms

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器0

while(1)

{

}

}

voidtim0()interrupt1

{

TR0=0;//赋初值时,关闭定时器

TH0=0xff;//(65536-10)/256;//赋初值定时

TL0=0xf7;//(65536-10)%256;//0.01ms

TR0=1;//打开定时器

time++;

if(time>=100)//1khz

time=0;

if(time<=30)   //占空比%30,可改

PWM=1;

elsePWM=0;

}

最后的到波形,在示波器上显示如下图所示:

如果想修改占空比,直接在程序里面修改下面这句即可。

if(time<=30)//占空比%30,可改占空比

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5186

    浏览量

    213878
  • 51单片机
    +关注

    关注

    274

    文章

    5702

    浏览量

    123578
  • 定时器
    +关注

    关注

    23

    文章

    3247

    浏览量

    114765

原文标题:利用51单片机输出pwm

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    51单片机如何利用PWM定时器实现呼吸灯?

    51单片机如何利用PWM定时器实现呼吸灯?
    发表于 10-15 09:24

    基于51单片机定时器2的操作与实现

    基于51单片机定时器2的操作与实现51单片机定时器
    发表于 02-22 17:53 14次下载

    51单片机定时器寄存设置及应用详细

    51单片机定时器寄存设置及应用详细
    发表于 03-28 16:46 7次下载

    51单片机定时器工作原理

    51单片机定时器工作原理及用法
    的头像 发表于 03-14 13:51 9.6w次阅读

    使用单片机定时器模拟PWM输出实现呼吸灯的程序免费下载

    本文档的主要内容详细介绍的是使用单片机定时器模拟PWM输出实现呼吸灯的程序免费下载。
    发表于 09-06 17:27 20次下载
    使用<b class='flag-5'>单片机</b>的<b class='flag-5'>定时器</b>模拟<b class='flag-5'>PWM</b>输出<b class='flag-5'>实现</b>呼吸灯的程序免费下载

    51单片机的应该如何使用定时器详细资料和实例说明

    本文档的主要内容详细介绍的是51单片机的应该如何使用定时器详细资料和实例说明。
    发表于 08-29 17:28 2次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>的应该如何使用<b class='flag-5'>定时器</b><b class='flag-5'>详细</b>资料和实例说明

    使用51单片机定时器实现LED闪烁的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机定时器实现LED闪烁的程序免费下载。
    发表于 08-22 17:30 7次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>定时器</b><b class='flag-5'>实现</b>LED闪烁的程序免费下载

    如何同时使用51单片机定时器0和串口使用问题详细说明

    本文档的主要内容详细介绍的是如何同时使用51单片机定时器0和串口使用问题详细说明。
    发表于 08-13 17:32 27次下载
    如何同时使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>定时器</b>0和串口使用问题<b class='flag-5'>详细</b>说明

    如何使用51单片机通过定时器模拟输出多路PWM程序免费下载

    本文档的主要内容详细介绍的是如何使用51单片机通过定时器模拟输出多路PWM程序免费下载。
    发表于 07-17 17:38 22次下载
    如何使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>通过<b class='flag-5'>定时器</b>模拟输出多路<b class='flag-5'>PWM</b>程序免费下载

    使用51单片机定时器和计数实现定时的实例说明

    本文档的主要内容详细介绍的是使用51单片机定时器和计数实现
    发表于 07-12 17:39 7次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>和计数<b class='flag-5'>器</b><b class='flag-5'>实现</b><b class='flag-5'>定时</b>的实例说明

    51单片机定时器和计数的功能实现资料说明

    本文档的主要内容详细介绍的是51单片机定时器和计数的功能实现资料说明。
    发表于 06-19 17:44 0次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>定时器</b>和计数<b class='flag-5'>器</b>的功能<b class='flag-5'>实现</b>资料说明

    51单片机——定时器

    51单片机——定时器为什么使用定时器定时器原理?定时器设置中断配置源代码为什么使用
    发表于 11-11 16:36 40次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>——<b class='flag-5'>定时器</b>

    51单片机定时器实现PWM

    51单片机是可以实现PWM波输出的,原理其实都是一样的。说白了,PWM波就是让某一个引脚输出周期性连续高低电平变化的信号。那么如何用
    发表于 11-12 10:36 13次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b><b class='flag-5'>实现</b><b class='flag-5'>PWM</b>波

    51单片机定时器/计数

    CPU的参与。3、51单片机中的 定时器/计数 是根据 机器内部的时钟 或者是 外部的脉冲信号 对寄存中的数据加1。4、有了
    发表于 11-20 20:06 47次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>定时器</b>/计数<b class='flag-5'>器</b>

    基于51单片机利用定时器和蜂鸣器唱歌例程源代码

    基于51单片机利用定时器和蜂鸣器唱歌例程源代码
    发表于 05-12 16:36 11次下载