6MHz時(shí)鐘的單片機(jī)AT89C51系統(tǒng)時(shí)鐘中斷的應(yīng)用分析_第1頁
6MHz時(shí)鐘的單片機(jī)AT89C51系統(tǒng)時(shí)鐘中斷的應(yīng)用分析_第2頁
6MHz時(shí)鐘的單片機(jī)AT89C51系統(tǒng)時(shí)鐘中斷的應(yīng)用分析_第3頁
全文預(yù)覽已結(jié)束

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第第頁6MHz時(shí)鐘的單片機(jī)AT89C51系統(tǒng)時(shí)鐘中斷的應(yīng)用分析本文以6MHz時(shí)鐘的單片機(jī)AT89C51系統(tǒng)為例,說明時(shí)鐘中斷的應(yīng)用:定時(shí)器初值與中斷周期時(shí)鐘中斷無需過于頻繁,一般取20mS(50Hz)即可。如需要百分之一秒的時(shí)基信號(hào),可取10mS(100Hz)。這里取20mS,用定時(shí)器T0工作于16位定時(shí)器方式(方式1)。T0的工作方式為:每過一個(gè)機(jī)器周期自動(dòng)加1,當(dāng)計(jì)滿0FFFFh,要溢出時(shí),便會(huì)產(chǎn)生中斷,并由硬件設(shè)置相應(yīng)的標(biāo)志位供軟件查詢。即中斷時(shí)比啟動(dòng)時(shí)經(jīng)過了N+1個(gè)機(jī)器周期。所以,我們只要在T0中預(yù)先存入一個(gè)比滿值0FFFFh小N的數(shù),然后啟動(dòng)定時(shí)器,便會(huì)在N個(gè)機(jī)器周期后產(chǎn)生中斷。這個(gè)值便是所謂的“初值”。下面計(jì)算我們需要的初值:時(shí)鐘為6MHz,12個(gè)時(shí)鐘周期為一個(gè)機(jī)器周期,20mS中有10000個(gè)機(jī)器周期。(10000)10=(2710)16,則0FFFFh2710h+1=0D8F0h。由于響應(yīng)中斷、保護(hù)現(xiàn)場及重裝初值還需要7~8個(gè)機(jī)器周期,把這個(gè)值再加上7,即T0應(yīng)裝入的初值是0D8F7h。每次中斷進(jìn)入后,先把A及W的值壓入堆棧,然后即把0D8F7h裝入T0。設(shè)置一個(gè)單元,每次中斷加1我們可以取內(nèi)部RAM中一個(gè)單元,取名為INCPI(IncreasePerInterrupt),在中斷中,裝完T0初值后,用INCINCPI指令將其加一。從這個(gè)單元中,無論中斷程序還是主程序,都可以從中獲得20mS的1~256之間任意整數(shù)倍的信號(hào)。例如:有一段向數(shù)碼管送顯的程序,需要每0.5秒執(zhí)行一次以便刷新顯示器,便可以設(shè)一單元(稱為等待單元)W_DI,用/MOVA,INCPI/ADDA,#25/MOVW_DI,A/語句讓其比當(dāng)前的INCPI值大25,然后在每次中斷中檢查是否于INCPI值相等。若相等,說明已過了25個(gè)中斷周期,便執(zhí)行送顯程序,并且讓W(xué)_DI再加上25,等待下個(gè)0.5秒。我們可以設(shè)置多個(gè)等待單元,以便取出多個(gè)不同的時(shí)基信號(hào)。讓中斷程序在每次中斷時(shí)依次查詢各個(gè)等待單元是否與INCPI相等,若相等,則執(zhí)行相應(yīng)的處理,并重新設(shè)置該等待單元的值,否則跳過。例如:用0.5秒信號(hào)刷新或閃爍顯示器,用1秒信號(hào)產(chǎn)生實(shí)時(shí)時(shí)鐘,或輸出一定頻率的方波,以一定間隔查詢輸入設(shè)備等。在中斷中讀鍵通常,我們在主程序中讀鍵盤,步驟為:掃描鍵盤,若有鍵按下,則延時(shí)幾十毫秒去抖動(dòng),再次確認(rèn)此鍵確實(shí)按下,然后處理該鍵對(duì)應(yīng)的工作,完成后再次重上述步驟。但這有兩點(diǎn)不足:1.處理相應(yīng)工作時(shí)無法鎖存按鍵的輸入,即可能漏鍵。2.延時(shí)去抖時(shí)CPU無法做其它事情,效率不高。如果把讀鍵放入時(shí)鐘中斷中,則可避免上述不足。方法為:如果兩次相鄰的中斷中都讀到同一個(gè)鍵按下,則這個(gè)鍵是有效的(達(dá)到了去抖目的),并將其鎖存到先入先出(隊(duì)列)的鍵盤緩沖區(qū),等主程序來處理。這樣,主程序處理按鍵的同時(shí),仍可響應(yīng)鍵盤的輸入。緩沖區(qū)深度通常可設(shè)為8級(jí),若鎖存的鍵數(shù)多于8個(gè),則忽略新的按鍵,并報(bào)警提示用戶新的按鍵將無效。若鍵盤緩沖隊(duì)列停滯的時(shí)間大大長于主程序處理按鍵所需要的最大時(shí)間,說明主程序已出錯(cuò)或跑飛,可以在中斷用指令將系統(tǒng)復(fù)位,起到了看門狗的目的。主程序中的延時(shí)由于有常開的時(shí)鐘中斷,所以當(dāng)主程序中有需要時(shí)間較短、精度較高的延時(shí)時(shí),應(yīng)暫時(shí)把時(shí)鐘中斷關(guān)閉。而程序中需要時(shí)間較長、精度不高的延時(shí)時(shí),便可仿照下需的寫法,避免多層嵌套的循環(huán)延時(shí)。例:在P1.1輸出1秒的高電平脈沖MOVA,INCPIINCACJNEA,INCPI$;等待一次中斷處理完成SETP1.1;設(shè)P1.1為H,脈沖開始ADDA,#50;50個(gè)20mS為1秒CJNEA,INCPI,$;等中斷將INCPI加一50次CLRP1.1;設(shè)P1.1為L,脈沖結(jié)束

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論