1. 程式人生 > >微控制器的定時器中斷以及使用的一般步驟(51為例)

微控制器的定時器中斷以及使用的一般步驟(51為例)

51微控制器共有兩個16位可程式設計的定時器/計數器,即定時器T0和定時器T1。它們既有定時功能又有計數功能,通過設定一些相關的特殊功能暫存器就可以選擇啟用哪一個功能。定時器系統是微控制器內部一個獨立硬體部分,與CPU和晶振之間通過內部某些控制線連線並相互作用,CPU一旦啟動定時功能,定時器便會在晶振的作用下自動計時,當定時器計數器積滿之後就會產生中斷,通知CPU接下來做什麼。

定時器或計數器實質是加一計數器(16位)(其輸入脈衝有兩個來源,一是由系統時鐘振盪器輸出脈衝經過十二分頻後送來;另外是T0或T1引腳輸入的外部脈衝源,每來一個脈衝計數器加1,當加到計數器全為1時,在輸入一個脈衝就可使計數器回零,計數器的溢位是的TCON暫存器中TF0或TF1置1,向CPU發出中斷請求,如果定時或計數器工作於定時模式,則表示定時時間到了,如果是計數則表示計數值已滿)由高八位和低八位兩個暫存器組成。
TMOD:定時器/計數器模式控制暫存器(TIMER/COUNTER MODE CONTROL REGISTER) ,確定工作方式和功能
TCON:控制暫存器,控制T0,T1的啟動和停止及設定溢位標誌。

定時器/計數器模式控制暫存器TMOD是一個逐位定義的8位暫存器,但只能使用位元組定址,其位元組地址為89H。其格式為:其中低四位定義定時器/計數器C/T0,高四位定義定時器/計數器C/T1,各位的說明:
GATE——門控制。
GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1。 當INT0引腳為高電平時TR0置位,啟動定時器T0; 當INT1引腳為高電平時TR1置位,啟動定時器T1。 GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。
C/T——功能選擇位
C/T=0時為定時功能,C/T=1時為計數功能。 置位時選擇計數功能,清零時選擇定時功能。
M0、M1——方式選擇功能
由於有2位,因此有4種工作方式:
M1M0 工作方式計數器模式 TMOD(設定定時器模式)
0 0 方式0 13位計數器 TMOD=0x00
0 1 方式1 16位計數器 TMOD=0x01
1 0 方式2 自動重灌8位計數器 TMOD=0x02
1 1 方式3 T0分為2個8位獨立計數器,T1為無中斷重灌8位計數器 TMOD=0x03 微控制器定時器0設定為工作方式1為TMOD=0x01

TCON: 定時器/計數器控制暫存器(TIMER/COUNTER CONTROL REGISTER)
TMOD分成2段,TCON控制更加精細,分成四段,在本文中只要用到高四段。 TF0(TF1)——計數溢位標誌位,當計數器計數溢位時,該位置1。
TR0(TR1)——定時器執行控制位 當TR0(TR1)=0 停止定時器/計數器工作 當TR0(TR1)=1 啟動定時器/計數器工作
IE0(IE1)——外中斷請求標誌位

IT0(IT1)——外中斷請求訊號方式控制位 當IT0(IT1)=1 脈衝方式(後沿負跳有效)
當IT0(IT1)=0 電平方式(低電平有效)此位由軟體置1或清0。
TF0(TF1)——計數溢位標誌位
當計數器產生計數溢位時,此位由硬體置1。當轉向中斷服務時,再有硬體自動清0。計數溢位的標誌位的使用有兩種情況:採用中斷方式時,作中斷請求標誌位來使用;採用查詢方式時,作查詢狀態位來使用。注意記憶方法,理解單詞原形,就絕對不會把TF和TR搞混。TF的F也就是溢位Over Flow的F。TR的R就是執行Run。預設是0不執行,當然要置1才執行

在寫微控制器定時器程式時候,在程式開始出需要對定時器及中斷暫存器做初始化設定,通常初始化過程如下:

對TMOD賦值,以確定T0和T1的工作方式;
計算初值,並將初值寫入TH0,TL0或者TH1,TL1;
中斷方式時,則對IE賦值,開放中斷
使TR0或TR1置位,啟動定時器/計數器定時或者計數。

//實現led燈一秒亮滅閃爍
void main()
{
    TMOD=0x01;//設定定時器0為工作方式1(M1 M0為01)
    TH0=(65536-45872)/256;//裝初值11.0582晶振定時50ms數為45872
    TL0=(65536-45872)%256;
    EA=1;//開總中斷
    ET0=1;//開定時器0中斷
    TR0=1;//啟動定時器0
    while(1);//程式停止在這裡等待中斷髮生
}

void T0_time() interrupt 1
{
    TMOD=0x01;//重灌初值
    TH0=(65536-45872)/256;
    num++;//num每加一次判斷一次是否到20次
    if(num==20)//如果到了20次,說明1秒時間到
        {
            num=0;//num清0重新計數
            led=~led1;
        }
}

相關推薦

微控制器定時中斷以及使用的一般步驟51

51微控制器共有兩個16位可程式設計的定時器/計數器,即定時器T0和定時器T1。它們既有定時功能又有計數功能,通過設定一些相關的特殊功能暫存器就可以選擇啟用哪一個功能。定時器系統是微控制器內部一個獨立硬體部分,與CPU和晶振之間通過內部某些控制線連線並相互作用,

51微控制器定時中斷程式

