單片機(jī)C實(shí)驗(yàn)指導(dǎo)書_第1頁(yè)
單片機(jī)C實(shí)驗(yàn)指導(dǎo)書_第2頁(yè)
單片機(jī)C實(shí)驗(yàn)指導(dǎo)書_第3頁(yè)
單片機(jī)C實(shí)驗(yàn)指導(dǎo)書_第4頁(yè)
單片機(jī)C實(shí)驗(yàn)指導(dǎo)書_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書成都工業(yè)學(xué)院通信工程系微電子技術(shù)教研室二O一三年九月實(shí) 驗(yàn) 須 知實(shí)驗(yàn)是教學(xué)的重要實(shí)踐環(huán)節(jié),是理論聯(lián)系實(shí)際,培養(yǎng)實(shí)際操作能力和科學(xué)研究方法的重要手段,也是培養(yǎng)觀察問題、分析問題、解決問題能力的重要方式。要求做到:實(shí)驗(yàn)前認(rèn)真準(zhǔn)備,實(shí)驗(yàn)中親自動(dòng)手、細(xì)心觀察、認(rèn)真思考,實(shí)驗(yàn)后認(rèn)真寫好總結(jié)報(bào)告。一、實(shí)驗(yàn)守則1、 實(shí)驗(yàn)前認(rèn)真閱讀實(shí)驗(yàn)指導(dǎo)書,搞清原理,明確實(shí)驗(yàn)任務(wù),有目的的進(jìn)行實(shí)驗(yàn),以提高實(shí)驗(yàn)課的質(zhì)量,鞏固和加深理論知識(shí)。2、 必須按實(shí)驗(yàn)指導(dǎo)書預(yù)習(xí)好實(shí)驗(yàn)內(nèi)容,復(fù)習(xí)教材有關(guān)內(nèi)容,完成規(guī)定的預(yù)習(xí)內(nèi)容。3、 同一實(shí)驗(yàn)小組內(nèi)應(yīng)適當(dāng)分工、緊密配合,培養(yǎng)安全工作作風(fēng)、團(tuán)結(jié)協(xié)作精神和愛護(hù)公

2、物的優(yōu)良品質(zhì)。4、 接線前,應(yīng)合理布置儀器設(shè)備和實(shí)驗(yàn)板位置,以利于安全、方便的操作,做到文明實(shí)驗(yàn)。5、 保持實(shí)驗(yàn)室安靜、整潔,在實(shí)驗(yàn)室不吸煙、不喧鬧、不隨地吐痰、不丟紙屑。6、 在實(shí)驗(yàn)過程中不得擅自離開,未經(jīng)實(shí)驗(yàn)指導(dǎo)教師的同意,不得隨意調(diào)換儀器,也不得亂拿實(shí)驗(yàn)室或他組的儀器設(shè)備。7、 實(shí)驗(yàn)所記錄的波形、數(shù)據(jù)等實(shí)驗(yàn)結(jié)果,應(yīng)經(jīng)指導(dǎo)教師檢查、同意后才能拆除電路并整理放好。8、 在實(shí)驗(yàn)中應(yīng)注意人身和設(shè)備安全,如在實(shí)驗(yàn)中發(fā)生事故或異?,F(xiàn)象應(yīng)立即斷開電源,保持現(xiàn)場(chǎng),并立即報(bào)告實(shí)驗(yàn)指導(dǎo)教師,等后處理。二、實(shí)驗(yàn)方法及要求1、 每次實(shí)驗(yàn)前,首先應(yīng)熟悉所用儀器、設(shè)備的性能等。2、 每一實(shí)驗(yàn)小組,可由一人擔(dān)任指揮(

3、可輪流擔(dān)任)。線路接好先在組內(nèi)相互檢查。再經(jīng)指導(dǎo)教師檢查后,才能通電實(shí)驗(yàn)。3、 實(shí)驗(yàn)中所畫波形或測(cè)量數(shù)據(jù),應(yīng)當(dāng)場(chǎng)畫好或記錄好,并加以分析,如發(fā)現(xiàn)波形或數(shù)據(jù)有不合理之處,應(yīng)重作一遍或說明其原因。4、 實(shí)驗(yàn)內(nèi)容全部完成后,要認(rèn)真檢查實(shí)驗(yàn)結(jié)果是否合理,有無(wú)遺漏,實(shí)驗(yàn)結(jié)果應(yīng)經(jīng)教師檢查認(rèn)可后,方可拆除線路。5、 實(shí)驗(yàn)結(jié)束后,應(yīng)將儀器設(shè)備復(fù)歸原位,清理好導(dǎo)線、實(shí)驗(yàn)桌面,打掃完實(shí)驗(yàn)室衛(wèi)生后,方可離開。三、實(shí)驗(yàn)報(bào)告1、 實(shí)驗(yàn)報(bào)告是每次實(shí)驗(yàn)的全面總結(jié),編寫實(shí)驗(yàn)報(bào)告是實(shí)驗(yàn)中的一項(xiàng)基本技能,是每個(gè)工程技術(shù)人員的基本功之一,決不可馬虎從事。2、 實(shí)驗(yàn)報(bào)告必須每人一份,獨(dú)立完成,報(bào)告內(nèi)容按要求填寫,要求書寫認(rèn)真,圖表、

