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

    文章

    4888

    浏览量

    209864
  • 51单片机
    +关注

    关注

    269

    文章

    5648

    浏览量

    120681
  • 定时器
    +关注

    关注

    23

    文章

    3146

    浏览量

    112019

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

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

收藏 人收藏

    评论

    相关推荐

    51单片机定时器

    我想用4个定时器,可是我只会51单片机51单片机只有两个定时器!怎么办!
    发表于 08-03 10:43

    基于51单片机定时器定时1秒如何去实现

    基于51单片机定时器定时1秒如何去实现?基于51单片机
    发表于 07-19 06:16

    如何利用51单片机定时器中断实现音乐的切换?

    如何利用51单片机定时器中断实现音乐的切换?
    发表于 09-27 06:55

    如何利用51单片机实现定时器数码管显示?

    如何利用51单片机实现定时器数码管显示?
    发表于 09-28 08:05

    请问51单片机如何利用定时器和1602液晶显示实现一个计时

    请问51单片机如何利用定时器和1602液晶显示实现一个计时
    发表于 10-09 09:21

    PWM如何通过51单片机定时器输出,实现占空比调整?

    直流电机的工作原理是什么?PWM如何通过51单片机定时器输出,实现占空比调整?
    发表于 10-15 09:32

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

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

    如何利用MCS-51单片机实现定时器/计数的时钟设计?

    如何利用MCS-51单片机实现定时器/计数的时钟设计?
    发表于 10-20 07:17

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

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

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

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

    52单片机有几个定时器?52单片机定时器1和52单片机定时器2程序对比

    52单片机有几个定时器?STC89C52RC其实是有三个定时器单片机,STC89C52RC共有3个定时器,分别是T0、T1、T2。而
    发表于 11-10 14:30 3.4w次阅读

    如何同时使用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>说明

    基于单片机定时器的设计方法

    单片机实现一个定时器只要对单片机里的特殊寄存器进行设置就可以实现了,下面我与朋友们说说这个0到9.9秒
    的头像 发表于 11-02 16:58 9867次阅读
    基于<b class='flag-5'>单片机</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单片机 通过定时器实现PWM输出

    51单片机 通过定时器0实现PWM输出Proteus仿真实例代码/*------------------------------------
    发表于 11-21 11:21 22次下载
    <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>输出