
51单片机在同时使用两个定时器时候,我的为什么T0总是不好使??
#include"reg52.h"#defineuintunsignedint#defineucharunsignedcharvoiddelay(uintz);uinta...
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
uint a,b,count,m,n,num;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit pwm=P1^5;
sbit cd=P1^6;
sbit ef=P1^7;
void close()
{
count=0;
}
void init()
{
EA=1;
TMOD=0x11;
ET1=1;
TR1=1;
ET0=1;
TR0=1;
delay(1);
}
void main()
{
m=0;
n=0;
a=0;
b=0;
P2=0x00;
P3=0x00;
init();
while(1)
{
if(key1==0)
{
P2=0x00;
P3=0x00;
close();
delay(5);
}
else
if(key2==0)
{
a++;
if(a==1)
{
P2=0x01;
count=6;
delay(5);
}
else
if(a==2)
{
P2=0x02;
count=10;
delay(5);
}
else
if(a==3)
{
P2=0x04;
count=19;
delay(5);
}
else
if(a==4)
a=0;
delay(10);
}
else
if(key3==0)
{
b++;
if(b==1)
{
P3=0x01;
num=2;
delay(5);
}
else
if(b==2)
{
P3=0x02;
num=40;
delay(5);
}
else
if(b==3)
{
P3=0x04;
num=80;
delay(5);
}
else
if(b==4)
b=0;
delay(10);
} /**/
pwm=ef&cd;
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
if(m<count)
ef=1;
else
ef=0;
if(m==20)
m=0;
}
void time1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
n++;
if(n<(num/2))
cd=0;
else
cd=1;
if(n>num)
n=0;
} /**/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
分别用他们来输出两个占空比不一样的方波(cd和ef),但是总是T0定时器不能起作用,不知道是为什么,求大侠给解!! 展开
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
uint a,b,count,m,n,num;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit pwm=P1^5;
sbit cd=P1^6;
sbit ef=P1^7;
void close()
{
count=0;
}
void init()
{
EA=1;
TMOD=0x11;
ET1=1;
TR1=1;
ET0=1;
TR0=1;
delay(1);
}
void main()
{
m=0;
n=0;
a=0;
b=0;
P2=0x00;
P3=0x00;
init();
while(1)
{
if(key1==0)
{
P2=0x00;
P3=0x00;
close();
delay(5);
}
else
if(key2==0)
{
a++;
if(a==1)
{
P2=0x01;
count=6;
delay(5);
}
else
if(a==2)
{
P2=0x02;
count=10;
delay(5);
}
else
if(a==3)
{
P2=0x04;
count=19;
delay(5);
}
else
if(a==4)
a=0;
delay(10);
}
else
if(key3==0)
{
b++;
if(b==1)
{
P3=0x01;
num=2;
delay(5);
}
else
if(b==2)
{
P3=0x02;
num=40;
delay(5);
}
else
if(b==3)
{
P3=0x04;
num=80;
delay(5);
}
else
if(b==4)
b=0;
delay(10);
} /**/
pwm=ef&cd;
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
if(m<count)
ef=1;
else
ef=0;
if(m==20)
m=0;
}
void time1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
n++;
if(n<(num/2))
cd=0;
else
cd=1;
if(n>num)
n=0;
} /**/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
分别用他们来输出两个占空比不一样的方波(cd和ef),但是总是T0定时器不能起作用,不知道是为什么,求大侠给解!! 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询