程式執行開始,A燈先亮5秒,然後滅了到B燈亮5秒,B再滅再到C燈亮5秒,C滅,程式結束,不再執行。這程式該怎麼寫?用定時器精確定時……晶振11.092MHZ。 #include "REG52.H" /* * */ sbit LED_A = P1^0; sbit

51微控制器定時中斷控制燈1S亮的程式

#include   <AT89X51.H>unsigned char i=0,j=0; void main(){ TMOD=0X01; TH0=0X4c; TL0=0X00; TR0=1;ET0=1;EA=1;P0_3=1;  while(1)   {};} t

51微控制器定時的原理與使用

承接上一節51微控制器定時器的原理與使用,這節我們繼續講述怎麼用定時器做一個電子鐘,PWM脈衝和測電阻。先從實驗三講起吧! 實驗三、定時器測電阻 測量如下圖Rx的電阻並顯示在數碼管上。 測量思路為: 1、電容C1放電,P2.5與P2.6設定為輸入模式,P2.7設定為推輓輸

除錯經驗——將VBA程式碼貼上到部落格編輯時中文字元丟失顯示?號的解決方法

發現從VBE複製貼上程式碼到CSDN部落格編輯器時,中文註釋將丟失(顯示為問號?),如下所示:Sub ???????() Dim cm As New CDO.Message 'Set cm = CreateObject("CDO.Message") '???????? '??

多數據源動態關聯報表的制作birt

處理 center 關閉 主表 等價 兩個 數據 fonts img 使用Jasper或BIRT等報表工具時,常會碰到一些很規的統計,用報表工具本身或SQL都難以處理,比方與主表相關的子表分布在多個數據庫中,報表要展現這些數據源動態關聯的結果。集算器具

linux mount掛載設備u盤,光盤,iso等 使用說明Centos

centos mount 掛載方法集錦 linux mount 對於新手學習,mount 命令,一定會有很多疑問。其實我想疑問來源更多的是對linux系統本身特殊性了解問題。 linux是基於文件系統,所有的設備都會對應於:/dev/下面的設備。如:[chengmo@centos5 dev]$ l

對於單個模型長方體進行面投影時的消隱

return .com www ++ 類的繼承 投影 逆時針 所有 順序 作者:feiquan 出處:http://www.cnblogs.com/feiquan/ 版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給

【總結】遊戲框架與架構設計Unity

單機 業務 github 事件 概念 lec 集合 架構模式 wid 使用框架開發遊戲 優點:耦合性低,重用性高,部署快,可維護性高,方便管理。提高開發效率,降低開發難度 缺點:增加了系統結構和實現的復雜性,需要額外花費精力維護,不適合小型程序,易影響運行效率 常見

KEGG下載某物種最新的版本信息斑馬魚

ref nbsp wid 結構 egg 解析 image 版本 ima 步驟一:打開鏈接並選擇物種 http://www.genome.jp/kegg-bin/get_htext?hsa00001+3101 步驟二:對文件進行解析 步驟三:統計信息 一級結構(6大類):

oracle資料庫的徹底解除安裝11g

1. 關閉oracle所有的服務。可以在windows的服務管理器中關閉;2. 開啟登錄檔:regedit 開啟路徑: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 刪除該路徑下的所有以oracle開始的服務名稱,這個鍵是標

LINUX安裝軟體FFmpeg

https://trac.ffmpeg.org/wiki/CompilationGuide/Generic This page provides some generic instructions for compiling a project starting from the source

Java-Spring框架實現簡單的檔案上傳圖片

一、開發環境搭建 下載相應的jar包: 1.commons-fileupload    2.commons-io web.xml 檔案配置: <servlet>       &

VLC 模組構造巨集的展開access_output_http

巨集的定義: vlc_module_begin ()     set_description( N_("HTTP stream output") )     set_capability( "sout access", 0 )    

Tensorflow建立資料集mnist

網上的mnist的demo大部分都是按照實戰google那本來的,但是那個在資料集的處理上用的是TensorFlow的官方api,我們在正常做標籤的時候並不一定要那樣做,本文講解了兩種標籤方式區別於實戰google的demo。 folder方式: ROOT_FOLDER |--------

簡單明瞭的nftables防火牆配置arch

Arch Linux的核心已經包含了netfilter包過濾框架。 在/etc/nftables.conf預設包含著一個簡單的防火牆設定,但過於簡單, 現在重新編寫nft的設定(這裡列舉的規則適合個人電腦,伺服器或是其它的機器可以參考其它資料配置更加適合的規則)。   # nft list r

簡單明了的nftables防火墻配置arch

設置 包含 hab 資料 監聽 php style lis 一個 Arch Linux的內核已經包含了netfilter包過濾框架。 在/etc/nftables.conf默認包含著一個簡單的防火墻設置,但過於簡單, 現在重新編寫nft的設置(這裏列舉的規則適合個人電腦,服

RHCS實現高可用中的共享儲存iscisimysql

1、實驗環境 server2 172.25.66.2(配置Nginx、ricci、luci) server3 172.25.66.3(Apache) server4 172.25.66.4 (Apache) server5 172.25.66.5(配置Nginx

git中的ssh和https方式的使用gitee

      在使用git管理程式碼,或者使用github,國內的碼雲(gitee)的時候,有兩種方式可以使用,分別是https和ssh,以下均使用gitee為例。 ssh方式    配置ssh,如果不配置ssh的話,clone專案的時候會