單片機課后習題參考答案_第1頁
單片機課后習題參考答案_第2頁
單片機課后習題參考答案_第3頁
單片機課后習題參考答案_第4頁
單片機課后習題參考答案_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、習題參考答案(P.204) 1.什么是中斷、中斷源和中斷優(yōu)先級?(見P173,174,175) 2.8051中斷有多少優(yōu)先級答:(見p176)2個習題參考答案(P.204)習題3. 8051中斷的中斷響應條件是什么?答:1、中斷寄存器IE中的EA和相應的中斷使能位激活;2、CPU沒有在處理同級或者更高級的中斷;3、現(xiàn)行執(zhí)行周期是所執(zhí)行指令的最后一個周期;4、當前指令不是RETI或者是訪問IE或IP的指令。 4. 8051的中斷響應過程是怎樣的?答:CPU響應中斷后,由硬件自動執(zhí)行如下的功能操作: (1) 根據(jù)中斷請求源的優(yōu)先級高低,對相應的優(yōu)先級狀態(tài)觸發(fā)器置1。 (2) 保護斷點,即把程序計數(shù)

2、器PC的內容壓入堆棧保存。 (3) 清內部硬件可清除的中斷請求標志位(IE0、IE1、TF0、TF1)。 (4) 把被響應的中斷服務程序入口地址送入PC,從而轉入相應的中斷服務程序執(zhí)行。各中斷服務程序的入口地址見表。BTW:5個中斷源及入口地址表BTW:5個中斷源及入口地址表編 號中 斷 源入 口 地 址0外部中斷00003H1定時器/計數(shù)器0000BH2外部中斷10013H3定時器/計數(shù)器1001BH4串行口中斷0023H習題5. 若8051的外部中斷0為邊沿觸發(fā)方式,簡述IE0標志的檢測和置位過程。答: 8051的CPU在每個機器周期采樣引腳INT0上的電平,當前一個周期采樣為高,而這個周

3、期采樣為低,即置位中斷標志IE0。 同時8051的CPU在每個機器周期還采樣中斷標志IE0,如果中斷標志IE0被置位,中斷被激活,且沒有中斷阻止條件,則CPU自動轉向中斷0的入口地址0 x0003進入中斷服務程序。習題6. 8051的中斷系統(tǒng)如何實現(xiàn)兩級中斷嵌套?答: 可以利用寄存器IP通過設置不同中斷的優(yōu)先級,或者利用中斷的自然優(yōu)先級實現(xiàn)兩級中斷嵌套。當單片機處理一個中斷的時候,可以再去響應高優(yōu)先級的中斷,或者自然優(yōu)先級較高的中斷。但不能去響應同級或者更低的中斷。(P176)習題9. 8051中斷程序如何進行現(xiàn)場保護?何為上下文切換?答: 中斷通過把保存有現(xiàn)場數(shù)據(jù)的寄存器壓入堆棧進行現(xiàn)場保護

4、。 當一個特定任務正在執(zhí)行時,可能有更緊急的事需要引起CPU的注意。在一個具有優(yōu)先級的系統(tǒng)中,CPU不是等待第一個任務完成,而是假定前一個任務已經(jīng)完成,立即處理新的任務。若程序流程立刻轉向新任務,則新任務使用的各個寄存器將會破壞第一個任務使用的中間信息。但第一個任務恢復運行時,寄存器的值將不再可靠而導致錯誤的發(fā)生。解決問題的方法是每次發(fā)生任務的切換時執(zhí)行一些指令進行現(xiàn)場保護和現(xiàn)場恢復,這就是上下文切換。p179 10. 8051定時器方式和計數(shù)器方式的區(qū)別是什么? 基本的8051有2個可編程的16位定時器/計數(shù)器(各工作方式只是用到哪些位?)。 計數(shù)器內部晶振驅動-定時器; 計數(shù)8051的輸入

5、引腳的脈沖信號-計數(shù)器。 定時器實際上也是工作在計數(shù)方式下的。解. 1.50Hz的方波即周期為20ms的方波,要求定時間隔為10ms,每次時間到時,P1.6腳取反。定時器計數(shù)頻率為fosc/12=500kHz其周期即單片機的機器周期為12/fosc=2us計數(shù)周期10ms需要計數(shù)10ms/2us=5000次計數(shù)器向上計數(shù)需要的初值為65536-5000習題14. 設fosc=6MHz,利用定時器0的方式1在P1.6口產(chǎn)生一串50Hz的方波。定時器溢出時采用中斷方式處理。(1.設計分析;2.流程;3.注釋)主程序TMODTMOD=0 x01DTH0,TL0裝初值DEA,ET0,TR0置1TMOD

6、P1_6=!P1_6TMOD等待中斷DTH0,TL0裝初值T0中斷主程序流程中斷服務程序流程TMOD返回#include sbit P1_6=P16;void timer0() interrupt 1 using 1 TH0=65536-5000/256; TL0=65536-5000%256; P1_6=!P1_6;/取反void main() TMOD=0 x01;/T0方式1 TH0=65536-5000/256; TL0=65536-5000%256; EA=1;/開總中斷 ET0=1;/使能T0中斷 TR0=1;/啟動T0 while(1);/等待 15. 用8751制作一個模擬航標

