本帖最后由 朝朝1 于 2021-2-24 10:31 編輯
#include<reg52.h>
sbit led=P1^0;
sbit led1=P1^1;
unsigned char timer,timer1;
unsigned char T0RH,T0RL,T1RH,T1RL;
void confgtimer0(unsigned char ms) //定時器計算時間函數(shù)且最大值是71ms
{
unsigned long tmp;
tmp=11059200/12; //計算頻率,因為一個機器周期等于12個時鐘周期 所以要除以12 且單位是微妙
tmp=(tmp*ms)/1000;
tmp=65536-tmp; //設置初值
T0RH=(unsigned char)(tmp>>8);
T0RL=(unsigned char) (tmp);
TMOD=0x11;//設置特殊功能寄存器,配置好工作模式 ,設置定時器0,工作方式1
TH0=T0RH ; //設置定時時間
TL0=T0RL;
TR0=1; //打開定時器
}
void confgtimer1(unsigned char ms) //定時器計算時間函數(shù)且最大值是71ms
{
unsigned long tmp;
tmp=11059200/12; //計算頻率,因為一個機器周期等于12個時鐘周期 所以要除以12 且單位是微妙
tmp=(tmp*ms)/1000;
tmp=65536-tmp; //設置初值
T1RH=(unsigned char)(tmp>>8);
T1RL=(unsigned char) (tmp);
TMOD=0x11;//設置特殊功能寄存器,配置好工作模式 ,設置定時器0,工作方式1
TH1=T1RH ; //設置定時時間
TL1=T1RL;
TR1=1; //打開定時器
}
void main()
{
confgtimer0(50);
confgtimer1(50);
while(1)
{
if(TF0==1) //當增加的數(shù)字溢出時候。TF置1
{
timer++;
TF0=0; //軟件清零
if(timer==20)
{
timer=0;
TH0=T0RH; //重新賦值
TL0=T0RL;
led=~led; //led燈閃爍
}
}
if(TF1==1) //當增加的數(shù)字溢出時候。TF置1
{
timer1++;
TF1=0; //軟件清零
if(timer1==20)
{
timer1=0;
TH1=T1RH; //重新賦值
TL1=T1RL;
led1=~led1; //led燈閃爍
}
}
}
}
|