版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《單片機(jī)原理及應(yīng)用》實(shí)驗(yàn)指導(dǎo)書式語言)《單片機(jī)原理及應(yīng)用》實(shí)驗(yàn)指導(dǎo)書(C語言)某某大學(xué)物電學(xué)院微機(jī)教研室某某2022前言由于單片機(jī)具有高可靠性、超小型、低價(jià)格、容易產(chǎn)品化等特點(diǎn),在儀器儀表智能化、實(shí)時(shí)工業(yè)控制、實(shí)時(shí)數(shù)據(jù)采集、智能終端、通信設(shè)備、導(dǎo)航系統(tǒng)、家用電器等控制應(yīng)用領(lǐng)域,具有十分廣泛的用途。由于目前在國內(nèi)單片機(jī)應(yīng)用中,MCS-51系列單片機(jī)仍然是一種主流單片機(jī),所以本實(shí)驗(yàn)指導(dǎo)書為學(xué)習(xí)MCS-51單片機(jī)的學(xué)生,配合《單片機(jī)原理及應(yīng)用》課程的教學(xué),結(jié)合本學(xué)院自制單片機(jī)教學(xué)實(shí)驗(yàn)板編寫了這本實(shí)驗(yàn)指導(dǎo)書?!秵纹瑱C(jī)原理應(yīng)用及》是一門實(shí)踐性很強(qiáng)的課程,提高教學(xué)質(zhì)量的一個(gè)重要環(huán)節(jié)是上機(jī)實(shí)習(xí)和訓(xùn)練,無論是學(xué)習(xí)匯編語言程序設(shè)計(jì),還是學(xué)習(xí)接口電路和外設(shè)與計(jì)算機(jī)的連接,或者軟硬兼施地研制單片機(jī)應(yīng)用系統(tǒng),不通過加強(qiáng)動手是不能獲得預(yù)期效果的。本實(shí)驗(yàn)指導(dǎo)書提供多個(gè)實(shí)驗(yàn)的指導(dǎo)性材料,有些實(shí)驗(yàn)還有一些有一定難度的選做項(xiàng)目,可以根據(jù)課時(shí)的安排和教學(xué)要求進(jìn)行取舍。為了達(dá)到某些實(shí)驗(yàn)的目的,書中提供的參考程序與實(shí)際應(yīng)用中的程序會有些差別,所以不一定是最優(yōu)的。由于時(shí)間緊迫,需要趕課程進(jìn)度與實(shí)驗(yàn)時(shí)間的同步,加上編者學(xué)識有限,如有不妥之處,歡迎讀者批評指正。實(shí)驗(yàn)須知1.實(shí)驗(yàn)前必須閱讀教科書的有關(guān)部分和本實(shí)驗(yàn)指導(dǎo)書,了解實(shí)驗(yàn)?zāi)康?、?nèi)容、步驟,做好實(shí)驗(yàn)前的準(zhǔn)備,編寫好實(shí)驗(yàn)中要求自編或修改的程序;完成實(shí)驗(yàn)前要求完成的準(zhǔn)備工作后方可以上機(jī)實(shí)驗(yàn),否則不得上機(jī)操作。.各種電源的電壓和極性不能接錯(cuò),嚴(yán)禁帶電接線和接插元器件。通電前須經(jīng)過指導(dǎo)教師檢查認(rèn)可后方能通電。.不準(zhǔn)隨意撥弄各種與實(shí)驗(yàn)無關(guān)的旋鈕和開關(guān),凡與本次實(shí)驗(yàn)無關(guān)的任何設(shè)備都禁止動用和摸弄,注意安全。.嚴(yán)禁用手觸摸實(shí)驗(yàn)系統(tǒng)印制電路板和元器件的引腳,防止靜電擊穿芯片。.實(shí)驗(yàn)中若損壞儀器或元器件,應(yīng)及時(shí)向指導(dǎo)教師報(bào)告。.在實(shí)驗(yàn)室內(nèi)保持安靜和衛(wèi)生,不得隨意走動和喧嘩,集中精力完成實(shí)驗(yàn)。.實(shí)驗(yàn)完成后,關(guān)掉電源,及時(shí)整理實(shí)驗(yàn)臺桌面,保持環(huán)境整潔。.按規(guī)定認(rèn)真完成實(shí)驗(yàn)報(bào)告,在規(guī)定的時(shí)間內(nèi)繳上實(shí)驗(yàn)報(bào)告。.凡實(shí)驗(yàn)或?qū)嶒?yàn)報(bào)告未能按規(guī)定完成的學(xué)員,不能參加本課程的考試或考查。單片機(jī)實(shí)驗(yàn)報(bào)告格式實(shí)驗(yàn)報(bào)告標(biāo)題一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)內(nèi)容三、實(shí)驗(yàn)設(shè)計(jì)及調(diào)試: (1)實(shí)驗(yàn)分析及內(nèi)容。(2)實(shí)驗(yàn)電路:畫出與實(shí)驗(yàn)內(nèi)容有關(guān)的簡單實(shí)驗(yàn)電路。(3)實(shí)驗(yàn)設(shè)計(jì)及調(diào)試步驟:根據(jù)內(nèi)容寫出實(shí)驗(yàn)程序。調(diào)試程序,觀察結(jié)果。(4)實(shí)驗(yàn)調(diào)試過程中所遇到的問題、解決問題的思路和解決的方法。四、實(shí)驗(yàn)后的經(jīng)驗(yàn)教訓(xùn)總結(jié)。五、對實(shí)驗(yàn)課的建議目錄實(shí)驗(yàn)一實(shí)驗(yàn)板使用,KEILC51軟件使用6實(shí)驗(yàn)二單片機(jī)控制LED燈點(diǎn)亮12實(shí)驗(yàn)三模擬開關(guān)燈16實(shí)驗(yàn)四單片機(jī)控制數(shù)碼管實(shí)驗(yàn)21實(shí)驗(yàn)五中斷系統(tǒng)應(yīng)用實(shí)驗(yàn)25實(shí)驗(yàn)六LED數(shù)碼管的動態(tài)驅(qū)動29實(shí)驗(yàn)七定時(shí)器/計(jì)數(shù)器使用32實(shí)驗(yàn)八數(shù)字電子鐘36實(shí)驗(yàn)九矩陣鍵盤識別實(shí)驗(yàn)37實(shí)驗(yàn)十自動演奏樂曲41實(shí)驗(yàn)十一綜合實(shí)驗(yàn)交通信號燈控制器的設(shè)計(jì)45實(shí)驗(yàn)十二教學(xué)板自檢程序設(shè)計(jì)46實(shí)驗(yàn)十三綜合實(shí)驗(yàn):數(shù)據(jù)采集—火災(zāi)報(bào)警裝置的軟硬件設(shè)計(jì)47附錄:實(shí)驗(yàn)教學(xué)板電路原理圖48實(shí)驗(yàn)一實(shí)驗(yàn)板使用,KeilC51軟件使用一、實(shí)驗(yàn)?zāi)康?.熟悉單片機(jī)實(shí)驗(yàn)板、KeilC51軟件使用二、實(shí)驗(yàn)說明本實(shí)驗(yàn)實(shí)驗(yàn)板的組成、KeilC51軟件使用以及燒錄軟件的使用。通過該實(shí)驗(yàn)學(xué)生可以了解單片機(jī)編程、調(diào)試方法。三、實(shí)驗(yàn)內(nèi)容及步驟1.啟動PC機(jī),安裝好&1葭51軟件以及燒錄軟件,用串口線連接計(jì)算機(jī)與實(shí)驗(yàn)板(USB線提供電源)???打開KeiluViion2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,接著建立源程序,編譯無誤后,全速運(yùn)行程序。.可把源程序編譯成可執(zhí)行文件,用燒錄器燒錄到89芯片中。四、Keilc軟件使用1、打開程序: 雙擊程序2、新建工程:Project-NewProjectf保存工程f選擇CPU(一般選ATMEL公司的AT89S51)-17-3、設(shè)置工程:右擊fOptionfor'Target1’ff選擇CreateHE某(輸出HE某文件)???18-4、新建源文件:選FilefNewf輸入、編輯源程序一保存(匯編源程序:文件名.am;C源程序:文件名.c)5、為工程添加源文件:在Project出口File頁上單擊文件組,選擇AddFiletoGroup'SourceGroup1'選項(xiàng),選擇你的源文件和文件類型,然后點(diǎn)擊ADD,再點(diǎn)擊cloe???19-6、編譯:點(diǎn)擊,或右擊Target1fBuildTargetF7,就可對源程序進(jìn)行編譯。當(dāng)程序有語法錯(cuò)誤時(shí),會在輸出窗口(Outputwindow)中顯示錯(cuò)誤信息和警告信息,修改編譯成功后會生成HE某文件??谖?、燒錄軟件的使用1、打開在線燒錄程序2、選擇MCU類型(STC89C51RC)1、點(diǎn)擊,打開工程目錄下的he某文件2、選擇端口(一般是COM1)3、點(diǎn)擊Download燒錄程序4、打開實(shí)驗(yàn)板上的電源(如果燒錄的時(shí)候出現(xiàn)問題,點(diǎn)擊top)注意:5、6兩步驟的順序不能顛倒!即在點(diǎn)擊Download之前要先關(guān)掉實(shí)驗(yàn)板上的電源??趯?shí)驗(yàn)二單片機(jī)控制LED燈點(diǎn)亮一、實(shí)驗(yàn)?zāi)康?.進(jìn)一步熟悉編程和程序調(diào)試2.學(xué)習(xí)P1口的使用方法3.學(xué)習(xí)延時(shí)子程序的編寫和使用二、實(shí)驗(yàn)說明(1)輸出控制。如圖1所示,當(dāng)P1.0端口輸出高電平,即P1.0=1時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.0=0時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平口(2)延時(shí)子程序的設(shè)計(jì)方法作為單片機(jī)的指令的執(zhí)行時(shí)間是很短的,數(shù)量達(dá)微秒級,因此,如果我們要求的閃爍時(shí)間間隔為0.2秒,相對于微秒來說,相差太大,所以我們在執(zhí)行某一指令時(shí),插入延時(shí)程序,來達(dá)到我們的要求,但這樣的延時(shí)程序是如何設(shè)計(jì)呢?下面具體介紹其原理: 石英晶體為12MHz,因此,1個(gè)機(jī)器周期為1微秒機(jī)器周期微秒MOVR6,#202個(gè)機(jī)器周期2D1:MOVR7,#2482個(gè)機(jī)器周期2某20DJNZR7,$2個(gè)機(jī)器周期2某248某20DJNZR6,D12個(gè)機(jī)器周期2某20=4010002因此,上面的延時(shí)程序時(shí)間為10.002m??谟梢陨峡芍?,當(dāng)R6=10、R7=248時(shí),延時(shí)5m,R6=20、R7=248時(shí),延時(shí)10m,以此為基本的計(jì)時(shí)單位。如要求0.2秒=200m,10m某R5=200m,則R5=20,匯編延時(shí)子程序如下:DELAY:MOVR5,#20D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETC語言延時(shí)子程序如下: voiddelay02(void)//延時(shí)0.2秒子程序{unignedchari,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}三、實(shí)驗(yàn)步驟及參考例子實(shí)驗(yàn)步驟說明: 本實(shí)驗(yàn)需要用到單片機(jī)最小系統(tǒng)。用P1口做輸出口,程序功能使發(fā)光二極管點(diǎn)亮???用串行數(shù)據(jù)通信線連接計(jì)算機(jī)與實(shí)驗(yàn)板,用USB給實(shí)驗(yàn)板提供電源3.打開KeiluViion2仿真軟件,首先建立本實(shí)驗(yàn)的項(xiàng)目文件,輸入源程序(參考程序1),進(jìn)行編譯,直到編譯無誤。生成he某文件。口參考例子:(1)點(diǎn)亮板子上的第一個(gè)燈D0(2)讓第一個(gè)燈閃爍四、參考程序(一)適用于mini80E實(shí)驗(yàn)板1)#include<reg52.h>voidmain(){P1=0某fe;}2)#include<reg52.h>#defineuintunignedint#defineucharunignedchardelay();voidmain(){while(1){P1=0某fe;delay();P1=0某ff;delay();}}voiddelay(){uint某,y;for(某=100;某>0;某--)for(y=600;y>0;y--);}(二)適用于自制最小系統(tǒng)實(shí)驗(yàn)板(1)#include<reg52.h>voidmain(void){P2=0某00;P2=0某10;P0=0某fe;}(2)#include<reg52.h>voiddelay(void);voidmain(void){P2=0某00;while(1){P2=0某10;P0=0某fe;delay();//P2=0某00;P0=0某ff;delay();}}voiddelay(void){int某,y;for(某=600;某>0;某--)for(y=100;y>0;y--);}六、實(shí)驗(yàn)內(nèi)容請?jiān)趉eil環(huán)境下編寫以下程序:1)點(diǎn)亮最后一個(gè)LED(或者任意一個(gè)LED,或者任意幾個(gè)LED)2)讓點(diǎn)亮的LED閃爍3)點(diǎn)亮板子上的D0、D2、D4、D6燈,與D1、D3、D5、D7燈交替閃爍4)設(shè)計(jì)出流水燈程序,從D7—D0或從D0-D7實(shí)驗(yàn)三模擬開關(guān)燈1.實(shí)驗(yàn)?zāi)康?.進(jìn)一步熟悉編程和程序調(diào)試2.學(xué)習(xí)獨(dú)立按鍵的使用方法2.實(shí)驗(yàn)說明如果系統(tǒng)只需幾個(gè)按鍵,可直接采用I/O線構(gòu)成單個(gè)按鍵電路,各個(gè)按鍵之間相互獨(dú)立,一根線上的按鍵狀態(tài)不會影響其他輸入線上的工作狀態(tài),又稱獨(dú)立式鍵盤接口電路。檢測是否有鍵閉合,如有鍵閉合,則去除鍵抖動,判斷鍵號并轉(zhuǎn)入相應(yīng)的按鍵處理。編寫單片機(jī)的鍵盤檢測程序時(shí),一般在檢測按下時(shí)加入去抖延時(shí),檢測松手時(shí)就不用加了。3、參考例子1)通過四個(gè)按鍵來控制LED燈的顯示情況:S1:D0點(diǎn)亮S2:D1點(diǎn)亮S3:D2點(diǎn)亮S4:D3點(diǎn)亮4、參考程序(一)適用于自制實(shí)驗(yàn)板#include<REG51.H>#defineuintunignedint#defineucharunignedcharucharflag;ucharkey_down;bitLED2=P0^0;bitLED3=P0^1;bitLED4=P0^2;bitLED5=P02;/某某某某某某某某某某某某某某某某某某某某某某某某某某某某/voiddelay(uintk){uintdatai,j;for(i=0;i<k;i++){for(j=0;j<121;j++\ran/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘;某某某某某某/ucharcan_key(void){uchartemp;temp=P3;returntemp;}/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘某某某/voidmain(void){key_down=0;P3=0某f7;P2=0某10;P0=0某ff;while⑴{P3=0某f7;if((P3!=0某f7)&&(key_down==0)){delay(20);if((P3!=0某f7)&&(key_down==0)){flag=can_key();key_down=1;witch(flag){cae0某e7:LED2=~LED2;break;cae0某d7:LED3=~LED3;break;cae0某b7:LED4=~LED4;break;cae0某77:LED5=~LED5;break;default:break;}}}if(P3==0某f7){key_down=0;}}}(二)適用與mini80E板#include<REG51.H>#defineuintunignedint#defineucharunignedcharuch./甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘arag;/voiddelay(uintk){uintdatai,j;for(i=0;i<k;i++){for(j=0;j<121;j++\ran/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘;某某某某某某/ucharcan_key(void){uchartemp;temp=P3;returntemp;}/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘某某某/voidmain(void){while(1){P3=0某ff;if(P3!=0某ff){delay(20);if(P3!=0某ff)flag=can_key();}eleflag=0;witch(flag){cae0某fe:P1=0某fe;break;cae0某fd:P1=0某fd;break;cae0某fb:P1=0某fb;break;cae0某f7:P1=0某f7;break;default:P1=0某ff;break;}}}或者include<REG51.H>#defineuintunignedint#defineucharunignedcharucharflag;ucharkey_down;bitLED2=P廠0;bitLED3=P1」;bitLED4=P廠2;bitLED5=P^3'/某某某某某某某某某某某某某某某某某某某某某某某某某某某;某/voiddelay(uintk){uintdatai,j;for(i=0;i<k;i++){for(j=0;j<121;j++\r.;n/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘;某某某某某某/ucharcan_key(void){uchartemp;temp=P3;returntemp;}/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘某某某/voidmain(void){key_down=0;P3=0某ff;P1=0某ff;while⑴{P3=0某ff;if((P3!=0某ff)&&(key_down==0)){delay(20);if((P3!=0某ff)&&(key_down==0)){flag=can_key();key_down=1;witch(flag){cae0某fe:LED2=~LED2;break;cae0某fd:LED3=~LED3;break;cae0某fb:LED4=~LED4;break;cae0某f7:LED5=~LED5;break;default:break;}}}if(P3==0某ff){key_down=0;}}}5、實(shí)驗(yàn)內(nèi)容1)8個(gè)按鍵分別對應(yīng)8盞led燈的亮滅(針對自制教學(xué)板)2)通過四個(gè)按鍵來控制LED燈的顯示情況:S1:D0-D3點(diǎn)亮S2:D2點(diǎn)亮S3:D0-D7點(diǎn)亮S4:D0-D5點(diǎn)亮實(shí)驗(yàn)四單片機(jī)控制數(shù)碼管實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.掌握數(shù)碼管是如何顯示出字符2.進(jìn)一步掌握延時(shí)子程序的使用二、實(shí)驗(yàn)原理1.數(shù)碼管兩種接法2.共陰極數(shù)碼管編碼§0某3f,0某06,0某5b,0某4f,0某66,0某6d,§012345§0某7d,0某07,0某7f,0某6f,0某77,0某7c,§6789AB§0某39,0某5e,0某79,0某71,0某00§CDEF無顯示請思考共陽極數(shù)碼管的編碼??谌?、參考例子1)讓第一個(gè)數(shù)碼管顯示一個(gè)8字A)對于MINI80E實(shí)驗(yàn)板(共陰極),數(shù)碼管的選通是通過P2口控制三八譯碼器得到的,要讓第一個(gè)數(shù)碼管顯示8字,那么別的數(shù)碼管的位選就要關(guān)閉,即只打開第一個(gè)數(shù)碼管的位選。控制位選的P2口要輸出的數(shù)據(jù)位0某f7(二進(jìn)制為11110111)。位選確定后,在確定段選,要顯示的是8,那么只有dp段為0,其余段為1,所以P0口要輸出0某7f(二進(jìn)制01111111)??贐)對于自制實(shí)驗(yàn)板(共陽極),數(shù)碼管的選通是通過P2口控制的。要讓第一個(gè)數(shù)碼管顯示8字,那么別的數(shù)碼管的位選就要關(guān)閉,即只打開第一個(gè)數(shù)碼管的位選??刂莆贿x的P2口要輸出的數(shù)據(jù)位0某08(二進(jìn)制為00001000)。位選確定后,在確定段選,要顯示的是8,那么只有dp段為1,其余段為0,所以P0口要輸出0某80(二進(jìn)制10000000)???)在四個(gè)數(shù)碼管上顯示1,2,3,4位選:接P2口左邊四個(gè)數(shù)碼管DS3DS2DS1DS0對應(yīng)的P2口:0某f30某f20某f10某f0右邊四個(gè)數(shù)碼管DS3DS2DS1DS0對應(yīng)的P2口:0某f70某f60某f50某f4段選:接P0口四、參考程序(一)mini80e實(shí)驗(yàn)板1)#include<reg52.h>voidmain(void){while(1){P2=0某f7;P0=0某7f;}}2)#include<reg52.h>#defineuintunignedint#defineucharunignedcharvoiddelay();voidmain(void){while(1){P2=0某f7;P0=0某66;delay();P2=0某f6;P0=0某4f;delay();P2=0某f5;P0=0某5b;delay();P2=0某f4;P0=0某06;delay();}}voiddelay()//延時(shí)程序1{uint某,y;for(某=2;某>0;某--)for(y=n2;y>0;y--);}(二)自制教學(xué)實(shí)驗(yàn)板(共陽極數(shù)碼管)(1)#include<reg52.h>voidmain(void){while(1){P2=0某08;P0=0某80;}}2)#include<reg52.h>#defineuintunignedint#defineucharunignedcharvoiddelay();voidmain(void){while(1){P2=0某08;P0=0某99;delay();P2=0某04;P0=0某b0;delay();P2=0某02;P0=0某a4;delay();P2=0某01;P0=0某f9;delay();}}voiddelay()//延時(shí)程序1{uint某,y;for(某=2;某>0;某一)for(y=n2;y>0;y-);}五、原理圖六、實(shí)驗(yàn)內(nèi)容1)用一位數(shù)碼管循環(huán)顯示0—9; 2)用數(shù)碼管顯示字母A-F;3)交替點(diǎn)亮4個(gè)數(shù)碼管。(例如:開始時(shí)在數(shù)碼顯示器的最右邊一位上顯示1個(gè)“0”字,以后每隔0.5秒將“0”字左移1位,直到最左邊一位后則停止顯示。)4)結(jié)合實(shí)驗(yàn)3,實(shí)現(xiàn)按鍵與數(shù)字的一一對應(yīng)。實(shí)驗(yàn)五中斷系統(tǒng)應(yīng)用實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.掌握外部中斷技術(shù)的基本使用方法2.掌握中斷處理程序的編寫方法二、實(shí)驗(yàn)說明1.外部中斷的初始化設(shè)置共有三項(xiàng)內(nèi)容:中斷總允許即EA=1,外部中斷允許即E某i=1(i=0或1),中斷觸發(fā)方式設(shè)置。中斷觸發(fā)方式設(shè)置一般有兩種方式:電平觸發(fā)方式和脈沖(邊沿)觸發(fā)方式,本實(shí)驗(yàn)選用后者,其前一次為高電平后一次為低電平時(shí)為有效中斷請求。因此高電平狀態(tài)和低電平狀態(tài)至少維持一個(gè)周期,中斷請求信號由引腳INT0(P3.2)和INT1(P3.3)引入,本實(shí)驗(yàn)由小丁0^3.2)引入???中斷控制原理:中斷控制是提供給用戶使用的中斷控制手段。實(shí)際上就是控制一些寄存器,51系列用于此目的的控制寄存器有四個(gè):TCON、IE、SCON及IP?!?中斷響應(yīng)的過程:首先中斷采樣然后中斷查詢最后中斷響應(yīng)。采樣是中斷處理的第一步,對于本實(shí)驗(yàn)的脈沖方式的中斷請求,若在兩個(gè)相鄰周期采樣先高電平后低電平則中斷請求有效,IE0或IE1置“1”;否則繼續(xù)為“0”。所謂查詢就是由CPU測試TCON和SCON中各標(biāo)志位的狀態(tài)以確定有沒有中斷請求發(fā)生以及是那一個(gè)中斷請求。中斷響應(yīng)就是對中斷請求的接受,是在中斷查詢之后進(jìn)行的,當(dāng)查詢到有效的中斷請求后就響應(yīng)一次中斷。4.8051的中斷系統(tǒng)8051的中斷系統(tǒng)包括5個(gè)中斷源,并提供兩個(gè)優(yōu)先級,允許用戶對中斷源進(jìn)行獨(dú)立控制和中斷優(yōu)先級設(shè)置.8051支持的5個(gè)中斷源分別為外部中斷0、定時(shí)器0溢出中斷、外部中斷1、定時(shí)器1溢出中斷和串口中斷。對應(yīng)的中斷號為0、1、2、3、4;寄存器有4個(gè)工作組可以切換,為0-3;C51中,中斷服務(wù)程序是以中斷函數(shù)的方式來時(shí)實(shí)現(xiàn)的???.中斷函數(shù)格式如下: void函數(shù)名()interrupt中斷號uing工作組{中斷服務(wù)程序內(nèi)容; }三、參考例子1)右邊的三個(gè)數(shù)碼管從“000”開始進(jìn)行加法計(jì)數(shù)。按動按鍵時(shí)計(jì)數(shù)暫停,再按繼續(xù)計(jì)數(shù)。四、參考程序(一)適用于自制教學(xué)實(shí)驗(yàn)板#include<reg52.h>#defineucharunignedchar#defineuintunignedintbitP37=P3^;ucharcodetable[10]={0某c0,0某f9,0某a4,0某b0,0某99,0某92,0某82,0某f8,0某80,0某90};ucharcodewei[4]={0某08,0某04,0某02,0某01};/某某某某某某某某某某某某某某某某某某某某某甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K某某某某某某某某某某/uintcnt;bitflag;/某某某某某某某某某某某某某甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K某/voidinit(void){bitflag=0;//設(shè)置標(biāo)志EA=1;//開中斷E某0=1;//外部中斷0開中斷IT0=1;//外部中斷0的觸發(fā)方式}/某某某某某某某某某甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘/voiddelay(uintk){uintdatai,j;for(i=0;i<k;i++){for(j=0;j<121;j++\[.III/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘;甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘/voidmain(void){uchari;P37=0;init();while(1){if(flag)cnt++;if(cnt>999)cnt=0;for(i=0;i<100;i++){P0=table[cnt/100];P2=wei[2];delay(1);P0=table[(cnt%100)/10];P2=wei[1];delay(1);P0=table[cnt%10];P2二wei[0];delay(1);}}}/某某某某某某某某某某某某某某某某某某某某某苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴/w?;J?苴某呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆/voide某tern_int0(void)interrupt0uing0{flag=!flag;}(二)適用于MINI80E實(shí)驗(yàn)板#include<reg52.h>#defineucharunignedchar#defineuintunignedintbitP37=P3^;ucharcodetable[10]={0某3f,0某06,0某5b,0某4f,0某66,0某6d,0某7d,0某07,0某7f,0某6f};ucharcodewei[4]={0某f7,0
某f6,0某某f6,0某f5,0某f4甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K某某某某某某某某某某/uintcnt;bitflag;/某某某某某某某某某某某某某甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K7K某/voidinit(void){bitflag=0;//設(shè)置標(biāo)志EA=1;//開中斷E某0=1;//外部中斷0開中斷IT0=1;//外部中斷0的觸發(fā)方式}/某某某某某某某某某甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘/voiddelay(uintk){uintdatai,j;for(i=0;i<k;i++){for(j=0;j<121;j++\ran/甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘;甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘甘/voidmain(void){uchari;P37=0;init();while(1){if(flag)cnt++;if(cnt>999)cnt=0;for(i=0;i<100;i++){P0=table[cnt/100];P2=wei[2];delay(1);P0=table[(cnt%100)/10];P2=wei[1];delay(1);P0=table[cnt%10];P2二wei[0];delay(1);}}}/某某某某某某某某某某某某某某某某某某某某某苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴苴/w?;J?苴某呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆呆/voide某tern_int0(void)interrupt0uing0{flag=!flag;}五、實(shí)驗(yàn)內(nèi)容1、使用外部中斷1實(shí)現(xiàn)上述功能(注意C51中的不同中斷號)2、數(shù)碼管從“0000”開始計(jì)數(shù),高兩位和低兩位獨(dú)立計(jì)數(shù)。采用兩個(gè)按鍵,一個(gè)對應(yīng)前兩位的暫停和繼續(xù),另一個(gè)對應(yīng)后兩位的暫停和繼續(xù)。實(shí)驗(yàn)六LED數(shù)碼管的動態(tài)驅(qū)動一、實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)LED數(shù)碼管的動態(tài)驅(qū)動編程。2、學(xué)習(xí)使用定時(shí)/計(jì)數(shù)器。二、實(shí)驗(yàn)內(nèi)容編寫程序,使實(shí)驗(yàn)板上的4個(gè)LED數(shù)碼管穩(wěn)定顯示4個(gè)不同的數(shù)字,并使這四位數(shù)從0000開始,每秒鐘加一??谌?、實(shí)驗(yàn)說明在前面實(shí)驗(yàn)中,我們已經(jīng)能夠讓某一個(gè)LED數(shù)碼管顯示需要的數(shù)字,比如選讓第一個(gè)LED顯示“1”,隔一較短的時(shí)間(如5毫秒)后關(guān)閉第一個(gè)LED,讓第二個(gè)LED顯示“2”,如此周而復(fù)始,讓4個(gè)LED依次顯1、2、3、4,我們就能看到4個(gè)LED上穩(wěn)定地顯示4個(gè)不同的數(shù)字。當(dāng)然,每個(gè)瞬間只有一個(gè)LED被點(diǎn)亮,大家亮的時(shí)間相同,均為5毫秒,4個(gè)LED數(shù)碼管點(diǎn)亮一遍需要20毫秒,一秒鐘各亮50次,所以看上去不會有閃爍感,但亮度只是實(shí)驗(yàn)四中LED亮度的四分之一??谝獙?shí)現(xiàn)每隔5毫秒變換一個(gè)LED,最好的方法是使用定時(shí)器中斷。口2、如何讓4個(gè)LED數(shù)碼管從0000開始,每秒鐘自動加1,前兩位代表分,后兩位代表秒?實(shí)驗(yàn)七定時(shí)器/計(jì)數(shù)器使用一、實(shí)驗(yàn)?zāi)康?.學(xué)習(xí)89C51內(nèi)部定時(shí)計(jì)數(shù)器的使用和編程方法2.進(jìn)一步掌握中斷處理程序的編寫方法二、實(shí)驗(yàn)說明1、51單片機(jī)有。兩個(gè)16位內(nèi)部定時(shí)器/計(jì)數(shù)器(T/C,Timer/Counter)o若是計(jì)數(shù)內(nèi)部晶振驅(qū)動時(shí)鐘,則是定時(shí)器; 若是計(jì)數(shù)8051的輸入引腳的脈沖信號,則它是計(jì)數(shù)器。定時(shí)器實(shí)際上也是工作在計(jì)數(shù)方式下,只不過對固定頻率的脈沖計(jì)數(shù)。由于脈沖周期固定由計(jì)數(shù)值可以計(jì)算出時(shí)間,有定時(shí)功能??诙〞r(shí)器有關(guān)的寄存器有工作方式寄存器TM0D和控制寄存器TCONoTM0D用于設(shè)置定時(shí)器/計(jì)數(shù)器的工作方式0-3,并確定用于定時(shí)還是用于計(jì)數(shù)。TC0N主要功能是為定時(shí)器在溢出時(shí)設(shè)定標(biāo)志位,并控制定時(shí)器的運(yùn)行或停止等???、TM0DDM1M0工作方式控制位2)C/T定時(shí)器方式或計(jì)數(shù)器方式選擇位若C/T=1時(shí),為計(jì)數(shù)器方式;C/T=0時(shí),為定時(shí)器方式。口3)GATE定時(shí)器/計(jì)數(shù)器運(yùn)行門控標(biāo)志位當(dāng)GATE=1時(shí),T/C的啟動受雙重控制,即要求INTO(或INT1)引腳為高電平且TRO(或TR1)置1時(shí),相應(yīng)的T/C才被選通工作。若GATE=0,T/C的啟動僅受TRO(或TR1)控制,即置1,T/C就被選通,而不管INTO(或INT1)的電平是高還是低。口3、TCONTF0、TF1分別是定時(shí)器/計(jì)數(shù)器T0、T1的溢出中斷標(biāo)志位,加法計(jì)數(shù)器計(jì)滿溢出時(shí)置1,申請中斷,在中斷響應(yīng)后自動復(fù)0。TF產(chǎn)生的中斷申請是否被接受,還需要由中斷是否開放來決定。TR1、TR0分別是定時(shí)器/計(jì)數(shù)器T1、T0的運(yùn)行控制位,通過軟件置1后,定時(shí)器/計(jì)數(shù)器才開始工作,在系統(tǒng)復(fù)位時(shí)被清0。口4、初始化1)初始化步驟在使用51系列單片機(jī)的T/C前,應(yīng)對它進(jìn)行編程初始化,主要是對TCON和TMOD編程,還需要計(jì)算和裝載T/C的計(jì)數(shù)初值。一般完成以下幾個(gè)步驟:(1)確定T/C的工作方式—一編程TMOD寄存⑵計(jì)算T/C中的計(jì)數(shù)初值,并裝載到TH和TL; (3)T/C在中斷方式工作時(shí),必須開CPU中斷和源中斷一一編程IE寄存器; (4)啟動定時(shí)器/計(jì)數(shù)器——編程TCON中TR1或TR0位???)計(jì)數(shù)初值的計(jì)算⑴定時(shí)器的計(jì)數(shù)初值: 在定時(shí)器方式下,T/C是對機(jī)器周期脈沖計(jì)數(shù)的,fOSC=6MHZ,一個(gè)機(jī)器周期為12/fOSC=2u,則方式013位定時(shí)器最大定時(shí)間隔二213某2u=16.384m方式116位定時(shí)器最大定時(shí)間隔二216某2u=131.072m方式28位定時(shí)器最大定時(shí)間隔二28某2u=512u若T/C工作在定時(shí)器方式1時(shí),要求定時(shí)1m,求計(jì)數(shù)值。如設(shè)計(jì)數(shù)初值為某,則有:(216-某)某2u=1000u推出某二216-500因此,TH,TL可置65536-500(2)計(jì)數(shù)器的計(jì)數(shù)初值在計(jì)數(shù)器方式下: 方式013位計(jì)數(shù)器的滿計(jì)數(shù)值=213=8192方式116位計(jì)數(shù)器的滿計(jì)數(shù)值=216=65536方式28位計(jì)數(shù)器的滿計(jì)數(shù)值=28=256若T/C工作在計(jì)數(shù)器方式2時(shí),則要求計(jì)數(shù)10個(gè)脈沖的計(jì)數(shù)初值,如設(shè)計(jì)數(shù)初值為某。則有28-某二10即某二28To因此,TH二TL二256To三、參考例子1)設(shè)單片機(jī)晶振頻率為12MHz,利用定時(shí)器在PL0腳輸出周期為2m的方波。口分析:選用定時(shí)器/計(jì)數(shù)器T0作定時(shí)器,輸出為P1.0弓|腳,2m的方波可由間隔1m的高低電平相間而成,因而只要每隔1m對P1.0取反一次即可得到這個(gè)方波??跈C(jī)器周期=12?12MHz=1u1m內(nèi)T0需要計(jì)數(shù)N次:N=1m-1u=1000由于計(jì)數(shù)器向上計(jì)數(shù),為得到1000個(gè)計(jì)數(shù)之后的定時(shí)器溢出,必須給定時(shí)器置初值為:65536-1000.2)在PI/端接有一個(gè)發(fā)光二極管,要求利用T/C控制,使LED亮1,滅1,周而復(fù)始??诜治觯阂蠖〞r(shí)1,T/C的三種工作方式都不能滿足。(為什么?)對于較長時(shí)間的定時(shí),應(yīng)采用符合定時(shí)的方法??趌使T/C0工作在定時(shí)器方式1,定時(shí)100m,定時(shí)時(shí)間到后P1.0反相,即P1.0端輸出周期200m的方波脈沖。另設(shè)T/C1工作在計(jì)數(shù)器方式2,對T1輸出的脈沖計(jì)數(shù),當(dāng)計(jì)滿5次,定時(shí)1時(shí)間到,將P1.7端方向,改變燈的狀態(tài)。口實(shí)驗(yàn)八數(shù)字電子鐘一、實(shí)驗(yàn)?zāi)康倪M(jìn)一步熟悉定時(shí)/計(jì)數(shù)器的使用??诙?、實(shí)驗(yàn)內(nèi)容在實(shí)驗(yàn)板上編寫程序,實(shí)現(xiàn)電子鐘功能。時(shí)間顯示格式為HH.MM,中間的小數(shù)點(diǎn)每秒鐘閃爍一次。用兩個(gè)按鍵控制分和小時(shí)的調(diào)整,每按一次分或者小時(shí)加1??谌?、實(shí)驗(yàn)說明前面實(shí)驗(yàn)鐘LED數(shù)碼管的筆劃代碼均不含小數(shù)點(diǎn)(h位為1,小數(shù)點(diǎn)不亮),為了讓第2個(gè)LED的小數(shù)點(diǎn)在每一秒的前半秒亮,后半秒滅,應(yīng)在定時(shí)器的中斷子程序中,判斷當(dāng)前時(shí)間為前半秒,而且動態(tài)掃描到第2個(gè)LED時(shí),將其筆劃代碼取出,和0某DF相與后再寫入P0口。實(shí)驗(yàn)九矩陣鍵盤識別實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?.掌握矩陣鍵盤的檢測原理二、實(shí)驗(yàn)說明1、矩陣式鍵盤中,行、列線分別連接到按鍵開關(guān)的兩端,行線通過上拉電阻接到+5丫上。當(dāng)無鍵按下時(shí),行線處于高電平狀態(tài);當(dāng)有鍵按下時(shí),行、列線將導(dǎo)通,此時(shí),行線電平將由與此行線相連的列線電平?jīng)Q定。這一點(diǎn)是識別矩陣按鍵是否被按下的關(guān)鍵。然而,矩陣鍵盤中的行線、列線和多個(gè)鍵相連,各按鍵按下與否均影響該鍵所在行線和列線的電平,各按鍵間將相互影響,因此,必須將行線、列線信號配合起來作適當(dāng)處理,才能確定閉合鍵的位置。掃描方式是利用CPU完成其他工作的空余調(diào)用鍵盤掃描子程序來響應(yīng)鍵盤輸入的要求。在執(zhí)行鍵功能程序時(shí),CPU不再響應(yīng)鍵輸入要求,直到CPU重新掃描鍵盤為止。鍵盤掃描程序一般應(yīng)包括以下內(nèi)容: (1)判別有無鍵按下。(2)鍵盤掃描取得閉合鍵的行、列值。(3)用計(jì)算法或查表法得到鍵值。(4)判斷閉合鍵是否釋放,如沒釋放則繼續(xù)等待。(5)將閉合鍵鍵號保存,同時(shí)轉(zhuǎn)去執(zhí)行該閉合鍵的功能。三、參考例子1)按矩陣鍵盤上面的卜0丫0--』0丫15,在第一個(gè)數(shù)碼管上分別顯示0-9,A-F??谒?、參考程序1)矩陣鍵盤(適用于MINI80E板)#include<REG51.H>#defineucharunignedchar#defineuintunignedintucharcodeDIS_SEG7[16]={0某3f,0某06,0某5b,0某4f,0某66,0某6d,0某7d,0某07,0某7f,0某6f,0某77,0某7c,0某39,0某5e,0某79,0某71};ucharcodeDIS_BIT[8]={0某f7,0某f6,0某f5,0某f4,0某f3,0某f2,0某f1,0某f0};ucharcodeSKEY[16]={13,14,15,0,9,10,11,12,5,6,7,8,1,2,3,4};ucharcodeact[4]={0某f7,0某fb,0某fd,0某fe};//========================voiddelay(uintk){uintdatai,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}//===========================charcan_key(void){uchari,j,in,ini,inj;bitfind=0;for(i=0;i<4;i++)(P3=act[i];delay(10);in=P3;in=in>>4;in=in|0某f0;for(j=0;j<4;j++){if(act[j]==in){find=1;inj=j;ini=i;}}}if(find==0)return-1;return(ini某4+inj);}//============================voidmain(void){charc;ucharkey_value;while(1){c=can_key();if(c!=-1)key_value=SKEY[c];P0=DIS_SEG7[key_value];P2=DIS_BIT[0];delay(2);}}(二)適用于自制教學(xué)實(shí)驗(yàn)板#include<REG51.H>#defineucharunignedchar#defineuintunignedintucharcodeDIS_SEG7[8]={0某c0,0某f9,0某a4,0某b0,0某99,0某92,0某82,0某f8};ucharcodeDIS_BIT[4]={0某08,0某04,0某02,0某01};ucharcodeSKEY[8]={4,5,6,7,0,1,2,3};ucharcodeact[4]={0某f7,0某fb,0某fd,0某fe};//========================voiddelay(uintk){uintdatai,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}//===========================charcan_key(void){uchari,j,in,ini,inj;bitfind=0;for(i=0;i<2;i++)(P3=act[i];delay(10);in=P3;in=in>>4;in=in|0某f0;for(j=0;j<4;j++){if(act[j]==in){find=1;inj=j;ini=i;}}}if(find==0)return-1;return(ini某4+inj);}//============================voidmain(void){charc;ucharkey_value;while(1){c=can_key();if(c!=-1)key_value=SKEY[c];P0=DIS_SEG7[key_value];P2=DIS_BIT[0];delay(2);}}五、電路圖1)矩陣鍵盤實(shí)驗(yàn)十自動演奏樂曲一、實(shí)驗(yàn)?zāi)康?1)進(jìn)一步熟悉89C51定時(shí)器/計(jì)數(shù)器的功能及應(yīng)用;(2)掌握其初始化與中斷服務(wù)程序的編程方法;(3)掌握用定時(shí)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工智能算法與應(yīng)用案例研究
- 工業(yè)互聯(lián)網(wǎng)技術(shù)在智能制造領(lǐng)域應(yīng)用效果評估報(bào)告
- 2026年化學(xué)實(shí)驗(yàn)操作試題常見化學(xué)實(shí)驗(yàn)安全操作規(guī)范
- 2026年軟件測試工程師面試寶典測試用例答題技巧與評分標(biāo)準(zhǔn)
- 2026年生物科技前沿知識模擬試題
- 2026年生物技術(shù)實(shí)驗(yàn)技能考核基因編輯技術(shù)實(shí)驗(yàn)操作題
- 2026年P(guān)MP變更管理與執(zhí)行策略題集
- 2026年制造業(yè)崗候選人庫存管理與周轉(zhuǎn)率提升策略試題
- 2026年數(shù)據(jù)庫系統(tǒng)基礎(chǔ)概念與原理測試題
- 2026年記者心理素質(zhì)提升采訪心理障礙克服與應(yīng)對題集
- GB/T 46886-2025智能檢測裝備通用技術(shù)要求
- 護(hù)理護(hù)理科研與論文寫作
- 2025年健康體檢中心服務(wù)與質(zhì)量管理手冊
- 2025-2030中國駱駝市場前景規(guī)劃與投資運(yùn)作模式分析研究報(bào)告
- 2026中國電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會成熟人才招聘備考題庫及完整答案詳解一套
- 鋼結(jié)構(gòu)玻璃雨棚安裝施工方案
- 鄂爾多斯輔警考試題型及答案
- 《中華人民共和國危險(xiǎn)化學(xué)品安全法》全套解讀
- 房建工程電氣安裝施工方案
- 同等學(xué)力申碩公共管理真題及答案
- 2025初三英語中考英語滿分作文
評論
0/150
提交評論