




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機原理及應(yīng)用項目三簡易加減計數(shù)器和交通信號燈設(shè)計單片機原理及應(yīng)用項目三簡易加減計數(shù)器和交通信號燈設(shè)計1任務(wù)1簡易加減計數(shù)器的設(shè)計1.技能要求單片機輸出口接3位數(shù)碼管和三個獨立按鍵,這3位數(shù)碼管分別顯示一個變量的個位、十位和百位,三個按鍵分別作為“加”、“減”和“清零”功能,當(dāng)按下“加”鍵時,數(shù)碼管顯示的變量加1,當(dāng)按下“減”鍵時,數(shù)碼管顯示的變量減1,當(dāng)按下“清零”鍵時,數(shù)碼管顯示和變量為0。任務(wù)1簡易加減計數(shù)器的設(shè)計1.技能要求2知識鏈接一鍵盤接口電路獨立聯(lián)接式無編碼鍵盤
獨立聯(lián)接式編碼鍵盤
1、鍵盤的分類與結(jié)構(gòu)◆獨立聯(lián)接式鍵盤◆矩陣聯(lián)接式鍵盤◆屏幕鍵盤(觸摸屏)◆無編碼鍵盤◆編碼鍵盤無編碼,簡單有效,鍵數(shù)較少時采用編碼,節(jié)省I/O口線,鍵數(shù)較多時采用任務(wù)1簡易加減計數(shù)器的設(shè)計知識鏈接一鍵盤接口電路獨立聯(lián)接式無編碼鍵盤獨立聯(lián)接式編碼31.鍵盤的工作原理及去抖動
對應(yīng)任何按鍵來說,由于機械觸點的彈性作用,觸點在閉合和斷開瞬間的電接觸情況不穩(wěn)定,造成了電壓信號的抖動現(xiàn)象,如圖所示。按鍵的抖動時間一般為5ms~10ms。這種現(xiàn)象會引起單片機對于一次鍵操作進行多次處理,因此必須設(shè)法消除鍵接通或斷開時的抖動現(xiàn)象。常用的去抖動方法有硬件和軟件兩種。閉合穩(wěn)定理想波形實際波形前沿抖動后沿抖動任務(wù)1簡易加減計數(shù)器的設(shè)計1.鍵盤的工作原理及去抖動對應(yīng)任何按鍵來說,由于機械觸點4a)硬件去抖硬件消抖可以采用R-S觸發(fā)器或單穩(wěn)電路構(gòu)成去抖電路,分別如圖所示。硬件消抖因為要增加硬件開銷,造成電路復(fù)雜,除了在數(shù)字電路里使用外,在單片機系統(tǒng)中不太采用。任務(wù)1簡易加減計數(shù)器的設(shè)計a)硬件去抖任務(wù)1簡易加減計數(shù)器的設(shè)計5
b)軟件去抖在檢測到有鍵按下時,執(zhí)行一個10ms的延時程序后,再確認該鍵是否保持閉合狀態(tài)。另外一種方法是連續(xù)判斷按鍵所在線路的電平,如果連續(xù)100次(甚至更多)都出現(xiàn)低電平(一般按鍵都是低電平表示按下),就認為按鍵已經(jīng)穩(wěn)定,可以進行識別,這是企業(yè)實際開發(fā)產(chǎn)品中常用的方法。以P1.0所接按鍵為例,其編程流程圖如圖所示.
任務(wù)1簡易加減計數(shù)器的設(shè)計b)軟件去抖任務(wù)1簡易加減計數(shù)器的設(shè)計6sbitkey=P1^0;key=1; //P1.0置“1”,作輸入口if(key==0) //判斷按鍵是否按下{delay10ms();//延時10msif(key==0)//再次判斷按鍵是否按下{a++;//按鍵功能代碼(變量a加“1”操作)while(key==0);//等待按鍵釋放 }}任務(wù)1簡易加減計數(shù)器的設(shè)計sbitkey=P1^0;任務(wù)1簡易加減計數(shù)器的設(shè)計7
以單片機為基礎(chǔ)的電子產(chǎn)品設(shè)計中,鍵盤是一種最為常見的人機交互設(shè)備。通常,鍵數(shù)較少、鍵盤的功能簡單。1.簡單鍵盤的掃描程序設(shè)計
★鍵盤掃描程序嵌入到主程序循環(huán)之中,與主程序一起構(gòu)成主循環(huán)套。
★鍵敲擊速度約幾次/S,設(shè)計鍵盤掃描程序時,必須保證約100mS內(nèi)就要循環(huán)掃描1次。任務(wù)1簡易加減計數(shù)器的設(shè)計以單片機為基礎(chǔ)的電子產(chǎn)品設(shè)計中,鍵盤是一種最為常見的人機8任務(wù)1簡易加減計數(shù)器的設(shè)計任務(wù)1簡易加減計數(shù)器的設(shè)計9任務(wù)1簡易加減計數(shù)器的設(shè)計讀取值輸出值鍵碼鍵名P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.011101110EEH1#11011110DEH2#10111110BEH3#011111107EH4#11101101EDH5#11011101DDH6#10111101BDH7#011111017DH8#11101011EBH9#11011011DBH10#10111011BBH11#011110117BH12#11100111E7H13#11010111D7H14#10110111B7H15#0111011177H16#1111××××F×H無鍵
按鍵數(shù)量進一步增加時,采用矩陣聯(lián)接式鍵盤可節(jié)省更多的口線,接口電路也更簡單。1.1.2矩陣連接鍵盤任務(wù)1簡易加減計數(shù)器的設(shè)計讀取值輸出值鍵碼鍵名P1.7P10鍵盤掃描程序的編寫(1)判別有無鍵按下。(2)延時。(3)鍵盤掃描取得閉合鍵的行、列值-鍵值。(4)用計算法或查表法得到鍵號。*(5)判斷閉合鍵是否釋放,如沒釋放則繼續(xù)等待。(6)將閉合鍵鍵號保存,然后返回。鍵盤掃描程序一般流程:任務(wù)1簡易加減計數(shù)器的設(shè)計矩陣式鍵盤的工作原理
當(dāng)鍵盤有鍵按下時,要逐行或逐列掃描,以判斷是哪一個鍵按下。通常掃描方式有兩種:掃描法和反轉(zhuǎn)法。鍵盤掃描程序的編寫(1)判別有無鍵按下。鍵盤掃描程序一般流程11任務(wù)1簡易加減計數(shù)器的設(shè)計矩陣連接鍵盤掃描任務(wù)1簡易加減計數(shù)器的設(shè)計矩陣連接鍵盤掃描12知識鏈接二:數(shù)碼管顯示技術(shù)任務(wù)1簡易加減計數(shù)器的設(shè)計1.2.1七段LED顯示器
通常的7段LED顯示塊中有8個發(fā)光二極管,故也叫做8段顯示器。其中7個發(fā)光二極管構(gòu)成七筆字形“8”,一個發(fā)光二極管構(gòu)成小數(shù)點。1.LED顯示器的結(jié)構(gòu)與原理知識鏈接二:數(shù)碼管顯示技術(shù)任務(wù)1簡易加減計數(shù)器的設(shè)計1.13任務(wù)1簡易加減計數(shù)器的設(shè)計2.LED顯示器的顯示方式(1)LED靜態(tài)顯示方式每一位顯示都占用單獨的具有鎖存功能的I/O接口,com端連接在一起。(2)LED動態(tài)顯示方式
是將所有數(shù)碼管的“a,b,c,d,e,f,g,dp”的同名端連在一起,每個數(shù)碼管的COM為各自獨立的位選信號。即在某一時刻,只讓某一位的位選線處于選通狀態(tài),而其他各位的位選線處于關(guān)閉狀態(tài)。任務(wù)1簡易加減計數(shù)器的設(shè)計2.LED顯示器的顯示方式14任務(wù)1簡易加減計數(shù)器的設(shè)計顯示器由6個共陰極LED數(shù)碼管構(gòu)成;P0口輸出顯示段碼,經(jīng)由一片74LS245驅(qū)動輸出給LED管;P1口輸出位碼(片選),經(jīng)由74LS05輸出給LED管。任務(wù)1簡易加減計數(shù)器的設(shè)計顯示器由6個共陰極LED數(shù)碼管15動態(tài)掃描過程任務(wù)1簡易加減計數(shù)器的設(shè)計首先從段選線上送出字型編碼,再控制位選端,字符就顯示在指定數(shù)碼管上,其他位選端無效的數(shù)碼管都處于熄滅狀態(tài),持續(xù)1.5ms時間,然后關(guān)閉所有顯示;接下來又送出新的字型編碼,按照上述過程又顯示在另外一位數(shù)碼管上,直到每一位數(shù)碼管都掃描完為止,這一過程即為動態(tài)掃描顯示。數(shù)碼管其實是輪流依次點亮的,但由于人的視覺駐留效應(yīng),因此當(dāng)每個數(shù)碼管點亮的時間小到一定程度時,人就感覺不出字符的移動或閃爍,覺得每位數(shù)碼管都一直在顯示,達到一種穩(wěn)定的視覺效果。動態(tài)掃描過程任務(wù)1簡易加減計數(shù)器的設(shè)計首先從段選線上送出16任務(wù)1簡易加減計數(shù)器的設(shè)計參考程序如下:#include<reg51.h>unsignedcharcodeTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C};unsignedcharcodeCol[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};voidDelay(){unsignedchari;for(i=0;i<250;i++);}voidmain()//同時顯示123456{unsignedcharj;while(1){for(j=1;j<7;j++) {P0=Tab[j];P1=Col[j-1];//開第一個(共陰)數(shù)碼管
Delay();P1=0xff;//關(guān)數(shù)碼管
Delay();}}}任務(wù)1簡易加減計數(shù)器的設(shè)計參考程序如下:17任務(wù)1簡易加減計數(shù)器的設(shè)計1.3數(shù)碼管顯示4×4鍵盤編號1.技能要求單片機P2接1位數(shù)碼管,P1口接由16個按鍵組成的4×4行列鍵盤。當(dāng)按下這16個按鍵的其中之一時,數(shù)碼管顯示該按鍵對應(yīng)的鍵盤編號。任務(wù)1簡易加減計數(shù)器的設(shè)計1.3數(shù)碼管顯示4×4鍵盤編號18任務(wù)1簡易加減計數(shù)器的設(shè)計.仿真電路圖
數(shù)碼管顯示4×4鍵盤編號的電路圖如下圖所示,電路中的輕觸按鍵使用元件庫中的“button”元件,特別注意16個按鍵的連接關(guān)系及其和單片機之間的連接關(guān)系。任務(wù)1簡易加減計數(shù)器的設(shè)計.仿真電路圖19任務(wù)1簡易加減計數(shù)器的設(shè)計.程序設(shè)計與調(diào)試程序采用線翻轉(zhuǎn)法識別閉合鍵,反轉(zhuǎn)法原理:行作低電平輸出,列作輸入,讀列線;列作低電平輸出,行作輸入,讀行線。數(shù)碼管靜態(tài)顯示方式。任務(wù)1簡易加減計數(shù)器的設(shè)計.程序設(shè)計與調(diào)試20任務(wù)1簡易加減計數(shù)器的設(shè)計intmain(){while(1){keyScan();}}delay(unsignedinti){while(i--);}voidkeyScan(){unsignedchartemp,a;temp=0xff;P1=0xf0;if(P1!=0xf0)//判斷是否有按鍵按下{delay(1000);//延時去抖if(P1!=0xf0)//再次判斷是否有按鍵按下{P1=0xf0; //行作輸出,列作輸入temp=P1; //讀取列值P1=0x0f; //列作輸出,行作輸入temp=temp|P1; //讀取行值并和列值合并switch(temp){case0xee:a=0; break;case0xde:a=1; break;case0xbe:a=2;
break; case0x7e:a=3;
break;參考程序如下:#include<reg51.h>unsignedcharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//09的段碼0x88,0x83,0xc6,0xa1,0x86,0x8e}; //A~F的段碼case0xed:a=4;
break;case0xdd:a=5; break;case0xbd:a=6; break;case0x7d:a=7; break;case0xeb:a=8;
break;case0xdb:a=9; break;case0xbb:a=10; break;case0x7b:a=11; break;case0xe7:a=12; break;case0xd7:a=13; break;case0xb7:a=14; break;
case0x77:a=15; break;}P2=seg[a];//將鍵值對應(yīng)的段碼送到P2口P1=0xf0;while(P1!=0xf0)delay(50);}}} 任務(wù)1簡易加減計數(shù)器的設(shè)計intmain()delay21任務(wù)1簡易加減計數(shù)器的設(shè)計(1)畫出硬件電路圖簡易加減計數(shù)器任務(wù)實施:任務(wù)1簡易加減計數(shù)器的設(shè)計(1)畫出硬件電路圖簡易加減計22任務(wù)1簡易加減計數(shù)器的設(shè)計(2).程序設(shè)計與調(diào)試
要獲取一個變量的每一位數(shù)字的值,用到除法運算符“/”和模運算符“%”兩個算術(shù)運算符。當(dāng)兩個整數(shù)作除法運算時結(jié)果仍為整數(shù),余數(shù)則會被丟棄,因此可作為取整操作;模運算“%”表示取余操作。
例如,求一個變量temp的“百、十、個”位,分別賦給變量a、b、c的操作如下:a=temp/100%10; //除以100,再對10取余b=temp/10%10; //求得temp的十位c=temp%10; //求得temp的個位要在LED數(shù)碼管上顯示變量temp的“百、十、個”位,可直接寫作:P2=seg[temp/100%10];P2=seg[temp/10%10];P2=seg[temp%10];其中seg[]是存放0~9段碼的數(shù)組。任務(wù)1簡易加減計數(shù)器的設(shè)計(2).程序設(shè)計與調(diào)試23任務(wù)1簡易加減計數(shù)器的設(shè)計#include<reg51.h>#include<INTRINS.H>unsignedchara;unsignedcharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9十個數(shù)字的共陽型段碼sbitk1=P1^0;sbitk2=P1^2;sbitk3=P1^4;voiddelay(unsignedintj){ while(j--);}display(){ unsignedchari,wk=0x01;//wk變量作位控,初始選通右邊第1位 unsignedcharbuf[3]; //聲明數(shù)碼管顯示字形緩沖數(shù)組 buf[0]=seg[a%10]; //a的個位buf[1]=seg[a/10%10]; //a的十位buf[2]=seg[a/100]; //a的百位,小于999時可以不對10取余獨立按鍵控制數(shù)碼管加減計數(shù)的程序如下:任務(wù)1簡易加減計數(shù)器的設(shè)計#include<reg5124任務(wù)1簡易加減計數(shù)器的設(shè)計for(i=0;i<3;i++){ P3=wk; //輸出位控
P2=buf[i];//依次輸出段碼
delay(50);//延時
wk=_crol_(wk,1); //位控左移一位
P2=0xff; //熄滅所有數(shù)碼管(消隱)
}}voidbutton(){ k1=1;if(k1==0){delay(1000);if(k1==0){a++;while(k1==0)display(); } }
k2=1;if(!k2)//如果k2為低電平的另一種寫示{delay(1000);if(!k2){a--;while(!k2)display(); } }k3=1;if(k3==0){delay(1000);if(k3==0){a=0;while(k3==0)display();}}}intmain(){while(1){button();display(); }}任務(wù)1簡易加減計數(shù)器的設(shè)計for(i=0;i<3;i+2526任務(wù)3方波發(fā)生器的設(shè)計1.技能要求設(shè)晶振頻率6MHz。利用單片機定時器T0的方式1,在P3.0端口上輸出周期為1ms的方波。2.仿真電路圖本任務(wù)仿真電路圖如圖所示。P3.0端口的示波器用于觀察波形和計算信號頻率。圖中示波器的每小格為0.1ms,因此信號周期為1ms,頻率為1KHz。26任務(wù)3方波發(fā)生器的設(shè)計1.技能要求26
操作步驟:圖中右上角的就是模擬示波器,4蹤。仿真時可以出現(xiàn)示波器界面,可以對其操作。操作方法與一般示波器相同。
圖中最下部的是個頻率計,運行仿真時可以顯示測量到的方波的頻率值。添加這2個虛擬儀器的方法是,在軟件左邊點擊虛擬儀器圖標,選擇第一個就是虛擬示波器,第三個就是頻率計。把虛擬示波器的輸入端接到P2口的任意引腳,虛擬頻率計也可以將輸入端接入P2口任意引腳。在這幅圖里,采用網(wǎng)絡(luò)標號的形式接線,看起來圖面整潔一點。任務(wù)3方波發(fā)生器的設(shè)計操作步驟:任務(wù)3方波發(fā)生器的設(shè)計27采用查詢方式處理的程序:#include<reg52.h>sbit P3_0=P3^0;voidmain(){TMOD=0x01;TL0=0x06;TH0=0xff;TR0=1;while(1) { while(!TF0);
TF0=0; P3_0=~P3_0; }}頻率為1KHz的方波,其周期為1/1KHz,即1ms。要在P3.0端口上輸出周期為1ms的方波,需要使P3.0端口每隔0.5ms取反一次。我們可以通過定時器作0.5ms定時,定時時間到,在程序中對P3.0取反。(1)確定工作模式和工作方式定時器T0工作方式1時:M1M0=01,c/T=0,GATE=0,高4位未使用,全部賦0,則TMOD=0x01。(2)計算0.5ms定時T0的初值。晶振頻率6MHz,則機器周期為2μs,設(shè)T0的初值為X,則:X=(216-500÷2)=65036=FF06H因此,TH0的初值為0xff,TL0的初值為0x06。3.程序設(shè)計與調(diào)試任務(wù)3方波發(fā)生器的設(shè)計采用查詢方式處理的程序:頻率為1KHz的方波,其周期為1/128相關(guān)知識:利用定時器實現(xiàn)延時
8051單片機內(nèi)部有兩個16位的可編程定時器/計數(shù)器,稱為定時器0(T0)和定時器1(T1),可編程選擇其作為定時器用或作為計數(shù)器用。8051定時器/計數(shù)器由定時器T0、定時器T1、定時器方式寄存器TMOD和定時器控制寄存器TCON組成。TMOD、TCON與T0、T1間通過內(nèi)部總線及邏輯電路連接,TMOD用于設(shè)置定時器的工作方式,TCON用于控制定時器的啟動與停止。
基本思想:每隔1ms在程序中對P3.0取反,如此循環(huán)不止。任務(wù)3方波發(fā)生器的設(shè)計相關(guān)知識:利用定時器實現(xiàn)延時8051單片機內(nèi)部有兩個29定時器/計數(shù)器結(jié)構(gòu)如圖6-1所示,定時器/計數(shù)器T0由特殊功能寄存器TH0、TL0構(gòu)成,定時器/計數(shù)器T1由特殊功能寄存器TH1、TL1構(gòu)成。30圖6-1AT89S51單片機的定時器/計數(shù)器結(jié)構(gòu)框圖
定時器/計數(shù)器的結(jié)構(gòu)定時器/計數(shù)器結(jié)構(gòu)如圖6-1所示,定時器/計數(shù)器T0由特殊功301.計數(shù)功能計數(shù)器用于統(tǒng)計從TO(P3.4)和Tl(P3.5)兩個引腳輸入脈沖的負跳變數(shù)量。負跳變是指前一個機器周期采樣為高電平,后一個機器周期為低電平。每輸入一個脈沖負跳變,計數(shù)器加1。輸入脈沖的高電平與低電平至少應(yīng)保持一個機器周期時間,以確保正確采樣,因此輸入脈沖的頻率最高為單片機內(nèi)部脈沖頻率的一半。如果內(nèi)部脈沖頻率為1MHZ,則最高計數(shù)頻率為0.5MHz。定時器/計數(shù)器的功能DATE:2019/11/16311.計數(shù)功能定時器/計數(shù)器的功能DATE:2019/112.定時功能定時功能是單片機通過對內(nèi)部機器脈沖信號計數(shù)實現(xiàn)的,計數(shù)值乘以機器周期就是相應(yīng)的時間。例如,如果單片機采用12MHz的晶振,則機器內(nèi)部脈沖頻率為1MHz,則機器周期為1us,若共計數(shù)1000,則用時為1ms時間。
定時器/計數(shù)器的功能DATE:2019/11/16322.定時功能定時器/計數(shù)器的功能DATE:2019/
圖5-1
TMOD格式8位分為兩組,高4位控制T1,低4位控制T0。TMOD各位的功能。(1)GATE———門控位。
0:僅由運行控制位TRx(x
=
0,1)來控制定時器/計數(shù)器運行。
1:用外中斷引腳(或)上的電平與運行控制位TRx共同來控制定時器/計數(shù)器運行。33
工作方式控制寄存器TMOD33工作方式控制寄存器TMOD33(2)M1、M0——工作方式選擇位M1、M0共有4種編碼,對應(yīng)于4種工作方式的選擇,如表所示。(3)C/—計數(shù)器模式和定時器模式選擇位34
工作方式控制寄存器TMOD
0:為定時器工作模式;1:為計數(shù)器工作模式,計數(shù)器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負跳變)計數(shù)。(2)M1、M0——工作方式選擇位34工作方式控制寄存器T3435
定時器/計數(shù)器的4種工作方式1方式0M1、M0=00時,被設(shè)置為工作方式0,等效邏輯結(jié)構(gòu)框圖如圖6-4所示(以定時器/計數(shù)器T1為例,TMOD.5、MOD.4
=
00)。35定時器/計數(shù)器的4種工作方式1方式0M1、M0=35【訓(xùn)練1】T0方式0定時設(shè)fosc=6Mhz,定時器/計數(shù)器T0以工作方式0定時2ms,編寫初始化程序。說明:fosc即為晶振頻率。首先計算計數(shù)初值。根據(jù)公式4-2有:定時時間=(8192-計數(shù)初值)×12/fosc計數(shù)初值=8192-定時時間×fosc/12 =8192-2000×6Mhz/12=7192=1C18H=11100000
11000B將此二進制數(shù)補足13位數(shù)(不夠13位前面加0,這個例子夠了,不用補),將高8位送給TH0,將低5位送TL0即可。
定時器/計數(shù)器的4種工作方式1方式0高8位是:11100000B=E0H,送給TH0低5位是:11000B=00011000B=18H送給TL0【訓(xùn)練1】T0方式0定時定時器/計數(shù)器的4種工作方式1362方式1當(dāng)M1、M0=01時,定時器/計數(shù)器工作于方式1,這時定時器/計數(shù)器的等效電路邏輯結(jié)構(gòu)如圖5-3所示。方式1和方式0的差別僅僅在于計數(shù)器的位數(shù)不同,方式1為16位計數(shù)器,由THx高8位和TLx低8位構(gòu)成(x=
0,1),方式0則為13位計數(shù)器,有關(guān)控制狀態(tài)位的含義(GATE、C/、TFx、TRx)與方式0相同。
定時器/計數(shù)器的4種工作方式2方式1定時器/計數(shù)器的4種工作方式3738圖6-3
定時器/計數(shù)器方式1邏輯結(jié)構(gòu)框圖
定時器/計數(shù)器的4種工作方式38圖6-3定時器/計數(shù)器方式1邏輯結(jié)構(gòu)框圖定時器/38實例6-2欲采用8051單片機控制8個LED同時以1s為周期閃爍,設(shè)計電路原理圖并編寫程序。設(shè)置定時/計數(shù)器的過程:
1)先初始化工作方式寄存器TMOD2)為定時/計數(shù)器賦初值3)通過控制寄存器TCON中的TRO或TRl實現(xiàn)啟動或停止。
定時器/計數(shù)器的4種工作方式DATE:2019/11/1639實例6-2欲采用8051單片機控制8個LED同時以1s為周#include<reg51.h>//將8051單片機頭文件包含到文件中main(void){unsignedcharcounter;//設(shè)置無符號字符型變量,存儲定時器中斷次數(shù)。 TMOD=0x01;//設(shè)T0為定時模式,由TR0控制啟動和停止,且工作于方式1 TH0=(65536-46083)/256;//初始化T0的高8位 TL0=(65536-46083)%256;//初始化T0的低8位 TF0=0;//初始化定時器溢出標志 P0=0xff;//關(guān)閉LEDcounter=0;//從0開始計數(shù)
TR0=1;//啟動定時器0while(1){ while(TF0==1)//如果定時器溢出 {counter++;//計時次數(shù)加1if(counter==20)//計時時間達到1s{P0=~P0;//P0所有位取反,使LED閃爍
counter=0;//重新從0開始計數(shù)}TH0=(65536-46083)/256;//重新初始化T0的高8位TL0=(65536-46083)%256;//重新初始化T0的低8位TF0=0;//重新初始化定時器溢出標志}}}
定時器/計數(shù)器的4種工作方式DATE:2019/11/1640#include<reg51.h>3方式2方式0和方式1的最大特點是計數(shù)溢出后,計數(shù)器為全0。因此在循環(huán)定時或循環(huán)計數(shù)應(yīng)用時就存在用指令反復(fù)裝入計數(shù)初值的問題。這不僅影響定時精度,也給程序設(shè)計帶來麻煩。方式2就是針對此問題而設(shè)置的。當(dāng)M1、M0為10時,定時器/計數(shù)器處于工作方式2,這時定時器/計數(shù)器的等效邏輯結(jié)構(gòu)如圖6-6所示(以定時器T1為例,x=
1)。
定時器/計數(shù)器的4種工作方式3方式2定時器/計數(shù)器的4種工作方式414方式3是為增加一個8位定時器/計數(shù)器而設(shè),使AT89S51單片機具有3個定時器/計數(shù)器。方式3只適用于T0,T1不能工作在方式3。T1處于方式3時相當(dāng)于TR1=
0,停止計數(shù)(此時T1可用來作為串行口波特率產(chǎn)生器)。1.工作方式3下的T0TMOD的低2位為11時,T0的工作方式被選為方式3,各引腳與T0的邏輯關(guān)系如圖5-8所示。定時器/計數(shù)器T0分為兩個獨立的8位計數(shù)器TL0和TH0,TL0使用T0的狀態(tài)控制位C/、GATE、TR0、42
定時器/計數(shù)器的4種工作方式4方式342定時器/計數(shù)器的4種工作方式4243圖6-6
定時器/計數(shù)器方式2邏輯結(jié)構(gòu)框圖
定時器/計數(shù)器的4種工作方式43圖6-6定時器/計數(shù)器方式2邏輯結(jié)構(gòu)框圖定時43TF0,而TH0被固定為一個8位定時器(不能作為外部計數(shù)模式),并使用定時器T1的狀態(tài)控制位TR1和TF1,同時占用定時器T1的中斷請求源TF1。2.T0工作在方式3時T1的各種工作方式一般情況下,當(dāng)T1用作串行口的波特率發(fā)生器時,T0才工作在方式3。T0處于工作方式3時,T1可定為方式0、方式1和方式2,用來作為串行口的波特率發(fā)生器,或不需要中斷的場合。
定時器/計數(shù)器的4種工作方式TF0,而TH0被固定為一個8位定時器(不能作為外部計數(shù)模4445圖6-8
定時器/計數(shù)器T0方式3的邏輯結(jié)構(gòu)框圖
定時器/計數(shù)器的4種工作方式45圖6-8定時器/計數(shù)器T0方式3的邏輯結(jié)構(gòu)框圖定時45M1、M0——工作方式選擇位M1、M0共有4種編碼,對應(yīng)于4種工作方式的選擇,如表所示。464種工作方式總結(jié)M1、M0——工作方式選擇位464種工作方式總結(jié)46
字節(jié)地址為88H,可位尋址,位地址為88H~8FH。格式如圖5-3所示。定時器/計數(shù)器控制寄存器TCON(1)TF1、TF0——計數(shù)溢出標志位。當(dāng)計數(shù)器計數(shù)溢出時,該位置“1”。使用中斷方式時,此位作為中斷請求標志位,進入中斷服務(wù)程序后由硬件自動清“0”。(2)TR1、TR0——計數(shù)運行控制位。TR1位(或TR0位)=
1,啟動定時器/計數(shù)器工作的必要條件。TR1位(或TR0位)
=
0,停止定時器/計數(shù)器工作。該位可由軟件置“1”或清“0”。 字節(jié)地址為88H,可位尋址,位地址為88H~8FH。格47
例5-1:設(shè)定時器1為定時工作方式,按方式2工作,定時器0為計數(shù)方式,按方式1工作,均由程序單獨控制啟動和停止,請給出TMOD控制字。解:定時器1做定時器使用則D6=0;按方式2工作則D5=1,D4=0;由程序單獨控制啟停則D7=0。定時器0做計數(shù)器使用則D2=1;按方式1工作則D0=0,D1=1;由程序單獨控制啟停則D3=0。因此命令字TMOD的值應(yīng)為00100101B,即25H。定時器/計數(shù)器控制DATE:2019/11/1648例5-1:設(shè)定時器1為定時工作方式,按方式2工作,定時器定時/計數(shù)器的控制實例6-3圖6-4是產(chǎn)品包裝生產(chǎn)線的計數(shù)系統(tǒng),每個產(chǎn)品經(jīng)過計數(shù)裝置時由機械桿碰合按鍵S1一次。當(dāng)?shù)谝淮斡嫕M一包(5個)則D1亮,計滿第二包則D2亮…,計滿第八包則D1~D8全亮,八包包裝成一箱,此后重復(fù)以上過程。編寫程序?qū)崿F(xiàn)此功能。DATE:2019/11/1649定時/計數(shù)器的控制實例6-3圖6-4是產(chǎn)品包裝生產(chǎn)線的計數(shù)解:程序如下:#include<reg51.h>//包含51單片機寄存器定義的頭文件unsignedcharcounter;//計數(shù)初值main(void){ TMOD=0x60;//使用T1的工作方式2 TH1=256-5;//T1的高8位賦初值 TL1=256-5;//T1的低8位賦初值
counter=0; TR1=1;//啟動T1 while(1){ while(TF1==1)//如果計滿 {TF1=0;//計數(shù)器溢出后,將TF1清0counter++;//計數(shù)加15.3定時/計數(shù)器的控制DATE:2019/11/1650解:程序如下:5.3定時/計數(shù)器的控制DATE:2019
switch(counter)//檢查中斷計數(shù)值 {case1:P0=0xfe;break;//則第1個燈亮case2:P0=0xfd;break;//第2個燈亮case3:P0=0xfb;break;//第3個燈亮case4:P0=0xf7;break;//第4個燈亮case5:P0=0xef;break;//第5個燈亮case6:P0=0xdf;break;//第6個燈亮case7:P0=0xbf;break;//第7個燈亮case8:P0=0x00;counter=0;break;//8個燈全亮}} }}5.3定時/計數(shù)器的控制DATE:2019/11/1651switch(counter)//檢查中斷計數(shù)值5.東西方向
信號
綠燈亮綠燈關(guān)閉黃燈閃亮
紅燈亮
時間
20S
2S5次共2S
22S南北方向
信號
紅燈亮
綠燈亮綠燈關(guān)閉黃燈閃亮
時間
22S
20S2S
5次共2S任務(wù)4十字路口交通信號燈設(shè)計系統(tǒng)控制要求如下:(1)正常情況下,首先東西方向綠燈亮,南北方向紅燈亮20s;經(jīng)過后南北方向綠燈亮,東西方向紅燈亮20s。(2)黃燈5次閃爍綠燈滅2s,之后重復(fù)(1)(2)。東西信號綠燈亮綠燈關(guān)閉黃燈閃亮紅燈亮52任務(wù)4十字路口交通信號燈設(shè)計任務(wù)4十字路口交通信號燈設(shè)計53任務(wù)4十字路口交通信號燈設(shè)計任務(wù)4十字路口交通信號燈設(shè)計54任務(wù)4十字路口交通信號燈設(shè)計任務(wù)4十字路口交通信號燈設(shè)計551)對TMOD賦值,確定工作方式。
TMOD為T1、T2的工作方式寄存器
任務(wù)4十字路口交通信號燈設(shè)計T1控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7TMOD(89H)
TMOD=0
0
01
0000
軟件啟動定時方式1T0未使用∴TMOD賦值為10H1.采用定時器設(shè)計一個0.5秒的延時子程序1)對TMOD賦值,確定工作方式。任務(wù)4十字路口交通信號562)預(yù)置定時器初值X,將初值寫入TH1、TL1中。初值X=最大計數(shù)值-計數(shù)次數(shù)若fosc=12MHZ,在方式1中,定時器T1的最大計數(shù)值為65536,而定時50ms需要完成50000次計數(shù)。由此可計算出計數(shù)器的初始值。初值X=65536-50000=15536D=3CB0H
任務(wù)4十字路口交通信號燈設(shè)計3)啟動定時/計數(shù)器工作,當(dāng)GATE=0時,只要用“SETBbit”指令將TCON寄存器中的啟動位TR0或TR1置“1”即可,使用“CLRbit”指令可停止定時器工作。
2)預(yù)置定時器初值X,將初值寫入TH1、TL1中。任務(wù)4十字57任務(wù)4十字路口交通信號燈設(shè)計0.5s延時子程序如下:DELAY:MOVR3,#0AH;循環(huán)次數(shù)MOVTMOD,#10H;定時器T1,方式1MOVTH1,#3CH;定時50ms的初值MOVTL1,#0B0HSETBTR1;啟動定時器LP1:JBCTF1,LP2SJMPLP1LP2:MOVTH1,#3CH;重裝初值MOVTL1,#0B0HDJNZR3,LP1RET任務(wù)4十字路口交通信號燈設(shè)計0.5s延時子程序如下:58單片機C語言程序設(shè)計:LED模擬交通燈
#include<reg51.h>#defineucharunsignedchar;sbitRED_B=P0^0;//北向燈sbitYELLOW_B=P0^1;sbitGREEN_B=P0^2;sbitRED_X=P0^3;//西向燈sbitYELLOW_X=P0^4;sbitGREEN_X=P0^5;sbitRED_N=P2^0;//南向燈sbitYELLOW_N=P2^1;sbitGREEN_N=P2^2;sbitRED_D=P2^3;//東向燈sbitYELLOW_D=P2^4;sbitGREEN_D=P2^5;ucharFlash_Count=0,Operation_Type=1;voidDelayMS(unsignedintx){TMOD=0x01;TR0=1;while((x--)!=0){TH0=0X3C;TL0=0Xb0;while(!TF0);TF0=0;}}任務(wù)4十字路口交通信號燈設(shè)計單片機C語言程序設(shè)計:LED模擬交通燈
voidDe59//交通燈切換voidTraffic_Light(){switch(Operation_Type){case1://東西向綠燈與南北向紅燈亮RED_X=1;YELLOW_X=1;GREEN_X=0;RED_N=0;YELLOW_N=1;GREEN_N=1;RED_D=1;YELLOW_D=1;GREEN_D=0;RED_B=0;YELLOW_B=1;GREEN_B=1;DelayMS(400);Operation_Type=2;break;case2://東西向黃燈閃爍,綠燈關(guān)閉DelayMS(40);YELLOW_D=~YELLOW_D;GREEN_D=1;YELLOW_X=~YELLOW_X;GREEN_X=1;if(++Flash_Count!=10)return;//閃爍Flash_Count=0;Operation_Type=3;break;case3://東西向紅燈,南北向綠燈亮RED_X=0;YELLOW_X=1;GREEN_X=1;RED_N=1;YELLOW_N=1;GREEN_N=0;RED_D=0;YELLOW_D=1;GREEN_D=1;RED_B=1;YELLOW_B=1;GREEN_B=0;DelayMS(400);Operation_Type=4;break;case4://南北向黃燈閃爍DelayMS(40);YELLOW_N=~YELLOW_N;GREEN_N=1;YELLOW_B=~YELLOW_B;GREEN_B=1;if(++Flash_Count!=10)return;Flash_Count=0;Operation_Type=1;}}//主程序voidmain(){while(1)Traffic_Light();}任務(wù)4十字路口交通信號燈設(shè)計//交通燈切換case3://東西向紅燈,南北向綠燈亮任60采用查詢方式處理的程序:#include<reg52.h>sbit P1_0=P1^0;voidmain(){TMOD=0x02;TL0=0x06;TH0=0x06;TR0=1;while(1) { while(!TF0);
TF0=0; P1_0=~P1_0; }}定時器編程總結(jié)一、定時器的初始化步驟1、選擇工作模式和工作方式。
設(shè)置TMOD。2、設(shè)置定時器的計數(shù)初值。
設(shè)置THx和TLx。3、啟動定時器。二、定時器查詢式應(yīng)用步驟1、選擇工作模式和工作方式。
設(shè)置TMOD。2、設(shè)置定時器的計數(shù)初值。
設(shè)置THx和TLx。3、啟動定時器。4、查詢溢出標準TFX5、清零溢出標志6、應(yīng)用處理7、重裝初始值采用查詢方式處理的程序:定時器編程總結(jié)一、定時器的初始化步驟611、設(shè)計方案
選用AT89C51單片機芯片、時鐘電路、復(fù)位電路、電源、12個發(fā)光二極管和一個按鍵構(gòu)成最小系統(tǒng),完成對交通信號燈有急救車通過時的智能控制。任務(wù)要求圖3-17交通信號燈模擬控制系統(tǒng)設(shè)計框圖任務(wù)4
智能交通信號燈設(shè)計并行接口AT89C51單片機電源時鐘電路復(fù)位電路紅黃綠燈發(fā)光二極管按鍵1、設(shè)計方案選用AT89C51單片機芯片、時鐘電路622、硬件電路設(shè)計
任務(wù)實施圖2-24交通燈控制電路原理圖
電路所用仿真元器件:AT89C51:單片機RES:電阻CRYSTAL:晶振CAP:電容CAP-ELEC:電解電容BUTTON:按鈕LED-GREEN:綠色發(fā)光二極管LED-YELLOW:黃色發(fā)光二極管LED-RED:紅色發(fā)光二極管任務(wù)4智能交通信號燈設(shè)計2、硬件電路設(shè)計任務(wù)實施圖2-24交通燈控制電路原理圖63表3-6交通燈控制口線分配及控制狀態(tài)表任務(wù)4智能交通交通信號燈設(shè)計P1.5P1.4P1.3P1.2P1.1P1.0P1端口數(shù)據(jù)狀態(tài)說明東西方向南北方向紅燈黃燈綠燈紅燈黃燈綠燈11100011011100,1交替111100011111111011100,1交替1F3HP1.3交替EBHDEHP1.0交替DDH東西向通行,南北向禁行東西向警告,南北向禁行東西向警告,南北向禁行南北向通行,東西向禁行南北向警告,東西向禁行南北向警告,東西向禁行100111100111EDHDBH緊急情況表3-6交通燈控制口線分配及控制狀態(tài)表任務(wù)4智能交64相關(guān)知識:中斷的基本知識1、中斷的基本概念中斷是指計算機在執(zhí)行某一程序的過程中,由于計算機系統(tǒng)內(nèi)、外的某種原因,而必須中止原程序的執(zhí)行,轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序,待處理結(jié)束之后,再回來繼續(xù)執(zhí)行被中止的原程序的過程。中斷需要解決兩個主要問題:如何從主程序轉(zhuǎn)到中斷服務(wù)程序和如何從中斷服務(wù)程序返回主程序。(1)概念圖3-1中斷的示意圖任務(wù)4智能交通交通信號燈設(shè)計相關(guān)知識:中斷的基本知識1、中斷的基本概念中斷是指計651)分時操作:解決了快速CPU與慢速外設(shè)之間的矛盾,可使CPU與外設(shè)并行工作。這樣,CPU可啟動多個外設(shè)同時工作,大大提高了工作效率。2)實時處理:實時處理控制系統(tǒng)中許多隨機產(chǎn)生的參數(shù)與信息,即計算機具有實時處理的能力,從而提高了控制系統(tǒng)的性能。3)故障處理:使系統(tǒng)具備處理故障的能力,如出現(xiàn)掉電、存儲出錯、運算溢出等故障,從而提高了系統(tǒng)自身的可靠性。
(2)特點(3)與中斷相關(guān)的幾個概念1)中斷服務(wù)子程序:中斷之后處理的程序,也稱為中斷處理子程序。2)主程序:原來正常執(zhí)行的程序。3)中斷源:發(fā)出中斷申請的信號或引起中斷的事件。4)中斷請求:CPU接收到中斷源發(fā)出的申請信號。5)中斷響應(yīng):接收中斷申請,轉(zhuǎn)到相應(yīng)中斷服務(wù)子程序處執(zhí)行。6)斷點:主程序被斷開的位置(即地址),轉(zhuǎn)入中斷程序的位置。7)中斷入口地址:中斷響應(yīng)后,中斷程序執(zhí)行的首地址。8)中斷返回:從中斷服務(wù)程序返回到主程序。任務(wù)4智能交通交通信號燈設(shè)計1)分時操作:解決了快速CPU與慢速外設(shè)之間的矛盾,可使C66IE0TCONSCONINT0IT0=0IT0=1INT1IT1=0IT1=1TF0IE1TF1T0T1TIRITXDRXDESET0EX0EX1ET1EA自然優(yōu)先級矢量地址高級中斷請求自然優(yōu)先級矢量地址低級中斷請求PX0PT0PX1PT1PSIEIP中斷標志位中斷源允許總允許中斷優(yōu)先級(P3.2)(P3.3)(P3.0)(P3.1)(P3.5)(P3.4)2、MCS-51單片機的中斷系統(tǒng)及其管理
(1)MCS-51中斷系統(tǒng)的結(jié)構(gòu)
任務(wù)4智能交通交通信號燈設(shè)計IE0TCONSCONINT0IT0=0IT0=1IN67(2)中斷源
圖3-1中斷的示意圖8051單片機有5個中斷請求源:單片機INT0或
外部輸入中斷源INT0(P3.2)INT1或
外部輸入中斷源INT1(P3.3)T0
片內(nèi)定時器T0的溢出(P3.4)T1
片內(nèi)定時器T1的溢出(P3.5)串行口
片內(nèi)串行口發(fā)送或接收中斷源任務(wù)4智能交通交通信號燈設(shè)計(2)中斷源圖3-1中斷的示意圖8051單片機有5個中68(3)特殊功能寄存器TCON和SCON
1)中斷控制寄存器TCONTF1
TF0
IE1IT1IE0IT0TCON7654321088H8F
8D
8B8A8988位地址T1溢出中斷標志(TCON.7):
T1啟動計數(shù)后,計滿溢出由硬件置位TF1=1,向CPU請求中斷,此標志一直保持到CPU響應(yīng)中斷后,才由硬件自動清0。也可用軟件查詢該標志,并由軟件清0。任務(wù)4智能交通交通信號燈設(shè)計(3)特殊功能寄存器TCON和SCON1)中斷控制寄存69TF1
TF0
IE1IT1IE0IT0TCON88H外部中斷INT1中斷標志位(TCON.3):IE1=1,外部中斷1向CPU申請中斷
外部中斷INT1(P3.3)觸發(fā)方式控制位(TCON.2):
IT1=0,電平觸發(fā)方式
IT1=1,下降沿觸發(fā)方式76543210注意:該寄存器可以位尋址。任務(wù)4智能交通交通信號燈設(shè)計TF1TF0IE1IT1IE0IT0TCO702)串行口控制寄存器SCON返回
TI(SCON.1)——串行發(fā)送中斷標志。RI(SCON.0)——串行接收中斷標志。
TIRISCON
98H76543210注意:該寄存器可以位尋址。
9998位地址任務(wù)4智能交通交通信號燈設(shè)計2)串行口控制寄存器SCON返回TI(SCON.171(4)中斷的開放與禁止
MCS-51系列單片機的5個中斷源都是可屏蔽中斷,由中斷系統(tǒng)內(nèi)部的專用寄存器IE負責(zé)控制各中斷源的開放或屏蔽。
IEA8H
EA
ESET1EX1ET0EX0例:允許定時器T0中斷:
SETBEA位操作指令SETBET0
或MOVIE,#82H
字節(jié)操作指令或MOV
0A8H,#82H76543210注意:該寄存器可以位尋址。AF
ACABAAA9A8位地址任務(wù)4智能交通交通信號燈設(shè)計(4)中斷的開放與禁止MCS-51系列單片機的572(5)中斷優(yōu)先權(quán)的處理
MCS-51中斷系統(tǒng)設(shè)立了兩極優(yōu)先級—高優(yōu)先級和低優(yōu)先級,可以程序設(shè)置5個中斷源優(yōu)先級,由中斷優(yōu)先級寄存器IP進行控制。51單片機有兩個中斷優(yōu)先級——高級和低級專用寄存器IP為中斷優(yōu)先級寄存器,用戶可用軟件設(shè)定相應(yīng)位為1,對應(yīng)的中斷源被設(shè)置為高優(yōu)先級,相應(yīng)位為0,對應(yīng)的中斷源被設(shè)置為低優(yōu)先級系統(tǒng)復(fù)位時,均為低優(yōu)先級該寄存器可以位尋址
PSPT1PX1PT0PX0
IPB8H
76543210
BCBBBAB9B8位地址任務(wù)4智能交通交通信號燈設(shè)計(5)中斷優(yōu)先權(quán)的處理MCS-51中斷系統(tǒng)設(shè)立了兩極73同一級中的5個中斷源的優(yōu)先順序是:
INT0中斷
T0溢出中斷
INT1中斷
T1溢出中斷
串口中斷
高低出廠前已由廠家固化順序——事先約定中斷優(yōu)先原則:(概括為四句話)1、低級不打斷高級2、高級不睬低級3、同級不能打斷4、同級、同時中斷,事先約定。任務(wù)4智能交通交通信號燈設(shè)計同一級中的5個中斷源的優(yōu)先順序是:I74例6-1,如果IP的值設(shè)為06H,如果5個中斷請求同時發(fā)生,求中斷響應(yīng)的次序。
解:06H化為二進制是00000110B,根據(jù)表6-4知,定時器T0和外中斷
被設(shè)置成高優(yōu)先級中斷,因此如果5個中斷請求同時發(fā)生,中斷響應(yīng)的先后次序是:定時器T0→外中斷INT1→外中斷
→定時器T1→串行中斷。任務(wù)4智能交通交通信號燈設(shè)計DATE:2019/11/16例6-1,如果IP的值設(shè)為06H,如果5個中斷請求同時發(fā)生,753、中斷處理過程(1)中斷響應(yīng)
中斷處理過程分為三個階段:中斷響應(yīng)、中斷處理和中斷返回。中斷響應(yīng)中斷處理(又稱中斷服務(wù))中斷返回
中斷請求的撤除
中斷響應(yīng)中斷返回任務(wù)4智能交通交通信號燈設(shè)計3、中斷處理過程(1)中斷響應(yīng)中斷處理過程分76中斷響應(yīng)(以外部中斷0為例)中斷響應(yīng):在滿足CPU的中斷響應(yīng)條件之后,CPU對中斷源中斷請求予以處理。中斷響應(yīng)過程:保護斷點地址;中斷響應(yīng)把程序轉(zhuǎn)向中斷服務(wù)程序的入口地址(通常稱矢量地址)。特別注意:這些工作是硬件自動完成的!
斷點地址中斷服務(wù)子程序的入口地址外部中斷0入口地址0003ZD0AJMPORG0003HAJMPZD0ZD0任務(wù)4智能交通交通信號燈設(shè)計中斷響應(yīng)(以外部中斷0為例)中斷響應(yīng):在滿足CPU的中斷響應(yīng)77中斷響應(yīng)中斷服務(wù)子程序入口地址又稱為中斷矢量或中斷向量。中斷響應(yīng)單片機中5個中斷源的矢量地址是固定的,不能改動。斷點地址中斷服務(wù)子程序的入口地址任務(wù)4智能交通交通信號燈設(shè)計中斷響應(yīng)中斷服務(wù)子程序入口地址又稱為中斷矢量或中斷向量。中78任務(wù)4智能交通交通信號燈設(shè)計程序存儲器ROM0000H:復(fù)位后,程序的入口地址(PC=0000H)0023H:串行口中斷入口0003H:外部中斷0入口-INT0000BH:定時器0溢出中斷入口-T00013H:外部中斷1入口-INT1001BH:定時器1溢出中斷入口-T18字節(jié)8字節(jié)8字節(jié)002AH使用時,通常在這些入口地址處存放一條跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到用戶安排的中斷服務(wù)程序起始地址上去!任務(wù)4智能交通交通信號燈設(shè)計程序存儲器ROM0000H:79中斷處理中斷服務(wù)程序從中斷子程序入口地址開始執(zhí)行,直到返回指令RETI為止,這個過程稱為中斷處理(或中斷服務(wù))。中斷服務(wù)子程序一般包括兩部分內(nèi)容:一是保護和恢復(fù)現(xiàn)場,二是處理中斷源的請求。中斷響應(yīng)入口地址RETI任務(wù)4智能交通交通信號燈設(shè)計中斷處理中斷服務(wù)程序從中斷子程序入口地址開始執(zhí)行,直到返回指80中斷處理INTT0:PUSHACC PUSHDPHPUSHDPLPUSHPSW
中斷源服務(wù)
POPPSW
POPDPLPOPDPHPOPACCRETI保護現(xiàn)場恢復(fù)現(xiàn)場任務(wù)4智能交通交通信號燈設(shè)計中斷處理INTT0:PUSHACC保護現(xiàn)場恢81中斷返回中斷返回是指中斷服務(wù)完后,計算機返回到原來暫停的位置(即斷點),繼續(xù)執(zhí)行原來的程序。中斷返回由專門的中斷返回指令RETI來實現(xiàn)。中斷響應(yīng)中斷返回任務(wù)4智能交通交通信號燈設(shè)計中斷返回中斷返回是指中斷服務(wù)完后,計算機返回到原來暫停82中斷返回
RETI指令功能:把斷點地址取出,送回到程序計數(shù)器PC中去。另外,它還通知中斷系統(tǒng)已完成中斷處理,將清除優(yōu)先級狀態(tài)觸發(fā)器。特別注意:不能用RET指令代替RETI指令!中斷響應(yīng)中斷返回斷點地址任務(wù)4智能交通交通信號燈設(shè)計中斷返回RETI指令功能:把斷點地址取出,送回到程序計數(shù)83中斷請求的撤除
CPU響應(yīng)某中斷請求后,在中斷返回前,應(yīng)該撤除該中斷請求,否則會引起另一次中斷。
定時器0或1溢出:CPU在響應(yīng)中斷后,硬件清除了有關(guān)的中斷請求標志TF0或TF1,即中斷請求是自動撤除的。
邊沿觸發(fā)的外部中斷(IT0或IT1=1):CPU在響應(yīng)中斷后,也是用硬件自動清除有關(guān)的中斷請求標志IE0或IE1。
串行口中斷:CPU響應(yīng)中斷后,沒有用硬件清除TI、RI,故這些中斷不能自動撤除,而要靠軟件來清除相應(yīng)的標志。任務(wù)4智能交通交通信號燈設(shè)計中斷請求的撤除CPU響應(yīng)某中斷請求后,在中斷返回84三、中斷系統(tǒng)的編程中斷函數(shù)的定義:void函數(shù)名(void)interruptnusingm{
中斷函數(shù)內(nèi)容}修飾符interruptn表明該中斷服務(wù)程序所對應(yīng)中斷源的中斷號,編譯器會把該函數(shù)轉(zhuǎn)化為中斷函數(shù),并在對應(yīng)的中斷入口地址處添加跳轉(zhuǎn)指令,以便轉(zhuǎn)入本中斷函數(shù)。修飾符usingm用于指定本函數(shù)內(nèi)部使用的工作寄存器組,m的取值為0~3。該修飾符可省略,由編譯器去分配。任務(wù)4智能交通交通信號燈設(shè)計DATE:2019/11/1685三、中斷系統(tǒng)的編程中斷函數(shù)的定義:任務(wù)4智能交通交通信號編寫中斷函數(shù)時,應(yīng)注意以下幾點:(1)中斷函數(shù)不帶任何參數(shù),否則會導(dǎo)致編譯出錯。(2)中斷函數(shù)不能有返回值,所以函數(shù)類型應(yīng)為void。(3)中斷函數(shù)必須由中斷源觸發(fā)而自動調(diào)用,不得直接調(diào)用,因此也不用提前聲明。(4)中斷函數(shù)要精簡,避免因執(zhí)行時間過長影響其它中斷的響應(yīng)。任務(wù)4智能交通交通信號燈設(shè)計DATE:2019/11/1686編寫中斷函數(shù)時,應(yīng)注意以下幾點:任務(wù)4智能交通交通信號燈例6-2
如圖所示,將P1口的P1.4~P1.7作為輸入位,P1.0~P1.3作為輸出位。要求利用89C52將開關(guān)所設(shè)的數(shù)據(jù)讀入單片機內(nèi),并依次通過P1.0~P1.3輸出,驅(qū)動發(fā)光二極管,以檢查P1.4~P1.7輸入的電平情況(若輸入為高電平則相應(yīng)的LED亮)。要求采用中斷邊沿觸發(fā)方式,中斷一次,完成一次讀/寫操作。任務(wù)4智能交通交通信號燈設(shè)計例6-2如圖所示,將P1口的P1.4~P1.7作為輸入位87
分析:5-9中,用外部中斷0,中斷請求從P3.2輸入,并采用去抖動電路。當(dāng)P1.0~P1.3的某一位輸出為0時,相應(yīng)的發(fā)光二極管就會發(fā)光。當(dāng)開關(guān)S1來回撥動一次時,將產(chǎn)生一個下降沿信號,發(fā)出中斷請求。中斷服務(wù)程序的入口地址為0003H。
C語言程序:#include<reg52.h>voidmain(){EX0=1;//允許外部中斷0中斷IT0=1;//選邊沿觸發(fā)方式EA=1;//CPU開中斷while(1);//等待中斷}
voidint0_int(void)interrupt0{unsignedchar datad;P1=0xf0; //設(shè)P1.4~P1.7為輸入d=P1; //取開關(guān)數(shù)P1=~(d>>4); //驅(qū)動LED發(fā)光}任務(wù)4智能交通交通信號燈設(shè)計 分析:5-9中,用外部中斷0,中斷請求從P3.2輸入,并采88例6-3如圖6-2所示,P0口連接了8個發(fā)光二極管,
引腳上接了一個按鍵,要求每次按鍵均能改變發(fā)光二級管的亮滅。任務(wù)4智能交通交通信號燈設(shè)計例6-3如圖6-2所示,P0口連接了8個發(fā)光二極管,引89#include<reg51.h>#defineLEDP0 sbitKEY=P3^3;bitflag=0;
//延時子函數(shù);voiddelay(unsignedcharn){ unsignedchara; for(a=0;a<n;a++);}
main(void){IT1=1;//設(shè)置邊沿觸發(fā)方式EA=1;EX1=1;LED=0xff;//發(fā)光二極管滅while(1){if(flag==1) //有外部中斷的按鍵{delay(100); //延遲一段時間判斷是否為抖動if(!KEY==0)//還有按鍵,說明不是抖動{while(!KEY);//等待按鍵松開LED=~LED;//改變發(fā)光二級管的亮滅 }flag=0; EX1=1;//再次開放外部中斷} }}voidint1(void)interrupt2 //中斷服務(wù)程序{flag=1;//設(shè)置中斷標志變量為真,表明有按鍵閉合EX1=0;//暫時不允許再次產(chǎn)生外部中斷}任務(wù)4智能交通交通信號燈設(shè)計DATE:2019/11/1690#include<reg51.h>while(1)任務(wù)4編寫中斷服務(wù)程序時,應(yīng)避免使中斷時間過長的操作,如果本例中斷服務(wù)程序編成如下形式:voidint1(void)interrupt2//中斷服務(wù)程序{delay(100);//延遲一段時間,判斷是否為抖動if(KEY==0) //還有按鍵,說明不是抖動{while(!KEY);//等待按鍵松開LED=~LED; //改變發(fā)光二級管的亮滅}}
由于中斷函數(shù)里有去除按鍵抖動以及等待按鍵松開的處理,當(dāng)按鍵時間過長時,程序會陷入執(zhí)行語句while(!KEY)不得退出,有可能造成程序邏輯錯誤。如果此時系統(tǒng)中同時使用串口中斷收發(fā)數(shù)據(jù),會使串口中斷請求得不到CPU及時響應(yīng),造成串口數(shù)據(jù)收發(fā)錯誤。任務(wù)4智能交通交通信號燈設(shè)計編寫中斷服務(wù)程序時,應(yīng)避免使中斷時間過長的操作,如果本例中斷91任務(wù)實施圖2-24交通燈控制電路原理圖
電路所用仿真元器件:AT89C51:單片機RES:電阻CRYSTAL:晶振CAP:電容CAP-ELEC:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)村道路承包維修合同范例
- 農(nóng)村買賣房屋合同范例
- 晚期肺癌患者預(yù)期性悲傷影響因素及干預(yù)方案構(gòu)建研究
- 公司ceo合同范例
- 個體股轉(zhuǎn)讓協(xié)議合同范例
- 減少農(nóng)藥保證合同范例
- 制作地產(chǎn)廣告合同范例
- 中鐵電氣化局員工合同范本
- 農(nóng)村建房拆除合同范例
- c創(chuàng)意合同范例
- 模具費支付合同模板
- 餐飲部總監(jiān)述職報告
- 遼寧省沈陽市第七中學(xué)2024-2025學(xué)年九年級上學(xué)期期中英語試題
- 小學(xué)金融普及
- 2024電力建設(shè)工程綠色建造評價規(guī)范
- 安寧療護課件
- 中小學(xué)-珍愛生命拒絕毒品-課件
- 價值觀考核評定表
- 振動篩施工技術(shù)方案
- 急救藥品課件教學(xué)課件
- 學(xué)術(shù)英語智慧樹知到答案2024年南開大學(xué)
評論
0/150
提交評論