4、波形清楚,不得相互抄襲。3、 實(shí)驗(yàn)報(bào)告一般應(yīng)有下列內(nèi)容:實(shí)驗(yàn)課程、實(shí)驗(yàn)名稱、實(shí)驗(yàn)班級(jí)、姓名、同組者姓名、實(shí)驗(yàn)日期實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)內(nèi)容與實(shí)驗(yàn)步驟、實(shí)驗(yàn)儀器設(shè)備、實(shí)驗(yàn)結(jié)果、實(shí)驗(yàn)結(jié)果與結(jié)論4、 實(shí)驗(yàn)報(bào)告一律用實(shí)驗(yàn)報(bào)告紙書寫,要求字跡工整,條理清楚。目錄實(shí)驗(yàn)一 KEIL Cx51上機(jī)指南3實(shí)驗(yàn)二 模塊化編程4實(shí)驗(yàn)三 中斷實(shí)驗(yàn)6實(shí)驗(yàn)四 循環(huán)顯示實(shí)驗(yàn)7實(shí)驗(yàn)五 基于Protues的閃爍燈控制實(shí)驗(yàn)9實(shí)驗(yàn)六 流水燈控制實(shí)驗(yàn)12實(shí)驗(yàn)七 定時(shí)/計(jì)數(shù)器應(yīng)用實(shí)驗(yàn)17實(shí)驗(yàn)八 數(shù)字鐘實(shí)驗(yàn)21實(shí)驗(yàn)九 串行口通信實(shí)驗(yàn)24實(shí)驗(yàn)十 A/D轉(zhuǎn)換實(shí)驗(yàn)26實(shí)驗(yàn)十一 D/A轉(zhuǎn)換實(shí)驗(yàn)28實(shí)驗(yàn)一 KEIL Cx51上機(jī)指南實(shí)驗(yàn)?zāi)康模赫莆辗抡嫫魇?/p>

5、用;如何建立工程、模塊;編譯、全編譯;如何看信息窗口,看C編譯結(jié)果,了解匯編與C的關(guān)系。實(shí)驗(yàn)要求:通過簡(jiǎn)單程序的輸入,檢查和執(zhí)行。熟悉仿真器的使用,了解工程、模塊的建立,了解程序的編譯以及信息窗口的查看。實(shí)驗(yàn)內(nèi)容及步驟:一. 程序:程序功能,延時(shí)1s。程序如下: #include<reg51.h> /*包含51頭文件*/ /*=定義延時(shí)100ms程序=*/void delay(unsigned int t) unsigned int k=13000; for(;t!=0;-t) k=13000; while(k!=0)k-; main(void) delay(10); for(;)

