打印

51单片机控制两路不同的PWM信号有问题,在线等!急!!

[复制链接]
492|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
365567380|  楼主 | 2015-5-12 15:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#define uInt unsigned int
#define uchar unsigned char
uchar PWM_T1 = 0;   //占空比控制变量
uchar PWM_T2 = 0;
sbit c7=P3^7;  //6个按键,决定输出PWM_T值
sbit c6=P3^6;
sbit c5=P3^5;
sbit c4=P3^4;
sbit c3=P3^3;
sbit c2=P3^2;
sbit OUT1=P1^0;
sbit OUT2=P1^1;
void main(void)      
{
uInt n;
TMOD=0x02;   //定时器0,工作模式2,8位定时模式
TH0=210;     //写入预置初值(取值1-255,数越大PWM频率越高)
TL0=210;     //写入预置值 (取值1-255,数越大PWM频率越高)
TR0=1;       //启动定时器
ET0=1;       //允许定时器0中断
EA=1;        //允许总中断
  OUT1=0xff;     //初始化P1
   OUT2=0xff;

while(1)      //PWM周期100,高电平100- PWM_T, 低电平PWM_T,低电平工作
{   
  for(n=0;n<200;n++);           //延时,取值0-65535,数字越大变化越慢
  if(!c7||!c6||!c5||!c4||!c3||!c2)     //通过按键改变占空比
  {
  if(!c7)         {PWM_T1=0;    PWM_T2=100;         }
else if(!c6)   { PWM_T1=10;           PWM_T2=85;  }
else if(!c5)   { PWM_T1=35;           PWM_T2=60;          }
else if(!c4)   { PWM_T1=60;           PWM_T2=35;         }
else if(!c3)   { PWM_T1=85;           PWM_T2=10;  }
else if(!c2)   { PWM_T1=100;   PWM_T2=0;         }
  }
}      
}
timer0() interrupt 1
{
static  uchar   t1 ;   //PWM计数
t1++;    //每次定时器溢出加1

if(t1==100)   //PWM周期 100个单位
{
  t1=0;  //使t=0,开始新的PWM周期
      OUT1=0x00;                 //使LED灯亮  ,输出端口
         
}

if(PWM_T1==t1)  //按照当前占空比切换输出为高电平
{    OUT1=0xff;   //使LED灯灭
         
}
}

timer1() interrupt 1
{
static  uchar   t2 ;   //PWM计数
t2++;    //每次定时器溢出加1

if(t2==100)   //PWM周期 100个单位
{
  t2=0;  //使t=0,开始新的PWM周期
  OUT2=0x00;
}

if(PWM_T2==t2)  //按照当前占空比切换输出为高电平
{   OUT2=0xff;   //使LED灯灭  
}
}
只有OUT2可以输出信号

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