因此一共經(jīng)過了【(256-H-1)*256+256-L】=(65536-256H-L)次計數(shù)定時器請求中斷。也就是說定時器中的16位寄存器的初值C=256H+L。
很明顯TH0中的初值H=C/256,而TL0中的初值L=C%256,這就推導出來了。
搞定了定時器初值的問題,接下來就可以寫定時器中斷的代碼了。
中斷服務程序的寫法
C51的中斷函數(shù)格式如下:
void 函數(shù)名() interrupt 中斷號 using 工作組
{中斷服務程序具體內容}
中斷函數(shù)沒有返回值和參數(shù),函數(shù)名只要符合C語言標準就可以,中斷號是指單片機中的中斷源序號,是編譯器識別不同中斷源的唯一憑證,using工作組是指這個中斷服務程序使用單片機內存中4組工作寄存器的哪一組,由編譯器自動分配,通常我們可以忽略不寫。
#include //包含頭文件
sbit led = P0^0;
unsigned char count = 0; //定時累計變量,我們需要1000ms定時,50 * 20 = 1000
//count是全局變量,通俗地說就是程序每次重新執(zhí)行時值保持住最近一次的值
//后續(xù)會專門講講C語言的一些基礎知識
void main()
{TMOD = 001; //設置定時器0工作方式1,16位計數(shù)
TH0 = (65536 - 45872) / 256; //晶振11.0592MHz,定時50ms時TH0初值
TL0 = (65536 - 45872) % 256; //晶振11.0592MHz,定時50ms時TL0初值
EA = 1; //開啟總中斷
ET0 = 1; //開啟定時器0中斷
TR0 = 1; //啟動定時器0
while(1); //程序停止,等待定時器0中斷發(fā)生}
void T0_INT() interrupt 1 //大家對照著上述格式看看