單片機項目實踐教程劉燎原-項目三手動計數(shù)器_第1頁
單片機項目實踐教程劉燎原-項目三手動計數(shù)器_第2頁
單片機項目實踐教程劉燎原-項目三手動計數(shù)器_第3頁
單片機項目實踐教程劉燎原-項目三手動計數(shù)器_第4頁
單片機項目實踐教程劉燎原-項目三手動計數(shù)器_第5頁
已閱讀5頁,還剩79頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微控制器系統(tǒng)設計與應用,劉燎原,江蘇建筑職業(yè)技術學院,實驗1.KEIL使用步驟2.單片機開發(fā)板使用方法,燒錄程序步驟3. K1按下, 8個流水燈從上到下逐個點亮,若K1斷開, 8個流水燈從下到上逐個點亮,然后依次循環(huán),#include /包含AT89X52.H頭文件 sbit k1=P34; unsigned char code sz1=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; void Delay(unsigned int t) unsigned int i, j; for(i=0;it;i+) for(j=0;j120;j+); vo

2、id main ( ) unsigned char m; while(1) if(k1=0) for(m=0;m8;m+) P1=sz1m; Delay(200); else for(m=0;m8;m+) P1=sz17-m; Delay(200); ,循環(huán)完8次后再響應按鍵,#include /包含AT89X52.H頭文件 #include sbit k1=P34; void Delay(unsigned int t) unsigned int i, j; for(i=0;it;i+) for(j=0;j120;j+); void main (void) P1=0 xfe; while(1)

3、 if(k1=0) P1=_crol_(P1,1); Delay(200); else P1=_cror_(P1,1); Delay(200); ,隨時響應按鍵,按鍵控制,數(shù)碼管顯示控制,PROTEUS仿真,PROTEUS仿真,項目三 手動計數(shù)器 -單片機控制數(shù)碼管靜態(tài)顯示,知識目標: 1.掌握數(shù)碼管的動態(tài)、靜態(tài)顯示不同、電路連接 2. 掌握查表指令 3.掌握按鍵的編程 4.掌握單片機的外部中斷 技能目標: 1.掌握PROTEUS中數(shù)碼管的共陰、共陽的不同 2.掌握數(shù)碼管和單片機的連接方法,1LED數(shù)碼管簡介 (1)結構、工作原理 由LED發(fā)光二極管組合顯示字符的顯示器件。它使用了8個LED發(fā)

4、光二極管,其中7個用于顯示字符,1個用于顯示小數(shù)點,故通常稱之為7段(也有稱作8段)發(fā)光二極管數(shù)碼顯示器。,a,b,c,d,e,f,g,dp,“8”字型LED數(shù)碼管結構及原理,COM,COM,(2)LED的編碼方式,表 十六進制數(shù)及空白字符與P的顯示段碼,(3)LED數(shù)碼管的顯示方式 a.靜態(tài)LED顯示器電路 數(shù)碼管的COM端接不變的高/低電平,每位數(shù)碼管的和端與一個位的 相連。 要在某一位數(shù)碼管上顯示字符時,只要從對應的 口輸出其顯示代碼即可 特點為:數(shù)碼管恒定地亮,顯示某個數(shù)值,直到顯示字符改變?yōu)橹?適用場合:由于太占據(jù)I/O線,所以用于1個或較少數(shù)碼管顯示的場合。,b.動態(tài)LED顯示器電

5、路 每個數(shù)碼管的COM端和不同的I/O口相連,每位數(shù)碼管的和端接在一起,與一個位的 相連。 要在某一位數(shù)碼管上顯示字符時,首先和該數(shù)碼管COM端相連的I/O口有效,然后從對應的 口輸出其顯示代碼即可 特點為:數(shù)碼管輪流點亮 適用場合:由于可以節(jié)省I/O線,所以用于多個數(shù)碼管顯示的場合。,2.應用 例1:設計電路,程序,使1位數(shù)碼管(共陽)依次顯示0F,每個數(shù)字的顯示時間是1s. 電路:,程序清單: #include unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0

