單片機與程序設計(上)
在單片機中,不僅頻繁地使用“○月○日○點○分”這種時刻顯示,顯示過去的時間和一定的周期這種形式也被頻繁地使用。例如,“該程序從運行開始過去了多少時間?”、“每秒輸送128次信號”等等。另外,還經(jīng)常被用于“等待指定的時間”、“經(jīng)過指定的時間后將轉(zhuǎn)移到下一個處理”這樣的情況。對這些與時間和時刻有關(guān)進行處理的外設功能就是定時器(圖1)。
我們也可以不使用外設功能(硬件)的定時器,而是通過軟件來計算時間。下面通過圖2來說明使用軟件來定時的示例,圖中假設循環(huán)(重復)部分的處理需要費時1μs(微秒:100萬分之1秒)。由此可以計算出該循環(huán)部分重復1000次需要花費1ms(毫秒:千分之1秒),重復100萬次則需費時1秒。即:通過“等待經(jīng)過循環(huán)處理所指定的時間”來計算時間。但是,CPU將會集中進行時間計算的處理而無法進行其他處理。而且,只能計算一個周期的時間。而現(xiàn)實當中,單片機需要對應0.1秒和1/1024秒等各種周期的時間。
另外,CPU的計時器頻率(驅(qū)動速度)也將對軟件產(chǎn)生影響。如果將100MHz驅(qū)動的CPU改為50MHz,那么循環(huán)1次所需的時間將變?yōu)樵瓉淼膬杀丁R虼耍枰獙τ嬎銜r間的軟件進行修正。如上所述,由于在管理上既花時間又容易出錯,所以要極力避免通過軟件來計算時間。
稍微介紹一下中斷的內(nèi)容……
下面,我們簡單介紹一下和定時器不可分割的技術(shù)——“中斷功能”。單片機中的“中斷功能”是指某個程序在執(zhí)行過程中,因某種原因而發(fā)出“開始進行其他處理”的請求。由于可以使用中斷功能,所以可使CPU不集中進行一個處理。
讓我們想象一下日常生活中用到“中斷功能”的情景,當我們把熱水倒入方便面盒中后,如果我們在3分鐘內(nèi)一直盯著時鐘看,那么這段時間內(nèi)我們就不能做其它事情。但如果用廚房定時器設定3分鐘的時間,在廚房定時器的警報響起之前我們便可以去做其它事情。在這個例子中,“一直盯著時鐘看”就相當于前一節(jié)中所介紹的“等待經(jīng)過循環(huán)處理所指定的時間”,所以在處理結(jié)束之前不能去做其它事情。同時,廚房定時器的警報就相當于中斷功能。在中斷發(fā)生前還可以去做其它事情。
單片機的外設功能中有各種各樣的定時器,這些定時器在經(jīng)過指定的時間或處理結(jié)束時向CPU發(fā)送中斷信號。不僅是定時器,很多外設功能都會在“產(chǎn)生變化”、“處理開始/結(jié)束”時將中斷信息傳送給CPU。所以,CPU在中斷功能發(fā)生前還可以繼續(xù)做其它工作,因此可提高作業(yè)效率。關(guān)于中斷功能的詳細內(nèi)容,將在本系列第4期的《外部中斷功能IRQ》中做詳細介紹。本期中,我們先事先了解一下“從外設功能以中斷的形式向CPU傳送信息”的內(nèi)容。
各式各樣的定時器中,還有“看門狗定時器”!
在單片機的外設功能中,最貼心的定時器是計算到指定時間的定時器和每隔一段時間便發(fā)生中斷的定時器。另外,在瑞薩電子的RX63N單片機中,搭載了為控制伺服電動機而產(chǎn)生脈寬調(diào)制解調(diào)(PWM)信號的定時器、計算輸入信號間隔的定時器、顯示現(xiàn)在時刻的RTC(實時時鐘)等各種各樣的定時器。
在定時器中,最具特色的是WDT(看門狗定時器)。其名字Watch Dog Time中的Watch dog意思為“看門狗”,它的工作就是監(jiān)視程序是否出現(xiàn)失控。由WDT監(jiān)視的程序通過事先將設定的值寫入WDT后啟動。WDT每隔一定時間便減掉寫入的值,當程序正常運行時,處理結(jié)束前會對WDT清零再結(jié)束。但是,如果程序失控(進入意料之外的重復狀態(tài)且無法停止)時,寫入WDT的值將小于0(稱為下溢),因此向CPU通知程序出現(xiàn)了失控。在不允許睡眠的重要系統(tǒng)中,單片機中搭載的“看門狗定時器”DWDT發(fā)揮了極其重要的作用。
輕松嘗試使用定時器
雖然說:“我們就通過程序來實際使用定時器……”,但是實際上,要想熟練運用定時器,必須先理解單片機的操作步驟。而且,不僅需要了解通過軟件進行操作的步驟,還需理解單片機的硬件(結(jié)構(gòu))以及所使用的零部件的規(guī)格等。
因此,需要幫助時請使用“數(shù)據(jù)庫”。對于搭載了RX63N單片機的GR-SAKURA電路板,我們準備了幾個與時間和時刻有關(guān)的數(shù)據(jù)庫。
SAKURA 的sketch參數(shù):櫻花程序庫時間(僅英文版)
在這個程序中,要讓GR-SAKURA上的LED在一定周期內(nèi)發(fā)光。雖然僅是很簡單的操作,但是要想讓LED在正確的周期內(nèi)發(fā)光就需要使用定時器。在上述櫻花程序庫的“時間”選項內(nèi),有計算經(jīng)過時間的數(shù)據(jù)庫,所以我們就使用它。
程序如圖3所示。第14行的millis函數(shù)以從程序開始時經(jīng)過的時間ms(毫秒:千分之一秒)為單位送回,沒有參數(shù)。使用該函數(shù),通過獲取和最初的測定(第14行)之間的差距來取得1秒后、2秒后的結(jié)果。用while語言生成循環(huán),從a的值等待1秒或2秒(第15行、第19行)。于是,1秒后LED0(GR-Sakura電路板的D1)亮燈,2秒后滅燈。滅燈后結(jié)束loop函數(shù),但是該操作會再次反復繼續(xù)執(zhí)行。另外,millis函數(shù)沒有符號,將返回long型的整數(shù)。
圖3:使用定時器功能使LED亮燈的程序。此例中,以1秒鐘為周期閃爍。
※//~是用于進行評價,對程序的執(zhí)行不產(chǎn)生影響
將程序輸入Web編譯器,再將編譯完成后的二進制文件傳送給GR-SAKURA。傳送結(jié)束后,4個LED燈將暫時熄滅后再開始執(zhí)行,LED0(GR-Sakura電路板的D1)開始閃爍。
接我們講解了必要的外設功能之一“定時器”。有關(guān)時間和時刻的處理,在各種場合都需要。請大家借此機會實際操作各種數(shù)據(jù)庫。
但是,文中的“懊128次”和“1/1024秒”這些數(shù)字突然冒出來,是否讓你吃了一驚呢?128是2的7次方,1024是2的10次方。RTC中具有每1/128秒產(chǎn)生一次中斷的功能……這是在單片機的世界中經(jīng)常看到的數(shù)字。
接下來講中斷功能
提高作業(yè)效率的“中斷功能”指的是什么?
我們回顧一下“定時器”中簡單介紹過的“中斷功能”概念。任何人都有過這樣的經(jīng)驗,就是“將雞蛋放進沸騰的熱水中,直到雞蛋煮熟的10分鐘內(nèi)要確認好幾次時鐘”的經(jīng)歷。在單片機的世界中也同樣,在等待某種狀態(tài)達成時,具有對對象進行定期檢查的方法。例如,在等待向GPIO(通用I/O端口)的輸入從0變?yōu)?時,程序可以一定的間隔來檢查GPIO的狀態(tài)。這種處理被稱為“輪詢”。
輪詢雖然是一種了解狀態(tài)變化的簡單方法,但是如果檢查的頻度低(間隔長)就會錯過變化,如果頻度過高(間隔短),即使查也查不到變化“空耗”。由于輪詢通過簡單的程序便能完成處理,所以在掌握對象的變化頻度時是有效的。但是,進行多次檢查也會給單片機帶來負荷,對功耗不利。
因此就要用到本期介紹的“中斷功能”。產(chǎn)生中斷時,CPU會暫時停止正在執(zhí)行的任務,轉(zhuǎn)而進行別的任務。也就是有別的任務“穿插”進來的意思(圖1)。當中途穿插進來的任務結(jié)束后,CPU再返回處理原來的任務。
設想一下你在工作的同時煮雞蛋的情況。由于你不想停下手中的工作,所以把雞蛋放入熱水中后就設置定時器并繼續(xù)工作,10分鐘后定時器一響就把雞蛋從熱水中撈起。這時,定時器的鳴叫就是中斷,而“把雞蛋從熱水中撈起”就是穿插進來的工作。大家可以通過這種方式來了解中斷功能。
單片機中的中斷處理
中斷產(chǎn)生于單片機內(nèi)部和外部的各種設備。于開關(guān)和感應器等單片機外部的中斷稱為外部引腳中斷,來自這些機器的中斷信號由名為“IRQ”的引腳接收,再向中斷控制器(在RX63N中稱被稱為“ICUb”)發(fā)出通知。IRQ為“Interrupt ReQuest”的略稱,意思為“中斷請求”。另外,來自單片機內(nèi)部的定時器和GPIO、串行通信設備UART等外設機器的中斷被稱為外部設備中斷,中斷信號直接從各外部設備通知中斷控制器。
在中斷控制器中,各種設備的中斷信號按照先來后到的順序,以適當?shù)捻樞虮粋魉偷紺PU。而且,中斷被設為無效的設備的中斷信號將不會被傳送到CPU,也就意味著可以忽視(屏蔽)這些信號。CPU按照從中斷控制器接收到的指示來執(zhí)行對應的程序(中斷處理)。
CPU一旦接收到中斷控制器的中斷信號,首先將終止執(zhí)行中的程序。然而,會自動保存“從何處重啟”的出棧(POP)信息,這被稱為“進棧(PUSH)”。進棧結(jié)束后,將開始由中斷執(zhí)行的程序。該程序結(jié)束時,進棧信息將回送到CPU,這種現(xiàn)象被稱為“出棧”(圖2)。由于進棧和出棧都由CPU自動執(zhí)行,因此程序設計者不必因順序問題而費心。
例如,通過UART執(zhí)行串行通信時,經(jīng)常監(jiān)視字節(jié)是否被接收了而導致效率不佳。所以,多數(shù)情況下都對程序進行如下編程,即在信息送達時就會產(chǎn)生中斷并進行適當?shù)奶幚恚硗猓苟〞r器產(chǎn)生中斷的情況也不在少數(shù)。進行“經(jīng)過了一定時間后該做什么”這類處理時,應進行如下編程,即通過來自定時器的信號開始進行處理。如上所述,在有效利用單片機方面,中斷功能發(fā)揮了很大的作用。
還可使用數(shù)據(jù)庫嘗試編寫復雜的中斷程序!
為了編寫與中斷相關(guān)的程序,就需要了解單片機的運行。由于需要深入了解,所以不能僅是進行簡單的嘗試。幸好還有本系列中介紹過的GR-SAKURA數(shù)據(jù)庫,可在GR-SAKURA數(shù)據(jù)庫中進行與外部引腳中斷相關(guān)的處理,所以請嘗試使用GR-SAKURA數(shù)據(jù)庫來進行編程。
SAKURA sketch參數(shù):櫻花程序庫--中斷(僅限英文版)
為了向GR-SAKURA提供外部引腳中斷,還需要做些工作。在GR-SAKURA中,從IO30引腳到IO35引腳接收來自外部的中斷信號。這次是將定時器輸出引導到IO0引腳,再將它傳送到IO31引腳作為中斷信號。因此,要從IO30引腳到GND的部分設置引腳接口,由底板用的電線將IO0和IO31連接起來(圖3)。
在示例程序(圖4)中預先準備了如下功能,即當GR-SAKURA的外部中斷信號引腳(從IO30到IO35中的一個)的輸入從L電平變?yōu)镠電平時,LED燈將啟動。而且是在檢測到相當于上述所說明的“外部引腳中斷”的中斷信號后才會變化。從IO0引腳進行定時器輸出,并將之與中斷輸入引腳即IO31引腳連接,通過這樣的方式便可以與一定的時間間隔發(fā)生中斷。
※即使已對該程序進行了匯編,在沒有將上述的IO0和IO31引腳進行連接的GR-SAKURA中也無法運行。
以下為圖4的程序
※圖4程序結(jié)束
※圖4:用于外部引腳中斷的示例程序
在此數(shù)據(jù)庫中,可對分別與前述中斷信號輸入引腳對應的處理。本次所示的是根據(jù)向IO31引腳輸入的變化(從L電平變?yōu)镠電平)來產(chǎn)生中斷的情況。第48行的attachInterrupt()定義了在某個輸入引腳出現(xiàn)某種變化時該調(diào)用什么函數(shù)。因此,設定為根據(jù)輸入IO31引腳的中斷信號來啟動irq3()。這樣的設定只需在setup()中定義一次便能在整個程序中有效。除此以外,在setup()中還記述了定時器的定義、定時器輸出引腳的設定、LED輸出的設定等初始條件。
沒有通過loop()函數(shù)進行的處理。取而代之的是由irq3()這個函數(shù)進行處理。從這個函數(shù)來看是看不出它是從程序中調(diào)用的。但是,正是由于這個函數(shù),才能使中斷信號進入IO31引腳時使LED的光發(fā)生變化。在函數(shù)irq3()中,四盞LED中只有一盞亮燈,這個函數(shù)一旦被調(diào)用,亮燈的LED就發(fā)生一次變化。為了讓人看得到這個“變化”,在case標簽的部分,通過來自GPIO的輸出來滅燈且使旁邊的LED亮燈(邊緣的LED燈亮燈時,相反側(cè)的邊緣的LED亮燈或滅燈)。
為了應對不知何時會發(fā)生的意外,中斷就是非常有效的應對方法。而且,中斷還可以減少程序的不必要運行,從而可降低功耗。也可以說,為了真正有效地利用單片機,這是一項不可缺少的技術(shù)。
關(guān)鍵詞:
您可能也感興趣:
今日熱點
為您推薦
去年社保“成績單”亮眼 社保基金監(jiān)管再戴“緊箍咒”
“冰雪保險”討論度升溫 購買此類產(chǎn)品時需看清投保須知
我國重疾險發(fā)展迎來較大挑戰(zhàn),多因素致銷售增長遇瓶頸
更多
- 干貨 | 用于密集型在軌邊緣計算的微處理器和FPGA
- Elliptic Labs進入奧斯陸證券交易所主板上市名單
- Gartner:企業(yè)機構(gòu)需要重新定義網(wǎng)絡安全領(lǐng)導者的角色
- 新華絲路:賽拉弗210毫米組件通過TUV SUD高等級冰雹撞擊試驗
- HTC VIVE在2022 MWC發(fā)布新成果
- “5G+智能港口”項目榮獲GSMA“互聯(lián)經(jīng)濟最佳移動創(chuàng)新獎”
- 愛立信等伙伴與中國移動發(fā)布5G-Advanced網(wǎng)絡技術(shù)演進白皮書2.0
- Velodyne Lidar公布2021年第四季度及全年財報
排行
最近更新
- 單片機與程序設計(上)
- 到底值不值?索泰至尊版GTX560顯卡拆解
- 華為——5G之路上的實干家
- 機頂盒加解擾技術(shù)
- 數(shù)字電視技術(shù)及其應用
- 山東省優(yōu)秀企業(yè)家訪談錄|即發(fā)集團楊為東:傳統(tǒng)行業(yè)需要顛覆...
- 直擊新三板|山東芯諾科技要引入國資參股基金
- @理財?shù)哪悖恒y行產(chǎn)品優(yōu)惠潮起,下單前看清“隱形費率”!
- 魯股日報|醫(yī)藥板塊一枝獨秀,賽托生物漲12%
- 緩建倉甚至不建倉!新基金們在等啥?
- 進入“元宇宙”有了新途徑 超高分辨量子點LED問世
- 國資包圓定增,“解渴”濟南大陸股份
- 助力鄉(xiāng)村振興走在前!山東財政打出財金融合“組合拳”
- 2021年山東13家綜合保稅區(qū)進出口總額4884.2億,同比增93.8%
- 廈門積極探索科技成果轉(zhuǎn)化路徑
- 廣州南沙成立科技成果轉(zhuǎn)化聯(lián)盟
- 一箭七星!我國將組建低軌寬帶通信試驗星座
- 上海市地方金融監(jiān)管局局長解冬:建議推動上海自貿(mào)區(qū)離岸債券...
- Peter Schiff:BTC跌破39000美元后,將BTC作為質(zhì)押品的持有...
- 大閘蟹公母哪個好吃有啥區(qū)別
- 大閘蟹公母哪個是最好的
- 大閘蟹公母哪個蟹黃多
- 梭子蟹減肥期間可以吃嗎
- (圖表·漫畫)「醫(yī)衛(wèi)」早期篩查
- (圖表·漫畫)「醫(yī)衛(wèi)」注重早期篩查
- (圖表·漫畫)「體育」健康提示
- 眼部外傷莫大意,小心晶狀體脫位!
- 新鄉(xiāng)市第一人民醫(yī)院與鳳泉區(qū)人民醫(yī)院達成合作并舉行揭牌儀式
- 亞洲聯(lián)網(wǎng)科技(00679.HK)耗資4978萬元購買債券
- 1998金融危機噩夢重現(xiàn)?投行預計俄羅斯Q2經(jīng)濟萎縮35%