#include <reg51.h>
typedef unsigned char uchar;
sbit signal=P3^0;
uchar counter;
void main(void)
{
TR0=0; //禁止T0
TMOD=0x11; //T0和T1均選擇工作方式1,16位定時(shí)器
TH0=-1000/256; //定時(shí)時(shí)間為50ms
TL0=-1000%256;
signal=0; //開始時(shí)輸出為低電平
counter=0; //初始化T1的中斷次數(shù)為0
EA=1; //使能CPU中斷
ET0=1; //使能T0溢出中斷
ET1=1; //使能T1溢出中斷
TR0=1; //T0開始運(yùn)行,注意,T1不能現(xiàn)在運(yùn)行
while(1) //無(wú)限循環(huán)
{}
}
void isr_t0(void) interrupt 1 //T0中斷服務(wù)函數(shù)
{
TH0=-50000/256; //裝定時(shí)器,定時(shí)時(shí)間為50ms
TL0=-50000%256;
counter++; //中斷次數(shù)
if(counter==2) //若已中斷兩次,說(shuō)明已經(jīng)過(guò)去100ms
{
counter=0; //中斷次數(shù)歸零
signal=1; //產(chǎn)生矩形波中的高電平
TR1=1; //開始計(jì)數(shù)T1
}
}
//***********T1中斷函數(shù)******
void isr_t1(void) interrupt 3
{
signal=0; //矩形波中的低電平
TR0=0; //禁止T1計(jì)數(shù),等待T0將其喚醒
TH1=-25000/256; //25ms中斷初值
TL1=-25000%256;
}