6、 x83,0 xc6,0 xa1,0 x86,0 x8e; void delay(unsigned int a) unsigned char i; while(a-) for(i=0;i120;i+); void main() unsigned char j; while (1) for(j=0;j16;j+) P2=sz1j; delay(1000); 看仿真效果,例2:用開關控制LED顯示 設計電路程序,用8個開關作為輸入,8個發(fā)光二極管作為輸出,顯示8位開關的二進制數(shù)。,#include void delay(unsigned int a) unsigned char i; while(

7、a-) for(i=0;i120;i+); void main() unsigned char m; while(1) m=P2; P1=m; delay(1000); ,例3:用開關控制數(shù)碼管顯示 設計電路和程序,用開關作為輸入元件,用數(shù)碼管顯示4位開關的二進制數(shù)。(例如4個開關都閉合,則4個開關狀態(tài)0000,則數(shù)碼管顯示0。以此類推),程序清單: #include unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0

8、 x8e; void delay(unsigned int a) unsigned char i; while(a-) for(i=0;i120;i+); void main() unsigned char m; P1=0 xff; while(1) m=P1; m=m ,例4:設計計數(shù)器(099),兩位數(shù)碼管顯示 靜態(tài)顯示,#include unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e; void de

9、lay(unsigned int a) unsigned char i; while(a-) for(i=0;i120;i+); void main() unsigned char m,i,j; while(1) for(m=0;m100;m+) i=m/10; j=m%10; P2=sz1i; P3=sz1j; delay(1000); ,例5:設計可以記錄按鍵次數(shù)的計數(shù)器(099),兩位數(shù)碼管顯示靜態(tài)顯示,#include sbit s1=P32; unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,

10、0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e; void delay(unsigned int a) unsigned char i; while(a-) for(i=0;i120;i+); void main() unsigned char m=0,i,j; while(1) if(s1=0) delay(10); if(s1=0) while(s1=0);m+; if(m=100) m=0; i=m/10; j=m%10; P0=sz1i; P2=sz1j; ,情境二 倒計時 項目三 數(shù)碼管顯示控制 -單片機控制數(shù)碼管動態(tài)顯示,一、LED數(shù)

11、碼管的顯示方式 a.靜態(tài)LED顯示器電路 數(shù)碼管的COM端接不變的高/低電平,每位數(shù)碼管的和端與一個位的 相連。 要在某一位數(shù)碼管上顯示字符時,只要從對應的 口輸出其顯示代碼即可 特點為:數(shù)碼管恒定地亮,顯示某個數(shù)值,直到顯示字符改變?yōu)橹?適用場合:由于太占據(jù)I/O線,所以用于1個或較少數(shù)碼管顯示的場合。,b.動態(tài)LED顯示器電路 每個數(shù)碼管的COM端和不同的I/O口相連,每位數(shù)碼管的和端接在一起,與一個位的 相連。 要在某一位數(shù)碼管上顯示字符時,首先和該數(shù)碼管COM端相連的I/O口有效,然后從對應的 口輸出其顯示代碼即可 特點為:數(shù)碼管輪流點亮 適用場合:由于可以節(jié)省I/O線,所以用于多個數(shù)

12、碼管顯示的場合。 優(yōu)點:當顯示位數(shù)較多時,采用動態(tài)顯示方式比較節(jié)省I/O口,硬件電路也較靜態(tài)顯示簡單。 缺點:其穩(wěn)定度不如靜態(tài)顯示方式。而且在顯示位數(shù)較多時CPU要輪番掃描,占用CPU較多的時間。,二動態(tài)顯示的幾點說明 1.原理 2.延時時間 (1)為什么加延時 因為人眼睛有視覺停留的效果,只要圖像變化不小于24楨看起來就是連續(xù)的。電影就是這個原理制成的。數(shù)碼管也一樣。 (2)掃描時間長短 掃描頻率只要大于24hz就行了,即掃描一次時間小于40ms. 若是多個led顯示的話,則每個led的顯示掃描時間應小于40ms/led個數(shù)。 (一般最小為1ms) 掃描時間太長(掃描太慢),看起來會有閃爍的

