MCS-51單片機內部共有兩個16位可編程定時器,計數器,即TO、Tl。既有定時功能,又有計數的功能。每個定時器都是由兩個8位的特殊功能寄存器THi和TLi組成(i=0、1)。TMOD是TO和Tl的工作方式控制寄存器,TCON是TO和Tl的運行狀態控制寄存器。在實際應用時,應首先根據需要對這些寄存器進行初始化,即設置TO和Tl的工作方式並對TO和Tl定時器裝入初始值以得到精確的定時時間。TO和Tl的工作方式及運行狀態是由TMOD和TCON兩個特殊功能寄存器控制的,而TMOD和TCON是由用戶所編的程序控制的。
定時器的核心是一個加l計數器,加l計數器的脈衝有兩個來源:一個是系統時鐘振蕩器,另一個是外部脈衝,計數器對脈衝進行計數。當定時器/計數器用作定時器時是對機器周期進行計數,每經過一個機器周期計數器就加1,不斷自加直到數滿溢出,定時器的定時時間不僅與計數器初值有關,而且與系統的時鐘頻率有關。當定時器/計數器用作計數器時,計數器對來自輸入引腳TO和Tl的外部脈衝計數。
MCS-51每個定時器有4種工作方式:方式0是13位計數結構,計數器由TLi的8位與THi的低5位構成,定時範圍為(1—213)個機器周期;方式1是16位計數結構,定時範圍為(1~216)個機器周期;方式2是8位計數結構,計數器由TLi的8位組成,當定時器溢時.THi的值能自動裝入TLi中,並在此值基礎上自動計數;在方式3下,也是8位的計數器,並且TO的各控制位和引腳歸TLO使用,THO借用Tl的各控制位和引腳信號,Tl只能按不需要中斷的方式0、1、2工作。通常用做串行通信的波特率發生器。
在實際應用中,定時器可以採用查詢和中斷方式,用查詢的方式,程序執行的效率比較低,比較常用的是中斷方式,使用定時器/計數器延時從程序的執行效率和穩定性兩方面考慮都是最佳的方案。
下面我們看一個例子,需要延時為50ms,我們可以取定時器TO在工作方式1,計數初值為65536-50000=15536=3CBOH,用彙編編寫中斷服務程序如下:
從定時器溢出,發出中斷要求,系統接受該中斷要求,執行類似「LCALLXX」的動作,將正在執行的程序PC低位、高位壓人堆棧,然後加載中斷失量地址(0013H)到PC中,這一段過程要耗3個機器周期。在中斷服務程序中把初值重新裝入定時器並開啟計數器①~⑥共佔了10個機器周期,TLO初值應該賦值#OBDH。因為而此段位於0013H的程序超過8個字節會影響定時器1的中斷入口(OOIBH),所以,要麼0013H放一個中斷跳轉子程序,要麼壓縮語句。我們選用後者。因為在中斷子程序中沒有用累加器A,也沒有運算操作,所以程序①、②、⑦、⑧可以省去。將程序③、⑥省去使計數器0-直打開,從⑤賦值後開始計算。程序修改為:
推薦閱讀
STC15單片機實驗名稱:使用NTC電阻測量溫度實驗內容: 使用NTC電阻測量溫度並顯示在數碼管上 讀取DS18B20模塊測量溫度作為參考實驗器材: STC15W408AS_DIP16 x1 DS18B20 x1 TM1637數碼管 x1
發表於 2020-12-17
/*一款電子鐘程序,此電子鐘是四位電子鐘數碼管組成的,功能分別有走時、響鬧、走時間調整、鬧鐘時間調整等功能!調整部分分別由三個按鍵實現,一個功能鍵,一個+(加)鍵,另一個為-(減)鍵,其它功能鍵是復用功能!*/硬鍵介紹:數碼管個位.十位.百位.千位.小數點分別接P0.0 P0.1 P0.2 P0.3 P0.4。蜂鳴器接P3.5腳,功能按鍵接P3.2 加按鍵接P3.3 減按鍵接P3.4以下是兩張圖片!!!#include <reg52.h>//頭文件#define uchar unsigned char//宏定義#define uint unsigned int//宏定義uchar shi,fen,nshi,nfen,ma
發表於 2020-12-17
51單片機做的溫度顯示,溫度顯示在LCD1602液晶屏上。然後按鍵可以調整溫度閾值,溫度高於或低於所設溫度,蜂鳴器就會響……單片機源程序如下:/*************************************************************************************** 基於單片機的實時溫度報警系統設計  
發表於 2020-12-17
程序代碼 仿真圖單片機源程序如下:#include<reg52.h>#include<intrins.h>/*********************宏定義************************/#define uchar unsigned char#define uint unsigned int/************位定義*****************************/sbit Trig=P3^7; //超聲波模塊觸發位sbit LEDRED=P1^0;sbit LEDGREEN=P1^2;sbit speaker=P1^7;sbit person=P1^6;sbit
發表於 2020-12-09
電子秤是基於STC89C51單片機,以及HX711稱重模塊,利用單片機控制A/D轉換,屏幕數據顯示,鍵盤實時輸入,設計方案能夠易於各種場合使用。單片機源程序如下:#include <reg52.h>#include <intrins.h>#include <string.h>#include "main.h"#include "HX711.h"#include "eeprom52.h"#define uchar unsigned char#define uint unsigned intunsigned long HX711
發表於 2020-12-09