Ⅰ 單片機中斷有什麼作用
51單片機中的外部中斷有什麼作用?
可以打個比方,每天上班你都隨時需要知道你同事的工作進度情況,你是希望你不停地打個電話去問「你做完了嗎」,還是希望他做完了主動打個電話給你講「我做完了,我們談談吧」。這就是中斷的意義,在不需要的時候不影響處理 器做其它的事情,提高效率,增強程序的實時性。
51單片機中什麼是中斷?其作用是什麼?怎麼用?用自己的理解回答把
中斷就是中途打斷。
通俗解釋:
你在看影碟,有人敲門(中斷源),中斷了你看影碟,觀看暫停。處理敲門的事宜(中斷目的),處理完成(中斷結束),繼續看影碟(繼續執行原來的任務)。
再比如:你在看電視,水開了(中斷源),把水灌到暖瓶里(中斷目的),再燒上一壺(繼續開中斷),回去看電視。水又開了。。。。。。。。(循環中斷)
以51單片機16位定時計數器0(T0)來講,
計數是T1是一個能盛65536(十六位時)滴水的水盆,在水龍頭下水一滴滴地滴入盆中。如果盆是空的那水在滴完65536滴水時盆子的水就滿了再滴一滴的時候就溢出了。這時就會產生中斷。
如果盆裡面已經裝入65500滴水(即初裝值),那麼只需要36滴水後就溢出了。
每一個水滴計數時即一個脈沖(高低電平變換一次)。
定時時每一個水滴即一個機器周期,水滴的速度即機器周期,等於12個振盪周期(晶振的振盪頻率除以12),直接影響到溢出的時間。
51單片機中斷系統的作用?
如果沒有中斷系統,就只能由 CPU 按照程序編寫的先後次序,對各個外設,進行巡迴檢查與處理。
這就是查詢式工作方式。
貌似公平,實際效率卻不高。
如果有了中斷系統,整個計算機系統,就具有了應付突發事件的處理能力。
這就是中斷式工作方式。
單片機的中斷標志位是有什麼作用?
四個問號分為四點一一解答:
1、一般來說單片機的中斷發生有兩個條件,一是中斷標志位置位,二是中斷允許,如果這兩個條件都滿足則進入中斷,因為正常情況下中斷一直是允許的,那麼只能通過標志位來區分是否有中斷掛起,
2、如果進入中斷不清除標志位,那麼這一中斷服務程序結束後由於標志位還是置位的並且中斷是允許的,那麼還會再次進入該中斷,就會發生一直在執行中斷程序的情況
3、周期性中斷是由定時器輔助完成的,只要定時時間到,硬體就會自動置位標志位,這時中斷發生,定時器還在運行,與中斷處理是並行的沒有沖突,因此周期性的中斷不是從中斷標志位清零開始的。
4、如果中斷程序沒有執行完並且一下個中斷又來了,那麼硬體還是會自動置位標志位的,如果在這之前已經清零標志位那麼中斷結束後會再進入一次該中斷,如果這時還沒有清除中斷標志位,則第二個1毫秒中斷無效。
單片機全局中斷有什麼用
本人覺得是因為現在有中斷正在執行,為了不讓高優先順序的中斷使現在的中斷發生中斷,而採取的保護程序
51單片機中斷有什麼作用
打個比方,你在房間看書,看書這個事是持久性的,拖延幾分鍾也沒事。突然淘寶買的衣服送到了,鏢局的人敲門,你用書簽做好標記去開門。拿回衣服,回去繼續看書。這個事的發生過程很正常。
同樣的,看書就像單片機的一般事務處理,收快遞就像中斷。主要是應對緊急的,有時效要求的事件的發生。書簽就是進出中斷相關的現場保護。
具體點,主程序中有LED不停的閃爍,由於外部按鍵的觸發,告訴你該發個位元組出去。這時,可以產生個按鍵相關的中斷(引腳電平中斷),去中斷發個位元組,然後趕緊回來繼續閃爍LED。
重要總結:就這么回事!
單片機程序什麼作用啊 尤其是X++作用 定時器中斷作用是什麼呢?
x應該是一個全局變數,每次中斷函數都會將x加1,程序的其餘函數會掃描x的值來做出相應的動作,
interrupt 1 是計時器中斷,這里應該是用一個全局變數計時,main函數或者其他中斷函數檢查x的數值做到定時的響應,如閃燈或者屏幕刷新又或者PWM輸出 ,
定時器中斷的作用是在CPU運行期間 ,定時器在不幹擾CPU正常運行的情況下不停地將自身寄存器(從你的函數初始化看是TH0和TL0並起來的一個16位值)減一,當寄存器值為0時候發起中斷(從1減去1開始到寄存器值為0之間發起的),這樣可以做到CPU不用一直等待一個時間的到來而空轉,或者運行一個程序的過程中計算運行的時間並定時插入一個額外的工作,
C51的計時器有4個工作模式(對於At89S51或者STC89C52及以上型號來說)不同的模式有不同的功能,這個網路文庫能看到的,另外TMOD寄存器和其他寄存器還設定了計時器是外部的跳變信號或者單片機內部時鍾來引起計時器的一次減1動作(計時動作)。
另外計時器可以設置為外部輸入模式,這樣就能作為計數器,比如說一個外接的按鍵,按10次後才觸發中斷,如果用外中斷處理,那麼整個主函數會被中斷九次做無效中斷才能等到第十次按鍵執行需要的中斷處理動作。
這一點在操作系統中也用到了,比如我們的PC的多任務操作系統,就是用時鍾中斷來把一個程序中斷執行另一個程序(比如操作系統和應用程序間)實現了時間片輪轉,不過PC的操作系統把所有的中斷處理函數都包含進去了,所以我們基本不用去管硬體中斷就能編程。 反觀單片機,因為資源有限,想要做到多任務(主函數與各個中斷函數及其子函數)必須用定時器(也可以通過外部信號做計數器)以及外中斷作為契機來切換多個任務。
如果需要解答整個中斷函數的功能,最好把全部的程序都帖出來,因為x這個全局變數的作用沒有在中斷函數中體現
有問題可以繼續跟我交流,我現在是大學本科生,學過C51單片機,正在學STM32
單片機中斷寄存器的作用是什麼?
中斷寄存器就是用於存貯中斷狀態的 包含是否啟用中斷 或者是 是否發生中斷
#include void InitUART(void){ TMOD = 0x20; 計時器類型 SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; 中斷寄存器的操作 ES = 1; TR1 = 1; 計時器1的中斷}void SendOneByte(unsigned char c){ SBUF = c; while(!TI); TI = 0;}void main(void){ InitUART();}void UARTInterrupt(void) interrupt 4{ if(RI) { RI = 0; add your code here! } else TI = 0;}
單片機中斷 的interrupt 0 using 1中的using有什麼作用
看到樓上二位說的有誤,特糾正。
void INT0()interrupt 0 using 1
{....
棱....
}
interrupt 0 指明是外部中斷0;
interrupt 1 指明是定時器中斷0;
interrupt 2 指明是外部中斷1;
interrupt 3 指明是定時器中斷1;
interrupt 4 指明是串列口中斷;
using 0 是第0組寄存器;
using 1 是第1組寄存器;
using 2 是第2組寄存器;
using 3 是第3組寄存器;
51單片機內的寄存器是R0--R7(不是R0-R3)
R0-R7在數據存儲器里的實際地址是由特殊功能寄存器PSW里的RS1、RS0位決定的。
using 0時設置 RS1=0,RS0 =0,用第0組寄存器,R0--R7的在數據存儲區里的實際地址是00H-07H。R0(00H)....R7(07H)
using 1時設置 RS1=0,RS0 =1,用第1組寄存器,R0--R7的在數據存儲區里的實際地址是00H-07H。R0(08H)....R7(0FH)
using 2時設置 RS1=1,RS0 =0,用第2組寄存器,R0--R7的在數據存儲區里的實際地址是08H-0FH。R0(10H)....R7(17H)
using 3時設置 RS1=1,RS0 =1,用第3組寄存器,R0--R7的在數據存儲區里的實際地址是00H-07H。R0(18H)....R7(1FH)
單片機為什麼使用中斷
中斷保護現場,是為了你中斷子程序執行完以後能夠返回到你程序中中斷點,即產生中斷的地方,使程序能夠繼續向下執行!!!!
如過你說的不用保護現場的話,那麼程序執行完以後就不能夠回到現場,那麼你的程序將不知道要跳轉到那裡去了,也就是飛鳥,呵呵……
你說的中斷嵌套,也是一樣的,兩者都要保護現場,不然你也不能夠回到現場,程序也會飛的!!!!
而我們保護現場的數據都是放在堆棧中的,因此,你的中斷次數也不能夠超過堆棧的級數,那樣數據也會丟失!!!!
說白了,中斷它不同於子程序,子程序是固定好了的,返回的位置也固定了;而中斷我們不能夠預知它在那裡發生中斷,因此要保護現場,使中斷子程序執行完後返回到中斷的地方!!!
呵呵……說的太多了!!!
我知道你說的意思了,但是你要知道,中斷現場保護是在中斷子程序中進行的,因此當你高一級的中斷發生的時候(他們不可能共用一個中斷子程序,如果是同一中斷,那也不可能,因為51中斷中你進入中斷子程序後要將禁止該中斷再次中斷,好象似的,嘿嘿……你可以試試),在高一級的中斷子程序中也有現場保護,你的問題就是沒有把現場保護放對地方!!!!!
============================================================
它們是把現場保護在同一堆棧中,我跟你打個比方吧,假如說堆棧的地址是80H,低一級的中斷要保護的是1,2,3;高一級要保護的現場是4,5,6,那麼在低一級的中斷發生的時候,現場保護1,2,3將壓如堆棧,(順序書上應該有,這里是個比喻),那我先壓入1,堆棧閥址加1,壓入2,堆棧地址再加1,如果這個時候高一級的中斷發生,那麼現在就應該跳到高一級中斷的子程序,堆棧地址就是82H了,在將4,5,6分別壓入堆棧,這樣堆棧的地址就是85H,當高一級的中斷子程序結束後,返回現場,堆棧的數據要從85H開始彈出,這樣現場返回的就是6,5,4,這個時候程序就會跳到中斷之前的地方,即底一級的中斷那裡,將要繼續將3保護到堆棧中,在執行低一級的中斷子程序.(其中,你要在中斷保護現場完了後將中斷標志清0啊,不然它始終會中斷的,不可能去執行程序去了...)
Ⅱ MCS-51系列單片機中的定時器有哪幾個專用寄存器它們各自的作用是什麼
要講定時離不開中斷,兩者結合使用的。定時計數器主要用到TMOD工作模式寄存器,TCON定時器的控制寄存器,EA中斷允許控制寄存器,IP中斷優先順序寄存器 定時器控制寄存器TCON (88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCONTF0/TF1:定時器0/定時器1溢出中斷申請標志位: =0:定時器未溢出; =1:定時器溢出申請中斷,進中斷後自動清零。TR0/TR1:定時器運行啟停控制位: =0:定時器停止運行; =1:定時器啟動運行。TCON:Timer控制寄存器,是管理定時器工作的SFR(其中低4位管外部中斷)定時器控制寄存器TCON (88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCONIE0/IE1:外部中斷申請標志位: =0:沒有外部中斷申請; =1:有外部中斷申請。IT0/IT1:外部中斷請求的觸發方式選擇位: =0:在INT0/INT1端申請中斷的信號低電平觸發; =1:在INT0/INT1端申請中斷的信號負跳變觸發.TCON:Timer控制寄存器,低4位管理外部中斷�8�4在CPU已經開放了外部中斷允許的前提下:�8�4在INT0/INT1引腳輸入一個負脈沖或低電平, �8�4TCON寄存器中的IE0/IE1標志位自動變「1」, 檢測到IE0/IE1變「1」後,將產生指令:執行中斷服務程序,�8�4並將IE0/IE1標志位自動清「0」,以備下次申請。外部中斷(INT0,INT1)申請過程 單片機的定時/計數器定時器計數器的概念一、計數的概念
選票:畫「正」。這就是計數,生活中計數的例子處處可見。比如一個水盆在水龍頭下,水龍沒關緊,水一滴滴地滴入盆中。水滴持續落下,盆的容量是有限的,過一段時間之後,水就會逐漸變滿。51單片機中有兩個計數器,分別稱之為T0和T1,這兩個計數器分別是由兩個8位的RAM單元組成的,即每個計數器都是16位的計數器,最大的計數量是65536。
二、定時
計數器是如何作為定時器來用的呢?比如一個鬧鍾,將它定時在1個小時後響鬧,我們也能說成是秒針走了(3600)次,所以時間就轉化為秒針走的次數的,也就是計數的次數了,可見,計數的次數和時間之間十分相關。那麼它們的關系是什麼呢?也就是秒針每一次走動的時間要正好是1秒。
只要計數脈沖的間隔相等,則計數值就代表了時間的流逝。由此,單片機中的定時器和計數器是同一個東西,只不過計數器是記錄的外部的觸發脈沖,而定時器則是由單片機供給一個非常穩定的計數源。供給定時器的是計數源是機器周期也就是由單片機的晶體震盪器經過12分頻後獲得的一個脈沖源(機器周期)。晶振的頻率是很准確的,所以這個計數脈沖的時間間隔也很准。一個12M的晶振,它供給給計數器的脈沖時間間隔是1微秒。計數脈沖的間隔與晶振有關,12M的晶振,計數脈沖的間隔是1微秒。這是邏輯圖,可以看到T1是一個單刀雙擲開關,說明定一個定時/計數器同一時刻要麼作定時用,要麼作計數用,不能同時用;接通T1引腳時作為外部計數用。(T0的引腳是P3.4,T1的引腳是P3.5)。
比如滴水的例子,當水持續落下,盆中的水逐漸變滿,最終會有一滴水使得盆中的水全滿了。這個時候如果再有一滴水落下,水會漫出來,用術語來講就是「溢出」,而每一滴水落下,用術語來說就是發出一個計數脈沖。 水溢出是流到地上,而計數器溢出後就會引發一個定時中斷事件,就象定時的時間一到,鬧鍾就會響一樣。 現在另一個問題是:要有多少個計數脈沖才會產生事件。 剛才已研究過,計數器的容量是16位,也就是最大的計數值到65536,因此計數計到65536就會產生溢出。這個沒有問題,問題是我們現實生活中,經常會有少於65536個計數值的要求,如制葯廠包裝線上,一瓶葯片為100粒,500瓶為一箱 那麼怎麼樣來滿足這個要求呢?舉例 如果是一個空的水盆要1萬滴水滴進去才會滿,我在開始滴水之前就先放入一勺水,還需要10000滴嗎?對了,這時我們就採用預置數的辦法,我要計 100,那我就先放進65436,再來100個脈沖,不就到了65536了嗎。定時也是如此,每個脈沖是1微秒,則計滿65536個脈沖需時65.536 毫秒,但現在我只要10毫秒,怎麼辦?10個毫秒為10000個微秒,所以,只要在計數器裡面放進55536就可以了。溢出的概念和設置任意定時計數的方法3個16位定時器/計數器 ——(51系列有2個16位Timer少一個T2)定時器:對片內機器時鍾(周期方波)進行計數計數器:對Tx引腳輸入的負脈沖進行計數與Timer工作有關的特殊功能寄存器: TCON 和 TMODAT89S52單片機的定時器/計數器單片機定時/計數器內部結構單片機定時/計數器內部結構圖定時器的2個特殊功能寄存器(TCON)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0定時器控制寄存器TCON (88H)TF0/TF1: 定時器0/1計數溢出標志位。 =1 計數溢出; =0 計數未滿 TF0/TF1標志位可用於申請中斷或供CPU查詢。 在進入中斷服務程序時會自動清零;但在 查詢方式時必須軟體清零。TR0/TR1: 定時器0/1運行控制位。 =1 啟動計數; =0 停止計數TR0/TR1:定時器0/1運行控制位: TR0/TR1 =0 時,Timer0/1停止計數 TR0/TR1 =1 時,Timer0/1啟動計數定時器T0/T1 中斷申請過程�8�4 在已經開放T0/T1中斷允許且已被啟動的前提下:�8�4 T0/T1加滿溢出時 TF0/TF1標志位自動置「1」 �8�4 檢測到TCON中TF0/TF1變「1」後,將產生指令: 執行中斷服務程序,�8�4 TF0/TF1標志位會自動清「0」,以備下次中斷申請。 定時/計數器可按片內機器周期定時,也可對由T0/T1引腳輸入一個負脈沖進行加法計數TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON (88H)GATE C / T M1 M0 GATE C / T M1 M0定時器方式寄存器TMOD (89H)T1T0M1,M0:工作方式定義位 ( 定義4 種方式 ):C/T :計數器/定時器選擇位 = 1 外部事件計數器。對T0/T1引腳的負脈沖計數; = 0 片內時鍾定時器。對機器周期脈沖計數定時0 0:13位 定時器——幾乎不用0 1:16位 定時器——經常用到1 0:可自動重裝的 8位 定時器——經常用到1 1:T0 分為2個8位 Timer;T1 此時不工作 ——幾乎不用GATE C / T M1 M0 GATE C / T M1 M0T1T0GATE門控位: Timer可由軟體與硬體兩者控制 �8�4 GATE = 0 ——普通用法 Timer的啟/停由軟體對TRx位寫「1」/「0」控制定時器方式寄存器TMOD(89H)�8�4 GATE = 1 ——門控用法 Timer的啟/停由軟體對TR0/TR1位寫「1」/「0」 和在INT0/INT1引腳上出現的信號的高/低共同控制GATE=0時,定時/計數是否工作,只取決於TR0是否為1。GATE=1,只有TR0為1,且INT0管腳也是高電平,定時/計數才工作。 從電路上看到GATE是一個非門,它與INTx組成一個或門,這個或門與TR0又組成一個與門。當GATE=0時,則~GATE=1(非門),此時無論INT0為高或低,它們相或之後必然為1,此時只要TR0=1,則工作,TR0=0則不工作,不受INT0的影響。當GATE=1時,~GATE=0,則INT0=1時,它們相或為1,此時定時器是否工作受TR0影響;若INT0=0,則無論TR0為什麼,定時器都不能工作,即當GATE=0時,定時器受INT0和TR0共同的作用。 所以,GATE位的狀態決定定時器運行控製取決於TR0的一個條件還是TR0和INT0引腳這兩個條件。當GATE=1時,由於GATE信號封鎖了與門,使引腳 INT0信號無效。而這時候如果TR0=1,則接通模擬開關,使計數器進行加法計數,即定時/計數工作。而TR0=0,則斷開模擬開關,停止計數,定時 /計數不能工作。 當GATE=0時,與門的輸出端由TR0和INT0電平的狀態確定,此時如果TR0=1,INT0=1與門輸出為1,允許定時/計數器計數,在這 種情況下,運行控制由TR0和INT0兩個條件共同控制,TR0是確定定時/計數器的運行控制位,由軟體置位或清「0」。振盪器�8�112TLx THx (8位) (8位)TFx申請中斷Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制 開關或門與門非門定時器結構與工作方式工作方式1:——16位的定時/計數器在工作方式1下,計數器的計數值范圍是: 1~65536(216)
當為定時工作方式1時,定時時間的計算公式為:
(216—計數初值)╳晶振周期╳12或 (216—計數初值)╳機器周期
其時間單位與晶振周期或機器周期相同。
�8�4 THx/TLx賦初值:THx賦高8位,TLx賦低8位工作方式1 的編程要點: �8�4 TMOD選方式: 寫「M1,M0」=01 選方式1�8�4 若不用門控位,直接用軟體寫TRx控制啟/停�8�4 若使用門控位,先置位TRx,然後由INTx端 的高/低電平來控制其啟/停�8�4 若要允許中斷,還須先置位ETx、EA等中斷 允許控制位,並編寫中斷服務程序�8�4 若不用中斷,可查詢「計數溢出標志TFx」 的方式工作,但溢出標志TFx須軟體清0工作方式2:——8 位自動重裝的定時/計數器振盪器�8�112TLx (8位)TFx申請中斷Tx端TRx位GATE位INTx端≥1&C/T=0C/T=1控制 =1開關接通或門與門THx (8位)溢出位門開�7�4 THx/TLx賦相同初值 在TLx計數達到0FFH 再加「1」時,TL0 將溢出,進位位直接進入「TFx」去申請 中斷,同時打開三態門,使THx中的值 自動重裝(Copy)進TLx工作方式 2 的編程:�7�4 TMOD寄存器選方式: 寫「M1,M0」 = 10選中方式2�7�4 其他用法與各種方式1完全相同T0: 組織成TL0和TH0兩個8位定時/計數器Timer工作方式 3 ——幾乎無用T1: 不再是定時/計數器了 T1 的TR1和TF1出借給TH0當控制位使用, 剩下的TH1/TL1寄存器只能當作普通寄存 器用。振盪器�8�112TL0 (8位)TF0申請中斷T0端TR0位GATE位INT0端≥1&C/T=0C/T=1控制 =1開關接通或門與門TH0 (8位)TF1申請中斷TR1位控制 =1Timer工作方式 3 結構:�7�4T0成為雙 8位Timer �7�4T1不再有Timer功能 �7�4TF1,TR1出借給TH0 定時器小結: (2個16位加法計數器)�7�4運行/停止由TRx位控制,(當GATE=1時: 由TRx位和Tx引腳上的信號共同控制)�7�4工作方式由TMOD決定; 計數/定時由C/T位決定 工作方式0(13位) 永遠不用 工作方式3(T0拆為雙8位) 幾乎無用 工作方式1(16位) 經常用到 工作方式2(8位自動重裝) 經常用到�7�4從初值按機器周期或外部脈沖遞加,溢出位 TFx申請中斷;中斷允許由ETx位和EA位控制,定時器/計數器的定時/計數范圍 工作方式0:13位定時/計數方式,因此,最多能計到2的13次方,也就是8192次。 工作方式1:16位定時/計數方式,因此,最多能計到2的16次方,也就是65536次。 工作方式2和工作方式3,都是8位的定時/計數方式,因此,最多能計到2的8次方,也說是256次。 預置值計算:用最大計數量減去需要的計數次數即可
Ⅲ 單片機定時器/計數器主要有什麼作用
作用:可以計時,計數,可以產生時間中斷,是系統中比較實用的工具。
大部分單片機提供2~3個定時/計數器,少數提供1個或4個定時器。有些定時/計數器還具有輸入捕獲、輸出比較和PWM(脈沖寬度調制)功能,如AVR單片機。
有的單片機還有專門的PCA(可編程計數器陣列)模塊和CCP(輸入捕獲輸出比較PWM)模塊,如PIC和Philips的部分中高檔單片機。利用這些模塊不僅可以簡化軟體設計,而且能減少佔用CPU的資源。現在不少單片機還提供了看門狗定時器(WDT),當單片機「死機」後可以自動復位。
定時/計數器
定時/計數器T0和T1分別是由兩個8位的專用寄存器組成,即定時/計數器T0由TH0和TL0組成,T1由TH1和TL1組成。此外,其內部還有2個8位的特殊功能寄存器TMOD和TCON,TMOD負責控制和確定T0和T1的功能和工作模式,TCON用來控制T0和T1啟動或停止計數,同時包含定時/計數器的狀態。
以上內容參考:網路-定時器中斷
Ⅳ 單片機定時中斷實驗
跟你理清一下思路,你的問題就解決了。首先,你的程序很簡單,就是讓發光二極體1秒亮1秒滅。因此,你前提是要定時1秒,但51單片機無法定時1秒,因此,你的程序就要定時50毫秒,每到了50毫秒,你就讓num自加1,當num加到20時,換句話說,已經定時50毫秒20次了,那就是1秒咯,所以此有led1=~led1;
//讓發光管狀態取反,達到程序目的。另外,定時50毫秒你要給th0和tl0賦給初值,因此
th0=(65536-45872)/256;
//重新裝載初值tl0=(65536-45872)%256;才會有這兩句,但定時50毫秒後,你的初值也會隨之消失,因此才會在void
t0_time()這個函數中重新賦初值。的確像你所說的初值是裝滿了開始執行中斷,其實從你tmod=0x01;
//設置定時器0位工作模式1(m1,m0位0,1)這句已經開始定時了,而賦初值是為了准確的定時50毫秒罷了。明白了沒有?
(其實你可以這樣理解,定時計數器就好比一個空的瓶子,當你給tmod=0x01時,水就開始一滴一滴的往瓶子你滴,當瓶子滿了的時候,中斷就發生了。假如從一個空的瓶子滴到滿的瓶子定時是80毫秒的話,可你只需要定時50毫秒就夠了,所以就要一開始往瓶子里倒水,使滴水的起點不是空瓶子,這就是賦初值的作用。當瓶子滿了後,瓶子就會自動清空,重新從零開始。而第二次你再想定時50毫秒,你就必須從新再往瓶子里倒水,這就是第二次賦初值的作用)
Ⅳ 單片機定時器與計數器的區別
在51單片機的學習過程中,我們經常會發現中斷、計數器/定時器、串口是學習單片機的難點,兩者的區別是什麼呢?下面就跟著我一起來看看吧。
單片機計數器與定時器的區別
計數器和定時器的本質是相同的,他們都是對單片機中產生的脈沖進行計數,只不過計數器是單片機外部觸發的脈沖,定時器是單片機內部在晶振的觸發下產生的脈沖。當他們的脈沖間隔相同的時候,計數器和定時器就是一個概念。
在定時器和計數器中都有一個溢出的概念,那什麼是溢出了。呵呵,我們可以從一個生活小常識得到答案,當一個碗放在水龍頭下接水的時候,過了一會兒,碗的水滿了,就發生溢出。同樣的道理,假設水龍頭的水是一滴滴的往碗里滴,那麼總有一滴水是導致碗中的水溢出的。在碗中溢出的水就浪費了,但是在單片機的定時計數器中溢出將導致一次中斷,至於什麼是中斷我們下次再講,這里只是初步的提下概念,中斷就是能夠打斷系統正常運行,而去運行中斷服務程序的過程,當服務程序運行完以後又自動回到被打斷的地方繼續運行。
在定時器計數器中,我們有個概念叫容量,就是最大計數量。方式0是2的13次方,方式1是2的13次方,方式2是2的8次方,方式3是2的8次方。把水滴比喻成脈沖,那麼導致碗中水溢出的最後一滴水的就是定時計數器的溢出的最後一個脈沖。
在各種單片機書本中,在介紹定時計數器時都講到一個計數初值,那什麼是計數初值呢?在這里我們還是假設水滴碗。假設第一百滴水能夠使碗中的水溢出,我們就知道這個碗的容量是100。問題1,我如何才能使碗接到10滴水就溢出呢?呵呵,我可以想像,如果拿一個空碗去接水,那麼還是得要100滴水才能溢出,但是如果我們拿一個已經裝有水的碗拿去接,那就不用100滴了。到此我們可以算出,要使10滴水讓碗中的水溢出,那麼碗中就先要裝90滴水。
在定時計數器中,這90滴水就是我們所謂的初始值。問題2,在一個車間我們如何利用單片機對100件產品進行計件,並進行自動包裝呢?
我們可以利用計數器計數100,在中斷中執行一個自動包裝的動作就可以了。
在這里計數初值有3個,假設有方式0:計數初值=8912(2的13次方)—100=8812。方式1:計數初值=65536(2的16次方)—100=65436。方式0:計數初值=256(2的8次方)—100=156。
根據所得的初始值,再將其轉換為16進制或者2進制,就可以進行計數或者定時了。當然要讓程序完全的運行起來還需要相應的寄存器進行設置。這些可以從各種單片機教程中找到。
單片機中定時器與計數器的區別
定時器實際上也是計數器,只是計數的是固定周期的脈沖
定時/計數器很容易理解的啊
定時器實際上也是工作在計數方式下,只是計數的是固定周期的脈沖,由於脈沖周期固定,由計數值可以計算時間,有定時功能
定時和計數只是觸發來源不同(時鍾信號和外部脈沖)其他方面是一樣的。
單片機里的寄存器可以看成一個個電子開關,用來切換不同的功能、信號。
51里通過TMOD里的T/C 位切換計數信號的來源
當T/C工作在定時器時,對振盪源12分頻的脈沖計數,即每個機器周期計數值加1,計數頻率為1/12fosc,當晶振頻率6MHZ時,計數頻率為500KHz,每2us計數值加1;晶振12MHZ就是每1us加1 了。
當T/C工作在計數器是,計數脈沖來自外部脈沖輸入管腳T0(P3.4)或T1(P3.5),當T0或T1腳上負跳變時計數值加1 ,識別管腳負跳變需要2個機器周期,即24個振盪周期。所以T0或T1腳輸入的可計數的外部脈沖的最高頻率為1/24fosc,當晶振12MHZ時,最高計數頻率為500KHz,高於此頻率將計數出錯。
至於賦初值就是杯子原理了,由於51隻能加計數,且只能在杯子剛剛滿的那一刻發出中斷,觸發中斷程序,所以我們就往杯子里先放好一定的豆子,再來相應數量的豆子就滿了,然後中斷程序就自動工作了。
注意:
定時和計數只是觸發來源不同(時鍾信號和外部脈沖)其他方面是一樣的。
假設我們要定時一定時間(100個機器周期),我們就置初值為(溢出值-100)就行了,假設我們要計件100個,實際上也是置初值為(溢出值-100),然後將輸入脈沖設為外部輸入就可以了
所以說:定時和計數只是觸發來源不同(時鍾信號和外部脈沖)其他方面是一樣的。
在中斷里置初值是為下一個循環作準備,沒什麼好說的,看需要定了。
由於定時計數器的值也可以隨時讀出來,所以我們也可以從0開始計數,從而計算一段時間或一定脈沖的數量哦,這是照樣可以打開中斷,中斷時就說明已經又計數了(定時器溢出值)個脈沖哦,在中斷里進行溢出處理,就可以計算出遠遠大於(定時器溢出值)的數字了
此時也要注意一點:51讀數時除了T/C2的捕捉功能,直接讀TH和TL可是不斷變化的哦,具體的還是看書。當你理解了定時計數器後,我們甚至還可以將計數值置為(溢出值-1),從而實現自動單步(定時模式)或作為外部中斷(計數模式)用哦,仔細想想吧,呵呵;-)
至於中斷中的需要保護現場的原因,是為了防止不小心修改了別的程序的參數,從而影響別的程序的運行,所以要且只要保護中斷程序自己動過的數據,將動過的那些存儲器在退出中斷時恢復到進入時的狀態,就不會影響被中斷的程序了。
匯編需要自己保存現場,反正程序就是自己編的嘛,一切盡在掌握中;
C的話編譯器會自動進行覆蓋分析,自動保存需要保存的變數,一般應用時盡可放心,當然,如果你很了解編譯器做了什麼,也可以嵌入匯編天馬行空自由發揮啊,但新手可不建議這樣哦,還是交給編譯器吧。
其實這些可以說都是基礎知識啊,如果不明白肯定是你的書看的不夠仔細哦.
猜你喜歡
1. 單片機的硬體結構是什麼
2. 10秒定時器電路設計
3. 單片機技術論文
4. 單片機的發聲原理
5. 單片機開題報告範文
6. 電子實習報告單片機
7. 單片機實訓報告範文3篇