從上圖可以看到,GATE先經(jīng)過非門,再和INT0引腳作為或門的輸入。這里簡單提一下數(shù)字電路中的與門、或門和非門。顧名思義,與門當(dāng)且僅當(dāng)所有輸入都位高電平時(shí)輸出才是高電平,或門只要有其中之一輸入是高電平則輸出就是高電平,非門的輸出電平狀態(tài)剛好和輸入電平狀態(tài)相反。因此從定時(shí)器0方式1的邏輯結(jié)構(gòu)圖中,當(dāng)GATE=0,且TR0=1時(shí),TL0低8位寄存器便在機(jī)器周期的作用下開始加1計(jì)數(shù)。當(dāng)TL0計(jì)滿之后向TH0進(jìn)位,直到TH0也計(jì)滿,此時(shí)再來一個(gè)計(jì)數(shù),計(jì)數(shù)器便溢出TF0置1,發(fā)出定時(shí)器0中斷申請。
在清楚定時(shí)器的工作方式之后,重點(diǎn)就是如何讓定時(shí)器定時(shí)我們想要的時(shí)間呢?這就涉及到定時(shí)器的初值問題。定時(shí)器一旦啟動(dòng),便在TL0和TH0原來的基礎(chǔ)上開始每隔一個(gè)機(jī)器周期加1操作直到溢出。假設(shè)在程序開始執(zhí)行時(shí)TL0和TH0的初值都是0,單片機(jī)的晶振是12MHz,那么該單片機(jī)的機(jī)器周期就是1us,計(jì)滿TL0和TH0一共需要(2的16次方減1=65535)個(gè)數(shù),再來一個(gè)加1就溢出。也就是說定時(shí)器最多可以定時(shí)的時(shí)間是65536us(65.536ms),可想而知如果我們需要定時(shí)器能夠定時(shí)50ms的話,那么TL0和TH0必須有一定的初值。通俗的理解就是定時(shí)器的16位計(jì)數(shù)器是個(gè)水桶,這個(gè)水桶最多能夠倒?jié)M65.536斤水,而我們只需要往水桶里到50斤水就把水桶倒?jié)M,這個(gè)時(shí)候水桶里必須要有15.536斤水,這就是初值。
這里我們就正式開始如何確定定時(shí)器的初值,我們要讓定時(shí)器定時(shí)50ms就產(chǎn)生一次中斷,這個(gè)時(shí)候TL0和TH0裝入的總數(shù)就是65536-50000=15536,把15536對256取模:15536/256=60裝入TH0中,把15536對256求余:15536%256=176裝入TL0中。這樣就得到我們想要的初值了。