機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
單片機編程技巧-功能強大的時鐘中斷
單片機編程技巧-功能強大的時鐘中斷
 更新時間:2008-8-19 13:48:33  點擊數(shù):33
【字體: 字體顏色
  功能強大的時鐘中斷

  在單片機程序設(shè)計中,設(shè)置一個好的時鐘中斷,將能使一個CPU發(fā)揮兩個CPU的功效,大大方便和簡化程序的編制,提高系統(tǒng)的效率與可操作性。我們可以把一些例行的及需要定時執(zhí)行的程序放在時鐘中斷中,還可以利用時鐘中斷協(xié)助主程序完成定時、延時等操作。

  下面以6MHz時鐘的AT89C51系統(tǒng)為例,說明時鐘中斷的應(yīng)用。

  定時器初值與中斷周期 時鐘中斷無需過于頻繁,一般取20mS(50Hz)即可。如需要百分之一秒的時基信號,可取10mS(100Hz)。這里取20mS,用定時器T0工作于16位定時器方式(方式1)。T0的工作方式為:每過一個機器周期自動加1,當計滿0FFFFh,要溢出時,便會產(chǎn)生中斷,并由硬件設(shè)置相應(yīng)的標志位供軟件查詢。即中斷時比啟動時經(jīng)過了N+1個機器周期。所以,我們只要在T0中預(yù)先存入一個比滿值0FFFFh小N的數(shù),然后啟動定時器,便會在N個機器周期后產(chǎn)生中斷。這個值便是所謂的“初值”。下面計算我們需要的初值:時鐘為6MHz,12個時鐘周期為一個機器周期,20mS中有10000個機器周期。(10000)10=(2710)16,則0FFFFh-2710h+1=0D8F0h。由于響應(yīng)中斷、保護現(xiàn)場及重裝初值還需要7~8個機器周期,把這個值再加上7,即T0應(yīng)裝入的初值是0D8F7h。每次中斷進入后,先把A及PSW的值壓入堆棧,然后即把0D8F7h裝入T0。

  設(shè)置一個單元,每次中斷加1 我們可以取內(nèi)部RAM中一個單元,取名為INCPI(Increase Per  Interrupt),在中斷中,裝完T0初值后,用INC INCPI指令將其加一。從這個單元中,無論中斷程序還是主程序,都可以從中獲得20mS的1~256之間任意整數(shù)倍的信號。例如:有一段向數(shù)碼管送顯的程序,需要每0.5秒執(zhí)行一次以便刷新顯示器,便可以設(shè)一單元(稱為等待單元)W_DISP,用/MOV  A,INCPI/ADD A,#25/MOV  W_DISP,A/語句讓其比當前的INCPI值大25,然后在每次中斷中檢查是否于INCPI值相等。若相等,說明已過了25個中斷周期,便執(zhí)行送顯程序,并且讓W_DISP再加上25,等待下個0.5秒。我們可以設(shè)置多個等待單元,以便取出多個不同的時基信號。讓中斷程序在每次中斷時依次查詢各個等待單元是否與INCPI相等,若相等,則執(zhí)行相應(yīng)的處理,并重新設(shè)置該等待單元的值,否則跳過。例如:用0.5秒信號刷新或閃爍顯示器,用1秒信號產(chǎn)生實時時鐘,或輸出一定頻率的方波,以一定間隔查詢輸入設(shè)備等。

  在中斷中讀鍵 通常,我們在主程序中讀鍵盤,步驟為:掃描鍵盤,若有鍵按下,則延時幾十毫秒去抖動,再次確認此鍵確實按下,然后處理該鍵對應(yīng)的工作,完成后再次重上述步驟。但這有兩點不足:1.處理相應(yīng)工作時無法鎖存按鍵的輸入,即可能漏鍵。2.延時去抖時CPU無法做其它事情,效率不高。如果把讀鍵放入時鐘中斷中,則可避免上述不足。方法為:如果兩次相鄰的中斷中都讀到同一個鍵按下,則這個鍵是有效的(達到了去抖目的),并將其鎖存到先入先出(隊列)的鍵盤緩沖區(qū),等主程序來處理。這樣,主程序處理按鍵的同時,仍可響應(yīng)鍵盤的輸入。緩沖區(qū)深度通常可設(shè)為8級,若鎖存的鍵數(shù)多于8個,則忽略新的按鍵,并報警提示用戶新的按鍵將無效。若鍵盤緩沖隊列停滯的時間大大長于主程序處理按鍵所需要的最大時間,說明主程序已出錯或跑飛,可以在中斷用指令將系統(tǒng)復(fù)位,起到了看門狗的目的。

  主程序中的延時 由于有常開的時鐘中斷,所以當主程序中有需要時間較短、精度較高的延時時,應(yīng)暫時把時鐘中斷關(guān)閉。而程序中需要時間較長、精度不高的延時時,便可仿照下需的寫法,避免多層嵌套的循環(huán)延時。

例:在P1.1輸出1秒的高電平脈沖
MOV A,INCPI
INC A
CJNE A,INCPI$ ;等待一次中斷處理完成
SETB P1.1 ;設(shè)P1.1為H,脈沖開始
ADD A,#50 ;50個20mS為1秒
CJNE A,INCPI,$ ;等中斷將INCPI加一50次
CLR P1.1 ;設(shè)P1.1為L,脈沖結(jié)束

  結(jié)束語:從上看出,要靈活地應(yīng)用時鐘中斷,將任務(wù)合理分配給中斷和主程序,并且二者要分工明確,接口簡單。這其中的技巧還需要大家在實踐中多多摸索與體會。另外要注意:應(yīng)盡量縮短中斷處理程序的執(zhí)行時間,更不要長于20mS。
  • 上一篇: 單片機C51編程幾個有用的模塊
  • 下一篇: 單片機控制的網(wǎng)絡(luò)交換機設(shè)計與實現(xiàn)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1