|
|
本帖最后由 Tuier 于 2021-5-26 20:35 編輯
#include<reg52.h>
sbit input=P1^0;
sbit output=P1^1;
void main()
{
TMOD=0x051; //模式設(shè)置,定時(shí)計(jì)數(shù)器0用于定時(shí),定時(shí)計(jì)數(shù)器1用于計(jì)數(shù)
TR0=1; //打開定時(shí)器0
TR1=1; //開通TR1計(jì)數(shù)器
TH0=(65536-46080)/256;// 計(jì)時(shí)器每隔50000微秒(晶振11.0592MHz)發(fā)起一次中斷。
TL0=(65536-46080)%256;
ET0=1; //開定時(shí)器0中斷
EA=1; //開總中斷
while(1)
{//TL1為定時(shí)計(jì)數(shù)器1對應(yīng)的內(nèi)部寄存器的低八位。每當(dāng)外部脈沖由1變?yōu)?時(shí),其值加一。
if(TL1==2) //對從T1端口采得的波形四分頻。1為二分頻,2為四分頻,3為6分頻,以此類推。
//每計(jì)數(shù)一次(即采的模擬輸入方波的一個(gè)周期),即執(zhí)行此函數(shù)
{
output=~output;//模擬方波的周期為100ms,而此處,每隔一個(gè)輸入方波的周期,
//輸出信號電平變換一次,故其周期為200ms,實(shí)現(xiàn)了二分頻。
TL1=0;
}
}
}
void timer0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
input=~input; //定時(shí)器每隔50ms發(fā)起一次中斷,input電平變換一次,故模擬輸入方波的周期為100ms
} |
|