7、燈,燈接在p1.7口上,INT0接光敏元件。使它具有如下功能:白天航標燈熄滅;夜間間歇發(fā)光,亮2S,滅2S,周而復始。將信號作門控信號,啟動定時器定時。按以上要求編寫控制主程序和中斷服務程序。解一:設INT0口高電平時表示白天,低電平時表示黑夜,查詢方式。采用定時器T0,工作方式1,外接晶振6MHz。定時100ms,20次中斷就是2s。產(chǎn)生100ms中斷需要100 000/2=50000個計數(shù)。當2s到了,就改變P1.7狀態(tài),控制LED燈。主程序和中斷服務程序流程圖分別如下:T0裝初值overflow_count+返回#include sbit LED=P17; /*P1.7電平控制燈亮燈滅,

8、高電平燈亮*/sbit dark=P32; /*通過P3.2腳INT0判斷白天黑夜,INT0 低電平表黑夜*/static unsigned long overflow_count = 0;void timer0() interrupt 1 using 0 TH0=(65536-50000)/256; TL0= (65536-50000) %256; overflow_count+;void main() TMOD=0 x01;/T0方式1 TH0=(65536-50000)/256; /T0裝初值 TL0= (65536-50000) %256; EA=1; ET0=1; TR0=1; /使

9、用T0中斷 do while(!dark) /LED晚上閃爍 if ( overflow_count = 20) /100ms*20=2s overflow_count = 0; LED = !LED; LED=0; /LED白天熄滅 while(1)解二:INT0中斷方式#include sbit LED=P17; /*P1.7電平控制燈亮燈滅,高電平燈亮*/sbit dark=P32; /*通過P3.2腳INT0判斷白天黑夜,INT0 下降沿到來表黑夜*/static unsigned long overflow_count = 0;bit flg=1; /* 設標志位*/void tim

10、er0() interrupt 1 using 0 / TH0=(65536-50000)/256; TL0= (65536-50000) %256; overflow_count+; void int_0() interrupt 0 using 1 if ( overflow_count = 20) /100ms*20=2s overflow_count = 0; LED = !LED; if(dark) flg=0; /dark高電平為白天 else flg=1; void main() TMOD=0 x01;/T0方式1 TH0=(65536-50000)/256; /T0裝初值 TL0

11、= (65536-50000) %256; PX0=1; /ITN0中斷優(yōu)先 IT0=1; /INT0下降沿觸發(fā)p174 EA=1; ET0=1;EX0=1; TR0=1; /*使用T0, INT0中斷*/ while(1) while(flg); / 等待中斷 LED=0; /LED白天熄滅 一般在LED閃爍的時候,如果使用延時程序dlms(T)也可以,但是本題要求用定時器。沒有延時,人眼視覺看不清。人眼能夠察覺的景物變化頻率20Hz,也就是LED閃爍至少要延時50ms,一般1s鐘即可,T=?void dlms ( uint a ) /延時延時a*1ms uchar j; while(a-)

12、 for(j=0;j125;j+) ; 16.希望8051單片機定時器0的定時值以內部RAM的20H單元的內容為條件而可變,即當(20H)=00H時,定時值為10ms;當(20H)=01H時,定時值為20ms。請根據(jù)以上要求對定時器0初始化。單片機時鐘頻率為12MHz。解:fosc=12MHz時,機器周期為1us。10ms間隔內計數(shù)器計數(shù)10 000/1=10000次; 20ms間隔內計數(shù)器計數(shù)10 000/1=20000次。用T0定時器,都采用定時方式1.因為T0定時器分別裝兩次不同的初值,所以可采用查詢TF0的方式。#include unsigned char data flag _at_

13、 0 x20;void main() TMOD=0 x01;/T0,T1方式1 TR0=1;/ if(flag=0) TH0=(65536-10000)/256; /T0裝初值 TL0= (65536-10000) %256; do while(!TF0); /* 一直等到計數(shù)溢出*/ TF0=0; else if(flag=1) TH1=(65536-20000)/256; /T1裝初值 TL1= (65536-20000) %256; do while(!TF0); /* 一直等到計數(shù)溢出*/ TF0=0; 解. fosc=12MHz時,最大定時為幾十ms。100Hz對應的周期為10ms。

14、占空比2:1時,高電平6.7ms,低電平3.3ms??扇?.1ms定時,對應計數(shù)0.1ms/1us=100次。定時器計數(shù)頻率為fosc/12=1MHz其周期即單片機的機器周期為12/fosc=1us周期10ms需要計數(shù)100次中斷,其中高電平期間67次中斷。習題18. 用單片機和內部定時器來產(chǎn)生矩形波。要求頻率為100Hz,占空比為2:1(高電平的時間長)。設單片機時鐘頻率為12MHz。寫出有關的程序。主程序TMODTMOD=0 x01DTH0,TL0裝初值DEA,ET0,TR0置1TMOD等待中斷主程序流程中斷服務程序流程(#include #defined unchar unsigned

15、charsbit WAVE=P10uchar time;uchar period = 100;uchar high = 67; void timer0() interrupt 1 TH0 = ( 65536 100 ) / 256; TL0 = ( 65536 100 ) % 256; if( +time = high ) WAVE=0; /高電平時間到了變低電平高電平時間到了變低電平 else if ( time = period ) time=0; WAVE = 1; void main() TMOD=0 x01;/T0方式1 TH0=(65536-100)/256;/開始為高電平 TL0=(65536-100)%256; EA=1;/開總中斷 ET0=1;/使能T0中斷 TR0=1;/啟動T0 while(1);/等待 19.8051系列單片機用什么提供串行通信的系列單片機用什么提供串

溫馨提示

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

評論

0/150

提交評論