微控制器定時器計數器的工作原理,及如何實現定時計數功能

時間 2021-08-30 10:27:48

1樓:墨汁諾

原理: 16位的定時器/計數器實質上就是乙個加1計數器,其控制電路受軟體控制、切換。 當定時器/計數器為定時工作方式時,計數器的加1訊號由振盪器的12分頻訊號產生,即每過乙個機器週期,計數器加1,直至計滿溢位為止。

顯然,定時器的定時時間與系統的振盪頻率有關。因乙個機器週期等於12個振盪週期,所以計數頻率fcount=1/12osc。

兩個位元組最大資料為65536(十進位制),或者0ffffh(十六進製制)

高位元組為th0=(65536-x)/256,就是除以256後的整數部分;

低位元組為tl0=(65536-x)%256,減去高位元組後餘下的部分;

定時/計數器

定時/計數器t0和t1分別是由兩個8位的專用暫存器組成,即定時/計數器t0由th0和tl0組成,t1由th1和tl1組成。此外,其內部還有2個8位的特殊功能暫存器tmod和tcon,tmod負責控制和確定t0和t1的功能和工作模式,tcon用來控制t0和t1啟動或停止計數,同時包含定時/計數器的狀態。

2樓:有嘢電子電工

動畫效仿定時器原理,生動有趣

89c51微控制器定時計數器的工作原理?

3樓:匿名使用者

微控制器c51計數器要求:編寫乙個計數器程式,將t0作為計數器來使用,對外部訊號計數,將所計數字顯示在數碼管上。 該部分的硬體電路如圖所示,u1的p0口和p2口的部份引腳構成了6位led數碼管驅動電路,數碼管採用共陽型,使用pnp型三極體作為片選端的驅動,所有三極體的發射極連在一起,接到正電源端,它們的基極則分別連到p2.

0…p2.5,當p2.0…p2.

5中某引腳輸是低電平時,三極體導通,給相應的數碼管供電,該位數碼管點亮哪些筆段,則取決於筆段引腳是高或低電平。圖中看出,所有6位數碼管的筆段連在一起,通過限流電阻後接到p0口,因此,哪些筆段亮就取決於p0口的8根線的狀態。   編寫程式時,首先根據硬體連線寫出led數碼管的字形碼、位驅動碼,然後編寫程式如下:

#include "reg51.h"#define uchar unsigned char#define uint unsigned int uchar code bittab=; //位驅動碼uchar code disptab=; //字形碼uchar dispbuf[6]; //顯示緩衝區 void timer1() interrupt 3void main()}   這個程式中用到了乙個新的知識點,即陣列,首先作乙個介紹。   陣列是c51的一種構造資料型別,陣列必須由具有相同資料型別的元素構成,這些資料的型別就是陣列的基本型別,如:

陣列中的所有元素都是整型,則該陣列稱為整型陣列,如所有元素都是字元型,則該陣列稱為字元型陣列。   陣列必須要先定義,後使用,這裡僅介紹一維陣列的定義,其方式為:   型別說明符 陣列名[整型表示式]   定義好陣列後,可以通過:

陣列名[整型表示式]來使用陣列元素。   在定義陣列時,可以對陣列進行初始化,即給其賦予初值,這可用以下的一些方法實現:   1.在定義陣列時對陣列的全部元素賦予初值:

  例:int a[5]=;  2.只對陣列的部分元素初始化;  例:int a[5]=;   上面定義的a陣列共有5個元素,但只對前兩個賦初值,因此a[0]和a[1]的值是1、2,而後面3個元素的值全是0。

  3.在定義陣列時對陣列元素的全部元素不賦初值,則陣列元素值均被初始化為0   4.可以在定義時不指明陣列元素的個數,而根據賦值部分由編譯器自動確定  例:uchar bittab=;則相當於定義了乙個bittab[6]這樣乙個陣列。   5.可以為陣列指定儲存空間,這個例子中,未指定空間時,將陣列定義在內部ram中,可以用code關鍵字將陣列元素定義在rom空間中。

  uchar code bittab=;   用這兩種定義分別編譯,可以看出使用了code關鍵字後系統占用的ram數減少了,這種方式用於程式設計中不需要改變內容的場合,如顯示數碼管的字形碼等是很合適的。   6.c語言並不對越界使用陣列進行檢測,例如上例中陣列的長度是6,其元素應該是從bittab[0]~bittab[5],但是如果你在程式中寫上bittab[6],編譯器並不會認為這有語法錯誤,也不會給出警告(其他語言如basci等則有嚴格的規定,這種情況將視為語法錯誤),因此,程式設計者必須自己小心確認這是否是你需要的結果。   程式分析:

