AT89S52单片机通过定时器产生PWM程序,有点问题!
#include<reg52.h>#defineucharunsignedcharsbitPWM=P1^0;uchartemp;ucharcodetable[]={0x6...
#include<reg52.h>
#define uchar unsigned char
sbit PWM=P1^0;
uchar temp;
uchar code table[]={
0x60,0xf0,0xf0,
0xd8,0x80,0xc1};
void init_sys(void)
{
TMOD=0x11; //T0,T1工作于方式1,16位定时器,其中T0控制占空比
switch(temp)
{
case 0x06:
TH0=table[0];
TL0=table[0];
break;
case 0x05:
TH0=table[3];
TL0=table[2];
break;
case 0x03:
TH0=table[5];
TL0=table[4];
break;
}
TH1=0xb1;
TL1=0xe0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void main(void) //主函数
{
temp=P2;
temp=temp&0x07; //取出低三位
while(temp!=0x07)
{
init_sys();
PWM=1;
while(1)
{
}
}
}
void Timer0(void) interrupt 1 using 1 //占空比时间
{
PWM=0;
}
void Timer1(void) interrupt 3 using 2 //等待20ms中断
{
PWM=1;
TH1=0xb1;
TL1=0xe0;
switch(temp)
{
case 0x06:
TH0=table[1];
TL0=table[0];
break;
case 0x05:
TH0=table[3];
TL0=table[2];
break;
case 0x03:
TH0=table[5];
TL0=table[4];
break;
}
}
上面这个程序我是想通过P2.0~P2.2三口连接的按键来改变占空比。可是在proteus中仿真时。只能在开始产生任一种占空比后。按键就失效了!!怎么回事?哪位帮我修改一下?? 展开
#define uchar unsigned char
sbit PWM=P1^0;
uchar temp;
uchar code table[]={
0x60,0xf0,0xf0,
0xd8,0x80,0xc1};
void init_sys(void)
{
TMOD=0x11; //T0,T1工作于方式1,16位定时器,其中T0控制占空比
switch(temp)
{
case 0x06:
TH0=table[0];
TL0=table[0];
break;
case 0x05:
TH0=table[3];
TL0=table[2];
break;
case 0x03:
TH0=table[5];
TL0=table[4];
break;
}
TH1=0xb1;
TL1=0xe0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void main(void) //主函数
{
temp=P2;
temp=temp&0x07; //取出低三位
while(temp!=0x07)
{
init_sys();
PWM=1;
while(1)
{
}
}
}
void Timer0(void) interrupt 1 using 1 //占空比时间
{
PWM=0;
}
void Timer1(void) interrupt 3 using 2 //等待20ms中断
{
PWM=1;
TH1=0xb1;
TL1=0xe0;
switch(temp)
{
case 0x06:
TH0=table[1];
TL0=table[0];
break;
case 0x05:
TH0=table[3];
TL0=table[2];
break;
case 0x03:
TH0=table[5];
TL0=table[4];
break;
}
}
上面这个程序我是想通过P2.0~P2.2三口连接的按键来改变占空比。可是在proteus中仿真时。只能在开始产生任一种占空比后。按键就失效了!!怎么回事?哪位帮我修改一下?? 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询