51单片机两个定时器同时工作的程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar time,time2,count=20,flag=1,count1=20,flag1=1;
sbit PWM1=P0^0;
sbit PWM2=P0^1;
sbit PWM3=P0^2;
sbit PWM4=P0^3;
sbit PWM5=P0^4;
sbit PWM6=P0^5;
sbit key_add=P3^0;
sbit key_dec=P3^1;
sbit key_turn=P3^2;
sbit key=P3^3;
//=============函数声明============================
void delay(uint z);
void Motor_turn();
void Motor_add();
void Motor_dec();
void time0_init();
void time1_init();
void led();
//=================================================
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=500;y>0;y--);
}
void Motor_turn()
{
if(key_turn==0)
{
delay(2);
if(key_turn==0)
{
flag=~flag;
}
while(!key_turn);
}
}
void Motor_add()
{
if(key_add==0)
{
delay(2);
if(key_add==0)
{
count+=5;
if(count>=100)
{
count=100;
}
}
while(!key_add);
}
}
void Motor_dec()
{
if(key_dec==0)
{
delay(2);
if(key_dec==0)
{
count-=5;
if(count>=100)
{
count=0;
}
}
while(!key_dec);
}
}
void led()
{
if(key==0)
{
delay(2);
if(key==0)
{
count1+=5;
if(count1>=100)
{
count1=100;
}
}
while(!key);
}
}
void time0_init()
{
TMOD=0x01;
TH0=0xec; // (65536-10)/256; 赋初值定时
TL0=0x78; // (65536-10)%256; 0.01ms
EA=1;
ET0=1;
TR0=1;
}
void time1_init()
{
TMOD=0x01;
TH1=0xd8; // (65536-10)/256; 赋初值定时
TL1=0xf0; // (65536-10)%256; 0.01ms
EA=1;
ET1=1;
TR1=1;
}
void main()
{
PT0=1;
PT1=0;
time0_init();
time1_init();
while(1)
{
Motor_turn();
Motor_add();
Motor_dec();
}
}
void time0() interrupt 1
{
TR0=0;
TH0=0xec;
TL0=0x78;
TR0=1;
if(flag==1)
{
PWM1=0;
PWM3=0;
time++;
if(time
PWM2=1;
PWM4=1;
}
else
{
PWM2=0;
PWM4=0;
}
if(time>=100)
{
time=0;
}
}
else
{
PWM2=0;
PWM4=0;
time++;
if(time
PWM1=1;
PWM3=1;
}
else
{
PWM1=0;
PWM3=0;
}
if(time>=100)
{
time=0;
}
}
}
void time1() interrupt 3
{
TR1=0;
TH1=0xd8;
TL1=0xf0;
TR1=1;
if(flag==1)
{
PWM5=0;
time2++;
if(time2
PWM6=1;
}
else
{
PWM6=0;
}
if(time2>=200)
{
time2=0;
}
}
else
{
PWM6=0;
time2++;
if(time2
PWM5=1;
}
else
{
PWM5=0;
}
if(time2>=200)
{
time2=0;
}
}
}