




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單片機(jī)原理與應(yīng)用技術(shù)吉林化工學(xué)院信控分院測控教研室TOC\o"1—2”\h\z實驗二LED數(shù)碼管動態(tài)描顯示實驗 7HYPERLINK\l”_Toc371018383”實驗三外部中斷實驗 9實驗五行列式鍵盤實驗 15HYPERLINK\l”_Toc371018386"實驗六D/A轉(zhuǎn)換實驗 17實驗七A/D轉(zhuǎn)換實驗 19實驗八AT24C02存儲器與I2C總線實驗 21實驗九串行口通信實驗 25HYPERLINK\l”_Toc371018390”實驗十DS1302時鐘與SPI總線實驗 28_Toc371018392”實驗十直流電機(jī)驅(qū)動實驗 33一.實驗?zāi)康?.了解keil軟件程序設(shè)計與調(diào)試方法;2.掌握I/O接口電平輸出控制方法;3.掌握延時函數(shù)程序的設(shè)計原理和調(diào)試方法。二.實驗要求編寫一個延時函數(shù)程序,控制接在P1口的八個發(fā)光二極管逐次點亮(即每次中斷點亮一個),形成“流水燈”效果。三.實驗電路連線AT89C51單片機(jī)的P1.0~P1。7口接LED顯示模塊的D0~D7。四.實驗說明方法1:采用延時函數(shù)的流水燈程序。在單片機(jī)中每條語句的執(zhí)行都是要消耗系統(tǒng)時間的,所以簡單的延時程序只需要執(zhí)行一些語句就可以實現(xiàn),但這些語句不應(yīng)該影響到單片機(jī)工作狀態(tài)(例如IO口狀態(tài))。因此延時程序通常都是由一些空循環(huán)語句來實現(xiàn),例如空操作的for語句或者while語句實現(xiàn),為了能夠方便的改變延時時間,通常我們可以為延時函數(shù)設(shè)置一個傳遞參數(shù),以便在不同情況下調(diào)用產(chǎn)生不同的延時時間。實驗參考程序如下:#include〈reg51。h>#defineBYTEunsignedcharBYTEIntTimes=0;BYTEt=0x01;voidLed_Loop(){ P1=~t; t=t〈〈1; if(t==0x00) t=0x01;}voidDelay(intmS){BYTEI;While(mS—-){for(i=0;i〈100;i++);}}voidmain(){ while(1){Led_Loop();Delay(500);}}方法2:拓展實驗,采用定時計數(shù)器的延時流水燈程序。程序設(shè)計思路為:主程序?qū)0初始化為定時器,工作在方式1,定時時間為100ms。同時將立即數(shù)0x01賦值給t,并將t的內(nèi)容送P1口輸出。每當(dāng)定時時間到,在T0的中斷服務(wù)程序中完成定時初值的重新賦值,同時將t的內(nèi)容循環(huán)左移一次并從P1口輸出。運行如下程序后就可以看到流水燈的效果了。程序設(shè)計的參考流程如圖1所示。(a)主程序流程圖(b)T0中斷服務(wù)子程序流程圖圖1流水燈程序流程圖實驗參考程序如下:#include〈reg51。h>#defineBYTEunsignedcharBYTEIntTimes=0;BYTEt=0x01;voidT0_INT()interrupt1{ IntTimes++; if(IntTimes>=10) { IntTimes=0; P1=~t; t=t<〈1; if(t==0x00){ t=0x01;} } TH0=0x4c;TL0=0x00;}Timer_Init(){ TMOD|=0x01; //T0和T1定時模式,方式一 TH0=0x4c;TL0=0x00; //設(shè)T0初值,50毫秒,晶振:11。0592MHz ET0=1; //開啟T0中斷 EA=1; //開啟總中斷 TR0=1; //啟動T0}voidmain(){ Timer_Init(); while(1);}一.實驗?zāi)康?.了解七段數(shù)碼管顯示的基本原理;2.掌握LED數(shù)碼管動態(tài)顯示的基本原理;3.掌握數(shù)碼管動態(tài)顯示程序的設(shè)計方法。二.實驗要求利用動態(tài)掃描方法在六位數(shù)碼管上顯示出穩(wěn)定的123456.三.實驗電路連線AT89C51單片機(jī)的P0。0~P0。7口接段選a~p,P2。5~P2。0口接位選LD0~LD5.數(shù)碼管硬件電路如圖1所示。圖1數(shù)碼管硬件電路四.實驗原理所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出“段碼”和相應(yīng)的“位選”,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示。其電路將所有位數(shù)碼管的段選線并聯(lián)在一起,由“位選”控制是哪一位數(shù)碼管有效,這樣一來,就沒有必要每一位數(shù)碼管配一個鎖存器,從而大大地簡化了硬件電路.實驗電路中的Led數(shù)碼管采用共陽型數(shù)碼管。顯示原理:將相應(yīng)的“位選”信號有效(低電平),相應(yīng)的數(shù)碼段置以低電平,對應(yīng)的段就會變亮。五.實驗說明單片機(jī)的P0口輸出顯示段碼,P2口輸出位碼控制,輸出6個字符.執(zhí)行如下程序后,觀察LED顯示結(jié)果。實驗參考程序如下:#include〈reg51。h〉#defineSegment_IOP0#defineBit_IOP2unsignedcharseg_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};//段碼表/*0123456789。*/unsignedcharbit_code[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位選碼,從右到左unsignedcharbuffer[6];//顯示數(shù)據(jù)段碼緩存unsignedcharbit_sel;//位選變量voiddelay(void)//延時{unsignedchart0;for(t0=30000;t0〉0;t0--);}voidLedDisplay(floatNUM){buffer[0]=NUM%10;buffer[1]=NUM%100/10;buffer[2]=NUM%1000/100;buffer[3]=NUM%10000/1000;buffer[4]=NUM%100000/10000; buffer[5]=NUM/100000;Bit_IO=0xdf; Segment_IO=seg_code[buffer[bit_sel]]; Bit_IO=bit_code[bit_sel]; bit_sel++; if(bit_sel>5) { bit_sel=0; } delay();}voidmain(void){ bit_sel=0; while(1) { LedDisplay(123456); }}一.實驗?zāi)康?.了解MCS-51系列單片機(jī)中斷系統(tǒng)結(jié)構(gòu);2.掌握MCS—51系列單片機(jī)中斷地址與中斷向量號;3.掌握MCS-51系列單片機(jī)外部中斷INT0、INT1程序設(shè)計方法。二.實驗要求用單次脈沖申請外部中斷INT0或者INT1,在中斷處理程序中使P1.0的輸出狀態(tài)發(fā)生反轉(zhuǎn),并通過發(fā)光二極管觀察P1。0的電平。三.實驗電路連線單片機(jī)P1。0口接LED顯示模塊的D0,INT0(P3。2)或者INT1(P3。3)口接按鍵模塊的K0。四.實驗原理AT89C51單片機(jī)有5個中斷源,有兩個中斷優(yōu)先級,高優(yōu)先級的中斷源可以中斷低優(yōu)先級的服務(wù)程序,反之不行。當(dāng)兩個同樣級別的中斷申請同時到來時,則按一個固定的查尋次序來處理中斷響應(yīng)。AT89C51單片機(jī)的5個中斷源及其優(yōu)先級次序如表1所示.表1AT89C51單片機(jī)的中斷源中斷源入口地址優(yōu)先級順序說明外部中斷00003H最高來自P3.2引腳(INT0)的外部中斷請求定時/計數(shù)器0000BH定時/計數(shù)器T0溢出中斷請求外部中斷10013H來自P3.3引腳(INT1)的外部中斷請求定時/計數(shù)器T1001BH定時/計數(shù)器T1溢出中斷請求串行口0023H最低串行口完成一幀數(shù)據(jù)的發(fā)送或接收中斷AT89C51單片機(jī)沒有專門的開中斷和關(guān)中斷指令,中斷的開放和關(guān)閉是由特殊功能寄存器IE來實現(xiàn)兩級控制的.所謂兩級控制是指在寄存器IE中有一個總允許位EA,當(dāng)EA=0時,就關(guān)閉了所有的中斷申請,CPU不響應(yīng)任何中斷申請。而當(dāng)EA=1時,對各中斷源的申請是否開放,還要看各中斷源的中斷允許位的狀態(tài)。中斷允許寄存器IE的地址為A8H,其中各位都可以位尋址,位地址為A8H~AFH.總允許位EA和各中斷源允許位在IE寄存器中的分布如下:D7D6D5D4D3D2D1D0EA—-ESET1EX1ET0EX0其中各控制位的含義如下:EA:中斷總允許位。EA=0時,CPU關(guān)閉所有的中斷申請,只有EA=1時,才能允許各個中斷源的中斷申請,但還要取決于各中斷源中斷允許控制位的狀態(tài)。ES:串行口中斷允許位。ES=1,串行口開中斷,ES=0,串行口關(guān)中斷。ET1:定時/計數(shù)器T1的溢出中斷允許位。ET1=1允許T1溢出中斷,ET1=0則不允許T1溢出中斷。EX1:外部中斷1(INT1)的中斷允許位。ET1=1允許外部中斷1申請中斷,EX1=0則不允許中斷。ET0:定時/計數(shù)器T0的溢出中斷允許位。ET0=1允許中斷,ET0=0不允許中斷.EX0:外部中斷0(INT0)的中斷允許位.EX0=1允許中斷,EX0=0不允許中斷。AT89C51單片機(jī)在復(fù)位時,IE各位的狀態(tài)都為“0”AT89C51單片機(jī)的中斷優(yōu)先級控制比較簡單,每個中斷源的優(yōu)先級別由特殊功能寄存器IP來管理。IP寄存器的地址為B8H,格式如下:D7D6D5D4D3D2D1D0—--PSPT1PX1PT0PX0其中各位的含義如下:PS:串行口中斷優(yōu)先級控制位.PT1:定時器/計數(shù)器T1中斷優(yōu)級控制位。PX1:外部中斷INT1中斷優(yōu)先級控制位。PT0:定時器/計數(shù)器T0中斷優(yōu)先級控制位。PX0:外部中斷INT0中斷優(yōu)先級控制位。IP寄存器中若某一個控制位置“1”,則相應(yīng)的中斷源就規(guī)定為高優(yōu)先級中斷,反之,若某一個控制位置“0"外部中斷觸發(fā)方式通過特殊功能寄存器TCON(地址為88H)控制,TCON中各控制位分布如下:D7D6D5D4D3D2D1D0TF1-TF0-IE1IT1IE0IT0其中各控制位的含義如下:IT0:選擇外中斷INT0的中斷觸發(fā)方式。IT0=0為電平觸發(fā)方式,低電平有效。IT0=1為負(fù)邊沿觸發(fā)方式,INT0腳上的負(fù)跳變有效。IT0的狀態(tài)可以用指令來置“1”或清“0IE0:外中斷INT0的中斷申請標(biāo)志。當(dāng)檢測到INT0上存在有效中斷申請時,由硬件使IE0置位。當(dāng)CPU轉(zhuǎn)向中斷服務(wù)程序時,由硬件清“0"IE0中斷申請標(biāo)志。IT1:選擇外中斷INT1的觸發(fā)方式(功能與TI0類似)。IE1:外部中斷INT1的中斷申請標(biāo)志(功能與IE0類似)。TF0:定時/計數(shù)器T0溢出中斷申請標(biāo)志.當(dāng)T0溢出時,由內(nèi)部硬件將TF0置“1",當(dāng)CPU轉(zhuǎn)向中斷服務(wù)程序時,由硬件將TF0清“0”TF1:定時器1溢出中斷申請標(biāo)志(功能與TF0相同).可見定時/計數(shù)器溢出中斷和外部中斷的申請標(biāo)志,在CPU響應(yīng)中斷之后能夠自動撤除。AT89C51單片機(jī)在接收到中斷源發(fā)來的中斷申請以后,先把這些申請鎖定在各自的中斷標(biāo)志位中,然后在下一個機(jī)器周期按表2—1規(guī)定的內(nèi)部優(yōu)先順序和中斷優(yōu)先級分別來查詢這些標(biāo)志,并在一個機(jī)器周期之內(nèi)完成檢測和優(yōu)先排隊。響應(yīng)中斷的條件有三個:(1)必須沒有同級或更高級別的中斷正在得到響應(yīng),如果有的話,則必須等CPU為它們服務(wù)完畢,返回主程序并執(zhí)行一條指令之后才能響應(yīng)新的中斷申請。(2)必須要等當(dāng)前正在執(zhí)行的指令執(zhí)行完畢以后,CPU才能響應(yīng)新的中斷申請.(3)若正在執(zhí)行的指令是RETI(中斷返回)或是任何訪問IE寄存器或IP寄存器的指令,則必須要在執(zhí)行完該指令以及緊隨其后的另外一條指令之后才可以響應(yīng)新的中斷申請.CPU響應(yīng)中斷后將自動跳轉(zhuǎn)到中斷源的入口地址開始執(zhí)行程序,每個中斷源都有其固定的入口地址,它們的處理過程也有所區(qū)別.一般情況下,中斷處理包括兩個部分:一是保護(hù)現(xiàn)場,二是為中斷服務(wù)。所謂保護(hù)現(xiàn)場就是將需要在中斷服程序中使用而又不希望破壞其中原來內(nèi)容的工作寄存器壓入堆棧中保護(hù)起來,等中斷服務(wù)完成后再從堆棧中彈出以恢復(fù)原來的內(nèi)容。通常需要保護(hù)的寄存器有PSW、ACC以及其他工作寄存器.五.實驗說明采用外部中斷INT0觸發(fā)P1。0的輸出狀態(tài)反轉(zhuǎn)。P1.0接LED燈,INTO(P3.2)端接單脈沖發(fā)生器。執(zhí)行如下程序,每按一次單脈沖按鈕,注意觀察LED的狀態(tài)。#include〈reg51。h〉sbitLED=P1^0;voidexter0()interrupt0//用外部中斷0{ LED=!LED;}voidmain(){ EX0=1;//開外部中斷0 IT0=1;//TCON=0x01,IT0=1時下降沿觸發(fā),IT0=0時低電平觸發(fā)EA=1;//開總中斷 while(1){}}一.實驗?zāi)康耐ㄟ^本實驗了解MCS-51單片機(jī)內(nèi)部定時/計數(shù)器的基本結(jié)構(gòu),掌握定時/計數(shù)器的初始化方法,以及中斷處理程序的編程方法。二.實驗要求1.定時器模式實驗:AT89C51內(nèi)部定時器T0用中斷方式計時,實現(xiàn)每一秒鐘使P1.0的輸出狀態(tài)發(fā)生一次反轉(zhuǎn),從而形成方波輸出,并點亮發(fā)光二極管LED0。2.計數(shù)器模式實驗:AT89C51內(nèi)部定時計數(shù)器T0,按計數(shù)器模式和方式1工作,對P3.4(T0)引腳進(jìn)行計數(shù),計數(shù)值通過P1、P2口驅(qū)動LED數(shù)碼管顯示出來三.實驗電路連線1.AT89C51單片機(jī)的P1。0口接發(fā)光二極管模塊的D0。2.單片機(jī)P2.0口接數(shù)碼管顯示模塊的位選,P1.0~P1。7口接段選a~p,P3。4口接按鍵模塊的K0。四.實驗原理AT89C51單片機(jī)內(nèi)部有兩個16位可編程定時/計數(shù)器,記為T0和T1。它們的工作方式可以通過指令對相應(yīng)特殊功能寄存器編程來設(shè)定,或作定時器用,或作外部事件計數(shù)器用。定時/計數(shù)器在硬件上由雙字節(jié)加法計數(shù)器TH和TL組成,作定時器使用時,計數(shù)脈沖由單片機(jī)內(nèi)部振蕩器提供,計數(shù)頻率為fosc/12,每個機(jī)器周期加1。作計數(shù)器使用時,計數(shù)脈沖由P3口的P3.4(或P3。5)即T0(或T1)引腳輸入,外部脈沖的下降沿觸發(fā)計數(shù),計數(shù)器在每個機(jī)器周期期間采樣外部脈沖,若一個周期的采樣值為1,下一個周期的采樣值為0,則計數(shù)器加1,故識別一個從0到1的跳變需要2個機(jī)器周期,所以對外部計數(shù)脈沖的最高計數(shù)頻率為fosc/24,同時還要求外部脈沖的高低電平保持時間均要大于一個機(jī)器周期.定時/計數(shù)器的工作方式由特殊功能寄存器TMOD編程決定,定時/計數(shù)器的啟動運行由特殊功能寄存器TCON編程控制。不論用作定時器還是用作計數(shù)器,每當(dāng)產(chǎn)生溢出時,都會向CPU發(fā)出中斷申請。方式控制寄存器TMOD的地址為89H,控制字格式如下:D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0低4位為T0的控制字,高4位為T1的控制字,其中各位的具體含義介紹如下。GATE為門控位。它對定時/計數(shù)器的啟動起輔助控制作用.GATE=1時,定時/計數(shù)器的計數(shù)受外部引腳P3。2(INT0)或P3.3(INT1)輸入電平的控制,此時只有當(dāng)P3口的P3.2(或P3.3)引腳即INT0(或INT1)上的電平為1才能啟動計數(shù);GATE=0時,定時器/計數(shù)器的運行不受外部引腳輸入電平的控制。表2定時/計數(shù)器的方式選擇M1M0工作方式00方式0,為13位定時/計數(shù)器。01方式1,為16位定時/計數(shù)器.10方式2,為自動重裝常數(shù)的8位定時/計數(shù)器。11方式3,僅適用于T0,分成2個8位定時/計數(shù)器。C/T為方式選擇位。C/T=0為定時器方式,采用單片機(jī)內(nèi)部振蕩脈沖的12分頻信號作為計數(shù)脈沖,若采用12MHz的晶振,則計數(shù)頻率為1MHz,從計數(shù)值便可計算出定時時間。C/T=1為計數(shù)器方式,采用外部引腳(T0為P3。4,T1為P3.5)的輸入脈沖作為計數(shù)脈沖,當(dāng)T0(或T1)上的輸入信號發(fā)生從高到低的負(fù)跳變時,計數(shù)器加1.最高計數(shù)頻率為單片機(jī)晶振頻率的1/24。M1、M0二位的狀態(tài)確定定時/計數(shù)器的工作方式,詳見表2。定時/計數(shù)器控制寄存器TCON的地址為88H,格式如下:D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0TF1為定時/計數(shù)器T1的溢出標(biāo)志位。當(dāng)T1被允許計數(shù)以后,T1從初值開始加1計數(shù),計數(shù)器的最高位產(chǎn)生溢出時置“1”TF1,并向CPU申請中斷,當(dāng)CPU響應(yīng)中斷時,由硬件清“0”TF1.TF1也可由軟件查詢清“TR1為定時/計數(shù)器的運行控制位,由軟件置位和復(fù)位.當(dāng)方式控制寄存器TMOD中的GATE位為0,且TR1為1時允許T1計數(shù),TR1為0時禁止T1計數(shù)。當(dāng)GATE為1時,僅當(dāng)TR1為1且INT1(P3.2)輸入為高電平時才允許T1計數(shù),當(dāng)TR1為0或INT1輸入為低電平時都禁止T1計數(shù)。TR0為定時器T0的運行控制位,其功能與TR1類似。TF0為定時器T0的溢出標(biāo)志位,其功能與TF1類似。五.實驗說明51單片機(jī)的定時/計數(shù)器在進(jìn)行定時或計數(shù)之前要進(jìn)行初始化編程,通常包括如下幾個步驟:(1)確定工作方式,即給方式控制寄存器TMOD寫入控制字。(2)計算定時器/計數(shù)器初值,并將初值寫入寄存器TL和TH。(3)根據(jù)需要對中斷控制寄存器IE置初值,決定是否開放定時器中斷。(4)使TCON中的TR0或TR1置“1”,啟動定時器/計數(shù)器。在初始化過程中,要設(shè)置定時或計數(shù)的初始值,則計算初值X的公式如下:計數(shù)方式:式中M取決于不同工作方式,可以是213、216或28。定時方式:式中,稱為定時周期。1.用T0中斷方式定時,每秒鐘使P1.0輸出狀態(tài)發(fā)生一次反轉(zhuǎn)將T0作定時器定時1秒,由于實驗系統(tǒng),為了實現(xiàn)定時1秒,通過中斷服務(wù)程序進(jìn)行定時擴(kuò)展,即設(shè)置T0定時50ms產(chǎn)生一次中斷,同時設(shè)置一個軟件計數(shù)器來計數(shù)中斷次數(shù),當(dāng)達(dá)到中斷20次時即完成了定時1秒鐘。執(zhí)行如下程序,注意觀察LED的狀態(tài)的變化。#include<reg51。h〉#defineBYTEunsignedcharsbitLED=P1^0;BYTEIntTimes=0;voidT0_INT()interrupt1{ IntTimes++; if(IntTimes==20) { IntTimes=0; LED=!LED; } TH0=0x4c;TL0=0x00;} Timer_Init() { TMOD|=0x01; //T0定時模式,方式1 TH0=0x4c;TL0=0x00;//設(shè)T0初值,50毫秒,晶振:11。0592MHz ET0=1; //開啟T0中斷 EA=1; //開啟總中斷 TR0=1; //啟動T0}voidmain(){ Timer_Init(); while(1);}2.用T0計數(shù)外部脈沖,通過P1口顯示計數(shù)值采用T0作計數(shù)器,外部計數(shù)脈沖由P3。4引入,51單片機(jī)在每個機(jī)器周期采樣一次輸入信號,因此至少需要兩個機(jī)器周期才能檢測到一次脈沖跳變。這就要求被采樣的外部脈沖高低電平保持時間均要大于一個機(jī)器周期,以保證電平在變化之前即被采樣,并且外部計數(shù)脈沖的最高計數(shù)頻率為fosc/24。程序設(shè)計的參考流程如圖1示。運行程序,每按一次單脈沖按鈕,T0將計數(shù)一個脈沖,注意觀察數(shù)碼管的狀態(tài)。圖1序流程圖實驗參考程序:unsignedintcn=0;voidmain(void){TMOD=0x05;//初始化程序TH0=TL0=0;ET0=0;EA=1;TR0=1;while(1){cn=TH0*256+TL0;//讀計數(shù)值Display(cn);//調(diào)用動態(tài)顯示函數(shù),函數(shù)同實驗二}}一.實驗?zāi)康?.掌握鍵盤的鍵輸入的基本原理。2.加深對鍵盤的消抖的理解和認(rèn)識,掌握如何運用消抖來消除機(jī)械觸點對實驗的影響。3.掌握行列式鍵盤的鍵盤掃描方式。二.實驗要求用AT89C51的P1口接4×4矩陣鍵盤,從鍵盤中按下相應(yīng)的按鈕,數(shù)碼管會顯示出相應(yīng)的數(shù)字0~9,A~F十六種數(shù)字。對應(yīng)的按鍵的序號排列如圖4所示圖4按鍵序號排列圖三.實驗電路連線AT89C51單片機(jī)的P1.0~P1.3口接行線C0~C3,P1.4~P1。7口接列線R0~R3,P0.0~P.7口接LED顯示模塊的段選a~g,P2.7和P2。6口分別接位選LD4和LD5。四.實驗原理在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接.掃描法要逐列掃描查詢,當(dāng)被按下的鍵處于最后1列時,則要經(jīng)過多次掃描才能最后獲得此按鍵所處的行列值。而線反轉(zhuǎn)法則顯得很簡練,無論被按鍵是處于第1列或最后1列,均只需要經(jīng)過2步便能獲得此按鍵所在的行列值,線反轉(zhuǎn)法的原理如圖5所示。這樣,一個端口就可以構(gòu)成4×4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。圖1矩陣鍵盤電路原理圖下面介紹線反轉(zhuǎn)法的2個具體操作步驟:第1步,讓行線編程為輸入線,列線編程為輸出線,并使輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵所在行。第2步,再把行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全低電平,則列線中電平由高變低所在列為按鍵所在列。結(jié)合上述2步的結(jié)果,可確定按鍵所在行和列,從而識別出所按的鍵。五.實驗說明編寫程序,從矩陣鍵盤中按下按鍵,觀察LED數(shù)碼管的狀態(tài)。一.實驗?zāi)康?.了解D/A轉(zhuǎn)換的基本原理.2.了解D/A轉(zhuǎn)換芯片0832的性能及編程方法.3.了解單片機(jī)系統(tǒng)中擴(kuò)展D/A轉(zhuǎn)換的基本方法。二.實驗要求1.DAC0832將數(shù)字量轉(zhuǎn)換成模擬電壓,并用電壓表測量輸出電壓.2.編制程序產(chǎn)生正弦波、鋸齒波、三角波。(需用示波器觀察,選作)三.實驗電路連線將P0、P2總線開關(guān)閉合,使DAC0832的連接至51單片機(jī)總線即可。四.實驗說明DAC0832在實驗箱上是采用外部總線方式連接的,總線地址為9000H,單片機(jī)的外部總線擴(kuò)展電路如圖1所示,DAC0832電路圖如圖2所示,為DAC0832提供電壓基準(zhǔn)的電路如圖3所示。圖1單片機(jī)外部總線原理圖圖2DAC0832電路原理圖圖3實驗箱基準(zhǔn)電路原理圖在電路圖2中DAC0832電路是雙極性DAC轉(zhuǎn)換電路,實驗時僅需要將數(shù)字量B由CPU送至9000H端口即可.電壓關(guān)系:(Vref為2.5V)任意1字節(jié)數(shù)D/A轉(zhuǎn)換的參考程序如下:#include<reg51.h>#include〈absacc。h〉#defineBYTEunsignedchar#defineDA_ADDR0x9000voidDA_Out(BYTEx){ XBYTE[DA_ADDR]=x;}voidmain(){ DA_Out(128);while(1) { }}一.實驗?zāi)康?.掌握A/D轉(zhuǎn)換與單片機(jī)的接口原理。2.了解A/D芯片ADC0804轉(zhuǎn)換性能及編程。3.通過實驗了解單片機(jī)如何進(jìn)行數(shù)據(jù)采集.二.實驗要求編寫實驗程序,采用ADC0804對電位器產(chǎn)生的模擬電壓進(jìn)行測量,測量結(jié)果在數(shù)碼上進(jìn)行顯示。三.實驗電路連線1.模塊電位器Vout點接ADC0804的ADIN;2。閉合P0、P2總線開關(guān)連接DAC;3。單片機(jī)P2。3~P2。0口接數(shù)碼管顯示模塊的位選LD2~LD5,P1.0~P1.7口接段選a~p.四.實驗說明其中總線電路如圖1,A/D轉(zhuǎn)換原理圖如圖2所示,電位器模擬電壓產(chǎn)生電路如圖3所示。ADC0804的總線地址8000HADC0804電路的電壓基準(zhǔn)Vref為VCC,即5V供電電源。電壓與測量數(shù)據(jù)關(guān)系為:(D為采用ADC轉(zhuǎn)換結(jié)果)圖1單片機(jī)外部總線原理圖圖2ADC0804電路原理圖圖3電位器模擬電壓產(chǎn)生電路原理圖一.實驗?zāi)康牧私釯2C總線協(xié)議,器件地址、器件子地址含義,掌握I2C總線控制時序;掌握AT二.實驗要求編寫調(diào)試基于I2C的EEPROM芯片AT24C三.實驗電路連線將AT89C51單片機(jī)的P1.1和P1。2口分別接EEPROM芯片AT24C02的SCL和SDA。四.實驗原理1.信號定義I2C總線的時鐘線SCL與數(shù)據(jù)線SDA均為雙向傳輸線。在總線備用時,這兩條線均保持高電平。當(dāng)時鐘線保持高電平,數(shù)據(jù)線出現(xiàn)由高電平向低電平變化時,啟動I2C總線,這就是I2C總線的啟動信號。在時鐘線保持高電平期間,數(shù)據(jù)線上出現(xiàn)由低到高的電平變化,將結(jié)束I2C總線的數(shù)據(jù)傳輸,此信號即為I2C圖8I2C起始和終止信號都是由主機(jī)發(fā)出的,在起始信號產(chǎn)生后,總線就處于被占用的狀態(tài);在終止信號產(chǎn)生后,總線就處于空閑狀態(tài)。連接到I2C總線上的器件,若具有I2C總線的硬件接口,則很容易檢測到起始和終止信號。對于不具備I2C2.?dāng)?shù)據(jù)傳輸過程I2C總線上的數(shù)據(jù)傳輸如圖9所示。由圖可見,I2C總線上每一次數(shù)據(jù)傳輸均開始于主控器發(fā)出的啟動信號,傳輸?shù)拿恳蛔止?jié)均為8位,但每啟動一次I圖9I2C與每一字節(jié)后的應(yīng)答信號相對應(yīng)的時鐘(第9個時鐘)由主控器產(chǎn)生。數(shù)據(jù)發(fā)送器件必須在這一時鐘位上釋放數(shù)據(jù)線,使其處于高電平狀態(tài),以便使數(shù)據(jù)接收器件能在這一位上送出應(yīng)答信號,如圖10所示。若接收器輸出低電平,則為應(yīng)答信號ACK,輸出高電平則為非應(yīng)答信號NOACK。當(dāng)主控器發(fā)送數(shù)據(jù)時,如果被控器不產(chǎn)生應(yīng)答信號,主控器就產(chǎn)生一個停止信號來終止傳輸過程。圖10I2C當(dāng)主控器接收數(shù)據(jù)時,若不想再接收或接收完最后一個字節(jié),必須給被控器發(fā)送一個非應(yīng)答位,使被控器釋放總線,然后主控器再發(fā)一個停止信號結(jié)束傳輸過程。當(dāng)總線上的接收器接收一字節(jié)后,如果無法立即接收下一字節(jié)數(shù)據(jù),可將SCL鉗位于低電平,這樣總線就進(jìn)入等待狀態(tài),直到接收器準(zhǔn)備好接收新數(shù)據(jù)時再釋放時鐘線,使數(shù)據(jù)傳輸能繼續(xù)正常進(jìn)行。I2C總線上的數(shù)據(jù)傳輸必須符合一定的格式,每次數(shù)據(jù)傳輸均始于主控器發(fā)出的啟動信號,然后為尋址字節(jié),包括7位的被控器地址和1位方向位。方向位為“0”代表主控器要對被控器進(jìn)行寫入操作,為“五.實驗說明根據(jù)EEPROM芯片AT24C02的手冊,嚴(yán)格按照其時序編寫程序。啟動I2C、停止I2/*名稱:I2C_Start*/voidI2C_Start(){ SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; //鉗位I2C}/*名稱:I2C_StopvoidI2C_Stop(){ SDA=0; delay(); SCL=1; delay(); SDA=1; delay();}/*名稱:Ack功能:應(yīng)答信號*/voidAck(){ SDA=0; delay(); SCL=1; delay(); SCL=0; delay(); SDA=1; delay();}/*名稱:NoAck功能:發(fā)送非應(yīng)答信號*/voidNoAck(){ SDA=1; delay(); SCL=1; delay(); SCL=0; delay(); SDA=0; delay();}/*名稱:Test_Ack()功能:檢測應(yīng)答位*/bitTest_Ack(){ SCL=0; SDA=1; //I/O口準(zhǔn)備讀數(shù)據(jù) _nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_(); if(SDA==0) flag=1; else flag=0;SCL=0; return(flag);}/*名稱:SendData()功能:發(fā)送一字節(jié)數(shù)據(jù)*/voidSendData(BYTEbuffer){ BYTEBitCnt=8; //一字節(jié)8位 while(BitCnt>0) { //temp=buffer; SCL=0; delay(); if((buffer&0x80)==0) //判斷最高位是0還是1 SDA=0; else SDA=1; delay(); SCL=1; buffer=buffer<<1; BitCnt—-; } SCL=0;}/*名稱:BYTEReceiveData()功能:接收一字節(jié)數(shù)據(jù)*/BYTEReceiveData(){ BYTEBitCnt=8,tmp; SDA=1; //IO口讀數(shù)據(jù) while(BitCnt) { SCL=0; delay(); SCL=1; delay(); if(SDA==1) tmp=tmp|0x01;//低位置1 else tmp=tmp&0x0fe;//低位清0 if(BitCnt-1) { tmp=tmp〈〈1; } BitCnt-—; } SCL=0; returntmp;}一.實驗?zāi)康?.掌握AT89C51單片機(jī)串行口的使用方法。2.掌握串行口工作波特率的設(shè)計方法。3.通訊系統(tǒng)編程練習(xí)。二.實驗要求要求單片機(jī)利用串行口方式1向PC機(jī)傳送數(shù)據(jù).三.實驗電路連線實驗箱通過串口線與PC機(jī)RS232COM口相連。實驗箱RS232電平與TTL電平轉(zhuǎn)換電路如圖11所示.圖11RS232電平與TTL電平轉(zhuǎn)換電路四.實驗原理MCS—51單片機(jī)內(nèi)部集成了一個全雙工串行接口,通過P3口的兩個引腳與外部設(shè)備進(jìn)行串行通信,其中P3.1為串行數(shù)據(jù)發(fā)送端TXD,P3.0為串行通信數(shù)據(jù)接收端TXD,通過串行口,單片機(jī)可以方便地與其它計算機(jī)實現(xiàn)雙機(jī)和多機(jī)通信,或者與外部設(shè)備進(jìn)行串行數(shù)據(jù)交換。由寄存器SCON來進(jìn)行設(shè)置,可選擇通訊模式,允許接收,檢查狀態(tài)位。SCON的結(jié)構(gòu)如下:串行控制寄存器(SCON)可位尋址SM0SM1SM2RENTB8RB8TIRI其中各控制位的含義如下:SM0:串行模式選擇。SM1:串行模式選擇。SM2:多機(jī)通訊允許位,當(dāng)模式0時,此位應(yīng)該為0.模式1時,當(dāng)接收到停止位時,該位將置位。模式2或模式3時,當(dāng)接收的第9位數(shù)據(jù)為1時,將置位。REN:串行接收允許位.TB8:在模式2和模式3中,將被發(fā)送數(shù)據(jù)的第9位。RB8:在模式0中,該位不起作用,在模式1中,該位為接收數(shù)據(jù)的停止位。在模式2和模式3中,為接收數(shù)據(jù)的第9位。TI:串行中斷標(biāo)志位,由軟件清零。RI:接收中斷標(biāo)志位,由軟件清零。UART有一個接收數(shù)據(jù)緩沖區(qū),當(dāng)上一個字節(jié)還沒被處理,下一個數(shù)據(jù)仍然可以緩沖區(qū)接收進(jìn)來,但如果接收完這個字節(jié)如果上個字節(jié)還沒被處理,上個字節(jié)將被覆蓋.因此,軟件必須在此之前處理數(shù)據(jù)。當(dāng)連續(xù)發(fā)送字節(jié)時也是如此。51支持10位和11位數(shù)據(jù)模式,11位數(shù)據(jù)模式用來進(jìn)行多機(jī)通訊。并支持高速8位移位寄存器模式.模式1和模式3中波特率可變。工作在模式0時,UART作為一個8位的移位寄存器使用,波特率為fosc/12數(shù)據(jù)由RXD從低位開始收發(fā).TXD用來發(fā)送同步移位脈沖,因此,方式0不支持全雙工。這種方式可用來和像某些具有8位串行口的EEPROM之類的器件通訊。當(dāng)向SBUF寫入字節(jié)時,開始發(fā)送數(shù)據(jù)。數(shù)據(jù)發(fā)送完畢時,TI位將置位。置位REN時,將開始接收數(shù)據(jù),接收完8位數(shù)據(jù)時,RI位將置位.工作于模式1時,傳輸?shù)氖?0位:1個起始位,8個數(shù)據(jù)位,1個停止位.這種方式可和包括PC機(jī)在內(nèi)的很多器件進(jìn)行通訊.這種方式中波特率是可調(diào)的。而用來產(chǎn)生波特率的定時器的中斷應(yīng)該被禁止.PCON的SMOD位為1時,可使波特率翻倍。TI和RI在發(fā)送和接收停止位的中間時刻被置位.這使軟件可以響應(yīng)中斷并裝入新的數(shù)據(jù)。數(shù)據(jù)處理時間取決于波特率和晶振頻率.模式2的數(shù)據(jù)以11位方式發(fā)送:1位起始位,8位數(shù)據(jù)位,第九位,1位停止位。發(fā)送數(shù)據(jù)時,第九位為SCON中的TB8,接收數(shù)據(jù)的第九位保存在RB8中.第九位一般用來多機(jī)通信,僅在第九位為1時,單片機(jī)才接收數(shù)據(jù).多機(jī)通信用SCON的SM2來控制。當(dāng)SM2置位時,僅當(dāng)數(shù)據(jù)的第九位為1時才引發(fā)通訊中斷,當(dāng)SM2為0時,只要接收完11位就產(chǎn)生一次中斷。第九位可在多機(jī)通訊中避免不必要的中斷,在傳送地址和命令時,第九位置位,串行總線上的所有處理器都產(chǎn)生一個中斷,處理器將決定是否繼續(xù)接收下面的數(shù)據(jù),如果繼續(xù)接收數(shù)據(jù)就清零SM2.否則,SM2置位,以后的數(shù)據(jù)流將不會使他產(chǎn)生中斷。時,模式2的波特率為1/640sc,時,波特率為1/320sc。因此,使用模式2,當(dāng)晶振頻率為11。0592M時,將有高達(dá)345K的波特率。模式3和模式2的差別在于可變的波特率。五.實驗說明執(zhí)行如下程序,觀察PC機(jī)上串口調(diào)試助手的狀態(tài)。#include<reg51.h〉#defineBYTEunsignedcharBYTEx;voidDelay(intcnt){ while(cnt—-);}voidUART_Init(){ SCON=0x50; //方式1,波特率可變8位異步通信 TMOD=0x20; //定時器1工作方式2,8位自動裝載 PCON=0x00; //加倍波特率清”0",可以沒有 ES=1; //串口中斷使能 EA=1; //全局中斷使能}voidT1_Init(){ TH1=0xfd; //115200kbps TL1=0xfd; TR1=1;}voidUART0_Interrupt(void)interrupt4{ if(RI==1) { x=SBUF; }}voidUART_Send(BYTEx){ SBUF=x; while(TI==0); TI=0; }voidmain(){ UART_Init(); T1_Init(); while(1) { UART_Send(0xaa); Delay(1000); }}一.實驗?zāi)康?.了解實時時鐘與SPI總線基本原理;2.掌握SPI總線時序與程序設(shè)計方法;3.掌握DS1302的工作原理及編程方法。二.實驗要求利用實驗箱上基于SPI總線的DS1302芯片制作一個可調(diào)時間的萬年歷,并在LCD12864上顯示。三.實驗電路連線將AT89C51的P0口與液晶的數(shù)據(jù)口D0~D7相連,將P2.0、P2。1、P2.4、P2。5、P2。6、P2。7與液晶的RST、CS2、CS1、E、R/W、DI相連,按鍵key0~key4分別與P2。3、P2。2、P1.0、P1。1相連,P1.4、P1.3、P1。2分別與ds1302的sclk、io、rst相連。四.實驗原理SPI接口的基本結(jié)構(gòu)圖如圖12所示.在圖中只給出簡化的連接示意圖。作為功能相對于設(shè)備獨立的SPI接口部件,它具有復(fù)雜的邏輯控制電路,在圖中并未體現(xiàn)。由圖可見,SPI的基本結(jié)構(gòu)相當(dāng)于兩個8位移位寄存器的首尾相接,構(gòu)成16位的環(huán)形移位寄存器.信號用于選擇設(shè)備工作于主方式還是從方式。主設(shè)備啟動發(fā)送并產(chǎn)生SPI移位時鐘,從設(shè)備被動接收時鐘。在時鐘的作用下,兩個移位寄存器同步移位,在數(shù)據(jù)從主機(jī)移向從機(jī)的同時,數(shù)據(jù)也由從機(jī)移向主機(jī)。這意味著在一個移位周期內(nèi)(8個時鐘),主機(jī)與從機(jī)實現(xiàn)數(shù)據(jù)交換。圖12SPI接口的基本結(jié)構(gòu)圖SPI總線可在軟件的控制下構(gòu)成各種簡單或復(fù)雜的系統(tǒng),例如,1個主MCU和幾個從MCU構(gòu)成的單主機(jī)系統(tǒng);幾個MCU相互連接構(gòu)成的多主機(jī)系統(tǒng)(分布式系統(tǒng));1個MCU和1個或多個I/O設(shè)備構(gòu)成的單主機(jī)系統(tǒng)。在多數(shù)應(yīng)用場合,使用1個MCU作為主機(jī),它控制著1個或多個其他外圍器件。實現(xiàn)數(shù)據(jù)在主機(jī)與被選器件之間的傳輸.由SPI總線構(gòu)成的典型系統(tǒng)結(jié)構(gòu)如圖13所示。圖13由SPI總線構(gòu)成的典型系統(tǒng)結(jié)構(gòu)圖在SPI總線與幾種不同串行芯片相連接時,要注意這些芯片引腳的處理,可用MCU的通用I/O口線來控制它們。對于像AT89C51這樣沒有SPI接口的MCU來說,可用軟件來模擬SPI操作.但此時,在操作速度和資源使用效率上都會降低.五.實驗說明有四個鍵盤key0到key3,key0是修改時間的,首先是秒到分到時到年到月到日到星期,key1是加1,key2是減1,在修改時間狀態(tài)再按一下key3的時候就退出并修改時間日期,在平時狀態(tài)按著key3再按著key2
就會打開lcd的燈,單單是只按key3那就是把燈關(guān)了。DS1302部分參考程序如下:voidWriteByte(unsignedchardat)//將一個字節(jié)數(shù)據(jù)寫入到DS1302{ unsignedchari=0; for(i=0;i〈8;i++) { IO=(bit)(dat&0x01);//最低位數(shù)據(jù)加載到IO數(shù)據(jù)線 SCLK=1;//時鐘上升沿,數(shù)據(jù)傳送給DS1302 SCLK=0;//時鐘下降沿 dat=(dat>>1);//dat右移一位,為下次傳送準(zhǔn)備 }}unsignedcharReadByte(void)//從DS1302讀出一個字節(jié)數(shù)據(jù){ unsignedchardat=0; unsignedchari=0; for(i=0;i<8;i++) { dat=(dat〉〉1);//dat右移一位,為下次讀取做準(zhǔn)備,注意:第一次不起作用,一共右移7次 dat|=((unsignedchar)(IO))<〈7;//讀取數(shù)據(jù)線IO的值,送到dat的最高位 SCLK=1;//時鐘上升沿 SCLK=0;//時鐘下降沿 } returndat;}voidWriteDS1302(unsignedcharaddress,dat)//將兩個字節(jié)數(shù)據(jù)寫入到DS1302{ RST=0;//復(fù)位引腳置低 SCLK=0;//
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衛(wèi)生保持長效管理制度
- 商鋪維修維護(hù)管理制度
- 醫(yī)院理財投資管理制度
- 勞務(wù)公司社保管理制度
- 工廠女工宿舍管理制度
- 公司藥品價格管理制度
- 單位飲水安全管理制度
- 小區(qū)垃圾過夜管理制度
- 工地垃圾收集管理制度
- 售電公司員工管理制度
- 拖拉機(jī)駕駛員培訓(xùn)(課件)
- 媒介發(fā)展史概論
- 兒童慢性病管理的挑戰(zhàn)與解決方案
- 兩辦意見八硬措施煤礦安全生產(chǎn)條例宣貫學(xué)習(xí)課件
- 2024年6月福建省普通高中學(xué)生學(xué)業(yè)基礎(chǔ)會考生物試題
- TCI 263-2024 水上裝配式鋼結(jié)構(gòu)棧橋(平臺)施工技術(shù)規(guī)程
- 第8課《求救信號》課件
- 某公路工程有限公司專項應(yīng)急預(yù)案及某公路項目部安全生產(chǎn)應(yīng)急預(yù)案
- 甲狀腺結(jié)節(jié)射頻消融術(shù)后護(hù)理
- 湖北省華中師大一附中2024屆數(shù)學(xué)高二第二學(xué)期期末質(zhì)量檢測試題含解析
- 種植牙沙龍策劃方案
評論
0/150
提交評論