/**********************************************
該函數(shù)會在單片機的P3^0口持續(xù)產生38KHZ的方波
**********************************************/
#include
sbit P3_0=P3^0;
void main()
{
TMOD = 0x02;//TMOD是定時器方式控制寄存器,這里選用定時器0,工作在模式2
TL0 = 0xF3;//定時器初值
TH0 = 0xF3;//定時器初值
EA = 1;//開總中斷
ET0 = 1;//開CPU中斷和T0中斷
TR0 = 1;//啟動定時器
while(1);
}
void time0_int(void) interrupt 1//定時器0中斷服務程序,除函數(shù)名自己取名外,其他部分要按照這樣的格式寫。
{
P3_0 = ~P3_0;
}
/*
******定時器初值的計算***********
如果采用的是定時器0,工作在模式1下:
(2^8 - X)*振蕩周期*12 = 定時時間
這里我采用的晶振為12MHZ,即振蕩周期為1/12MHZ = 1微秒.
要產生38KHZ的方波,即在1/38KHZ =26微秒,所以定時器的定時時間應該為13微秒,以保證能在P3^0口產生周期為26微秒的方波。計算可得計數(shù)初值X = 253(0xF3)
*/
/*
***************定時器模式選擇*******************
定時器有四種工作模式,原則上工作在任何模式下都可以,可是工作在模式2下,更加準確,誤差較小,這是因為模式2下定時器有自動重裝初值的特點。
*/
/*
********中斷服務程序的編寫***********
void 函數(shù)名() interrupt 中斷號
{
}
中斷號
0 外中斷0
1 定時器0
2 外中斷1
3 定時器1
4 串行中斷
這里我們用的是定時器0,所以中斷函數(shù)寫為
void void time0_int(void) interrupt 1
{}
*/
/*
********定時器的啟動與停止**********
只要設置TR0 = 1,即啟動定時器0,TR0 = 0,即停止定時器0
*/