6、; 二. 實(shí)驗(yàn)步驟: 建立項(xiàng)目以及文件名 在Keil窗口下建立一個(gè)新項(xiàng)目,并將模塊加入到新項(xiàng)目,在模塊下面建立一個(gè)文件。注意項(xiàng)目名后綴為x.obj,文件名后綴為x.c。 輸入程序 程序編譯,注意編譯和全編譯的差別。 查看信息窗口。 將C源程序所對(duì)應(yīng)的.HEX文件反匯編成匯編語(yǔ)言,了解C與匯編語(yǔ)言的關(guān)系。實(shí)驗(yàn)結(jié)果:在主程序for設(shè)立斷點(diǎn),通過程序運(yùn)行時(shí)間,查看程序所實(shí)現(xiàn)的功能。并修改寄存器的值了解程序功能的變化。實(shí)驗(yàn)二 模塊化編程實(shí)驗(yàn)?zāi)康模?掌握模塊化編程的基本要領(lǐng),幾種類型,模塊程序與主程序之間的關(guān)系。實(shí)驗(yàn)要求: 了解匯編至匯編模塊程序的調(diào)用;了解C與C模塊程序的調(diào)用;了解C與匯編模塊程序的調(diào)

7、用。實(shí)驗(yàn)內(nèi)容及步驟: 匯編與匯編程序 建立模塊及文件名 輸入源程序 #include<reg51.H> mian() P1=ox55; f(jj); 編譯程序 查看程序運(yùn)行結(jié)果 C與C模塊程序 建立模塊及文件名 輸入源程序 主程序:#include<reg51.h> test( ) test( ); f(jj); 模塊程序:test( ) P1=0x55; 編譯程序 查看程序運(yùn)行結(jié)果 C與匯編模塊程序 建立模塊及文件名 輸入源程序 主程序:#include<reg51.h> test( ) test( ); f(jj); 模塊程序:test1 SEGMENT

8、 CODEPubic testRST test1Test: P1=0x51 retEND 編譯程序 查看程序運(yùn)行結(jié)果實(shí)驗(yàn)三 中斷實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模菏煜x51單片機(jī)中斷以及初始化程序的編程方法和響應(yīng)過程。實(shí)驗(yàn)要求: 通過實(shí)驗(yàn)熟悉中斷處理的過程以及Cx51中斷過程。實(shí)驗(yàn)內(nèi)容及步驟: 建立模塊及文件名,在WAVE窗口下建立一個(gè)新項(xiàng)目,并將模塊加入到新項(xiàng)目,在模塊下面建立一個(gè)文件。注意項(xiàng)目名后綴為x.obj,文件名后綴為x.c。并在文件里面輸入相應(yīng)程序。 輸入源程序#include<reg51.h> /*包含51頭文件*/ main(void) P0=1;TMOD=0x22;TH0=56;T

9、L0=56;ET0=1;EA=1;TR0=1; for(;); void timer0(void) interrupt 1 using 2 /*用P0口點(diǎn)亮LED*/ static unsigned int t=5000; t-; if(t=0) t=5000; P0=P0<<1; if(P0=0)P0=1; ; 編譯并調(diào)試程序 運(yùn)行程序并查看運(yùn)行結(jié)果實(shí)驗(yàn)四 循環(huán)顯示實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模毫私鈩?dòng)態(tài)顯示接口電路的基本原理和程序設(shè)計(jì)方法。實(shí)驗(yàn)要求:通過實(shí)驗(yàn)了解七段碼的組成原則及動(dòng)態(tài)接口電路,掌握動(dòng)態(tài)掃描的基本原理及顯示程序的設(shè)計(jì)及調(diào)試。實(shí)驗(yàn)內(nèi)容及步驟: 實(shí)驗(yàn)面板上有4塊LED顯示器,其接口電路

10、如下圖所示,8155的PA口為七段碼口(字形口),PB口為數(shù)位代碼口。8155初始化在單片機(jī)啟動(dòng)時(shí)已完成。單片機(jī)通過七段碼輸出七段碼控制顯示不同的字符,通過數(shù)位代碼口輸出數(shù)位代碼控制4塊LED中的一位點(diǎn)亮(共陰極接地),每一時(shí)刻只能點(diǎn)亮一位,若要求多位輪流點(diǎn)亮,則采用逐位輪顯的“動(dòng)態(tài)掃描”法顯示。圖1 硬件連接圖 程序 #include<reg51.h> /*包含51頭文件*/ /*本程序?yàn)檠h(huán)點(diǎn)亮LED程序,用定時(shí)器0進(jìn)行顯示*/unsigned char led4=16,16,16,16,;/*定義顯緩*/unsigned char code DDM17=0x3f,0x06,0

11、x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, /*定義段代碼*/ 0x7c,0x39,0x5e,0x79,0x71,00; /*=定義延時(shí)100ms程序=*/void delay(unsigned int t) unsigned int k=13000; for(;t;t-) while(k)k-; /*=主程序=*/ main(void) P0=1;TMOD=0x22;TH0=56;TL0=56;ET0=1;EA=1;TR0=1;/*初始化*/ for(;) delay(10); led0=8; /*延時(shí)約1秒改變1次顯示狀態(tài)*/ delay(10

12、);led0=16;led1=8; delay(10);led1=16;led2=8; delay(10);led2=16;led3=8; delay(10);led3=16;led2=8; delay(10);led2=16;led1=8; delay(10);led1=16;led0=8; delay(10);led0=7;led1=8; delay(10);led0=6;led1=7;led2=8; delay(10);led0=5;led1=6;led2=7;led3=8; delay(10);led0=4;led1=5;led2=6;led3=16; delay(10);led0=3

13、;led1=5;led2=16; delay(10);led0=2;led1=16; delay(10);led0=1; delay(10);led0=16; void timer0(void) interrupt 1 using 2 /*用P0口點(diǎn)亮LED,P1口低四位為位選,200us中斷一次,顯示切換一位*/ static unsigned char t=1; t=(+t)&3; P0=0; P1=(P1&0xf0)|(1<<t); P0=DDMledt; 調(diào)試 將程序編譯成機(jī)器碼輸入。分別用單步、斷點(diǎn)對(duì)其進(jìn)行調(diào)試,最后用連續(xù)執(zhí)行EXEC執(zhí)行程序,檢查結(jié)果。實(shí)

14、驗(yàn)五: 基于Protues的閃爍燈控制實(shí)驗(yàn)一實(shí)驗(yàn)?zāi)康?. 學(xué)習(xí)P1口的使用方法;2. 學(xué)習(xí)延時(shí)子程序的編寫二實(shí)驗(yàn)內(nèi)容在P1.0端口上接一個(gè)發(fā)光二極管L1,使L1在不停地一亮一滅,一亮一滅的時(shí)間間隔為0.2秒。 三實(shí)驗(yàn)電路原理圖圖2 閃爍燈控制電路按圖中要求,在Protues中把圖繪制好,將晶振設(shè)置為12Mhz。四程序設(shè)計(jì)思路 延時(shí)程序的設(shè)計(jì)方法作為單片機(jī)的指令的執(zhí)行的時(shí)間是很短,數(shù)量大微秒級(jí),因此,我們要求的閃爍時(shí)間間隔為0.2秒,相對(duì)于微秒來說,相差太大,所以我們?cè)趫?zhí)行某一指令時(shí),插入延時(shí)程序,來達(dá)到我們的要求,但這樣的延時(shí)程序是如何設(shè)計(jì)呢?下面具體介紹其原理: 如圖1.1所示的石英晶體為1

15、2MHz,因此,1個(gè)機(jī)器周期為1s,MOV R6,#20; 2個(gè)機(jī)器周期 2D1: MOV R7,#248 ;2個(gè)機(jī)器周期 2 DJNZ R7,$ ; 2個(gè)機(jī)器周期 2DJNZ R6,D1 ; 2個(gè)機(jī)器周期 2 因此,上面的延時(shí)程序時(shí)間為2+(2+2×248+2)×20=10.002ms。 由以上可知,當(dāng)R610、R7248時(shí),延時(shí)5ms,R620、R7248時(shí),延時(shí)10ms,以此為基本的計(jì)時(shí)單位。如本實(shí)驗(yàn)要求0.2秒200ms,10ms×R5200ms,則R520,延時(shí)子程序如下: DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R

16、7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET 輸出控制程序設(shè)計(jì)如圖1.1所示,當(dāng)P1.0端口輸出高電平,即P1.01時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;當(dāng)P1.0端口輸出低電平,即P1.00時(shí),發(fā)光二極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。五程序流程圖 程序流程圖如圖3所示 圖3 程序流程圖六匯編源程序ORG 0000START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5

17、,#20 ;延時(shí)子程序,延時(shí)0.2秒D1: MOV R6,#20D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END七. C語(yǔ)言源程序 #include <AT89X51.H> sbit L1=P10; void delay02s(void) /延時(shí)0.2秒子程序 unsigned char i,j,k; for(i=20;i>0;i-) for(j=20;j>0;j-) for(k=248;k>0;k-); void main(void) while(1) L1=0; delay02s(); L1=1;

18、delay02s(); 八. 編譯:在編譯環(huán)境下將源程序編譯成目標(biāo)程序,生成SHAN.HEX九. 運(yùn)行:將SHAN.HEX導(dǎo)入AT89C51,點(diǎn)擊運(yùn)行按鈕運(yùn)行程序十. 實(shí)驗(yàn)報(bào)告:按實(shí)驗(yàn)報(bào)告要求完善實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)六 流水燈控制實(shí)驗(yàn)一. 實(shí)驗(yàn)?zāi)康?. 掌握PROTUES軟件的簡(jiǎn)單引用, 2. 掌握程序輸入、修改和調(diào)試方。二. 預(yù)習(xí)要求仔細(xì)閱讀實(shí)驗(yàn)指導(dǎo)書,復(fù)習(xí)教材中有關(guān)內(nèi)容,分析.運(yùn)行結(jié)果。三. 主要實(shí)驗(yàn)設(shè)備及元件計(jì)算機(jī)、PROTEUS軟件環(huán)境系統(tǒng)、WAVE或KEILE C軟件環(huán)境、四. 實(shí)驗(yàn)要求1. 能正確運(yùn)用PROTEUS軟件進(jìn)行簡(jiǎn)單圖樣的設(shè)計(jì)2. 了解延時(shí)程序、輸入-輸出程序、顯示程序的編寫思路

19、五. 實(shí)驗(yàn)步驟1. 繪制PROTEUS環(huán)境下圖樣。 圖4 流水燈仿真電路圖序號(hào)元件名稱(元件庫(kù)中)型號(hào)1七段顯示器7SEG-COM-AN-BLUE2+5V電源ALTERNATOR3單片機(jī)AT89C524按鍵BUTTON5無(wú)極性電容CAP6電解電筒CAP-ELEC7晶振CRYSTAL8發(fā)光二極管LED-RED9電阻RES10排電阻RESPACK-8圖中所含元器件有:2. 編制程序#include <REG52.H>unsigned char RunMode;/*System Fuction*void Delay1ms(unsigned int count)unsigned int i

