定時(shí)器之計(jì)數(shù)器應(yīng)用

定時(shí)器的定時(shí)器應(yīng)用估計(jì)大家都略有耳聞,而且都會(huì)用。那計(jì)數(shù)器功能了解?說(shuō)實(shí)話,這個(gè)功能確實(shí)是使用場(chǎng)景少,用途少。但存在即合理,公司設(shè)計(jì)就會(huì)有用途。學(xué)習(xí)這件事情,不能以用處不大為由而去忽略不看。下面來(lái)看看定時(shí)器之計(jì)數(shù)器應(yīng)用。

概述

計(jì)數(shù)器是對(duì)外來(lái)脈沖信號(hào)計(jì)數(shù),對(duì)來(lái)自于外部引腳P3.4(T0),P3.5(T1),P1.1(T2)的外部信號(hào)計(jì)數(shù)。在設(shè)置計(jì)數(shù)器工作狀態(tài)時(shí),每當(dāng)外部輸入的脈沖發(fā)生負(fù)跳變(原來(lái)正常狀態(tài)下是高電平,沒(méi)有事件發(fā)生,當(dāng)高電平變?yōu)榈碗娖綍r(shí),即發(fā)生負(fù)跳變),計(jì)數(shù)器加1,知道加滿(mǎn)溢出,向cpu申請(qǐng)中斷,以此重復(fù)。
計(jì)數(shù)器

原理

在講解原理之前,先來(lái)看幾個(gè)概念。方便看懂原理。
機(jī)器周期 在計(jì)算機(jī)中,為了便于管理,常把一條指令的執(zhí)行過(guò)程劃分為若干個(gè)階段,每一階段完成一項(xiàng)工作。例如,取指令、存儲(chǔ)器讀、存儲(chǔ)器寫(xiě)等,這每一項(xiàng)工作稱(chēng)為一個(gè)基本操作。完成一個(gè)基本操作所需要的時(shí)間稱(chēng)為機(jī)器周期。它一般由12個(gè)時(shí)鐘周期(振蕩周期)組成,也是由6個(gè)狀態(tài)周期組成。而振蕩周期=1秒/晶振頻率,因此單片機(jī)的機(jī)器周期=12秒/晶振頻率 。
時(shí)鐘周期 又稱(chēng)振蕩周期,是處理操作的最基本單位。(晶振頻率的倒數(shù))
節(jié)拍與狀態(tài) 把振蕩脈沖的周期定義為節(jié)拍(用p表示)。振蕩脈沖經(jīng)過(guò)二分頻后定義為狀態(tài)。一個(gè)狀態(tài)就包含兩個(gè)節(jié)拍。

機(jī)器周期

如圖所示,一個(gè)機(jī)器周期包含6個(gè)狀態(tài)周期,一個(gè)狀態(tài)周期又分為2個(gè)節(jié)拍。文字說(shuō)明和圖片解釋很好理解。下面來(lái)開(kāi)始說(shuō)正事:
當(dāng)定時(shí)器設(shè)定為計(jì)數(shù)器時(shí),外部引腳輸入脈沖。但輸入信號(hào)產(chǎn)生從1到0的負(fù)跳變。計(jì)數(shù)器加1.每個(gè)機(jī)器周期的S5P2期間,對(duì)外部輸入引腳進(jìn)行采樣。如在第一個(gè)機(jī)器周期中采得的值為1,在下個(gè)周期采的值為0.則在在再下個(gè)機(jī)器周期的S3P1期間,計(jì)數(shù)器加1.由于這個(gè)設(shè)定,外部輸入信號(hào)頻率有限制,最高為振蕩器頻率的1/24。(頻率:?jiǎn)挝粫r(shí)間內(nèi)完成周期性變化的次數(shù))可以這樣理解,確定一次輸入信號(hào)需要兩個(gè)機(jī)器周期。所以輸入信號(hào)的高低電平變化時(shí)間要大于兩個(gè)機(jī)器周期。舉個(gè)例子,外部信號(hào)電平低-高-低變化,在進(jìn)入低電平狀態(tài)至再次進(jìn)入低電平狀態(tài)的時(shí)間需要大于兩個(gè)機(jī)器周期。不然會(huì)檢測(cè)出錯(cuò)。還有就是,為了電平在變化之前能檢測(cè)到,需要電平狀態(tài)至少保持一個(gè)機(jī)器周期。
機(jī)器周期