13、感覺,或者不能形成有效數(shù)字,只是單個顯示的循環(huán)了。 如果掃描時間太短(掃描太快),就會造成顯示為全亮(但亮度不是很高),但是有個別亮度會大一些。 (3)方法 加延時程序(1ms的延時程序) 讓學生畫出動態(tài)顯示電路 3.LED限流電阻的估算 電阻選擇不合適,會使數(shù)碼管不亮或燒壞。 每段LED電流可設為10mA左右。,4.數(shù)碼管驅動: (1)原因 單片機的I/O口提供的電很小,以P1口為例,輸出電流只能驅動4個LS TTL負載,輸出電流很小,微安極。 而點亮數(shù)碼管一般需要較大的電流.每段電流為10mA。所以要加驅動電路,增加I/O口的驅動能力,增大電流。否則在數(shù)碼管較多的時候,會出現(xiàn)顏色太暗,有時

14、候甚至會缺筆。 (2)電路 可以用 三極管:8550(PNP),8050(NPN) (設計電路時注意結合三極管電流的流向來接共陽或共陰的數(shù)碼管) 譯碼器:74HC138 驅動器:74LS245 鎖存器:74HC573 反相器:74ls04 等增加驅動能力。,1.加三極管作驅動共陰數(shù)碼管 共陽數(shù)碼管 8050 8550,1.加三極管作驅動,2.加鎖存器(74HC573)作驅動,段值端,位選端,3.加譯碼器(74HC138)作驅動,5.舉例 例:用四位數(shù)碼管顯示1234 電路設計,對于每個數(shù)碼管,顯示步驟: 1.送段值 2.送位選信號 3.延時 4.關閉(有時可?。?#include #inclu

15、de unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e; void delay(unsigned int a) unsigned char i; while(a-) for(i=0;i125;i+); void main() unsigned char m,i; m=0 xfe; while(1) for(i=1;i5;i+) P2=sz1i; /數(shù)碼管動態(tài)顯示1步-送段值 P1=m; /數(shù)碼管動態(tài)顯示2步-

16、位選有效 delay(5); /數(shù)碼管動態(tài)顯示3步-延時 P1=0 xff; /數(shù)碼管動態(tài)顯示4步-關閉 m=_crol_(m,1); ,例2:設計可以記錄按鍵次數(shù)的計數(shù)器(099),兩位數(shù)碼管顯示動態(tài)顯示,#include unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e; sbit seg1=P36; sbit seg2=P37; void delay(unsigned int a) unsigned c

17、har i; while(a-) for(i=0;i120;i+); void main() unsigned char m,i,j,t; P3=0 xff; while(1) for(m=0;m100;m+) /for(t=0;t80;t+) i=m/10; j=m%10; P2=sz1i; seg1=0; delay(10); P3=0 xff; P2=sz1j; seg2=0; delay(10); P3=0 xff; ,實驗:單片機和數(shù)碼管連接如圖所示,要求編程,數(shù)碼管循環(huán)顯示000-999。 若循環(huán)顯示00.0-99.9,怎么修改程序?,2.加鎖存器(74HC573)作驅動,段值端,

18、位選端,假設要求第一個數(shù)碼管先顯示2,則: P0輸出段值5BH,P2.6=1(數(shù)據(jù)進入), P2.6=0(數(shù)據(jù)鎖存),段值送入數(shù)碼管的段值端; P0輸出位選值FEH,P2.7=1 (數(shù)據(jù)進入), P2.7=0(數(shù)據(jù)鎖存),位選值送入數(shù)碼管的位選端; 則顯示2,#include sbit dzh=P26;/段選信號的鎖存器控制 sbit weix=P27;/位選信號的鎖存器控制 unsigned char code sz1=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6d,0X7d,0X07,0X7f,0X6f; /數(shù)碼管段值數(shù)組 unsigned char code sz

19、2=0 xfe,0 xfd,0 xfb; /數(shù)碼管位選信號數(shù)組 unsigned char sz3=0 x00,0 x00,0 x00; void delay(unsigned int a) unsigned int b; while(a-) for(b=0;b125;b+); void main() unsigned char i,u,v,w,t; unsigned int m; while(1) for(m=0;m1000;m+) u=m/100; v=m/10%10; w=m%10; sz30=u;sz31=v;sz32=w; for(t=0;t100;t+) for(i=0;i3;i+

20、) P0=sz1sz3i; dzh=1; dzh=0; P0=sz2i; weix=1; weix=0; delay(1); ,實驗總結,1.什么是動態(tài)顯示 2.動態(tài)顯示步驟 1個數(shù)碼管步驟: (1)送段值 (2)送位選(公共端) (3)延時 (4)關閉 3.為什么加驅動 4.加驅動方法 三極管 鎖存器,實驗總結:,實驗板數(shù)碼管動態(tài)顯示,假設要求第一個數(shù)碼管先顯示百位(例如2),則: 1.送段值:P0輸出段值5BH,P2.6=1(數(shù)據(jù)進入), P2.6=0(數(shù)據(jù)鎖存),段值送入數(shù)碼管的段值端; 2.送位選:P0輸出位選值FEH,P2.7=1 (數(shù)據(jù)進入), P2.7=0(數(shù)據(jù)鎖存),位選值送入

21、數(shù)碼管的位選端; 3.延時 其他兩個數(shù)碼管類似這三個步驟。,#include sbit dzh=P26;/段選信號的鎖存器控制 sbit weix=P27;/位選信號的鎖存器控制 unsigned char code sz1=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6d,0X7d,0X07,0X7f,0X6f; /數(shù)碼管段值數(shù) void delay(unsigned int a) unsigned int b; while(a-) for(b=0;b125;b+); void main() unsigned char u,v,t; unsigned int m; wh

22、ile(1) for(m=0;m100;m+) u=m/10; v=m%10; P0=sz1U; dzh=1; dzh=0; P0=0Xfe; weix=1; weix=0; delay(5); P0=sz1v; dzh=1; dzh=0; P0=0Xfe; weix=1; weix=0; delay(5); ,for(t=0;t50;t+),項目三 手動計數(shù)器 -單片機的外部中斷,一、 中斷系統(tǒng),(一)、中斷基本概念 1. 中斷定義,執(zhí)行主程序,主程序,繼續(xù)執(zhí)行主程序,斷點,中斷響應,執(zhí)行中斷處理程序,中斷返回,在單片機中,當CPU在執(zhí)行程序時,由單片機內部或外部的原因引起的隨機事件要求CP

23、U暫時停止正在執(zhí)行的程序,而轉向執(zhí)行一個用于處理該隨機事件的程序,處理完后又返回被中止的程序斷點處繼續(xù)執(zhí)行,這一過程就稱為中斷。 單片機處理中斷的4個步驟:中斷請求、中斷響應、中斷處理和中斷返回。 向CPU發(fā)出中斷請求的來源,或引起中斷的原因稱為中斷源。中斷源要求服務的請求稱為中斷請求。 中斷源可分為兩大類:一類來自單片機內部,稱之為內部中斷源;另一類來自單片機外部,稱之為外部中斷源。,(二)、單片機的中斷系統(tǒng),1中斷源(5個) 向CPU發(fā)出中斷請求的來源,或引起中斷的原因稱為中斷源。 (1). 外部中斷類 外部中斷是由外部原因(如打印機、鍵盤、控制開關、外部故障)引起的,可以通過兩個固定引腳

24、來輸入到單片機內的信號,即外部中0(INT0)和外部中斷1(INT1)。 外部中斷(INT0)請求信號輸入引腳為3.2。當CPU檢測到P3.2引腳上出現(xiàn)有效的中斷信號時,向申請中斷。 外部中斷(INT1)請求信號輸入引腳為.3 。當 檢測到P3.3引腳上出現(xiàn)有效的中斷信號時,向申請中斷。 (2). 定時中斷類 定時中斷是由內部定時(或計數(shù))溢出或外部定時(或計數(shù))溢出引起的,即定時器0(T0)中斷和定時器1(T1)中斷。 當定時器對單片機內部定時脈沖進行計數(shù)而發(fā)生計數(shù)溢出時,即表明定時時間到,申請中斷;或者當定時器對單片機外部計數(shù)脈沖進行計數(shù)而發(fā)生計數(shù)溢出時,即表明計數(shù)次數(shù)到,申請中斷。 片內

25、定時計數(shù)器溢出中斷(TF0):當定時計數(shù)器T0發(fā)生溢出時,置位TF0,并向CPU申請中斷。 片內定時計數(shù)器溢出中斷(TF1):當定時計數(shù)器T1發(fā)生溢出時,置位TF1,并向CPU申請中斷。 (3). 串行口中斷類 串行口中斷是為接收或發(fā)送串行數(shù)據(jù)而設置的。 串行接口中斷,包括 或。當發(fā)送或接收完一幀數(shù)據(jù)時,向CPU申請中斷。,2中斷入口地址 中斷服務子程序的入口地址。 因為相鄰中斷入口地址間的間隔為8個單元,所以一般在這些入口地址處存放一條跳轉指令,跳到真正的中斷服務程序 例如: AJMP INT0,3. 中斷優(yōu)先級、優(yōu)先權、中斷嵌套 幾個中斷源同時請求中斷;或者當某一個中斷正在響應中(即正在執(zhí)

26、行該中斷源的中斷服務程序),又有其它的中斷源請求中斷,這時中斷系統(tǒng)應如何處理呢?(優(yōu)先級) MCS-51單片機的中斷系統(tǒng),只規(guī)定了兩個中斷優(yōu)先級:高優(yōu)先級中斷或低優(yōu)先級中斷。這需要用指令預先設置 在同1個優(yōu)先級中,對5個中斷源的優(yōu)先次序安排如下(優(yōu)先權) 幾個原則: (1)不同級的中斷源同時申請中斷時先高后低; (2)同級的中斷源同時申請中斷時事先規(guī)定; (3)處理低級中斷又收到高級中斷請求時停低轉高;(中斷嵌套) (4)處理高級中斷又收到低級中斷請求時高不理低,(三)、與中斷控制相關的寄存器(掌握) 有4個(特殊功能寄存器) TCON-定時控制寄存器, IE-中斷允許控制寄存器,主要用于控制

27、中斷的開放和關閉。 IP-中斷優(yōu)先級控制寄存器,主要用于設定優(yōu)先級別。 SCON-及串行口控制寄存器 1IE(interrupt enable)中斷允許控制寄存器,字節(jié)地址為A8H 由于單片機沒有專門的開中斷和關中斷指令,個中斷源中斷的開放和關閉是通過中斷允許寄存器 進行兩級控制的 只有對應的中斷允許觸發(fā)器被置“1”,CPU才能響應該中斷.0 禁止,1允許 各位的功能說明: (1) EA(IE.7):CPU中斷總允許位。EA=1,CPU開放中斷。每個中斷源是被允許還是被禁止,分別由各中斷源的中斷允許位確定;EA=0,CPU屏蔽所有的中斷要求,稱為關中斷。 (2) ES(IE.4):串行口中斷允

28、許位。ES=1,允許串行口中斷;ES=0,禁止串行口中斷。 (3) ET1(IE.3):定時器1中斷允許位。ET1=1,允許定時器1中斷;ETl=0,禁止定時器1中斷。,(4) EX1(IE.2):外部中斷1中斷允許位。EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。 (5) ET0(IE.1):定時器0中斷允許位。ET0=1,允許定時器0中斷;ET0=0,禁止定時器0中斷。 (6) EX0(IE.0):外部中斷0中斷允許位。EX0=1,允許外部中斷0中斷;EX0=0,禁止外部中斷0中斷。 例如:開放外部中斷0和定時器1 MOV IE,#89H 也可位操作 SETB EA SE

29、TB ET1 SETB EX0,2TCON定時、外中斷控制寄存器,字節(jié)地址為88H 定時器控制寄存器TCON的作用是控制定時器的啟動與停止,并保存T0、T1的溢出中斷標志和外部中斷、的中斷標志。 (1) TF1(TCON.7):定時器1溢出標志位。定時器1被啟動計數(shù)后,從初值開始進行加1計數(shù),當定時器1計滿溢出時,由硬件自動使TF1置1,并申請中斷。該標志一直保持到CPU響應中斷后,才由硬件自動清0。也可用軟件查詢該標志,并由軟件清0。 (2) TR1(TCON.6):定時器1啟停控制位。 (3) TF0(TCON.5):定時器0溢出標志位。其功能同TF1。 (4) TR0(TCON.4):定

30、時器0啟、??刂莆弧F涔δ芡琓R1。 (5) IE1(TCON.3):外部中斷1請求標志位。IEl=1表示外部中斷1向CPU申請中斷。當CPU響應外部中斷1的中斷請求時,由硬件自動使IE1清0(邊沿觸發(fā)方式)。 (6) IT1(TCON.2):外部中斷1觸發(fā)方式選擇位。 當ITl=0時,外部中斷1為電平觸發(fā)方式。若P3.3為低電平,則認為有中斷申請;若為高電平,認為無中斷申請或中斷申請已撤除。 當ITl=1時,外部中斷1為邊沿觸發(fā)方式。若P3.3為下降沿,則認為有中斷申請。 (7) IE0(TCON.1):外部中斷0請求標志位。其功能同IE1。 (8) IT0(TCON.0):外部中斷0觸發(fā)方

31、式選擇位。其功能同IT1。,3.SCON串口控制寄存器,字節(jié)地址為98H 低2位TI和RI保存串行口的接收中斷和發(fā)送中斷標志。 (1)TI (SCON.1):串行發(fā)送中斷請求標志。CPU將一個字節(jié)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后啟動發(fā)送,每發(fā)送完一幀數(shù)據(jù),硬件自動使TI置1。但CPU響應中斷后,硬件并不能自動使TI清0,必須由軟件使TI清0。 (2) RI (SCON.0):串行接收中斷請求標志。在串行口允許接收時,每接收完一幀數(shù)據(jù),硬件自動使RI置1。但CPU響應中斷后,硬件并不能自動使RI清0,必須由軟件使RI清0。,4.IP中斷優(yōu)先級控制寄存器 中斷優(yōu)先級寄存器IP的作用是設定各中斷源的優(yōu)先

32、級別。 (1) PS(IP.4):串行口中斷優(yōu)先級控制位。PS=1,串行口為高優(yōu)先級中斷;PS=0,串行口為低優(yōu)先級中斷。 (2) PT1(IP.3):定時器1中斷優(yōu)先級控制位。PT1=1,定時器1為高優(yōu)先級中斷;PTl=0,定時器1為低優(yōu)先級中斷。 (3) PX1(IP.2):外部中斷1中斷優(yōu)先級控制位。PX1=1,外部中斷1為高優(yōu)先級中斷;PXl=0,外部中斷1為低優(yōu)先級中斷。 (4) PT0(IP.1):定時器0中斷優(yōu)先級控制位。PT0=1,定時器T0為高優(yōu)先級中斷PT0=0,定時器0為低優(yōu)先級中斷。 (5) PX0(IP.0):外部中斷0中斷優(yōu)先級控制位。PX0=1,外部中斷0為高優(yōu)先

33、級中斷;PX0=0,外部中斷0為低優(yōu)先級中斷。,四、中斷過程(了解) 單片機處理中斷的4個步驟:中斷請求、中斷響應、中斷處理和中斷返回。 1.中斷請求 外部中斷源-P3.2或P3.3,有效信號-IE0或IE1硬件置1,向CPU提出中斷請求 T0或T1發(fā)生溢出-TF0或TF1硬件置1,向CPU提出中斷請求 2.中斷響應 中斷響應條件: 中斷總允許位EA=1,請求中斷的中斷源的中斷允許位為1 無同級或高級中斷正在服務; 當前指令周期結束; 正在執(zhí)行指令不是RETI、RET或訪問IE、IP指令 中斷響應過程: 屏蔽同級和低級中斷源的中斷請求 清除該中斷源的中斷請求標志位(硬件或軟件清0) 保護斷點,

34、把斷點地址壓入堆棧保護(但不保護狀態(tài)寄存器PSW及其他寄存器內容) 然后將中斷源對應的中斷入口地址裝入程序計數(shù)器PC中,使程序轉向該中斷入口地址,3.執(zhí)行中斷服務程序 保護現(xiàn)場(ACC,PSW,DPTR),用PUSH指令 執(zhí)行中斷服務程序主體 恢復現(xiàn)場 4.中斷返回(RETI) 恢復斷點地址 開放響應中斷時屏蔽的中斷 5.中斷響應等待時間和中斷請求的撤除 (1)中斷響應等待時間 (2)中斷請求的撤除 CPU響應某中斷請求后,在中斷返回前,應該撤消該中斷請求,否則會重復響應該中斷。不同中斷源中斷請求的撤除方法是不一樣的。 (1)硬件自動撤除 TF0,TF1,邊沿觸發(fā)的外部中斷請求標志IE0,IE

35、1 (2)軟件撤除 串行通信的發(fā)送完、接收完中斷標志TI,RI (3)外加電路撤除 電平觸發(fā)的外部中斷請求標志IE0,IE1(書上),一、電路設計 外部中斷(P3.2或P3.2) 二、軟件設計 1、主程序 (1)在產生中斷請求前,完成中斷初始化(設置3個寄存器) a.開放CPU中斷和有關中斷源的中斷允許,設置中斷允許寄存器IE中相應的位。 b.根據(jù)需要確定各中斷源的優(yōu)先級別,設置中斷優(yōu)先級寄存器IP中相應的位 c.根據(jù)需要確定外部中斷的觸發(fā)方式,設置定時器控制寄存器TCON中相應的位。 (2)等待中斷來 2.中斷服務程序 void lsd() interrupt 0 ,二、中斷應用舉例 1設計

36、電路和程序,8個發(fā)光二極管和1個開關。平時,8個燈循環(huán)點亮;當開關按下時,8個燈全亮然后全滅,如此循環(huán)8次后,返回平時狀態(tài)。 電路:,程序如下: #include #include void delay(unsigned int a) unsigned char i; while(-a!= 0) for(i=0;i125;i+); void lsd() interrupt 0 unsigned char j; for(j=0;j8;j+) P1=0 x00; delay(1000); P1=0 xff; delay(1000); void main() unsigned char i,m; E

37、A=1; EX0=1; IT0=1; P1=0 x7f;,while (1) for(i=0;i8;i+) m=_crol_(m,1); 考慮此處直接用P1是否可以? P1=m; delay(1000); 看仿真效果,回顧:,(一)動態(tài)顯示 1.什么是動態(tài)顯示 2.動態(tài)顯示步驟 1個數(shù)碼管步驟: (1)送段值 (2)送位選(公共端) (3)延時 (4)關閉 3.加驅動方法 三極管 鎖存器,回顧:,(二)中斷 1.中斷源 5個 2.中斷優(yōu)先級 2個 3.外部中斷 P3.2,P3.3 4.外部中斷寄存器 IE:EA,EX0,ET0,EX1,ET1,ES TCON:IE0,IT0,IE1,IT1 I

38、P:PX0,PT0,PX1,PT1,PS 中斷程序如何編寫?,例:記錄按鍵的次數(shù)(2位數(shù)碼管動態(tài)顯示),從0開始計按鍵次數(shù)。,分析:,1.是否要用外部中斷 2. 主程序做什么? 中斷初始化,顯示 中斷程序做什么? 按鍵計數(shù),自加1 3.對應編寫程序 主程序 中斷程序,#include /包含AT89X52.H頭文件 unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e; unsigned char m; sbit

39、 dua=P36; sbit wei=P37; void delay(unsigned int a) unsigned char i; while(a-) for(i=0;i120;i+); void disp(unsigned char m) unsigned char i,j; i=m/10; j=m%10; P2=sz1i; dua=0; delay(5); P3=0XFF; P2=sz1j; wei=0; delay(5); P3=0XFF; ,void main() EA=1;EX0=1;IT0=1; while(1) disp(m); void zd0() interrupt 0

40、m+; if(m=100) m=0; ,實驗:在開發(fā)板上實現(xiàn)按鍵計數(shù)器。,2.設計電路和程序,2個開關(簡稱為S1和S2),2個數(shù)碼管(簡稱為L1和L2),平時L1、L2循環(huán)顯示0099。當S1 按下時,L1顯示04,然后全暗,返回平時狀態(tài);當S2 按下時,L2顯示04,然后全暗,返回平時狀態(tài)。S1的優(yōu)先級高于S2。 電路:,程序如下: #include unsigned char code sz1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x84; v

41、oid delay(unsigned int a) unsigned char i; while(a-) for(i=0;i120;i+); void smg0() interrupt 0 unsigned char t; for(t=0;t5;t+) P0=sz1t; delay(1000); P0=0 xff; void smg1() interrupt 2 unsigned char n; for(n=0;n5;n+) P2=sz1n; delay(1000); P2=0 xff; ,void main() unsigned char m,i,j; P0=0XFF; P2=0XFF; EA=1; EX0=1; EX1=1; IT0=1; IT1=1; while(1) for(m=0;m100;m+) i=m/10; j=m%10; P0=sz1i; P2=sz1j; delay(1000); ,例3:記錄按鍵次數(shù)。,#incl

溫馨提示

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

評論

0/150

提交評論