程式中將定時器t1用作數碼管顯示,通過interrupt 3關鍵字定義函式timer1()為定時器1中斷服務程式,在這個中斷服務程式中,使用 th1=(65536-3000)/256;tl1=(65536-3000)%256;   來重置定時器初值,這其中3000即為定時週期,這樣的寫法可以直觀地看到定時週期數,是常用的一種寫法。其餘程式段分別完成取位碼以選擇數碼管、從顯示緩衝區獲得待顯示數值、根據該數值取段碼以點亮相應筆段等任務。其中使用了乙個計數器,該計數器的值從0~5對應第1到第6位的數碼管。

  主程式的第一部分是做一些初始化的操作,設定定時器工作模式、開啟定時器t1、開啟計數器t0、開啟t1中斷及總中斷,隨後進入主迴圈,主迴圈首先用unsigned int型變數tmp取出t0中的數值,這裡使用了「tmp=tl0|(th0<<8);」這樣的形式,這相當於tmp=th0*256+tl0,但比之於後一種形式,該方式可以得到更高的效,其後就是將tmp值不斷地除10取整,這樣將int型資料的各位分離並送入相應的顯示緩衝區

微控制器定時/計數器工作於定時和計數方式時有何異同點?

4樓:匿名使用者

定時工作模式和技術工作模式的工作原理相同,只是計數脈衝**有所不同:

處於計數工作模式時,加法計數器對晶元端子t0(p3.4)或t1(p3.5)上的輸入脈衝計數;

處於定時器工作模式時,加法計數器對內部機器週期脈衝計數。

5樓:匿名使用者

本質都是一樣的,都是計數.

定時器,當計數溢位後,會產生中斷.

51微控制器的定時器和計數器分別定時和計數的週期是多長時間,這個脈衝週期有規定嗎

應該每個定時器都是有timrh和timrl,最大計數時間就是timrh timrl 匯流排頻率 時鐘分頻後的頻率 徐志尚 與晶振 工作方式 初值有關 51微控制器,計數器和定時器具體這麼用?計數器記的是誰的脈衝數? 水依若雨 定時器和計數器雖然有定時和技術兩種工作模式,但其本質都是使用加法計數器對脈...

請問,51微控制器我同時把計數器1和定時器0開啟,定時器1計數到255的時候,把TR1 TR0 0都關閉

aimei126良 要看你的定時器的工作方式,初值是多少。好好看看書吧 簡單 計數器1和定時器0都用中斷,tmod 0x61 定時器0方式1,計數器1方式2th0 0xfc 1ms初值 tl0 0x18 1ms初值 th1 0x0 tl1 0x0 et0 1 tr1 1 et1 1 ea 1 whi...

51微控制器pc程式計數器,51微控制器計數器怎麼使用 ?

從51微控制器 ram 資料儲存器分布圖可知,從80h ffh位址單元 也是128個位元組 為特殊暫存器 sfr 單元,位址從00h 7fh單元 共128個位元組 為使用者資料ram,使用者資料單元,只指使用者在程式設計時可以定義的暫存器,一般用於計算 暫存或轉換作用,如沒有這些單元,那基本上微控制...