怎么51单片机定时器来模拟PWM波?

51用定时器模拟PWM,在网上看了好多程序都看不懂,有的人用两个定时器有的人用一个有的人利用定时器的初值控制有的人用两个不同定时器控制。越看越不会用定时器模拟了求大神详细... 51用定时器模拟PWM ,在网上看了好多程序都看不懂,有的人用两个定时器有的人用一个 有的人利用定时器的初值控制 有的人用 两个不同定时器控制。越看越不会用定时器模拟了 求大神详细思想解释下,不胜感激!!
就是一个控制流水灯从暗到亮 再从亮到暗!循环!最重要的是 吧编程思想分享下!因为做智能车 我要控制 直流电机 !
展开
 我来答
wooden954
推荐于2016-06-25 · TA获得超过1万个赞
知道大有可为答主
回答量:6135
采纳率:93%
帮助的人:828万
展开全部

PWM的意思是“脉冲宽度调制”

PWM有两个最基本的参数:频率、占空比。

频率就是每秒钟电平高低变化的次数,占空比是指高电平保持时间和整个脉冲周期中的比例关系。

对于用定时器来模拟,最基本的方法就是使用一个IO口循环设置其输出值为高电平和低电平。

那么定时器在这里起计时作用,而且需要两个时间:高电平持续时间、低电平持续时间。

只要做到这两个时间的计时,那么就可以实现基本的PWM了。

而要做到两个时间的计时,有两种方案:

1.单计时器方案

int i;//计时变量

timer1(){//计时器1中断函数
  //此处示例每隔100个最小计时周期电平变化一次,即200个最小计时周期闪烁一次
  i++;
  if (i==200){
    i=0;//变量复位,完成一个周期,准备下一个周期    
  }
  else if (i==100){
    LED_OFF;//关灯
  }
  else if (i==0){
    LED_ON;//开灯
  }
}

2.双计时器方案

//只需要设计好两个计时器的初值和周期,即可完成交替亮灭
timer1(){//计时器1中断函数
  //此处示例每隔100个最小计时周期电平变化一次,即200个最小计时周期闪烁一次
  LED_ON;//开灯
}
timer2(){
  LED_OFF;//关灯
}
敏捷又文雅丶菠萝蜜d
推荐于2018-02-12
知道答主
回答量:31
采纳率:0%
帮助的人:20.8万
展开全部
用定时器T1/T2的工作方式2吧(我也忘记了,就是能自动重装初始值的那个),在定时器程序里,让一个I/O口取反输出(例如sbit s=P1^0;s=~s;)通过改变定时时常就可以了
追问
书上说用那个8位重装初值的方法!关键问题在于,咱们开启定时器中断,打个比方 就是50MS 中断意思  但是如何把这50毫秒分开!
你的意思是在初值中就用一个可变的定时时常,但是还是不知道如何改变!!
追答
定义一个全局变量  给定时器赋值呗
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式