內(nèi)部結(jié)構(gòu)

計(jì)時(shí)器邏輯圖

圖片沒(méi)什么好說(shuō)的,和定時(shí)器一樣。只是C/T位變化而已。

附寄存器數(shù)據(jù)手冊(cè)

寄存器TCON

寄存器TCON

TF1:定時(shí)器 1 溢出標(biāo)志。當(dāng)定時(shí)器/計(jì)數(shù)器 1 溢出時(shí),由 硬件置位;當(dāng)主機(jī)響應(yīng)中斷,
轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清零。
TR1:定時(shí)器 1 運(yùn)行控制位, 由軟件置位/ 復(fù)位來(lái)開(kāi)啟或關(guān)閉定時(shí)器/計(jì)數(shù)器 1。
TF0:定時(shí)器 0 溢出標(biāo)志。當(dāng)定時(shí)器/計(jì)數(shù)器 0 溢出時(shí),由 硬件置位;當(dāng)主機(jī)響應(yīng)中斷,
轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清零。
TR0:定時(shí)器 0 運(yùn)行控制位,由 軟件置位/ 復(fù)位來(lái)開(kāi)啟或關(guān)閉定時(shí)器/計(jì)數(shù)器 0。
IE1:外部中斷 1 跳變中斷請(qǐng)求標(biāo)志,當(dāng)檢測(cè)到 INT1 發(fā)生 1 到 0 的跳變時(shí),由硬件置位;當(dāng)主機(jī)響應(yīng)中斷, 轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清零。
IT1:外部中斷 1 觸發(fā)方式控制位,由 軟件置位或清零來(lái)選擇外部中斷 1 的跳變/電平觸發(fā)中斷請(qǐng)求。IT1=0 時(shí),外部中斷 1 為電平觸發(fā)方式,當(dāng) INT1 輸入低電平時(shí),置位 IE1。
采用電平觸發(fā)方式時(shí),外部中斷源必須保持低電平有效,直到該中斷被 CPU 響應(yīng),同時(shí)在該中斷服務(wù)程序執(zhí)行完之前,外部中斷源必須被清除,否則將產(chǎn)生另一次中斷。IT1=1 時(shí),外部中斷 1 為邊沿觸發(fā)方式,在對(duì) INT1 的相鄰兩次采樣中,如果一個(gè)周期中為高電平,接下來(lái)的周期為低電平,則置位 IE1,表示外部中斷 1 正在向 CPU 申請(qǐng)中斷。直到該中斷被CPU 響應(yīng)時(shí),才被 硬件清零。
IE0:外部中斷 0 跳變中斷請(qǐng)求標(biāo)志,當(dāng)檢測(cè)到 INT1 發(fā)生 1 到 0 的跳變時(shí),由硬件置位;當(dāng)主機(jī)響應(yīng)中斷, 轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清零。
IT0:外部中斷 0 觸發(fā)方式控制位,應(yīng)用同 IT1。

寄存器TMOD

寄存器TMOD

GATE:門(mén)控制位,當(dāng) GATEx=1 時(shí),控制寄存器 TCON 的 TRx=1(x=0 或 1)。當(dāng) GATEx=0 時(shí),定時(shí)器啟動(dòng)與停止僅受寄存器中的TRx來(lái)控制(x=0 或 1)。
C / :定時(shí)器、計(jì)數(shù)器方式選擇位,該位為 1 時(shí)為計(jì)數(shù)器,為 0 時(shí)為定時(shí)器。
M0:定時(shí)器/計(jì)數(shù)器工作模式選擇位。
M1:定時(shí)器/計(jì)數(shù)器工作模式選擇位。
注:高四位是T1定時(shí)器控制位,低四位是T0定時(shí)器控制位

