| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5159 人关注过本帖
标题:有大神可以来看一下C程序哪里不对吗。刚学C的小白
取消只看楼主 加入收藏
董柯文
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-7-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
有大神可以来看一下C程序哪里不对吗。刚学C的小白
这个是用51单片机定时器中断写的一个从占空比由10%(每次变化10%)变化到100%,再从100%到10%的一个PWM波的程序。
在占空比为10%的情况下,输出了200个周期为1ms的10%的占空比的波形,在占空比为20%的情况下,输出200个周期为1ms的20%的占空比的波形……以此类推直到输出200个周期为1ms 的100%的波形,也就是从10%变化到100%总共用时2s。再用2s从100%变化到10%;


请各位大神看看哪里不对!


程序代码:
#include <reg52.h>
sbit PWM = P0^0;
unsigned char time=0;//进入中断的次数
unsigned char th=1;//
unsigned char flag=0;//增减标志位
void main()
{    
    
    TMOD = 0x20;                    //定时器1工作模式2:8位自动重装定时器
    TH1 = 255-50;        //设定初值为50纳秒
    TL1 = 255-50;
    EA  = 1;                        //开中断
    ET1 = 1;                        //使能T0中断
    TR1 = 1;
    while(1)
    {
        
    }
}

//可控制占空比的方波 
void T1_ISR()    interrupt 3
{
  if(flag==0)//递增
    { 
        time++;
        if((th>0)&&(th<=200))         //10%
        {
          if(time<=2) PWM=1;
      else if ((time>2)&&(time<=20)) PWM=0;        
          else if(time==21) 
          {
            time=0;
            th++;
          }
      }
        
        
        if((th>200)&&(th<=400))      //20%
        {    
          if(time<=4) PWM=1;
          else if((time>4)&&(time<=20)) PWM=0;
          else if(time==21)
          {
            time=0;
            th++;
          }
        }
        
        if((th>400)&&(th<=600))     //30%
        {    
           if(time<=6) PWM=1;
           else if((time>6)&&(time<=20)) PWM=0;
           else if(time==21)
          {
              time=0;
              th++;
          }
      }
        
        if((th>600)&&(th<=800))    //40%
        {    
         if(time<=8) PWM=1;
         else if((time>8)&&(time<=20)) PWM=0;
         else if(time==21)
        {
            time=0;
            th++;
          }
        }
        
        if((th>800)&&(th<=1000))    //50%
        {
          if(time<=10) PWM=1;
          else if((time>10)&&(time<=20)) PWM=0;
          else if(time==21)
        {
            time=0;
            th++;
          }
        }
        
        if((th>1000)&&(th<=1200))    //60%
        {
         if(time<=12) PWM=1;
         else if((time>12)&&(time<=20)) PWM=0;
         else if(time==21)
       {
            time=0;
            th++;
         }
      }
        
        if((th>1200)&&(th<=1400))    //70%
        {
         if(time<=14) PWM=1;
         else if((time>14)&&(time<=20)) PWM=0;
         else if(time==21)
       {
            time=0;
            th++;
         }
     }
        
    if((th>1400)&&(th<=1600))    //80%
        {    
         if(time<=16) PWM=1;
         else if((time>16)&&(time<=20)) PWM=0;
         else if(time==21)
       {
            time=0;
            th++;
         }
      }
        
        if((th>1600)&&(th<=1800))    //90%
        {    
         if(time<=18) PWM=1;
         else if((time>18)&&(time<=20))  PWM=0;
         else if(time==21)
       {
            time=0;
            th++;
         }
      }
        
        if((th>1800)&&(th<=2000))    //100%
        {  
           if(time<=20) PWM=1;
             else if(time=21)
             {
                 time=0;
                 th++;
             }
        }    
         if((th>2000))
             {
                 flag=1;
                 th=1999;
                 time=0;
             }
    }
    
    /************************************************************************************************/
  else if (flag==1)
    {  
        time++;
             if((th>=1800)&&(th<2000))
             {
                 if(time<20) PWM=1;
                   else if(time==21)
                     {
                         time=0;
                         th--;
                     }
             }
             
             if ((th>=1600)&&(th<1800))
             {
                 if(time<18) PWM=1;
                 else if ((time>=18)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }                 
             }
             
             if((th>=1400)&&(th<1600))
             {
                 if(time<16) PWM=1;
                 else if ((time>=16)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }
             }
             
                  if((th>=1200)&&(th<1400))
             {
                 if(time<14) PWM=1;
                 else if ((time>=14)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }
             }
             
                  if((th>=1000)&&(th<1200))
             {
                 if(time<12) PWM=1;
                 else if ((time>=12)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }
             }
             
                  if((th>=800)&&(th<1000))
             {
                 if(time<10) PWM=1;
                 else if ((time>=10)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }
             }
             
                  if((th>=600)&&(th<800))
             {
                 if(time<8) PWM=1;
                 else if ((time>=8)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }
             }
             
                  if((th>=400)&&(th<600))
             {
                 if(time<6) PWM=1;
                 else if ((time>=6)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }
             }
             
                  if((th>=200)&&(th<400))
             {
                 if(time<4) PWM=1;
                 else if ((time>=4)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 }
             }
             
                  if((th>=0)&&(th<200))
             {
                 if(time<2) PWM=1;
                 else if ((time>=2)&&(time<20)) PWM=0;
                 else if(time==21)
                 {
                     time=0;
                     th--;
                 } 
             }    
        if(th<0)
                 {
                     flag=0;
                     th=1;
                 }             
    }             
}    
                                            
    


[此贴子已经被作者于2016-7-29 09:36编辑过]

搜索更多相关主题的帖子: include 单片机 定时器 
2016-07-28 20:28
董柯文
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-7-28
收藏
得分:0 
我是不是发错区了。。。应该发到单片机区去?
2016-07-28 20:31
董柯文
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-7-28
收藏
得分:0 
回复 3楼 hu9jj
您是真不懂 还是讽刺我啊。。
2016-07-29 09:30
快速回复:有大神可以来看一下C程序哪里不对吗。刚学C的小白
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017413 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved