單片機實驗報告(BUPT)_第1頁
單片機實驗報告(BUPT)_第2頁
單片機實驗報告(BUPT)_第3頁
單片機實驗報告(BUPT)_第4頁
單片機實驗報告(BUPT)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

實驗課程名稱自動控制綜合實驗2》姓名學(xué)院自動化學(xué)院專業(yè)班級學(xué)號、班內(nèi)序號指導(dǎo)教師2013年月單片機部分仿真軟件的使用以及跑馬燈的設(shè)計實驗?zāi)康模赫莆辗抡孳浖氖褂梅椒āU莆誐CS-51單片機的P0、P1、P2口的使用方法。掌握實現(xiàn)發(fā)光二極管的移動、閃爍程序的編寫方法。實驗儀器:LJD-SY-5200單片機開發(fā)板實驗內(nèi)容:掌握單片機仿真器的程序輸入、調(diào)試和運行等方法。所有按鍵的一端接通過上拉電阻接至+5V電源,另一端和電源地GND相連接。P0、P1作輸出,接16個發(fā)光二極管,P0口接前八個發(fā)光二極管,由程序控制二極管的亮和滅。P0八個發(fā)光二極管先奇數(shù)的發(fā)光二極管點亮,然后偶數(shù)的發(fā)光二極管點亮,并循環(huán)進行。實驗程序要求用匯編語言編寫。實驗線路:實驗程序及流程圖:實驗流程圖:定義程序起始位置定義程序起始位置0030H將將01111111d通過累加器A傳給IO0改變累加器的值調(diào)用延時子程序調(diào)用延時子程序delay(為了有明顯效果,調(diào)用兩次)二進制左移一位(改變8次)八位移位過后循環(huán)實驗程序:org0000hajmpstart;跳轉(zhuǎn)到程序開始org0030h;定義起始匯編地址start:mova,#7fhmovp0,a;lcalldelay;延時lcalldelaymova,#0dfhmovp0,a;lcalldelay;延時lcalldelaymova,#0f7hmovp0,a;lcalldelay;延時lcalldelaymova,#0fdhmovp0,a;lcalldelay;延時lcalldelaymova,#0bfhmovp0,a;lcalldelay;延時lcalldelaymova,#0efhmovp0,a;lcalldelay;延時lcalldelaymova,#0fbhmovp0,a;。lcalldelay;延時lcalldelaymova,#0fehmovp0,a;lcalldelay;延時lcalldelayjmpstart;回到程序的開頭delay:movr3,#250;延時子程序d1:movr4,#200d2:nopdjnzr4,d2djnzr3,d1retend實驗心得:通過本次實驗,我了解了跑馬燈的程序設(shè)計方法;而且利用匯編語言編寫也鍛煉了我的匯編能力。本實驗是對單片機I/O端口的基本應(yīng)用,掌握簡單的流水燈設(shè)計,為接下來的實驗做準備。定時器及計數(shù)器的應(yīng)用實驗?zāi)康模菏煜?051的T0作為定時器的設(shè)置及使用方法掌握T0作為計數(shù)器的軟件設(shè)計方法。掌握單脈沖發(fā)生電路的硬件線路連接方式。實驗儀器:LJD-SY-5200單片機實驗內(nèi)容:在液晶屏上顯示定時、計數(shù)結(jié)果:利用定時器T0進行計時,并把計時結(jié)果通過液晶屏顯示出來。以每秒為單位顯示。把T0作為計數(shù)器對T0引腳的輸入脈沖進行計數(shù),并通過液晶顯示屏顯示T0計數(shù)結(jié)果。我們給出液晶屏顯示程序,同學(xué)自己用編寫T0定時器程序(中斷部分程序)及由T0引腳輸入的外部脈沖進行計數(shù)的計數(shù)器程序(匯編或C語言均可)。將定時或計數(shù)結(jié)果付給液晶屏顯示程序中的count即可顯示。利用定時器T0控制八個發(fā)光二極管利用定時器T0進行計時,在程序運行2s后首先使得發(fā)光二極管順序循環(huán)點亮三次,隨后使用定時器T0使得發(fā)光二極管奇數(shù)位和偶數(shù)位循環(huán)點亮三次,并循環(huán)顯示。以500ms為單位顯示。把T0作為計數(shù)器對T0引腳的輸入脈沖進行計數(shù),使用P2口中的一位作為輸入口,接1個按鍵。所有按鍵的一端接通過上拉電阻接至+5V電源,另一端和電源地GND相連接。在沒有按鍵被按下時P2的輸入為高電平,當(dāng)有按鍵被按下時對應(yīng)的P2的相應(yīng)引腳被拉低,該引腳輸入變成低電平。當(dāng)按鍵次數(shù)達到3的整數(shù)倍時點亮P1口的一個發(fā)光二極管。提高部分(附加分)使用定時器作為軟件看門狗

利用定時器T0進行計時,在程序運行3s后使得發(fā)光二極管逆序循環(huán)點亮,并當(dāng)循環(huán)運行8s之后程序重啟。二極管點亮以100ms為單位顯示。實驗線路:外部計數(shù)電路圖實驗程序及流程圖:1s定時器LCD顯示流程圖:定時器初始化定時器初始化(定時器1,50ms進入一次中斷,打開總中斷,定時器1中斷,打開定時器)WWhile(1)LCD循環(huán)顯示50ms后進入中斷,計時器重新賦值50ms后進入中斷,計時器重新賦值a++Noa=20?Yescountcount加一a=0程序(除去宏定義,LCD顯示函數(shù),延時函數(shù)等):uchara=0;main(){uchari;TMOD=0x10;//使用定時器1TH1=(65535-50000)/256;TL1=65535-50000;//每進入一次中斷,使用50msEA=1;//打開總中斷ET1=1;//打開定時器1中斷TR1=1;//打開定時器1flag_count=0;count=0;initial_GLCD();/*清屏*/while(1){command_GLCD(0x80);for(i=0;i<7;i++){write_GLCD(disp_hz[i]);}write_GLCD(disp_num[count/1000]);/*顯示定時結(jié)果的千位*/write_GLCD(disp_num[count%1000/100]);/*顯示定時結(jié)果的百位*/write_GLCD(disp_num[count%1000%100/10]);/*顯示定時結(jié)果的十位*/write_GLCD(disp_num[count%1000%100%10]);/*顯示定時結(jié)果的個位*/write_GLCD(disp_hz[11]);delay1(1000);}}voidtimer1()interrupt3{a++;if(a==20) { a=0; count++;}TH1=(65535-50000)/256;TL1=65535-50000;//每進入一次中斷,使用50ms}計數(shù)器LCD顯示W(wǎng)hile(1)LCDWhile(1)LCD循環(huán)顯示計數(shù)器初始化計數(shù)器初始化(計數(shù)器1,計數(shù)一次進入一次中斷,打開總中斷,計數(shù)器1中斷,打開計數(shù)器)No是否有脈沖?Yes進入中斷,計時器重新賦值進入中斷,計時器重新賦值count加一程序(除去宏定義,LCD顯示函數(shù),延時函數(shù)等):main(){EA=1;//打開總中斷ET1=1;//打開計數(shù)器1中斷TMOD=0x50;//計數(shù)器1,方式一,16位TH1=0xFF;TL1=0xFF;//計數(shù)一次后立即中斷TR1=1;//開始計數(shù)initial_GLCD();/*清屏*/while(1){command_GLCD(0x80);for(i=0;i<11;i++){write_GLCD(disp_hz[i]);}write_GLCD(disp_num[count/100]);/*顯示計數(shù)結(jié)果的百位*/write_GLCD(disp_num[count%100/10]);/*顯示計數(shù)結(jié)果的十位*/write_GLCD(disp_num[count%100%10]);/*顯示計數(shù)結(jié)果的個位*/delay1(1000);}}voidint0()interrupt3//定時計數(shù)器1中斷,中斷向量號為3{TH1=0xFF;TL1=0xFF;//重新賦值count++;//計數(shù)值加一}定時器LED流程圖定時器定時器0初始化,10ms進入一次中斷,2s中斷標志flag1,500ms中斷標志flag2Noflag2=1?Yes進入流水燈顯示進入流水燈顯示Z=3,m=0flag2=0,P0=table[m],flag2=0,P0=table[m],流水燈Yes,m++m<8?Noz--Yesz>0?No,三次流水燈結(jié)束z=3z=3,m=0m<8?Yes Noz--Yesz>0?No程序結(jié)尾程序結(jié)尾程序#include<reg52.h>typedefunsignedcharuchar;typedefunsignedintuint;ucharcount1=0,count2;ucharflag1=0;ucharflag2=0;ucharz,m;ucharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水燈ucharcodetable1[]={0xfe,0xfb,0xef,0xbf,0xfd,0xf7,0xdf,0x7f};//奇偶流水燈voidinitial()//定時器初始化{TMOD=0x01;//定時器T0工作在方式一TH0=(65535-10000)/256;TL0=65535-10000;//每10ms進入一次中斷EA=1;//打開總中斷ET0=1;//打開中斷TR0=1;//啟動定時器}main(){initial();while(!flag1);//等待2s后flag1=1,跳出循環(huán)while(1) { for(z=3;z>0;z--)//循環(huán)點亮三次流水燈 { for(m=0;m<8;m++)//循環(huán)點亮流水燈 { flag2=0;//清除上一次的flag2 P0=table[m]; while(!flag2); } } for(z=3;z>0;z--)//循環(huán)奇偶點亮 { for(m=0;m<8;m++) { flag2=0; P0=table1[m]; while(!flag2); } }}}voidTimer0()interrupt1{count1++;count2++;if(count1==200)//進入兩百次中斷即達到2s{count1=0;flag1=1;}if(count2==50)//進入50次中斷即達到500ms{count2=0;flag2=1;}TH0=(65535-10000)/256;//定時器重新賦值TL0=65535-10000;}計數(shù)器LED流程圖計數(shù)器計數(shù)器0初始化,計數(shù)初值為0xffff,即計數(shù)一次就進入中斷等待脈沖進入等待脈沖進入脈沖進入進入中斷,進入中斷,number++Nonumber=3?Yesshow=0show=0,LED亮,number=0程序#include<reg52.h>unsignedcharnumber=0;sbitshow=P1^0;//使用P1口的第一個LED當(dāng)做指示燈voidcount_initial(){ TMOD=0x05;//使用計數(shù)器0,工作方式一 TH0=0xff; TL0=0xff;//計數(shù)初值為0xffff EA=1; ET0=1; TR0=1;}voidmain(){count_initial();//計數(shù)器初始化while(1);//在中斷中執(zhí)行程序,故主程序無序內(nèi)容,無限循環(huán)}voidcounter()interrupt1{ number++; if(number==3) { number=0; show=0;//進入三次中斷就使標志位show=0 } elseshow=1; TH0=0xff; TL0=0xff;}定時器看門狗流程圖定時器定時器0初始化,賦初值使0.05s進入一次中斷Noflag=1?Yes流水燈流水燈Yesflag2=1?No等待等待程序#include<reg52.h>sfrWHD=0xe1;//看門狗定時器,位置為SFR區(qū)的0xe1unsignedchara,b,c,i,j;unsignedcharflag1=0,flag2=0,flag3=0;unsignedcharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};voidtimer_initial(){ TMOD=0x01;//計數(shù)器0,工作方式1 TH0=(65535-50000)/256;//0.05s進入一次中斷 TL0=65535-50000; EA=1; ET0=1; TR0=1;}voidmain(){ //WHD=0x3f;//打開看門狗,設(shè)置溢出間隔為8.3s timer_initial(); while(!flag1); while(1){ for(i=0;i<8;i++) { flag2=0;//判斷是否到達100ms P1=table[i]; while(!flag2);//沒到達100ms則等待 }}}voidtimer0()interrupt1{a++;b++;c++;if(a==60)//進入中斷60次,使用3s { flag1=1; a=0; }if(b==2)//進入中斷兩次,使用100ms { b=0; flag2=1; } if(c==219)//進入中斷220次時,使用11s,考慮到看門狗65ms后復(fù)位,故//此處減一 { c=0; WHD=0x30;//放狗,設(shè)置分頻及復(fù)位時間 }TH0=(65535-50000)/256;//0.05s進入一次中斷 TL0=65535-50000;}實驗心得:通過本次定時計數(shù)器的使用,我熟悉了TMOD,TH,TL及中斷開關(guān)的使用,也熟悉了中斷服務(wù)程序的使用。其中,方式一不是自動重裝初值,所以在中斷服務(wù)程序中一定要再次裝入計時或計數(shù)初值。模擬/數(shù)字(A/D,TLC549)實驗實驗?zāi)康模毫私?位串行輸出A/D轉(zhuǎn)換器TLC549的工作原理。掌握TLC549的硬件線路連接方式。掌握A/D轉(zhuǎn)換器TLC549的編程方法實驗儀器:LJD-SY-5200實驗內(nèi)容:仔細閱讀TLC549的數(shù)據(jù)手冊。仔細閱讀CH451的應(yīng)用手冊。編寫程序把A/D轉(zhuǎn)換器的轉(zhuǎn)換結(jié)果通過液晶顯示出來。實驗線路:TLC549管腳圖連接圖實驗程序及流程圖:流程圖:ADAD轉(zhuǎn)換初始化cscs低電平選中芯片clkclk下降沿從低位到高位讀取數(shù)據(jù)左移左移a八次ddata=a,count=dataLCDLCD顯示程序(除去LCD顯示部分):sbit

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論