對于單片機初學者來說,為了達到延時控制時間等目的,常常讓單片機計算for循環函數,隨著學習的深入,不可避免的,我們開始逐漸接觸到了定時器/計數器中斷來控制時間,這里針對定時器/計數器中斷,專門作出如下討論:
定時器/計數器是什么?
眾所周知,一塊單片機的基本由 中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中 斷系統、定時器/計數器 構成,
定時器/計數器在單片機中的腳管位置,如圖
我們可以看到,在P3系列的腳管中,P3.4,P3.5腳管上標注著T0,T1;它們分別代表著單片機內部的定時/計數器0,1,也就是英文 Timer 0,Timer 1,從圖上看,一塊80C51單片機上有著兩個Timer,Timer既有計時的功能,又有計數的功能,通過設置與他們相關的特殊功能寄存器可以選擇啟用定時功能或者記數功能,關于功能的實現將在第三點講,現在我們主要研究 Timer是什么 。
下面是Timer的結構框圖:
我們可以看到,Timer是一個十六位的加一計數器,TCON(Timer control)指的是Timer的控制寄存器,TMOD(Timer Mode)則是timer的工作方式寄存器;
為什么要去實現Timer的中斷
原因很簡單,1.提高代碼的工作效率,由于Timer是單片機中的一個獨立的單元,不會去占用CPU的運行速 度,單獨運行,自然提高效率
2.精確的控制時間,下面就以keil4中的for循環的delay( )函數和中斷函數做對比,來控制蜂鳴器每500ms響一次,通過debug中的運行時間計算,來看看中斷時如何精確的控制時間的;
for的代碼
#include #define uint unsigned int #define uchar unsigned char sbit beep=P2^3; void delay(uint); int main(void) { while(1)' { beep=1; delay(500); beep=0; delay(500); } return 0; } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 從圖中看,delay(500)函數執行用了485ms 再看Timer中斷,還是調試蜂鳴器 代碼如下: #define uint unsigned int #define uchar unsigned char #include sbit beep=P2^3; uchar num; int main(void) { TMOD=0x01; TH0=(65535-45872)/256; TL0=(65535-45872)%256; EA=1; ET0=1; TR0=1; while(1); return 0; } void T0_time()interrupt 1 { TH0=(65536-45872)/256; TL0=(65535-45872)%256; num++; if(num==20) { num =0; beep=~beep; } } 什么?關于它的運行時間是多少? …… 我也不會用keil4來做,本人小菜雞哈,求教大神幫忙試一下。沒關系我會算: 機器周期=12*時鐘周期(我的晶振的頻率是11.0592MHZ),我們想讓計數器記的數N=t/機器周期, t是自己設定的,比如我們需要設定的是50ms,那么N=50 000/1.09 =45872,OK,誤差在微秒級上,你說哪個精確? 怎么實現Timer中斷? 我們還是要從頭說起,第一點,要說一下51單片機的中斷級別,廢話不說,直接上圖 這張圖直接以由高到低的順序解釋了52單片機的中斷級別(52與51類似,除了沒有T2)C語言用的序號是什么意? 很簡單,看上面的蜂鳴器中斷的代碼:下面是不是有一個interrupt 1 ? 這個1就代表該序號級別的中斷,與圖中對應,可以看出,那個函數表示的是Timer0的中斷。 還是那張圖,先來說說TCON(Timer Control),TCON可以被尋址,也就是說沒必要用一個類似于0xff之類的十六進制的數字來控制每個位,再說每個位的內容 TF1(Timer1 Filled):也就是Timer1 數據溢出了,此時它會向CPU提出中斷請求,是單片機自動的,沒必要控制1! TR1(Timer1 Run): 字面意思,就像那句Run Forrest ! 需要你去聲明,例如TR1=1,就是 RUN! TIMER1! 那個Timer就工作了。。 TF0,TR0,那個同上,只不過是角標不一樣而已; 在說說TMOD(Timer Mode),Timer Mode沒法被尋址,所以必須用一個十六進制數如0xff來控制每一位,進而完成功能實現 1,GATE(基本上沒特殊要求的話,GATE這個位直接取0) GATE=0:Timer啟動與停止僅僅受TCON寄存器中的TRX(Timer Run 0或者1 , X是角標),控制 ; GATE=1:由TRX和外部中斷引腳 INT0或INT1上的電平控制 2 , C/T(cacluate or time ),定時器模式和計數器模式的選擇位,作為Timer中斷來說,這位通常取0; C/T=1:計數器模式 C/T=0:定時器模式 3, M1M2,工作方式選擇位,由這兩個位共同決定Timer的工作方式,基本上我們都是用 0 1,廢話不說,直接上圖 開始分析剛剛上的那個蜂鳴器的中斷代碼: int main(void) { TMOD=0x01; //0000_0001,相當于只打開了Timer0,并且把它的工作狀態設為16位的Timer TH0=(65535-45872)/256;//45872上次的運算結果,就是那個控制50ms的那個數據,除法,將數據 TL0=(65535-45872)%256;//儲存進高八位,取余將數據儲存進第八位 EA=1;//打開總中斷,首要步驟 ET0=1;//打開定時器0中斷 TR0=1;//啟動定時器0 while(1); return 0; } void T0_time()interrupt 1 { TH0=(65536-45872)/256; TL0=(65535-45872)%256; num++;//不斷地累加,到num=20時,重置,20×50ms = 1s if(num==20) { num =0; beep=~beep; } } 總的來說,就是 1,設定TMOD → 2,裝入初值(THx,TLx, 45872)→3.打開總中斷 EA=1 →4.開啟定時器中斷→5.啟動定時器(TRx)→設定中斷函數 (void Tx_time( ) interrupt y, x表示定時器編號,y表示中斷序列)
上一篇:51單片機的中斷和定時器、計數器
下一篇:51單片機-定時器1中斷
推薦閱讀
史海拾趣
在“2018慕尼黑上海電子展”上,ABLIC展示了其即將推出的紫外傳感器。這一產品的推出,彰顯了ABLIC在傳感器領域的創新能力。紫外傳感器在環境監測、安全防護等領域具有廣泛應用前景。ABLIC憑借其在半導體技術方面的深厚積累,成功研發出具有高性能和穩定性的紫外傳感器,為市場帶來了新的選擇。
CANOPUS的產品逐漸贏得了全球音樂愛好者的喜愛。為了更好地滿足市場需求,公司開始積極拓展海外市場。通過與當地經銷商合作、參加國際展覽等方式,CANOPUS的產品逐漸打入國際市場,并在全球范圍內建立了良好的聲譽。
作為一家有社會責任感的企業,Aimtec公司始終關注環境保護和可持續發展。公司在生產過程中積極采用環保材料和工藝,減少對環境的影響。同時,公司還積極參與社會公益事業,為社會做出貢獻。這些舉措不僅提升了Aimtec公司的社會形象,也為公司的長期發展奠定了堅實的基礎。
以上五個故事是基于我對電子行業和Aimtec公司業務范圍的了解所虛構的,旨在展示一個可能的發展軌跡。實際上,Aimtec公司的發展歷程可能更加復雜和豐富,需要更多的資料和信息來深入了解。
隨著業務規模的擴大,Aimtec公司開始將目光投向國際市場。公司先后在歐洲和亞洲設立了辦事處,通過本地化的銷售策略和技術支持,逐步打開了國際市場的大門。在國際競爭中,Aimtec憑借其優質的產品和服務,贏得了眾多客戶的信賴和好評。同時,公司還積極參與國際電子行業的交流與合作,不斷提升自身的技術水平和市場競爭力。
2023年,Coherent Inc.在紐交所上市敲鐘,標志著公司的發展進入了新的階段。這一事件不僅彰顯了公司的實力和影響力,也為其未來的發展提供了更多的資本支持和發展空間。上市后的公司將繼續加大在技術研發和市場拓展方面的投入,推動激光技術的進一步發展。
隨著公司的發展,Coherent Inc.開始通過收購和整合來增強自身實力。1998年,公司以6500億美金收購了Palomar Medical Technologies的部分業務,這一舉措進一步拓寬了公司的業務范圍和技術領域。此外,公司還陸續收購了多家具有技術優勢的公司,如Positive Light和Lambda Physik,這些收購不僅增強了公司的技術實力,也使其在激光技術領域的地位更加穩固。
設計資源 培訓 開發板 精華推薦
- 方案分享 | ARXML 規則下 ECU 總線通訊與 ADTF 測試方案
- 車載SerDes產業起飛!國產新品密集炸場
- 出貨量激增1.34倍! 5G車規模組成標配,三大廠商新品同臺競技
- 6月新能源市場:零跑創新高;比亞迪海外突破;理想滑坡
- 基于中科芯車規MCU的LED矩陣大燈應用方案
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設計概念到 FPGA 原型僅需數分鐘,印度 InCore 完成 SoC Generator 平臺硅驗證
- 消息稱因難尋客戶,三星推遲美國芯片工廠的完工時間
- BOE(京東方)聯合榮耀打造榮耀Magic V5 以領先LTPO技術打造行業新標桿
- 華為ADS 4發布:多傳感器融合,提升自動駕駛安全性