不用定期器中断怎么写??

[复制链接]
 楼主| yinxiangh 发表于 2012-4-7 12:58 | 显示全部楼层 |阅读模式
PWM用延迟怎么写
llljh 发表于 2012-4-7 12:59 | 显示全部楼层
2个计数单元 一个控制高,一个控制低,根据数值来延时,当pwm升高时,高计数加,低计数减,以保证周期不变则可
司徒老鹰 发表于 2012-4-7 13:00 | 显示全部楼层
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就可以了。
 楼主| yinxiangh 发表于 2012-4-7 13:03 | 显示全部楼层
我编程实验看下。。谢谢楼上。。
zyf部长 发表于 2012-4-7 13:03 | 显示全部楼层
呵呵  俺不习惯这样写的  不过这是可行的
 楼主| yinxiangh 发表于 2012-4-7 13:04 | 显示全部楼层
void pwm()
      {
          uchar i;
          for(i=1;i<=5;i++)
          {
          if(i<=PWM_ON)
                   pwm1=1;         
          if(i>PWM_ON)
          pwm1=0;
          delayus(100);
          }
           }
这是刚写的,灯是变暗了,可是再调节可以变亮,但最暗的就是那样。。请教高手。。
kangzj 发表于 2012-4-7 13:04 | 显示全部楼层
void pwm(uchar percent){//占空比

    uchar i,t;

    t=1;//延时倍数

    for(i=0; i<100*t; i++){

         if(i<percent)

              pwm1=1;

         else

              pwm1=0;

   }

}        

         

void main(){

         while(1){

            pwm(20);//占空比20%

         }

}  





}
supernan 发表于 2012-4-7 13:06 | 显示全部楼层
static uchar PerCnt=0;

void PWM(uchar Percent)
{        
        if(PerCnt++>=100U)
        {
                PerCnt=0;
                if(Percent)
                PwmOut=1;
        }
        if(MotorTime>=Percent)
                PwmOut=0;        
}

该方法的好处是不用延时等待,节约CPU资源
可以放于中断或一定的时基调用一次,便于控制频率。
 楼主| yinxiangh 发表于 2012-4-7 13:06 | 显示全部楼层
多谢楼上们的好程序
 楼主| yinxiangh 发表于 2012-4-7 13:07 | 显示全部楼层
先结贴了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

723

主题

7134

帖子

2

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

723

主题

7134

帖子

2

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