定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)及工作原理是什么
掃描二維碼
隨時(shí)隨地手機(jī)看文章
單片機(jī)定時(shí)器其實(shí)跟我們平時(shí)常說(shuō)的計(jì)數(shù)器,是同一個(gè)電子元件,只不過(guò)計(jì)數(shù)器記錄的是單片機(jī)外部情況,所接收的也是外部脈沖,而定時(shí)器則是由單片機(jī)自身提供的一個(gè)非常穩(wěn)定的計(jì)數(shù)器,這個(gè)穩(wěn)定的計(jì)數(shù)器就是單片機(jī)上連接的晶振部件。
二、單片機(jī)定時(shí)器的類型
在單片機(jī)中,分為軟件定時(shí)器,不可編程硬件定時(shí)器,可編程定時(shí)器。
1、軟件定時(shí):CPU每執(zhí)行一條指令時(shí),是需要固定時(shí)間的,所以,通過(guò)執(zhí)行空指令可以達(dá)到延時(shí)的效果,這樣子做的代價(jià)是占用CPU時(shí)間,所以一般很少這么做。
2、不可編程硬件定時(shí)器:是由電路和硬件來(lái)完成定時(shí)功能的,一般采用基本電路,外接定時(shí)部件(電阻和電容),通過(guò)改變電阻的阻值和電容的電容值來(lái)修改定時(shí)值,一旦確定后件不能通過(guò)軟件修改,這樣子做的優(yōu)點(diǎn)是不需要占用CPU時(shí)間。
3、可編程定時(shí)器:通過(guò)軟件來(lái)確定定時(shí)值及其范圍,可編程定時(shí)器功能強(qiáng)大,靈活性高。這是本文詳細(xì)講解的定時(shí)器。
MCS 51 單片機(jī)內(nèi)部帶有兩個(gè) 16 位定時(shí)器/計(jì)數(shù)器(8052 則有 3 個(gè)), 以及一個(gè)全雙工的異步通信串行接口,這給用戶帶來(lái)了極大的方便。本文介紹 8051 系列單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器和串行口的結(jié)構(gòu)及工作原理。
定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)及工作原理
定時(shí)器/計(jì)數(shù)器實(shí)質(zhì)上是加法計(jì)數(shù)器,當(dāng)它對(duì)具有固定時(shí)間間隔的內(nèi)部機(jī)器周期進(jìn)行計(jì)數(shù)時(shí),它是定時(shí)器;當(dāng)它對(duì)外部事件進(jìn)行計(jì)數(shù)時(shí),它是計(jì)數(shù)器。
定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)如圖 6.1 所示。
圖 6.1 定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖
圖中,基本部件是兩個(gè) 8 位的計(jì)數(shù)器,其中 TH1 、TL1 是 T1 的計(jì)數(shù)器,TH0 、TL0 是 T0 的計(jì)數(shù)器。TH1 和 TL1 、TH0 和 TL0 構(gòu)成兩個(gè) 16 位加法計(jì)數(shù)器,它的工作狀態(tài)及工作方式由定時(shí)器/計(jì)數(shù)器的工作方式寄存器 TMOD 及定時(shí)器/計(jì)數(shù)器控制寄存器 TCON 的各位決定。工作狀態(tài)有定時(shí)和計(jì)數(shù)兩種 , 由 TMOD 中的一位控制 。工作方式有方式 0~3 共四種 ,由 TMOD 中的兩位編碼決定 。TMOD 和 TCON 的內(nèi)容 由軟件寫(xiě)入。定時(shí)器/計(jì)數(shù)器的輸出是加法計(jì)數(shù)器的計(jì)滿 出信號(hào),它使 TCON 的某位(TF0 或 TF1) 置 1,作為定時(shí)器/計(jì)數(shù)器的溢出中斷標(biāo)志。
當(dāng)加法計(jì)數(shù)器的初值被設(shè)置,用指令改變 TMOD 和 TCON 的 內(nèi)容后,就會(huì)在下一條 指令的第一個(gè)機(jī)器周期的 S1P1 時(shí)按設(shè)定的方式自動(dòng)進(jìn)行工作。
工作方式在后面討論,這里先討論定時(shí)和計(jì)數(shù)工作狀態(tài)。在作定時(shí)器使用時(shí),輸入的時(shí)鐘脈沖是由晶體振蕩器的輸出經(jīng) 12 分頻后得到的,所 以定時(shí)器可看做是對(duì)計(jì)算機(jī)機(jī)器周期的計(jì)數(shù)器(因?yàn)槊總€(gè)機(jī)器周期包含 12 個(gè)振蕩周期,故每個(gè)機(jī)器周期定時(shí)器加 1 ,可以把輸入的時(shí)鐘脈沖看成機(jī)器周期信號(hào)), 故其頻率為晶振頻率的 1/12 。如晶振頻率為 12 MHz,則定時(shí)器每接收一個(gè)輸入脈沖的時(shí)間為 1 μs 。
當(dāng)它用作對(duì)外部事件計(jì)數(shù)時(shí),接相應(yīng)的外部輸入端 T0(P3.4) 或 T1(P3.5)。 在這種情況下 ,當(dāng)檢測(cè)到輸入端的電平由高跳變到低時(shí),計(jì)數(shù)器就加 1(它在每個(gè)機(jī)器周期 的 S5P2 時(shí)采樣外部輸入 ,當(dāng)采樣值在這個(gè)機(jī)器周期為高,在下一個(gè)機(jī)器周期為低時(shí),則計(jì)數(shù)器加 1)。 加 1 操作發(fā)生在檢測(cè)到這種跳變后的一個(gè)機(jī)器周期中的 S3P1 ,因此需要兩個(gè)機(jī)器周期來(lái)識(shí)別一個(gè)從“1”到“0”的跳變,故最高計(jì)數(shù)頻率為晶振頻率的 1/24 。這就要求輸入信號(hào)的電平要在跳變后至少應(yīng)在一個(gè)機(jī)器周期內(nèi)保持不變,以保證在給定的電平再次變化前至少被采樣一次。
這里要注意的是:加法計(jì)數(shù)器是計(jì)滿溢出時(shí)才申請(qǐng)中斷,所以在給計(jì)數(shù)器賦初值時(shí),不能直接輸入所需的計(jì)數(shù)值,而應(yīng)輸入的是計(jì)數(shù)器計(jì)數(shù)的最大值與這一計(jì)數(shù)值的差值,設(shè) 最大值為 M,計(jì)數(shù)值為 N,初值為 X,則 X 的計(jì)算方法如下:
計(jì)數(shù)狀態(tài):X=M-N
定時(shí)狀態(tài):X=M-定時(shí)時(shí)間/T
其中 T=12÷晶振頻率