51單片機程序,使用定時器時,定時器計數、定時器中斷函數、while(1)循環三者之間如何協調好整個流程?
我拿一個最經典的單片機應用——‘流水燈’來分析吧。
【定時器0實現間隔1s的流水燈】簡單示例
#include typedef unsigned int u16; //對數據類型進行聲明定義 typedef unsigned char u8; #define LED P3 bit LED_flag=0; //定時到1s的標志位 u8 n; //循環變量,用作LED總線的位索引index void InitTimer0(void); //定時器0,初始化 void main() { LED=0XFF; //先初始化LED全滅(自上而下流動) InitTimer0(); while(1) { if(LED_flag==1) { LED_flag=0; LED=~(0x01< if(++n==8) n=0; } } } void InitTimer0(void) { TMOD |= 0x01; //用|=防止配置沖突 TH0 = (65536 - 50000)/256; ///定時器0,置初值(定時50ms) TL0 = (65536 - 50000)%256; EA = 1; ET0 = 1; TR0 = 1; } void Timer0() interrupt 1 //定時器0,中斷服務函數 { static u16 i; TH0 = (65536 - 50000)/256; ///定時器0,重裝初值(定時50ms) TL0 = (65536 - 50000)%256; i++; if(i==20) // 1s = 20 × 50ms { i=0; LED_flag=1; } } 第一、定時器什么時候開始工作呢? TR0=1;//啟動定時器0,這個斷點就標志著定時器0開始工作了,不管同不同意中斷,它都在計時。 第二、什么時候進入中斷函數,進入中斷函數后定時器又是怎么工作的,怎么循環累加出延時時間的? 該示例程序配置了定時器的中斷時間為 50ms(12MHz晶振),也就是每隔 50ms 就進入一次中斷函數。 進入中斷后,程序又重新給定時器定時50ms(定時器0不會自動重裝初值),同時對中斷次數進行計數(i++)。 主程序只要查詢計數值(i),就能知道 定時器中斷了多少次了。 第三、while(1)循環里面又是怎么工作的呢? 首先,主函數的 while(1)表示系統是一個 循環系統,一直在循環,不結束。 當定時器產生中斷時,就會暫停主函數,這就稱為定時器中斷。等中斷服務函數執行結束后,又會在主函數被打斷的地方,繼續執行主函數的內容。 進一步理解 定時器等中斷服務屬于前臺工作,主函數屬于后臺工作。 這樣的系統稱為前后臺系統,包括一個死循環和若干個中斷服務程序:應用程序是一個無限循環,循環中調用API函數完成所需的操作,這個大循環就叫做后臺系統;而中斷服務程序,接收到系統的各種異步事件,也就是前臺系統。 這就像一個酒店服務流程一樣:酒店前臺柜員(中斷服務程序)接收到客戶的突發問題(單片機系統的各種異步事件),前臺柜員再將接收到的問題反饋給大堂經理(while(1)后臺)進行事件的處理解決。 這說明了:主函數在執行的時候,定時器中斷在前臺是一直在工作的(只要你開啟了)。 程序中,主函數的while(1),對定時器的中斷次數是否到達1s定時的標志位LED_flag進行查詢,如果==1,那它就將該標志位清0 ,并且執行流水燈事件。
上一篇:51單片機(二十一)—— 定時器計數功能
下一篇:51單片機的中斷和定時器、計數器
推薦閱讀
史海拾趣
為了降低外購成本、增加自主研發能力,AURORA公司進行了多次收購。比如,2019年5月,AURORA收購了激光雷達初創公司Blackmore,進一步提升了公司在自動駕駛感知技術方面的實力。2021年2月,AURORA又收購了OURS,這是該公司在不到兩年的時間里收購的第二家激光雷達初創公司。這些收購使得AURORA在自動駕駛產業鏈上的布局更加完善,為公司未來的發展提供了有力支持。
隨著全球環保意識的提高,半導體行業也面臨著環保和可持續發展的挑戰。CSDC積極響應這一趨勢,將環保理念融入公司的生產和運營中。通過采用環保材料和工藝,減少生產過程中的污染排放,CSDC不僅降低了對環境的影響,還提升了企業的社會形象。同時,公司還積極參與環保公益活動,推動半導體行業的綠色發展。
這些故事展示了半導體設備公司可能經歷的一些關鍵發展階段和面臨的挑戰。雖然這些故事是虛構的,但它們基于半導體行業的現實背景和趨勢進行構建,具有一定的參考價值。
Conditioning Semiconductor Devices Corp(簡稱CSDC)起初是一家小型半導體公司,專注于研發低功耗的芯片技術。隨著智能設備的普及,市場對節能型半導體的需求激增。CSDC通過不斷的研發投入,成功開發了一種全新的低功耗技術,顯著降低了設備的能耗,迅速在市場上獲得認可,從而實現了業務的快速增長。
作為一家有社會責任感的企業,Elpac公司始終關注環境保護和可持續發展。公司積極采用環保材料和清潔能源,努力降低生產過程中的能耗和排放。同時,Elpac公司還積極參與各種公益活動和社會事務,回饋社會、關愛弱勢群體。這些舉措不僅提升了公司的品牌形象和社會影響力,也為公司的長遠發展注入了正能量。
以上是關于電子行業里某假設性“Elpac公司”的發展故事,希望對您有所幫助。
Elpac公司深知人才是企業發展的核心動力。因此,公司高度重視人才培養和團隊建設。公司建立了完善的人才培訓體系,為員工提供多樣化的培訓和發展機會。同時,公司還鼓勵員工積極參與各種創新活動和競賽,激發員工的創新精神和創造力。這種積極向上的企業文化吸引了大量優秀人才加入Elpac公司,為公司的持續發展提供了有力保障。
隨著業務的不斷擴展和產品的不斷創新,DEC在1966年決定公開上市。這次上市不僅為DEC帶來了大量的資金,還提升了其在業界的知名度。借助資本市場的力量,DEC能夠進一步擴大生產規模,加強研發能力,并推出更多具有競爭力的產品。在上市后的幾年里,DEC的銷售收入快速增長,成為計算機行業的重要參與者。
const char temp[]= \"+CMGL: 2,\\\"REC READ\\\",\\\"+8613621246911\\\",,\\\"09/03/31,13:57:39+32\\\" Abcf\"; char *m,*n; char num[12]; m=strstr(temp,\"+86\"); n=strstr(temp,\"\\\",,\\\"\") ; for(l=0;l … 查看全部問答∨ |
|
按照《EVC高級編程及其應用開發》的實例寫了一個串口。 程序中有這樣一句: private: CCESeries m_ceSeries; //定義串口類 編譯時就出現錯誤,顯示: error C2146: syntax error : missing \';\' before identifi ...… 查看全部問答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 04:03 編輯 嘿嘿,論壇建的放大器的群滿了,建了個高級群167334516,人再多我升級成500人的超級群 … 查看全部問答∨ |
本帖最后由 dontium 于 2015-1-23 13:03 編輯 采用高熱電系數材料的RE200B,能夠以非接觸方式檢測出來自人體發出的紅外輻射,將其轉化為電信號輸出,經BISS0001放大處理后可直接通過繼電器控制外部設備,也可與單片機接口作為熱釋電紅外信號采 ...… 查看全部問答∨ |
replyreload += \',\' + 1683212; 本帖最后由 小小宇宙 于 2014-5-23 11:02 編輯 還在為WinCE下的串口糾結嗎,天嵌科技教你用串口,支持HEX發送和接收,支持文件發送,快來下載吧!請大家回復后下載! Timson,如果您要查看本帖隱藏內容請回復 ...… 查看全部問答∨ |
|
設計資源 培訓 開發板 精華推薦
- 方案分享 | ARXML 規則下 ECU 總線通訊與 ADTF 測試方案
- 車載SerDes產業起飛!國產新品密集炸場
- 出貨量激增1.34倍! 5G車規模組成標配,三大廠商新品同臺競技
- 6月新能源市場:零跑創新高;比亞迪海外突破;理想滑坡
- 基于中科芯車規MCU的LED矩陣大燈應用方案
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設計概念到 FPGA 原型僅需數分鐘,印度 InCore 完成 SoC Generator 平臺硅驗證
- 消息稱因難尋客戶,三星推遲美國芯片工廠的完工時間
- BOE(京東方)聯合榮耀打造榮耀Magic V5 以領先LTPO技術打造行業新標桿
- 華為ADS 4發布:多傳感器融合,提升自動駕駛安全性