一、簡述
mcs—51系列微控制器內部有兩個16位定時器/計數器,即定時器t0和定時器t1。它們都具有定時和計數功能,可用於定時或延時控制,對外部事件進行檢測、計數等。
定時器/計數器是乙個加「1」計數器,來一脈衝即做加1計數,直至暫存器各位全為1,再來一脈衝,計數器回0且使tf0(定時器t0)tf1(定時器t1)置1表示定時時間到,計數值乘以微控制器的機器週期就是定時時間。
計數器:工作在方式1,可以從0數到65536(2的16次方),超過65535產生中斷;如果想要數10000個數,可以設定計數器的初值為55536,這樣從初值55535數到65535就是10000個數。
計數器又叫定時器:晶振產生脈衝訊號,乙個脈衝訊號過來,計數器就數1,頻率高,產生脈衝訊號就快,計數器數數就快,計數器每數了乙個數說明過去了xx秒,那麼讓計數器數10000個數,對應過去了10000乘以xx秒。這樣我們想要在10秒之後做某件事情,設定好計數器初值(設定計數器要數多少個數)、設定好頻率(確定產生乙個脈衝的時間),計數器數到65535之後,產生溢位訊號、引起中斷,然後執行中斷服務(可以是我們自己編寫的中斷函式)。
如:頻率是12mhz,也就是1秒可以產生12000000個脈衝,也就是1秒可以數12000000個數。如果設定計數器的初值為65524(65535-12),也就是數12個數。數12000000個數用時1秒,那麼數12個數用時12/12000000=0.000000.1秒=1微秒。(1秒=1000000微秒),想要定時1ms,那麼可以讓計數器數12000個數,設定計數器的初值為65535-12000=53535。
二、tmod控制暫存器
gate=1時,「與門」的輸出訊號k由intx輸入電平和trx位的狀態一起決定(即此時k=trx·intx),當且僅當trx=1,intx=1(高電平)時,計數啟動;否則,計數停止。
當int0引腳為高電平時且tr0置位,tr0=1;啟動定時器t0;
當int1引腳為高電平時且tr1置位,tr1=1;啟動定時器t1。
gate=0時,「或門」輸出恒為1,「與門」的輸出訊號k由trx決定(即此時k=trx),定時器不受intx輸入電平的影響,由trx直接控制定時器的啟動和停止。
三、tcon控制暫存器
設定好了定時器/計數器的工作方式後,它還不能進入工作狀態,必須通過設定控制暫存器tcon中的某些位來啟動它工。要使定時器/計數器停止執行,也必須通過設定tcon中的某些位來實現。當定時器/計數器計滿溢位,或有外部中斷請求時,tcon能標明溢位和中斷情況。
設定好了定時器計數器/的工作方式後,它還不能進入工作狀態,必須通過設定控制暫存器tcon中的某些位來啟動它工。要使定時器/計數器停止執行,也必須通過設定tcon中的某些位來實現。當定時器/計數器計滿溢位,或有外部中斷請求時,tcon能標明溢位和中斷情況。控制暫存器tcon每位的含義:
tf1:定時器t1溢位標誌位。當定時器t1溢位時,由硬體自動使tf1置1,並向cpu申請中斷。cpu響應中斷後,自動對tf1清零。tf1也可以用軟體清零。
tr1:定時器t 1執行控制位。可由軟體置1(或清零)來啟動(或關閉)定時器t1,使定時器t1開始計數。用指令setb tr1(或clr tr1)使tr1置1(或清零)。
tf0:定時器t0溢位標誌位。其功能與tf1相同。
tr0:定時器t0執行控制位。其功能與tr1相同。
ie1:外部中斷1請求標誌位。
it1:外部中斷1觸發方式控制位。
ie0:外部中斷0請求標誌位。
it0:外部中斷0觸發方式控制位。
ie1、it1、ie0、it0這4位將在第3節講述。
控制暫存器tcon的位位址是88h,可以對它進行位定址。
四、初值計算
機器週期:
時鐘週期(振盪週期) = 1秒/晶振頻率 (t = 1/f)
機器週期 = 12*振盪週期
機器週期 = 12秒/晶振頻率
如果系統晶振頻率為12m,那麼機器週期=1us
五、例子
定時函式
void delay1ms(unsigned int count)
{ unsigned int i;
tmod=0x01; //選用定時器0且工作在方式1
th0=0x3c; //設定初值0x3cb0
tl0=0xb0;
tr0=1; //開啟定時器
for(i=0;i定時1s:delay1ms(20);
搞懂51微控制器定時器 計數器
搞懂51定時器 計數器 步驟 1 第1步 先設定好定時器的時鐘源 如果需要的話 2 第2步 初始化時鐘相關暫存器 3 第3步 設定定時時間 計數個數 4 第4步 設定中斷處理程式 5 第5步 開啟定時器 5 執行時 定時器計數到後產生中斷,然後執行中斷isr 中斷服務處理,interrupt ser...
微控制器的定時器與計數器
從乙個生活中的例程看起 乙個水盆在水龍頭下,水龍沒關緊,水一滴滴地滴入盆中。水滴持續落下,盆的容量是有限的,過一段時間之後,水就會逐漸變滿。那麼微控制器中的計數器有多大的容量呢?8031微控制器中有兩個計數器,分別稱之為t0和t1,這兩個計數器分別是由兩個8位的ram單元組成的,即每個計數器都是16...
51微控制器的中斷和定時器 計數器
中斷使得高低速裝置可以協調工作 低速裝置完成工作後通過中斷的方式通知高速裝置一次處理一批資料 中斷還可以根據不同的優先順序實現巢狀執行。定時器本質上是個 16 位的自增計數器,當發生溢位時,如果開啟了溢位中斷,微控制器會自動向 cpu 報告這個溢位中斷,處理相應的中斷任務。tcon 的低 4 位用作...