PWM用延迟怎么写??

[复制链接]
3088|13
 楼主| mage心寒 发表于 2010-8-11 14:32 | 显示全部楼层 |阅读模式
不用定期器中断怎么写??
zhoukok 发表于 2010-8-11 14:36 | 显示全部楼层
2个计数单元 一个控制高,一个控制低,根据数值来延时,当pwm升高时,高计数加,低计数减,以保证周期不变则可
 楼主| mage心寒 发表于 2010-8-11 14:39 | 显示全部楼层
楼上可以举个例子吗??谢谢。。
new1988 发表于 2010-8-11 15:15 | 显示全部楼层
本帖最后由 new1988 于 2010-8-11 15:19 编辑

unsigned char i;
while(1)
{
        P1^1 = 1;
        delay(i);
        P1^1 = 0;
        delay(256 - i );
}                 高电平占空比 = i/256,频率 = 1/delay(1)*256
这是八位的PWM,16位的就把i定义为unsigned int , 把delay(256-i)改成65536-i就可以了。
 楼主| mage心寒 发表于 2010-8-11 15:21 | 显示全部楼层
我编程实验看下。。谢谢4楼。。
zhoukok 发表于 2010-8-11 15:33 | 显示全部楼层
呵呵  俺不习惯这样写的  不过这是可行的
 楼主| mage心寒 发表于 2010-8-11 15:57 | 显示全部楼层
6楼你一般怎么写说说。。
zhoukok 发表于 2010-8-11 16:47 | 显示全部楼层
你去看本版块的 如何让灯渐明渐暗 帖子吧
 楼主| mage心寒 发表于 2010-8-11 18:39 | 显示全部楼层
我用定时器会,不会用延迟写。。
 楼主| mage心寒 发表于 2010-8-12 09:10 | 显示全部楼层
void pwm()
      {
          uchar i;
          for(i=1;i<=5;i++)
          {
          if(i<=PWM_ON)
                   pwm1=1;          
          if(i>PWM_ON)
          pwm1=0;
          delayus(100);
          }
           }
这是昨晚写的,灯是变暗了,可是再调节可以变亮,但最暗的就是那样。。请教高手。。
hellozj 发表于 2010-8-12 14:26 | 显示全部楼层

  1. void pwm(uchar percent){//占空比
  2.     uchar i,t;
  3.     t=1;//延时倍数
  4.     for(i=0; i<100*t; i++){
  5.          if(i<percent)
  6.               pwm1=1;
  7.          else
  8.               pwm1=0;
  9.    }
  10. }        
  11.          
  12. void main(){
  13.          while(1){
  14.             pwm(20);//占空比20%
  15.          }
  16. }  


  17. }
 楼主| mage心寒 发表于 2010-8-12 18:43 | 显示全部楼层
楼上的程序很好。。谢谢。。
 楼主| mage心寒 发表于 2010-8-12 18:43 | 显示全部楼层
楼上的程序很好。。谢谢。。
goldbright 发表于 2010-8-12 20:32 | 显示全部楼层
谢谢这些无私的人。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

1019

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部