版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)原理與應(yīng)用技術(shù)吉林化工學(xué)院信控分院測(cè)控教研室TOC\o"1—2”\h\z實(shí)驗(yàn)二LED數(shù)碼管動(dòng)態(tài)描顯示實(shí)驗(yàn) 7HYPERLINK\l”_Toc371018383”實(shí)驗(yàn)三外部中斷實(shí)驗(yàn) 9實(shí)驗(yàn)五行列式鍵盤實(shí)驗(yàn) 15HYPERLINK\l”_Toc371018386"實(shí)驗(yàn)六D/A轉(zhuǎn)換實(shí)驗(yàn) 17實(shí)驗(yàn)七A/D轉(zhuǎn)換實(shí)驗(yàn) 19實(shí)驗(yàn)八AT24C02存儲(chǔ)器與I2C總線實(shí)驗(yàn) 21實(shí)驗(yàn)九串行口通信實(shí)驗(yàn) 25HYPERLINK\l”_Toc371018390”實(shí)驗(yàn)十DS1302時(shí)鐘與SPI總線實(shí)驗(yàn) 28_Toc371018392”實(shí)驗(yàn)十直流電機(jī)驅(qū)動(dòng)實(shí)驗(yàn) 33一.實(shí)驗(yàn)?zāi)康?.了解keil軟件程序設(shè)計(jì)與調(diào)試方法;2.掌握I/O接口電平輸出控制方法;3.掌握延時(shí)函數(shù)程序的設(shè)計(jì)原理和調(diào)試方法。二.實(shí)驗(yàn)要求編寫一個(gè)延時(shí)函數(shù)程序,控制接在P1口的八個(gè)發(fā)光二極管逐次點(diǎn)亮(即每次中斷點(diǎn)亮一個(gè)),形成“流水燈”效果。三.實(shí)驗(yàn)電路連線AT89C51單片機(jī)的P1.0~P1。7口接LED顯示模塊的D0~D7。四.實(shí)驗(yàn)說(shuō)明方法1:采用延時(shí)函數(shù)的流水燈程序。在單片機(jī)中每條語(yǔ)句的執(zhí)行都是要消耗系統(tǒng)時(shí)間的,所以簡(jiǎn)單的延時(shí)程序只需要執(zhí)行一些語(yǔ)句就可以實(shí)現(xiàn),但這些語(yǔ)句不應(yīng)該影響到單片機(jī)工作狀態(tài)(例如IO口狀態(tài))。因此延時(shí)程序通常都是由一些空循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn),例如空操作的for語(yǔ)句或者while語(yǔ)句實(shí)現(xiàn),為了能夠方便的改變延時(shí)時(shí)間,通常我們可以為延時(shí)函數(shù)設(shè)置一個(gè)傳遞參數(shù),以便在不同情況下調(diào)用產(chǎn)生不同的延時(shí)時(shí)間。實(shí)驗(yà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í)驗(yàn),采用定時(shí)計(jì)數(shù)器的延時(shí)流水燈程序。程序設(shè)計(jì)思路為:主程序?qū)0初始化為定時(shí)器,工作在方式1,定時(shí)時(shí)間為100ms。同時(shí)將立即數(shù)0x01賦值給t,并將t的內(nèi)容送P1口輸出。每當(dāng)定時(shí)時(shí)間到,在T0的中斷服務(wù)程序中完成定時(shí)初值的重新賦值,同時(shí)將t的內(nèi)容循環(huán)左移一次并從P1口輸出。運(yùn)行如下程序后就可以看到流水燈的效果了。程序設(shè)計(jì)的參考流程如圖1所示。(a)主程序流程圖(b)T0中斷服務(wù)子程序流程圖圖1流水燈程序流程圖實(shí)驗(yàn)參考程序如下:#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定時(shí)模式,方式一 TH0=0x4c;TL0=0x00; //設(shè)T0初值,50毫秒,晶振:11。0592MHz ET0=1; //開(kāi)啟T0中斷 EA=1; //開(kāi)啟總中斷 TR0=1; //啟動(dòng)T0}voidmain(){ Timer_Init(); while(1);}一.實(shí)驗(yàn)?zāi)康?.了解七段數(shù)碼管顯示的基本原理;2.掌握LED數(shù)碼管動(dòng)態(tài)顯示的基本原理;3.掌握數(shù)碼管動(dòng)態(tài)顯示程序的設(shè)計(jì)方法。二.實(shí)驗(yàn)要求利用動(dòng)態(tài)掃描方法在六位數(shù)碼管上顯示出穩(wěn)定的123456.三.實(shí)驗(yàn)電路連線AT89C51單片機(jī)的P0。0~P0。7口接段選a~p,P2。5~P2。0口接位選LD0~LD5.數(shù)碼管硬件電路如圖1所示。圖1數(shù)碼管硬件電路四.實(shí)驗(yàn)原理所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出“段碼”和相應(yīng)的“位選”,利用發(fā)光管的余輝和人眼視覺(jué)暫留作用,使人的感覺(jué)好像各位數(shù)碼管同時(shí)都在顯示。其電路將所有位數(shù)碼管的段選線并聯(lián)在一起,由“位選”控制是哪一位數(shù)碼管有效,這樣一來(lái),就沒(méi)有必要每一位數(shù)碼管配一個(gè)鎖存器,從而大大地簡(jiǎn)化了硬件電路.實(shí)驗(yàn)電路中的Led數(shù)碼管采用共陽(yáng)型數(shù)碼管。顯示原理:將相應(yīng)的“位選”信號(hào)有效(低電平),相應(yīng)的數(shù)碼段置以低電平,對(duì)應(yīng)的段就會(huì)變亮。五.實(shí)驗(yàn)說(shuō)明單片機(jī)的P0口輸出顯示段碼,P2口輸出位碼控制,輸出6個(gè)字符.執(zhí)行如下程序后,觀察LED顯示結(jié)果。實(shí)驗(yàn)參考程序如下:#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)//延時(shí){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); }}一.實(shí)驗(yàn)?zāi)康?.了解MCS-51系列單片機(jī)中斷系統(tǒng)結(jié)構(gòu);2.掌握MCS—51系列單片機(jī)中斷地址與中斷向量號(hào);3.掌握MCS-51系列單片機(jī)外部中斷INT0、INT1程序設(shè)計(jì)方法。二.實(shí)驗(yàn)要求用單次脈沖申請(qǐng)外部中斷INT0或者INT1,在中斷處理程序中使P1.0的輸出狀態(tài)發(fā)生反轉(zhuǎn),并通過(guò)發(fā)光二極管觀察P1。0的電平。三.實(shí)驗(yàn)電路連線單片機(jī)P1。0口接LED顯示模塊的D0,INT0(P3。2)或者INT1(P3。3)口接按鍵模塊的K0。四.實(shí)驗(yàn)原理AT89C51單片機(jī)有5個(gè)中斷源,有兩個(gè)中斷優(yōu)先級(jí),高優(yōu)先級(jí)的中斷源可以中斷低優(yōu)先級(jí)的服務(wù)程序,反之不行。當(dāng)兩個(gè)同樣級(jí)別的中斷申請(qǐng)同時(shí)到來(lái)時(shí),則按一個(gè)固定的查尋次序來(lái)處理中斷響應(yīng)。AT89C51單片機(jī)的5個(gè)中斷源及其優(yōu)先級(jí)次序如表1所示.表1AT89C51單片機(jī)的中斷源中斷源入口地址優(yōu)先級(jí)順序說(shuō)明外部中斷00003H最高來(lái)自P3.2引腳(INT0)的外部中斷請(qǐng)求定時(shí)/計(jì)數(shù)器0000BH定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求外部中斷10013H來(lái)自P3.3引腳(INT1)的外部中斷請(qǐng)求定時(shí)/計(jì)數(shù)器T1001BH定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求串行口0023H最低串行口完成一幀數(shù)據(jù)的發(fā)送或接收中斷AT89C51單片機(jī)沒(méi)有專門的開(kāi)中斷和關(guān)中斷指令,中斷的開(kāi)放和關(guān)閉是由特殊功能寄存器IE來(lái)實(shí)現(xiàn)兩級(jí)控制的.所謂兩級(jí)控制是指在寄存器IE中有一個(gè)總允許位EA,當(dāng)EA=0時(shí),就關(guān)閉了所有的中斷申請(qǐng),CPU不響應(yīng)任何中斷申請(qǐng)。而當(dāng)EA=1時(shí),對(duì)各中斷源的申請(qǐng)是否開(kāi)放,還要看各中斷源的中斷允許位的狀態(tài)。中斷允許寄存器IE的地址為A8H,其中各位都可以位尋址,位地址為A8H~AFH.總允許位EA和各中斷源允許位在IE寄存器中的分布如下:D7D6D5D4D3D2D1D0EA—-ESET1EX1ET0EX0其中各控制位的含義如下:EA:中斷總允許位。EA=0時(shí),CPU關(guān)閉所有的中斷申請(qǐng),只有EA=1時(shí),才能允許各個(gè)中斷源的中斷申請(qǐng),但還要取決于各中斷源中斷允許控制位的狀態(tài)。ES:串行口中斷允許位。ES=1,串行口開(kāi)中斷,ES=0,串行口關(guān)中斷。ET1:定時(shí)/計(jì)數(shù)器T1的溢出中斷允許位。ET1=1允許T1溢出中斷,ET1=0則不允許T1溢出中斷。EX1:外部中斷1(INT1)的中斷允許位。ET1=1允許外部中斷1申請(qǐng)中斷,EX1=0則不允許中斷。ET0:定時(shí)/計(jì)數(shù)器T0的溢出中斷允許位。ET0=1允許中斷,ET0=0不允許中斷.EX0:外部中斷0(INT0)的中斷允許位.EX0=1允許中斷,EX0=0不允許中斷。AT89C51單片機(jī)在復(fù)位時(shí),IE各位的狀態(tài)都為“0”AT89C51單片機(jī)的中斷優(yōu)先級(jí)控制比較簡(jiǎn)單,每個(gè)中斷源的優(yōu)先級(jí)別由特殊功能寄存器IP來(lái)管理。IP寄存器的地址為B8H,格式如下:D7D6D5D4D3D2D1D0—--PSPT1PX1PT0PX0其中各位的含義如下:PS:串行口中斷優(yōu)先級(jí)控制位.PT1:定時(shí)器/計(jì)數(shù)器T1中斷優(yōu)級(jí)控制位。PX1:外部中斷INT1中斷優(yōu)先級(jí)控制位。PT0:定時(shí)器/計(jì)數(shù)器T0中斷優(yōu)先級(jí)控制位。PX0:外部中斷INT0中斷優(yōu)先級(jí)控制位。IP寄存器中若某一個(gè)控制位置“1”,則相應(yīng)的中斷源就規(guī)定為高優(yōu)先級(jí)中斷,反之,若某一個(gè)控制位置“0"外部中斷觸發(fā)方式通過(guò)特殊功能寄存器TCON(地址為88H)控制,TCON中各控制位分布如下:D7D6D5D4D3D2D1D0TF1-TF0-IE1IT1IE0IT0其中各控制位的含義如下:IT0:選擇外中斷INT0的中斷觸發(fā)方式。IT0=0為電平觸發(fā)方式,低電平有效。IT0=1為負(fù)邊沿觸發(fā)方式,INT0腳上的負(fù)跳變有效。IT0的狀態(tài)可以用指令來(lái)置“1”或清“0IE0:外中斷INT0的中斷申請(qǐng)標(biāo)志。當(dāng)檢測(cè)到INT0上存在有效中斷申請(qǐng)時(shí),由硬件使IE0置位。當(dāng)CPU轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清“0"IE0中斷申請(qǐng)標(biāo)志。IT1:選擇外中斷INT1的觸發(fā)方式(功能與TI0類似)。IE1:外部中斷INT1的中斷申請(qǐng)標(biāo)志(功能與IE0類似)。TF0:定時(shí)/計(jì)數(shù)器T0溢出中斷申請(qǐng)標(biāo)志.當(dāng)T0溢出時(shí),由內(nèi)部硬件將TF0置“1",當(dāng)CPU轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件將TF0清“0”TF1:定時(shí)器1溢出中斷申請(qǐng)標(biāo)志(功能與TF0相同).可見(jiàn)定時(shí)/計(jì)數(shù)器溢出中斷和外部中斷的申請(qǐng)標(biāo)志,在CPU響應(yīng)中斷之后能夠自動(dòng)撤除。AT89C51單片機(jī)在接收到中斷源發(fā)來(lái)的中斷申請(qǐng)以后,先把這些申請(qǐng)鎖定在各自的中斷標(biāo)志位中,然后在下一個(gè)機(jī)器周期按表2—1規(guī)定的內(nèi)部?jī)?yōu)先順序和中斷優(yōu)先級(jí)分別來(lái)查詢這些標(biāo)志,并在一個(gè)機(jī)器周期之內(nèi)完成檢測(cè)和優(yōu)先排隊(duì)。響應(yīng)中斷的條件有三個(gè):(1)必須沒(méi)有同級(jí)或更高級(jí)別的中斷正在得到響應(yīng),如果有的話,則必須等CPU為它們服務(wù)完畢,返回主程序并執(zhí)行一條指令之后才能響應(yīng)新的中斷申請(qǐng)。(2)必須要等當(dāng)前正在執(zhí)行的指令執(zhí)行完畢以后,CPU才能響應(yīng)新的中斷申請(qǐng).(3)若正在執(zhí)行的指令是RETI(中斷返回)或是任何訪問(wèn)IE寄存器或IP寄存器的指令,則必須要在執(zhí)行完該指令以及緊隨其后的另外一條指令之后才可以響應(yīng)新的中斷申請(qǐng).CPU響應(yīng)中斷后將自動(dòng)跳轉(zhuǎn)到中斷源的入口地址開(kāi)始執(zhí)行程序,每個(gè)中斷源都有其固定的入口地址,它們的處理過(guò)程也有所區(qū)別.一般情況下,中斷處理包括兩個(gè)部分:一是保護(hù)現(xiàn)場(chǎng),二是為中斷服務(wù)。所謂保護(hù)現(xiàn)場(chǎng)就是將需要在中斷服程序中使用而又不希望破壞其中原來(lái)內(nèi)容的工作寄存器壓入堆棧中保護(hù)起來(lái),等中斷服務(wù)完成后再?gòu)亩褩V袕棾鲆曰謴?fù)原來(lái)的內(nèi)容。通常需要保護(hù)的寄存器有PSW、ACC以及其他工作寄存器.五.實(shí)驗(yàn)說(shuō)明采用外部中斷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;//開(kāi)外部中斷0 IT0=1;//TCON=0x01,IT0=1時(shí)下降沿觸發(fā),IT0=0時(shí)低電平觸發(fā)EA=1;//開(kāi)總中斷 while(1){}}一.實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)本實(shí)驗(yàn)了解MCS-51單片機(jī)內(nèi)部定時(shí)/計(jì)數(shù)器的基本結(jié)構(gòu),掌握定時(shí)/計(jì)數(shù)器的初始化方法,以及中斷處理程序的編程方法。二.實(shí)驗(yàn)要求1.定時(shí)器模式實(shí)驗(yàn):AT89C51內(nèi)部定時(shí)器T0用中斷方式計(jì)時(shí),實(shí)現(xiàn)每一秒鐘使P1.0的輸出狀態(tài)發(fā)生一次反轉(zhuǎn),從而形成方波輸出,并點(diǎn)亮發(fā)光二極管LED0。2.計(jì)數(shù)器模式實(shí)驗(yàn):AT89C51內(nèi)部定時(shí)計(jì)數(shù)器T0,按計(jì)數(shù)器模式和方式1工作,對(duì)P3.4(T0)引腳進(jìn)行計(jì)數(shù),計(jì)數(shù)值通過(guò)P1、P2口驅(qū)動(dòng)LED數(shù)碼管顯示出來(lái)三.實(shí)驗(yàn)電路連線1.AT89C51單片機(jī)的P1。0口接發(fā)光二極管模塊的D0。2.單片機(jī)P2.0口接數(shù)碼管顯示模塊的位選,P1.0~P1。7口接段選a~p,P3。4口接按鍵模塊的K0。四.實(shí)驗(yàn)原理AT89C51單片機(jī)內(nèi)部有兩個(gè)16位可編程定時(shí)/計(jì)數(shù)器,記為T0和T1。它們的工作方式可以通過(guò)指令對(duì)相應(yīng)特殊功能寄存器編程來(lái)設(shè)定,或作定時(shí)器用,或作外部事件計(jì)數(shù)器用。定時(shí)/計(jì)數(shù)器在硬件上由雙字節(jié)加法計(jì)數(shù)器TH和TL組成,作定時(shí)器使用時(shí),計(jì)數(shù)脈沖由單片機(jī)內(nèi)部振蕩器提供,計(jì)數(shù)頻率為fosc/12,每個(gè)機(jī)器周期加1。作計(jì)數(shù)器使用時(shí),計(jì)數(shù)脈沖由P3口的P3.4(或P3。5)即T0(或T1)引腳輸入,外部脈沖的下降沿觸發(fā)計(jì)數(shù),計(jì)數(shù)器在每個(gè)機(jī)器周期期間采樣外部脈沖,若一個(gè)周期的采樣值為1,下一個(gè)周期的采樣值為0,則計(jì)數(shù)器加1,故識(shí)別一個(gè)從0到1的跳變需要2個(gè)機(jī)器周期,所以對(duì)外部計(jì)數(shù)脈沖的最高計(jì)數(shù)頻率為fosc/24,同時(shí)還要求外部脈沖的高低電平保持時(shí)間均要大于一個(gè)機(jī)器周期.定時(shí)/計(jì)數(shù)器的工作方式由特殊功能寄存器TMOD編程決定,定時(shí)/計(jì)數(shù)器的啟動(dòng)運(yùn)行由特殊功能寄存器TCON編程控制。不論用作定時(shí)器還是用作計(jì)數(shù)器,每當(dāng)產(chǎn)生溢出時(shí),都會(huì)向CPU發(fā)出中斷申請(qǐng)。方式控制寄存器TMOD的地址為89H,控制字格式如下:D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0低4位為T0的控制字,高4位為T1的控制字,其中各位的具體含義介紹如下。GATE為門控位。它對(duì)定時(shí)/計(jì)數(shù)器的啟動(dòng)起輔助控制作用.GATE=1時(shí),定時(shí)/計(jì)數(shù)器的計(jì)數(shù)受外部引腳P3。2(INT0)或P3.3(INT1)輸入電平的控制,此時(shí)只有當(dāng)P3口的P3.2(或P3.3)引腳即INT0(或INT1)上的電平為1才能啟動(dòng)計(jì)數(shù);GATE=0時(shí),定時(shí)器/計(jì)數(shù)器的運(yùn)行不受外部引腳輸入電平的控制。表2定時(shí)/計(jì)數(shù)器的方式選擇M1M0工作方式00方式0,為13位定時(shí)/計(jì)數(shù)器。01方式1,為16位定時(shí)/計(jì)數(shù)器.10方式2,為自動(dòng)重裝常數(shù)的8位定時(shí)/計(jì)數(shù)器。11方式3,僅適用于T0,分成2個(gè)8位定時(shí)/計(jì)數(shù)器。C/T為方式選擇位。C/T=0為定時(shí)器方式,采用單片機(jī)內(nèi)部振蕩脈沖的12分頻信號(hào)作為計(jì)數(shù)脈沖,若采用12MHz的晶振,則計(jì)數(shù)頻率為1MHz,從計(jì)數(shù)值便可計(jì)算出定時(shí)時(shí)間。C/T=1為計(jì)數(shù)器方式,采用外部引腳(T0為P3。4,T1為P3.5)的輸入脈沖作為計(jì)數(shù)脈沖,當(dāng)T0(或T1)上的輸入信號(hào)發(fā)生從高到低的負(fù)跳變時(shí),計(jì)數(shù)器加1.最高計(jì)數(shù)頻率為單片機(jī)晶振頻率的1/24。M1、M0二位的狀態(tài)確定定時(shí)/計(jì)數(shù)器的工作方式,詳見(jiàn)表2。定時(shí)/計(jì)數(shù)器控制寄存器TCON的地址為88H,格式如下:D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0TF1為定時(shí)/計(jì)數(shù)器T1的溢出標(biāo)志位。當(dāng)T1被允許計(jì)數(shù)以后,T1從初值開(kāi)始加1計(jì)數(shù),計(jì)數(shù)器的最高位產(chǎn)生溢出時(shí)置“1”TF1,并向CPU申請(qǐng)中斷,當(dāng)CPU響應(yīng)中斷時(shí),由硬件清“0”TF1.TF1也可由軟件查詢清“TR1為定時(shí)/計(jì)數(shù)器的運(yùn)行控制位,由軟件置位和復(fù)位.當(dāng)方式控制寄存器TMOD中的GATE位為0,且TR1為1時(shí)允許T1計(jì)數(shù),TR1為0時(shí)禁止T1計(jì)數(shù)。當(dāng)GATE為1時(shí),僅當(dāng)TR1為1且INT1(P3.2)輸入為高電平時(shí)才允許T1計(jì)數(shù),當(dāng)TR1為0或INT1輸入為低電平時(shí)都禁止T1計(jì)數(shù)。TR0為定時(shí)器T0的運(yùn)行控制位,其功能與TR1類似。TF0為定時(shí)器T0的溢出標(biāo)志位,其功能與TF1類似。五.實(shí)驗(yàn)說(shuō)明51單片機(jī)的定時(shí)/計(jì)數(shù)器在進(jìn)行定時(shí)或計(jì)數(shù)之前要進(jìn)行初始化編程,通常包括如下幾個(gè)步驟:(1)確定工作方式,即給方式控制寄存器TMOD寫入控制字。(2)計(jì)算定時(shí)器/計(jì)數(shù)器初值,并將初值寫入寄存器TL和TH。(3)根據(jù)需要對(duì)中斷控制寄存器IE置初值,決定是否開(kāi)放定時(shí)器中斷。(4)使TCON中的TR0或TR1置“1”,啟動(dòng)定時(shí)器/計(jì)數(shù)器。在初始化過(guò)程中,要設(shè)置定時(shí)或計(jì)數(shù)的初始值,則計(jì)算初值X的公式如下:計(jì)數(shù)方式:式中M取決于不同工作方式,可以是213、216或28。定時(shí)方式:式中,稱為定時(shí)周期。1.用T0中斷方式定時(shí),每秒鐘使P1.0輸出狀態(tài)發(fā)生一次反轉(zhuǎn)將T0作定時(shí)器定時(shí)1秒,由于實(shí)驗(yàn)系統(tǒng),為了實(shí)現(xiàn)定時(shí)1秒,通過(guò)中斷服務(wù)程序進(jìn)行定時(shí)擴(kuò)展,即設(shè)置T0定時(shí)50ms產(chǎn)生一次中斷,同時(shí)設(shè)置一個(gè)軟件計(jì)數(shù)器來(lái)計(jì)數(shù)中斷次數(shù),當(dāng)達(dá)到中斷20次時(shí)即完成了定時(shí)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定時(shí)模式,方式1 TH0=0x4c;TL0=0x00;//設(shè)T0初值,50毫秒,晶振:11。0592MHz ET0=1; //開(kāi)啟T0中斷 EA=1; //開(kāi)啟總中斷 TR0=1; //啟動(dòng)T0}voidmain(){ Timer_Init(); while(1);}2.用T0計(jì)數(shù)外部脈沖,通過(guò)P1口顯示計(jì)數(shù)值采用T0作計(jì)數(shù)器,外部計(jì)數(shù)脈沖由P3。4引入,51單片機(jī)在每個(gè)機(jī)器周期采樣一次輸入信號(hào),因此至少需要兩個(gè)機(jī)器周期才能檢測(cè)到一次脈沖跳變。這就要求被采樣的外部脈沖高低電平保持時(shí)間均要大于一個(gè)機(jī)器周期,以保證電平在變化之前即被采樣,并且外部計(jì)數(shù)脈沖的最高計(jì)數(shù)頻率為fosc/24。程序設(shè)計(jì)的參考流程如圖1示。運(yùn)行程序,每按一次單脈沖按鈕,T0將計(jì)數(shù)一個(gè)脈沖,注意觀察數(shù)碼管的狀態(tài)。圖1序流程圖實(shí)驗(yàn)參考程序:unsignedintcn=0;voidmain(void){TMOD=0x05;//初始化程序TH0=TL0=0;ET0=0;EA=1;TR0=1;while(1){cn=TH0*256+TL0;//讀計(jì)數(shù)值Display(cn);//調(diào)用動(dòng)態(tài)顯示函數(shù),函數(shù)同實(shí)驗(yàn)二}}一.實(shí)驗(yàn)?zāi)康?.掌握鍵盤的鍵輸入的基本原理。2.加深對(duì)鍵盤的消抖的理解和認(rèn)識(shí),掌握如何運(yùn)用消抖來(lái)消除機(jī)械觸點(diǎn)對(duì)實(shí)驗(yàn)的影響。3.掌握行列式鍵盤的鍵盤掃描方式。二.實(shí)驗(yàn)要求用AT89C51的P1口接4×4矩陣鍵盤,從鍵盤中按下相應(yīng)的按鈕,數(shù)碼管會(huì)顯示出相應(yīng)的數(shù)字0~9,A~F十六種數(shù)字。對(duì)應(yīng)的按鍵的序號(hào)排列如圖4所示圖4按鍵序號(hào)排列圖三.實(shí)驗(yàn)電路連線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í)驗(yàn)原理在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接.掃描法要逐列掃描查詢,當(dāng)被按下的鍵處于最后1列時(shí),則要經(jīng)過(guò)多次掃描才能最后獲得此按鍵所處的行列值。而線反轉(zhuǎn)法則顯得很簡(jiǎn)練,無(wú)論被按鍵是處于第1列或最后1列,均只需要經(jīng)過(guò)2步便能獲得此按鍵所在的行列值,線反轉(zhuǎn)法的原理如圖5所示。這樣,一個(gè)端口就可以構(gòu)成4×4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。圖1矩陣鍵盤電路原理圖下面介紹線反轉(zhuǎn)法的2個(gè)具體操作步驟:第1步,讓行線編程為輸入線,列線編程為輸出線,并使輸出線輸出為全低電平,則行線中電平由高變低的所在行為按鍵所在行。第2步,再把行線編程為輸出線,列線編程為輸入線,并使輸出線輸出為全低電平,則列線中電平由高變低所在列為按鍵所在列。結(jié)合上述2步的結(jié)果,可確定按鍵所在行和列,從而識(shí)別出所按的鍵。五.實(shí)驗(yàn)說(shuō)明編寫程序,從矩陣鍵盤中按下按鍵,觀察LED數(shù)碼管的狀態(tài)。一.實(shí)驗(yàn)?zāi)康?.了解D/A轉(zhuǎn)換的基本原理.2.了解D/A轉(zhuǎn)換芯片0832的性能及編程方法.3.了解單片機(jī)系統(tǒng)中擴(kuò)展D/A轉(zhuǎn)換的基本方法。二.實(shí)驗(yàn)要求1.DAC0832將數(shù)字量轉(zhuǎn)換成模擬電壓,并用電壓表測(cè)量輸出電壓.2.編制程序產(chǎn)生正弦波、鋸齒波、三角波。(需用示波器觀察,選作)三.實(shí)驗(yàn)電路連線將P0、P2總線開(kāi)關(guān)閉合,使DAC0832的連接至51單片機(jī)總線即可。四.實(shí)驗(yàn)說(shuō)明DAC0832在實(shí)驗(yàn)箱上是采用外部總線方式連接的,總線地址為9000H,單片機(jī)的外部總線擴(kuò)展電路如圖1所示,DAC0832電路圖如圖2所示,為DAC0832提供電壓基準(zhǔn)的電路如圖3所示。圖1單片機(jī)外部總線原理圖圖2DAC0832電路原理圖圖3實(shí)驗(yàn)箱基準(zhǔn)電路原理圖在電路圖2中DAC0832電路是雙極性DAC轉(zhuǎn)換電路,實(shí)驗(yàn)時(shí)僅需要將數(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) { }}一.實(shí)驗(yàn)?zāi)康?.掌握A/D轉(zhuǎn)換與單片機(jī)的接口原理。2.了解A/D芯片ADC0804轉(zhuǎn)換性能及編程。3.通過(guò)實(shí)驗(yàn)了解單片機(jī)如何進(jìn)行數(shù)據(jù)采集.二.實(shí)驗(yàn)要求編寫實(shí)驗(yàn)程序,采用ADC0804對(duì)電位器產(chǎn)生的模擬電壓進(jìn)行測(cè)量,測(cè)量結(jié)果在數(shù)碼上進(jìn)行顯示。三.實(shí)驗(yàn)電路連線1.模塊電位器Vout點(diǎn)接ADC0804的ADIN;2。閉合P0、P2總線開(kāi)關(guān)連接DAC;3。單片機(jī)P2。3~P2。0口接數(shù)碼管顯示模塊的位選LD2~LD5,P1.0~P1.7口接段選a~p.四.實(shí)驗(yàn)說(shuō)明其中總線電路如圖1,A/D轉(zhuǎn)換原理圖如圖2所示,電位器模擬電壓產(chǎn)生電路如圖3所示。ADC0804的總線地址8000HADC0804電路的電壓基準(zhǔn)Vref為VCC,即5V供電電源。電壓與測(cè)量數(shù)據(jù)關(guān)系為:(D為采用ADC轉(zhuǎn)換結(jié)果)圖1單片機(jī)外部總線原理圖圖2ADC0804電路原理圖圖3電位器模擬電壓產(chǎn)生電路原理圖一.實(shí)驗(yàn)?zāi)康牧私釯2C總線協(xié)議,器件地址、器件子地址含義,掌握I2C總線控制時(shí)序;掌握AT二.實(shí)驗(yàn)要求編寫調(diào)試基于I2C的EEPROM芯片AT24C三.實(shí)驗(yàn)電路連線將AT89C51單片機(jī)的P1.1和P1。2口分別接EEPROM芯片AT24C02的SCL和SDA。四.實(shí)驗(yàn)原理1.信號(hào)定義I2C總線的時(shí)鐘線SCL與數(shù)據(jù)線SDA均為雙向傳輸線。在總線備用時(shí),這兩條線均保持高電平。當(dāng)時(shí)鐘線保持高電平,數(shù)據(jù)線出現(xiàn)由高電平向低電平變化時(shí),啟動(dòng)I2C總線,這就是I2C總線的啟動(dòng)信號(hào)。在時(shí)鐘線保持高電平期間,數(shù)據(jù)線上出現(xiàn)由低到高的電平變化,將結(jié)束I2C總線的數(shù)據(jù)傳輸,此信號(hào)即為I2C圖8I2C起始和終止信號(hào)都是由主機(jī)發(fā)出的,在起始信號(hào)產(chǎn)生后,總線就處于被占用的狀態(tài);在終止信號(hào)產(chǎn)生后,總線就處于空閑狀態(tài)。連接到I2C總線上的器件,若具有I2C總線的硬件接口,則很容易檢測(cè)到起始和終止信號(hào)。對(duì)于不具備I2C2.?dāng)?shù)據(jù)傳輸過(guò)程I2C總線上的數(shù)據(jù)傳輸如圖9所示。由圖可見(jiàn),I2C總線上每一次數(shù)據(jù)傳輸均開(kāi)始于主控器發(fā)出的啟動(dòng)信號(hào),傳輸?shù)拿恳蛔止?jié)均為8位,但每啟動(dòng)一次I圖9I2C與每一字節(jié)后的應(yīng)答信號(hào)相對(duì)應(yīng)的時(shí)鐘(第9個(gè)時(shí)鐘)由主控器產(chǎn)生。數(shù)據(jù)發(fā)送器件必須在這一時(shí)鐘位上釋放數(shù)據(jù)線,使其處于高電平狀態(tài),以便使數(shù)據(jù)接收器件能在這一位上送出應(yīng)答信號(hào),如圖10所示。若接收器輸出低電平,則為應(yīng)答信號(hào)ACK,輸出高電平則為非應(yīng)答信號(hào)NOACK。當(dāng)主控器發(fā)送數(shù)據(jù)時(shí),如果被控器不產(chǎn)生應(yīng)答信號(hào),主控器就產(chǎn)生一個(gè)停止信號(hào)來(lái)終止傳輸過(guò)程。圖10I2C當(dāng)主控器接收數(shù)據(jù)時(shí),若不想再接收或接收完最后一個(gè)字節(jié),必須給被控器發(fā)送一個(gè)非應(yīng)答位,使被控器釋放總線,然后主控器再發(fā)一個(gè)停止信號(hào)結(jié)束傳輸過(guò)程。當(dāng)總線上的接收器接收一字節(jié)后,如果無(wú)法立即接收下一字節(jié)數(shù)據(jù),可將SCL鉗位于低電平,這樣總線就進(jìn)入等待狀態(tài),直到接收器準(zhǔn)備好接收新數(shù)據(jù)時(shí)再釋放時(shí)鐘線,使數(shù)據(jù)傳輸能繼續(xù)正常進(jìn)行。I2C總線上的數(shù)據(jù)傳輸必須符合一定的格式,每次數(shù)據(jù)傳輸均始于主控器發(fā)出的啟動(dòng)信號(hào),然后為尋址字節(jié),包括7位的被控器地址和1位方向位。方向位為“0”代表主控器要對(duì)被控器進(jìn)行寫入操作,為“五.實(shí)驗(yàn)說(shuō)明根據(jù)EEPROM芯片AT24C02的手冊(cè),嚴(yán)格按照其時(shí)序編寫程序。啟動(dòng)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)答信號(hào)*/voidAck(){ SDA=0; delay(); SCL=1; delay(); SCL=0; delay(); SDA=1; delay();}/*名稱:NoAck功能:發(fā)送非應(yīng)答信號(hào)*/voidNoAck(){ SDA=1; delay(); SCL=1; delay(); SCL=0; delay(); SDA=0; delay();}/*名稱:Test_Ack()功能:檢測(cè)應(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;}一.實(shí)驗(yàn)?zāi)康?.掌握AT89C51單片機(jī)串行口的使用方法。2.掌握串行口工作波特率的設(shè)計(jì)方法。3.通訊系統(tǒng)編程練習(xí)。二.實(shí)驗(yàn)要求要求單片機(jī)利用串行口方式1向PC機(jī)傳送數(shù)據(jù).三.實(shí)驗(yàn)電路連線實(shí)驗(yàn)箱通過(guò)串口線與PC機(jī)RS232COM口相連。實(shí)驗(yàn)箱RS232電平與TTL電平轉(zhuǎn)換電路如圖11所示.圖11RS232電平與TTL電平轉(zhuǎn)換電路四.實(shí)驗(yàn)原理MCS—51單片機(jī)內(nèi)部集成了一個(gè)全雙工串行接口,通過(guò)P3口的兩個(gè)引腳與外部設(shè)備進(jìn)行串行通信,其中P3.1為串行數(shù)據(jù)發(fā)送端TXD,P3.0為串行通信數(shù)據(jù)接收端TXD,通過(guò)串行口,單片機(jī)可以方便地與其它計(jì)算機(jī)實(shí)現(xiàn)雙機(jī)和多機(jī)通信,或者與外部設(shè)備進(jìn)行串行數(shù)據(jù)交換。由寄存器SCON來(lái)進(jìn)行設(shè)置,可選擇通訊模式,允許接收,檢查狀態(tài)位。SCON的結(jié)構(gòu)如下:串行控制寄存器(SCON)可位尋址SM0SM1SM2RENTB8RB8TIRI其中各控制位的含義如下:SM0:串行模式選擇。SM1:串行模式選擇。SM2:多機(jī)通訊允許位,當(dāng)模式0時(shí),此位應(yīng)該為0.模式1時(shí),當(dāng)接收到停止位時(shí),該位將置位。模式2或模式3時(shí),當(dāng)接收的第9位數(shù)據(jù)為1時(shí),將置位。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有一個(gè)接收數(shù)據(jù)緩沖區(qū),當(dāng)上一個(gè)字節(jié)還沒(méi)被處理,下一個(gè)數(shù)據(jù)仍然可以緩沖區(qū)接收進(jìn)來(lái),但如果接收完這個(gè)字節(jié)如果上個(gè)字節(jié)還沒(méi)被處理,上個(gè)字節(jié)將被覆蓋.因此,軟件必須在此之前處理數(shù)據(jù)。當(dāng)連續(xù)發(fā)送字節(jié)時(shí)也是如此。51支持10位和11位數(shù)據(jù)模式,11位數(shù)據(jù)模式用來(lái)進(jìn)行多機(jī)通訊。并支持高速8位移位寄存器模式.模式1和模式3中波特率可變。工作在模式0時(shí),UART作為一個(gè)8位的移位寄存器使用,波特率為fosc/12數(shù)據(jù)由RXD從低位開(kāi)始收發(fā).TXD用來(lái)發(fā)送同步移位脈沖,因此,方式0不支持全雙工。這種方式可用來(lái)和像某些具有8位串行口的EEPROM之類的器件通訊。當(dāng)向SBUF寫入字節(jié)時(shí),開(kāi)始發(fā)送數(shù)據(jù)。數(shù)據(jù)發(fā)送完畢時(shí),TI位將置位。置位REN時(shí),將開(kāi)始接收數(shù)據(jù),接收完8位數(shù)據(jù)時(shí),RI位將置位.工作于模式1時(shí),傳輸?shù)氖?0位:1個(gè)起始位,8個(gè)數(shù)據(jù)位,1個(gè)停止位.這種方式可和包括PC機(jī)在內(nèi)的很多器件進(jìn)行通訊.這種方式中波特率是可調(diào)的。而用來(lái)產(chǎn)生波特率的定時(shí)器的中斷應(yīng)該被禁止.PCON的SMOD位為1時(shí),可使波特率翻倍。TI和RI在發(fā)送和接收停止位的中間時(shí)刻被置位.這使軟件可以響應(yīng)中斷并裝入新的數(shù)據(jù)。數(shù)據(jù)處理時(shí)間取決于波特率和晶振頻率.模式2的數(shù)據(jù)以11位方式發(fā)送:1位起始位,8位數(shù)據(jù)位,第九位,1位停止位。發(fā)送數(shù)據(jù)時(shí),第九位為SCON中的TB8,接收數(shù)據(jù)的第九位保存在RB8中.第九位一般用來(lái)多機(jī)通信,僅在第九位為1時(shí),單片機(jī)才接收數(shù)據(jù).多機(jī)通信用SCON的SM2來(lái)控制。當(dāng)SM2置位時(shí),僅當(dāng)數(shù)據(jù)的第九位為1時(shí)才引發(fā)通訊中斷,當(dāng)SM2為0時(shí),只要接收完11位就產(chǎn)生一次中斷。第九位可在多機(jī)通訊中避免不必要的中斷,在傳送地址和命令時(shí),第九位置位,串行總線上的所有處理器都產(chǎn)生一個(gè)中斷,處理器將決定是否繼續(xù)接收下面的數(shù)據(jù),如果繼續(xù)接收數(shù)據(jù)就清零SM2.否則,SM2置位,以后的數(shù)據(jù)流將不會(huì)使他產(chǎn)生中斷。時(shí),模式2的波特率為1/640sc,時(shí),波特率為1/320sc。因此,使用模式2,當(dāng)晶振頻率為11。0592M時(shí),將有高達(dá)345K的波特率。模式3和模式2的差別在于可變的波特率。五.實(shí)驗(yàn)說(shuō)明執(zhí)行如下程序,觀察PC機(jī)上串口調(diào)試助手的狀態(tài)。#include<reg51.h〉#defineBYTEunsignedcharBYTEx;voidDelay(intcnt){ while(cnt—-);}voidUART_Init(){ SCON=0x50; //方式1,波特率可變8位異步通信 TMOD=0x20; //定時(shí)器1工作方式2,8位自動(dòng)裝載 PCON=0x00; //加倍波特率清”0",可以沒(méi)有 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); }}一.實(shí)驗(yàn)?zāi)康?.了解實(shí)時(shí)時(shí)鐘與SPI總線基本原理;2.掌握SPI總線時(shí)序與程序設(shè)計(jì)方法;3.掌握DS1302的工作原理及編程方法。二.實(shí)驗(yàn)要求利用實(shí)驗(yàn)箱上基于SPI總線的DS1302芯片制作一個(gè)可調(diào)時(shí)間的萬(wàn)年歷,并在LCD12864上顯示。三.實(shí)驗(yàn)電路連線將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相連。四.實(shí)驗(yàn)原理SPI接口的基本結(jié)構(gòu)圖如圖12所示.在圖中只給出簡(jiǎn)化的連接示意圖。作為功能相對(duì)于設(shè)備獨(dú)立的SPI接口部件,它具有復(fù)雜的邏輯控制電路,在圖中并未體現(xiàn)。由圖可見(jiàn),SPI的基本結(jié)構(gòu)相當(dāng)于兩個(gè)8位移位寄存器的首尾相接,構(gòu)成16位的環(huán)形移位寄存器.信號(hào)用于選擇設(shè)備工作于主方式還是從方式。主設(shè)備啟動(dòng)發(fā)送并產(chǎn)生SPI移位時(shí)鐘,從設(shè)備被動(dòng)接收時(shí)鐘。在時(shí)鐘的作用下,兩個(gè)移位寄存器同步移位,在數(shù)據(jù)從主機(jī)移向從機(jī)的同時(shí),數(shù)據(jù)也由從機(jī)移向主機(jī)。這意味著在一個(gè)移位周期內(nèi)(8個(gè)時(shí)鐘),主機(jī)與從機(jī)實(shí)現(xiàn)數(shù)據(jù)交換。圖12SPI接口的基本結(jié)構(gòu)圖SPI總線可在軟件的控制下構(gòu)成各種簡(jiǎn)單或復(fù)雜的系統(tǒng),例如,1個(gè)主MCU和幾個(gè)從MCU構(gòu)成的單主機(jī)系統(tǒng);幾個(gè)MCU相互連接構(gòu)成的多主機(jī)系統(tǒng)(分布式系統(tǒng));1個(gè)MCU和1個(gè)或多個(gè)I/O設(shè)備構(gòu)成的單主機(jī)系統(tǒng)。在多數(shù)應(yīng)用場(chǎng)合,使用1個(gè)MCU作為主機(jī),它控制著1個(gè)或多個(gè)其他外圍器件。實(shí)現(xiàn)數(shù)據(jù)在主機(jī)與被選器件之間的傳輸.由SPI總線構(gòu)成的典型系統(tǒng)結(jié)構(gòu)如圖13所示。圖13由SPI總線構(gòu)成的典型系統(tǒng)結(jié)構(gòu)圖在SPI總線與幾種不同串行芯片相連接時(shí),要注意這些芯片引腳的處理,可用MCU的通用I/O口線來(lái)控制它們。對(duì)于像AT89C51這樣沒(méi)有SPI接口的MCU來(lái)說(shuō),可用軟件來(lái)模擬SPI操作.但此時(shí),在操作速度和資源使用效率上都會(huì)降低.五.實(shí)驗(yàn)說(shuō)明有四個(gè)鍵盤key0到key3,key0是修改時(shí)間的,首先是秒到分到時(shí)到年到月到日到星期,key1是加1,key2是減1,在修改時(shí)間狀態(tài)再按一下key3的時(shí)候就退出并修改時(shí)間日期,在平時(shí)狀態(tài)按著key3再按著key2
就會(huì)打開(kāi)lcd的燈,單單是只按key3那就是把燈關(guān)了。DS1302部分參考程序如下:voidWriteByte(unsignedchardat)//將一個(gè)字節(jié)數(shù)據(jù)寫入到DS1302{ unsignedchari=0; for(i=0;i〈8;i++) { IO=(bit)(dat&0x01);//最低位數(shù)據(jù)加載到IO數(shù)據(jù)線 SCLK=1;//時(shí)鐘上升沿,數(shù)據(jù)傳送給DS1302 SCLK=0;//時(shí)鐘下降沿 dat=(dat>>1);//dat右移一位,為下次傳送準(zhǔn)備 }}unsignedcharReadByte(void)//從DS1302讀出一個(gè)字節(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;//時(shí)鐘上升沿 SCLK=0;//時(shí)鐘下降沿 } returndat;}voidWriteDS1302(unsignedcharaddress,dat)//將兩個(gè)字節(jié)數(shù)據(jù)寫入到DS1302{ RST=0;//復(fù)位引腳置低 SCLK=0;//
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版設(shè)備砂石料購(gòu)銷與設(shè)備性能優(yōu)化協(xié)議3篇
- 二零二五年度人事部人才與專家工作辦公室員工福利保障合同3篇
- 二零二五年度圖書(shū)館圖書(shū)修復(fù)與保護(hù)工程合同
- 個(gè)體物流配送員勞動(dòng)協(xié)議格式(2024年版)一
- 二零二五版木材進(jìn)口關(guān)稅減免申請(qǐng)服務(wù)合同4篇
- 二零二五年度土地利用現(xiàn)狀變更測(cè)量合同
- 二零二五年度城市公共充電樁運(yùn)營(yíng)管理合同4篇
- 二零二五版大數(shù)據(jù)中心項(xiàng)目合作協(xié)議4篇
- 2025年度美容院連鎖加盟區(qū)域代理權(quán)及市場(chǎng)獨(dú)占協(xié)議
- 2025年度企業(yè)培訓(xùn)項(xiàng)目財(cái)務(wù)結(jié)算合同范本4篇
- 2024生態(tài)環(huán)境相關(guān)法律法規(guī)考試試題
- 有砟軌道施工工藝課件
- 兩辦意見(jiàn)八硬措施煤礦安全生產(chǎn)條例宣貫學(xué)習(xí)課件
- 40篇短文搞定高中英語(yǔ)3500單詞
- 人教版高中數(shù)學(xué)必修二《第九章 統(tǒng)計(jì)》同步練習(xí)及答案解析
- 兒科護(hù)理安全警示教育課件
- 三年級(jí)下冊(cè)口算天天100題
- 國(guó)家中英文名稱及代碼縮寫(三位)
- 人員密集場(chǎng)所消防安全培訓(xùn)
- 液晶高壓芯片去保護(hù)方法
- 拜太歲科儀文檔
評(píng)論
0/150
提交評(píng)論