工作方式如下圖所示


4種工作方式

應(yīng)用

/***********************************************
本程序用定時(shí)器0作脈沖源,周期為200us,頻率為5khz
用定時(shí)器1作計(jì)數(shù)器,每當(dāng)經(jīng)過(guò)20個(gè)脈沖,就取反X,輸
出一個(gè)新的頻率。
作用:了解計(jì)數(shù)器,懂得如何使用計(jì)數(shù)器
************************************************/
#include<reg52.h>
sbit X=P1^0;     //T1計(jì)數(shù)器控制位
sbit Y=P1^7;     //T0定時(shí)器脈沖源控制位
void initialize();//聲明初始化函數(shù)
main() //主函數(shù)
{
    initialize(); //調(diào)用初始化函數(shù)
    while(1);
}
void initialize ()   //初始化函數(shù)
{
    TMOD=0X62;  //0110 0010  定時(shí)器1計(jì)數(shù)器模式,工作方式2,定時(shí)器0定時(shí)器模式,工作方式2
    TH1=236;    //賦初值,計(jì)數(shù)20次中斷
    TL1=236;
    TH0=0XA4;  //賦初值,定時(shí)100us進(jìn)中斷
    TL0=0XA4;
    EA=1;      //打開(kāi)總中斷
    ET1=1;     //打開(kāi)定時(shí)器1中斷
    ET0=1;     //打開(kāi)定時(shí)器0中斷
    TR1=1;     //啟動(dòng)定時(shí)器1中斷
    TR0=1;     //啟動(dòng)定時(shí)器0中斷
}
void timer_T0() interrupt 1   //定時(shí)器0中斷
{
    Y=~Y;       //狀態(tài)取反
}
void timer_T1() interrupt 3
{
    X=~X;       //狀態(tài)取反
}
計(jì)數(shù)器應(yīng)用

效果圖如上。程序注釋很清楚,這里不細(xì)說(shuō)了。

總結(jié)

計(jì)數(shù)器和定時(shí)器的使用大同小異,只是一個(gè)控制位的變化。文章講解清晰明了,順著文章細(xì)看必會(huì)弄懂,部分定義可能略有苦澀,但仔細(xì)一讀,并沒(méi)有多大難度。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 使用單片機(jī)時(shí),編程會(huì)高頻率用到延時(shí),如led燈閃爍,蜂鳴器長(zhǎng)短鳴,秒表應(yīng)用等等。首先考慮軟件延時(shí),但這個(gè)時(shí)間不精確...
    風(fēng)情云閱讀 1,904評(píng)論 0 2
  • 單片機(jī)STC89C52學(xué)習(xí)——17 定時(shí)器和計(jì)數(shù)器 匯總:00 單片機(jī)STC89C52學(xué)習(xí)參考教程:普中科技 1 ...
    aaa小菜雞閱讀 1,383評(píng)論 0 0
  • 本文集下的內(nèi)容主要介紹stc89c51系列單片的基礎(chǔ)知識(shí)(初學(xué)者看會(huì)感到乏味,建議培養(yǎng)興趣愛(ài)好之后再來(lái)看) 本文主...
    keep1234quiet閱讀 3,627評(píng)論 8 6
  • 請(qǐng)?jiān)O(shè)想一個(gè)場(chǎng)景:你正在公司碼字,上司說(shuō)開(kāi)會(huì)。你有兩個(gè)選擇,一是繼續(xù)碼字,二是去會(huì)議室開(kāi)會(huì)。大腦大概率會(huì)停下手頭工作...
    風(fēng)情云閱讀 724評(píng)論 0 1
  • 一、MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器概念 單片機(jī)中的定時(shí)器和計(jì)數(shù)器其實(shí)是同一個(gè)物理的電子元件,只不過(guò)計(jì)數(shù)器記錄的...
    Dorajimmy閱讀 1,448評(píng)論 0 1

友情鏈接更多精彩內(nèi)容