20、,j;for(i=0;i<count;i+)for(j=0;j<120;j+);unsigned char code LEDDisplayCode = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,/07 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF;void Display(unsigned char Value)P3 = LEDDisplayCodeValue;void LEDFlash(unsigned char Count)unsigned char i;bit Flag;for(i = 0; i

21、<Count;i+)Flag = !Flag;if(Flag)Display(RunMode);elseDisplay(0x10);Delay1ms(100);Display(RunMode);unsigned char GetKey(void)unsigned char KeyTemp,CheckValue,Key = 0x00;CheckValue = P2&0x32;if(CheckValue=0x32)return 0x00;Delay1ms(10);KeyTemp = P2&0x32;if(KeyTemp=CheckValue)return 0x00;if(!(

22、CheckValue&0x02)Key|=0x01;/按位或if(!(CheckValue&0x10)Key|=0x02;if(!(CheckValue&0x20)Key|=0x04;return Key;unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;void InitialTimer2(void)T2CON = 0x00;/16 Bit Auto-Reload Mode TH2 = RCAP2H = 0xFC; /重裝值,初始值TL2 = RCAP2L = 0x18;ET2=1;/定時(shí)器 2 中斷允許TR2

23、= 1;/定時(shí)器 2 啟動(dòng)EA=1;unsigned int code SpeedCode=1,2,3,5,8,10,14,17,20,30,40,50,60,70,80,90,100,120, 140, 160,180,200,300, 400, 500, 600, 700, 800, 900,1000;/30void SetSpeed(unsigned char Speed)SystemSpeed =SpeedCodeSpeed;void LEDShow(unsigned int LEDStatus)P1 = (LEDStatus&0x00FF);P0 = (LEDStatus&g

24、t;>8)&0x00FF);void InitialCPU(void)RunMode = 0x00;TimerCount = 0;SystemSpeedIndex = 10;P1 = 0x00;P0 = 0x00;P2 = 0xFF;P3 = 0x00;Delay1ms(500);P1 = 0xFF;P0 = 0xFF;P2 = 0xFF;P3 = 0xFF;SetSpeed(SystemSpeedIndex);Display(RunMode);/Mode 0unsigned int LEDIndex = 0;bit LEDDirection = 1,LEDFlag = 1;vo

25、id Mode_0(void)LEDShow(0x0001<<LEDIndex);LEDIndex = (LEDIndex+1)%16;/Mode 1void Mode_1(void)LEDShow(0x8000>>LEDIndex);LEDIndex = (LEDIndex+1)%16;/Mode 2void Mode_2(void)if(LEDDirection)LEDShow(0x0001<<LEDIndex);elseLEDShow(0x8000>>LEDIndex);if(LEDIndex=15)LEDDirection = !LEDD

26、irection; LEDIndex = (LEDIndex+1)%16;/Mode 3void Mode_3(void)if(LEDDirection)LEDShow(0x0001<<LEDIndex);elseLEDShow(0x8000>>LEDIndex);if(LEDIndex=15)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%16;/Mode 4void Mode_4(void)if(LEDDirection)if(LEDFlag)LEDShow(0xFFFE<<LEDIndex);

27、 elseLEDShow(0x7FFF>>LEDIndex);elseif(LEDFlag)LEDShow(0x7FFF>>LEDIndex);elseLEDShow(0xFFFE<<LEDIndex);if(LEDIndex=15)LEDDirection = !LEDDirection;if(LEDDirection)LEDFlag = !LEDFlag; LEDIndex = (LEDIndex+1)%16;/Mode 5void Mode_5(void)if(LEDDirection)LEDShow(0x000F<<LEDIndex);e

28、lseLEDShow(0xF000>>LEDIndex);if(LEDIndex=15)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%16;/Mode 6void Mode_6(void)if(LEDDirection)LEDShow(0x000F<<LEDIndex);elseLEDShow(0xF000>>LEDIndex);if(LEDIndex=15)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%16;/Mode 7void M

29、ode_7(void)if(LEDDirection)LEDShow(0x003F<<LEDIndex);elseLEDShow(0xFC00>>LEDIndex);if(LEDIndex=9)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%10;/Mode 8void Mode_8(void)LEDShow(+LEDIndex);void TimerEventRun(void)if(RunMode=0x00)Mode_0();else if(RunMode =0x01)Mode_1();else if(Run

30、Mode =0x02)Mode_2();else if(RunMode =0x03)Mode_3();else if(RunMode =0x04)Mode_4();else if(RunMode =0x05)Mode_5();else if(RunMode =0x06)Mode_6();else if(RunMode =0x07)Mode_7();else if(RunMode =0x08)Mode_8();void Timer2(void) interrupt 5 using 3TF2 = 0; /中斷標(biāo)志清除( Timer2 必須軟件清標(biāo)志!)if(+TimerCount>=Syst

31、emSpeed)TimerCount = 0;TimerEventRun(); unsigned char MusicIndex = 0;void KeyDispose(unsigned char Key)if(Key&0x01)LEDDirection = 1;LEDIndex = 0;LEDFlag = 1;RunMode = (RunMode+1)%9;Display(RunMode);if(Key&0x02)if(SystemSpeedIndex>0)-SystemSpeedIndex;SetSpeed(SystemSpeedIndex);elseLEDFlash

32、(6);if(Key&0x04)if(SystemSpeedIndex<28)+SystemSpeedIndex;SetSpeed(SystemSpeedIndex);elseLEDFlash(6);/*main()unsigned char Key;InitialCPU();InitialTimer2();while(1)Key = GetKey();if(Key!=0x00)KeyDispose(Key);3. 運(yùn)行程序,查看結(jié)果六. 實(shí)驗(yàn)報(bào)告 按實(shí)驗(yàn)報(bào)告要求完善實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)七 定時(shí)/計(jì)數(shù)器應(yīng)用實(shí)驗(yàn)一. 實(shí)驗(yàn)?zāi)康?. 進(jìn)一步掌握PROTUES軟件的簡(jiǎn)單引用2. 掌握定時(shí)/計(jì)數(shù)

33、器的使用二實(shí)驗(yàn)內(nèi)容 用AT89C51的定時(shí)/計(jì)數(shù)器T0產(chǎn)生2秒鐘的定時(shí),每當(dāng)2秒定時(shí)到來時(shí),更換指示燈閃爍,每個(gè)指示閃爍的頻率為0.2秒,也就是說,開始L1指示燈以0.2秒的速率閃爍,當(dāng)2秒定時(shí)到來之后,L2開始以0.2秒的速率閃爍,如此循環(huán)下去。0.2秒的閃爍速率也由定時(shí)/計(jì)數(shù)器T0來完成。 三實(shí)驗(yàn)電路原理圖 圖5 定時(shí)器實(shí)驗(yàn)電路圖四程序設(shè)計(jì)思路1 由于采用中斷方式來完成,因此,對(duì)于中斷源必須它的中斷入口地址,對(duì)于定時(shí)計(jì)數(shù)器T0來說,中斷入口地址為000BH,因此在中斷入口地方加入長(zhǎng)跳轉(zhuǎn)指令來執(zhí)行中斷服務(wù)程序。書寫匯編源程序格式如下所示: ORG00H LJMPSTART ORG0BH

34、60; ;定時(shí)/計(jì)數(shù)器T0中斷入口地址 LJMP INT_T0 START: NOP  ;主程序開始 INT_T0: PUSH ACC  ;定時(shí)/計(jì)數(shù)器T0中斷服務(wù)程序 PUSH PSW POP PSW POP ACC RETI  ;中斷服務(wù)程序返回 END 2 定時(shí)2秒,采用16位定時(shí)50ms,共定時(shí)40次才可達(dá)到2秒,每50ms產(chǎn)生一中斷,定時(shí)的40次數(shù)在中斷服務(wù)程序中完成,同樣0.2秒的定時(shí),需要4次才可達(dá)到0.2秒。對(duì)于中斷程序,在主程序中要對(duì)中斷開中斷。 3 由于每次2秒定時(shí)到時(shí),L1L4要交替閃爍。采用ID來號(hào)來識(shí)別。當(dāng)ID0時(shí),L1在閃爍,當(dāng)ID1時(shí)

35、,L2在閃爍;當(dāng)ID2時(shí),L3在閃爍;當(dāng)ID3時(shí),L4在閃爍 五程序框圖 T0中斷服務(wù)程序流程圖 圖6 T0中斷服務(wù)程序程序流程圖 主程序流程圖圖圖 圖7 主程序流程圖6編寫程序 匯編語(yǔ)言源程序 TCOUNT2S EQU 30H TCNT02S EQU 31H ID EQU 32H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV TCOUNT2S,#00H MOV TCNT02S,#00H MOV ID,#00H MOV TMOD,#01H MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000)

36、 MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ INT_T0: MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 INC TCOUNT2S MOV A,TCOUNT2S CJNE A,#40,NEXT MOV TCOUNT2S,#00H INC ID MOV A,ID CJNE A,#04H,NEXT MOV ID,#00H NEXT: INC TCNT02S MOV A,TCNT02S CJNE A,#4,DONE MOV TCNT02S,#00H MOV A,ID CJNE A,#00

37、H,SID1 CPL P1.0 SJMP DONE SID1: CJNE A,#01H,SID2 CPL P1.1 SJMP DONE SID2: CJNE A,#02H,SID3 CPL P1.2 SJMP DONE SID3: CJNE A,#03H,SID4 CPL P1.3 SID4: SJMP DONE DONE: RETI END C語(yǔ)言源程序 #include <AT89X51.H> unsigned char tcount2s; unsigned char tcount02s; unsigned char ID; void main(void) TMOD=0x01;

38、 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; while(1); void t0(void) interrupt 1 using 0 tcount2s+; if(tcount2s=40) tcount2s=0; ID+; if(ID=4) ID=0; tcount02s+; if(tcount02s=4) tcount02s=0; switch(ID) case 0: P1_0=P1_0; break; case 1: P1_1=P1_1; break; case 2: P1_2=P1_2; break;

39、case 3: P1_3=P1_3; break; 七. 編譯 在編譯環(huán)境下將源程序編譯成目標(biāo)程序,生成T0.HEX八. 運(yùn)行:將T0.HEX導(dǎo)入AT89C51,點(diǎn)擊運(yùn)行按鈕運(yùn)行程序,并查看運(yùn)行結(jié)果。圖8 運(yùn)行結(jié)果圖九. 實(shí)驗(yàn)報(bào)告:按實(shí)驗(yàn)報(bào)告要求完善實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)八 數(shù)字鐘實(shí)驗(yàn)一. 實(shí)驗(yàn)?zāi)康?. 進(jìn)一步掌握PROTUES軟件的簡(jiǎn)單引用2. 掌握定時(shí)/計(jì)數(shù)器的使用3. 掌握LED的使用二實(shí)驗(yàn)內(nèi)容 用AT89C51的定時(shí)/計(jì)數(shù)器T0產(chǎn)生0.01秒鐘的定時(shí),每當(dāng)定時(shí)到來時(shí),相應(yīng)LED點(diǎn)亮,本實(shí)驗(yàn)要求有小時(shí)、分鐘、秒鐘、0.01秒的顯示。 三. 主要實(shí)驗(yàn)設(shè)備及元件計(jì)算機(jī)、PROTEUS軟件環(huán)境系統(tǒng)、WA

40、VE或KEILE C軟件環(huán)境四. 實(shí)驗(yàn)要求1. 能正確運(yùn)用PROTEUS軟件進(jìn)行簡(jiǎn)單圖樣的設(shè)計(jì)2. 掌握中斷程序的編寫和定時(shí)器的應(yīng)用,掌握顯示程序的編寫思路五. 實(shí)驗(yàn)步驟1. 繪制PROTEUS環(huán)境下圖樣。圖9 數(shù)字鐘電路圖2. 編制程序#include "reg51.h"#define uchar unsigned char#define uint unsigned intsbit p2_6=P26;sbit p2_7=P27;uchar time,i,j,jk,sel;uchar wei,fen,miao,shi;uchar code tb10=0x3f,0x06,0x

41、5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar idata dis_buff8=0;timer0() interrupt 1 using 1 TH0=(65535-1000)/256; TL0=(65535-1000)%256; P2=sel; sel+; time+; i+; j+; void main() time=0; i=0; j=0; wei=0; fen=0; miao=0; shi=0; sel=0x00; TMOD=0x01; TH0=(65535-1000)/256; TL0=(65535-1000)%256; EA=1; ET0=1; TR0=1; for(;) P0=tbdis_buffi; dis_buff1=jk%10; dis_buff2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論