标题: 占空比设置的50%方波出来的不对啊 [打印本页]

作者: 林守一    时间: 2021-4-15 00:50
标题: 占空比设置的50%方波出来的不对啊
求解惑

9475F061-AA06-4963-8D85-70F6F3B04436.jpeg (1.6 MB, 下载次数: 37)

9475F061-AA06-4963-8D85-70F6F3B04436.jpeg

作者: munuc_w    时间: 2021-4-15 08:36
这种情况就是产生PWM的两个参数:周期和脉宽的参数设置的问题,仔细查一下看看。
作者: cheney03    时间: 2021-4-15 08:36
程序呢?
作者: glinfei    时间: 2021-4-15 08:41
没附程序,只能瞎猜,我估计你中断写的问题,中断写的不够简洁导致,你中断用自动重装模式会好很多。
作者: 林守一    时间: 2021-4-15 14:35
[code]void timer0() interrupt 1{         TH0=(65536-50000)/256;         
        TL0=(65536-50000)%256;                  
if(dang==0){w0=0;}                                  
if(dang==1){count1++;if(count1<=1){w0=1;}if(count1>1){w0=0;}if(count1==4){count1=0;}}  
if(dang==2){w0=1;}         
我是这样写的
作者: daemondong    时间: 2021-4-15 14:41
本帖最后由 daemondong 于 2021-4-15 14:48 编辑

这里改成

if(dang==1){count1++;if(count1<=2){w0=1;}if(count1>2){w0=0;}if(count1==4){count1=0;}}
作者: Kxuan163    时间: 2021-4-15 16:12
建议试用用定时器中断方式:

//主函数:
void main(void)
{
   EA=1;                  
   ET0=1;                  
   TMOD=0x01;              //使用定时器T0的模式1
   TH0=(65536-50000)/256;  
   TL0=(65536-50000)%256;
   TR0=1;            
   while(1)  //无限循环等待中断
       ;
}

// T0中断服务函数:
void Time1(void) interrupt 3 using 0 //“interrupt”
  WO =~ WO //输出引脚电平取反
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;
}


作者: Kxuan163    时间: 2021-4-15 16:16
我在上面写的 “ T0中断服务函数” 漏了个花括号,应为:

// T0中断服务函数:
void Time1(void) interrupt 3 using 0 //“interrupt”
{
  WO =~ WO //输出引脚电平取反
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;
}
作者: 林守一    时间: 2021-4-15 16:36
Kxuan163 发表于 2021-4-15 16:16
我在上面写的 “ T0中断服务函数” 漏了个花括号,应为:

// T0中断服务函数:

好的谢谢
作者: 人人学会单片机    时间: 2021-4-15 17:59
人人学会单片机,PWM程序 http://www.51hei.com/bbs/dpj-200820-1.html
作者: Kxuan163    时间: 2021-4-15 23:03
林守一 发表于 2021-4-15 16:36
好的谢谢

我在上面的解答,仍有个bug:
void Time1(void) interrupt 3 using 0 //“interrupt”  应改正为:


void Time0void) interrupt 3 using 0 //“interrupt”
{
  WO =~ WO //输出引脚电平取反
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;
}


作者: lwh999995    时间: 2021-4-15 23:15
其实只要这样就是占空比50%了
while(1)
{
    P1=~P1;
    DELAYUS(100);
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1