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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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)書(shū)成都工業(yè)學(xué)院通信工程系微電子技術(shù)教研室二O一三年九月實(shí) 驗(yàn) 須 知實(shí)驗(yàn)是教學(xué)的重要實(shí)踐環(huán)節(jié),是理論聯(lián)系實(shí)際,培養(yǎng)實(shí)際操作能力和科學(xué)研究方法的重要手段,也是培養(yǎng)觀察問(wèn)題、分析問(wèn)題、解決問(wèn)題能力的重要方式。要求做到:實(shí)驗(yàn)前認(rèn)真準(zhǔn)備,實(shí)驗(yàn)中親自動(dòng)手、細(xì)心觀察、認(rèn)真思考,實(shí)驗(yàn)后認(rèn)真寫(xiě)好總結(jié)報(bào)告。一、實(shí)驗(yàn)守則1、 實(shí)驗(yàn)前認(rèn)真閱讀實(shí)驗(yàn)指導(dǎo)書(shū),搞清原理,明確實(shí)驗(yàn)任務(wù),有目的的進(jìn)行實(shí)驗(yàn),以提高實(shí)驗(yàn)課的質(zhì)量,鞏固和加深理論知識(shí)。2、 必須按實(shí)驗(yàn)指導(dǎo)書(shū)預(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é)作精神和愛(ài)護(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)過(guò)程中不得擅自離開(kāi),未經(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)立即斷開(kāi)電源,保持現(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)中所畫(huà)波形或測(cè)量數(shù)據(jù),應(yīng)當(dāng)場(chǎng)畫(huà)好或記錄好,并加以分析,如發(fā)現(xiàn)波形或數(shù)據(jù)有不合理之處,應(yīng)重作一遍或說(shuō)明其原因。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)生后,方可離開(kāi)。三、實(shí)驗(yàn)報(bào)告1、 實(shí)驗(yàn)報(bào)告是每次實(shí)驗(yàn)的全面總結(jié),編寫(xiě)實(shí)驗(yàn)報(bào)告是實(shí)驗(yàn)中的一項(xiàng)基本技能,是每個(gè)工程技術(shù)人員的基本功之一,決不可馬虎從事。2、 實(shí)驗(yàn)報(bào)告必須每人一份,獨(dú)立完成,報(bào)告內(nèi)容按要求填寫(xiě),要求書(shū)寫(xiě)認(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ū)寫(xiě),要求字跡工整,條理清楚。目錄實(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)要求:通過(guò)簡(jiǎn)單程序的輸入,檢查和執(zhí)行。熟悉仿真器的使用,了解工程、模塊的建立,了解程序的編譯以及信息窗口的查看。實(shí)驗(yàn)內(nèi)容及步驟:一. 程序:程序功能,延時(shí)1s。程序如下: #include /*包含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(;); 二. 實(shí)驗(yàn)步驟: 建立項(xiàng)目

6、以及文件名 在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),通過(guò)程序運(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)用。實(shí)驗(yàn)內(nèi)容及步驟: 匯編與匯

7、編程序 建立模塊及文件名 輸入源程序 #include mian() P1=ox55; f(jj); 編譯程序 查看程序運(yùn)行結(jié)果 C與C模塊程序 建立模塊及文件名 輸入源程序 主程序:#include test( ) test( ); f(jj); 模塊程序:test( ) P1=0x55; 編譯程序 查看程序運(yùn)行結(jié)果 C與匯編模塊程序 建立模塊及文件名 輸入源程序 主程序:#include test( ) test( ); f(jj); 模塊程序:test1 SEGMENT CODEPubic testRST test1Test: P1=0x51 retEND 編譯程序 查看程序運(yùn)行結(jié)果實(shí)驗(yàn)

8、三 中斷實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模菏煜x51單片機(jī)中斷以及初始化程序的編程方法和響應(yīng)過(guò)程。實(shí)驗(yàn)要求: 通過(guò)實(shí)驗(yàn)熟悉中斷處理的過(guò)程以及Cx51中斷過(guò)程。實(shí)驗(yàn)內(nèi)容及步驟: 建立模塊及文件名,在WAVE窗口下建立一個(gè)新項(xiàng)目,并將模塊加入到新項(xiàng)目,在模塊下面建立一個(gè)文件。注意項(xiàng)目名后綴為x.obj,文件名后綴為x.c。并在文件里面輸入相應(yīng)程序。 輸入源程序#include /*包含51頭文件*/ main(void) P0=1;TMOD=0x22;TH0=56;TL0=56;ET0=1;EA=1;TR0=1; for(;); void timer0(void) interrupt 1 using 2 /*用P0

9、口點(diǎn)亮LED*/ static unsigned int t=5000; t-; if(t=0) t=5000; P0=P01; 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)要求:通過(guò)實(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顯示器,其接口電路如下圖所示,8155的PA口為七段碼口(字形口),PB口為數(shù)位代碼口。8155初始化在單片機(jī)啟動(dòng)時(shí)已完成。單片機(jī)通過(guò)七段碼輸出七段碼控制顯示不同的字符,通過(guò)數(shù)位代碼口

10、輸出數(shù)位代碼控制4塊LED中的一位點(diǎn)亮(共陰極接地),每一時(shí)刻只能點(diǎn)亮一位,若要求多位輪流點(diǎn)亮,則采用逐位輪顯的“動(dòng)態(tài)掃描”法顯示。圖1 硬件連接圖 程序 #include /*包含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,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, /*定義段代碼*/ 0x7c,0x39,0x5e,0x79,0x71,00; /*=定義延時(shí)100ms程序

11、=*/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);led0=16;led1=8; delay(10);led1=16;led2=8; delay(10);led2=16;led3=8; delay(10);led3=16;led2=8; de

12、lay(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;led1=5;led2=16; delay(10);led0=2;led1=16; delay(10);led0=1; delay(10);led0=16; void timer0(void)

13、interrupt 1 using 2 /*用P0口點(diǎn)亮LED,P1口低四位為位選,200us中斷一次,顯示切換一位*/ static unsigned char t=1; t=(+t)&3; P0=0; P1=(P1&0xf0)|(1t); P0=DDMledt; 調(diào)試 將程序編譯成機(jī)器碼輸入。分別用單步、斷點(diǎn)對(duì)其進(jìn)行調(diào)試,最后用連續(xù)執(zhí)行EXEC執(zhí)行程序,檢查結(jié)果。實(shí)驗(yàn)五: 基于Protues的閃爍燈控制實(shí)驗(yàn)一實(shí)驗(yàn)?zāi)康?. 學(xué)習(xí)P1口的使用方法;2. 學(xué)習(xí)延時(shí)子程序的編寫(xiě)二實(shí)驗(yàn)內(nèi)容在P1.0端口上接一個(gè)發(fā)光二極管L1,使L1在不停地一亮一滅,一亮一滅的時(shí)間間隔為0.2秒。 三實(shí)驗(yàn)電路原理圖圖

14、2 閃爍燈控制電路按圖中要求,在Protues中把圖繪制好,將晶振設(shè)置為12Mhz。四程序設(shè)計(jì)思路 延時(shí)程序的設(shè)計(jì)方法作為單片機(jī)的指令的執(zhí)行的時(shí)間是很短,數(shù)量大微秒級(jí),因此,我們要求的閃爍時(shí)間間隔為0.2秒,相對(duì)于微秒來(lái)說(shuō),相差太大,所以我們?cè)趫?zhí)行某一指令時(shí),插入延時(shí)程序,來(lái)達(dá)到我們的要求,但這樣的延時(shí)程序是如何設(shè)計(jì)呢?下面具體介紹其原理: 如圖1.1所示的石英晶體為12MHz,因此,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í)

15、程序時(shí)間為2+(2+2248+2)20=10.002ms。 由以上可知,當(dāng)R610、R7248時(shí),延時(shí)5ms,R620、R7248時(shí),延時(shí)10ms,以此為基本的計(jì)時(shí)單位。如本實(shí)驗(yàn)要求0.2秒200ms,10msR5200ms,則R520,延時(shí)子程序如下: DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#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ā)光二

16、極管L1亮;我們可以使用SETBP1.0指令使P1.0端口輸出高電平,使用CLRP1.0指令使P1.0端口輸出低電平。五程序流程圖 程序流程圖如圖3所示 圖3 程序流程圖六匯編源程序ORG 0000START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#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 sbit L1=P10; void delay02s

17、(void) /延時(shí)0.2秒子程序 unsigned char i,j,k; for(i=20;i0;i-) for(j=20;j0;j-) for(k=248;k0;k-); void main(void) while(1) L1=0; delay02s(); L1=1; 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ù)

18、習(xí)要求仔細(xì)閱讀實(shí)驗(yàn)指導(dǎo)書(shū),復(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í)程序、輸入-輸出程序、顯示程序的編寫(xiě)思路五. 實(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

19、排電阻RESPACK-8圖中所含元器件有:2. 編制程序#include unsigned char RunMode;/*System Fuction*void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;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(u

20、nsigned char Value)P3 = LEDDisplayCodeValue;void LEDFlash(unsigned char Count)unsigned char i;bit Flag;for(i = 0; i8)&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;SetSpee

21、d(SystemSpeedIndex);Display(RunMode);/Mode 0unsigned int LEDIndex = 0;bit LEDDirection = 1,LEDFlag = 1;void Mode_0(void)LEDShow(0x0001LEDIndex);LEDIndex = (LEDIndex+1)%16;/Mode 2void Mode_2(void)if(LEDDirection)LEDShow(0x0001LEDIndex);if(LEDIndex=15)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex

22、+1)%16;/Mode 3void Mode_3(void)if(LEDDirection)LEDShow(0x0001LEDIndex);if(LEDIndex=15)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%16;/Mode 4void Mode_4(void)if(LEDDirection)if(LEDFlag)LEDShow(0xFFFELEDIndex);elseif(LEDFlag)LEDShow(0x7FFFLEDIndex);elseLEDShow(0xFFFELEDIndex);if(LEDIndex=15)

23、LEDDirection = !LEDDirection;if(LEDDirection)LEDFlag = !LEDFlag; LEDIndex = (LEDIndex+1)%16;/Mode 5void Mode_5(void)if(LEDDirection)LEDShow(0x000FLEDIndex);if(LEDIndex=15)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%16;/Mode 6void Mode_6(void)if(LEDDirection)LEDShow(0x000FLEDIndex);if(LEDIn

24、dex=15)LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%16;/Mode 7void Mode_7(void)if(LEDDirection)LEDShow(0x003FLEDIndex);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(R

25、unMode =0x01)Mode_1();else if(RunMode =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

26、 必須軟件清標(biāo)志!)if(+TimerCount=SystemSpeed)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(SystemSpeedIndex0)-SystemSpeedIndex;SetSpeed(SystemSpeedIn

27、dex);elseLEDFlash(6);if(Key&0x04)if(SystemSpeedIndex28)+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

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

29、ORG0BH ;定時(shí)/計(jì)數(shù)器T0中斷入口地址 LJMP INT_T0 START: NOP ;主程序開(kāi)始 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ì)中斷開(kāi)中斷。 3 由于每次2秒定時(shí)到時(shí),L1L4要交替閃爍。采用ID來(lái)號(hào)來(lái)識(shí)別。當(dāng)ID0時(shí),L1在閃爍,當(dāng)ID1時(shí),L2在閃爍;當(dāng)ID2時(shí),L3

30、在閃爍;當(dāng)ID3時(shí),L4在閃爍 五程序框圖 T0中斷服務(wù)程序流程圖 圖6 T0中斷服務(wù)程序程序流程圖 主程序流程圖圖圖 圖7 主程序流程圖6編寫(xiě)程序 匯編語(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) MOD 256 SETB T

31、R0 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,#00H,SID1 CPL P1.0

32、 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 unsigned char tcount2s; unsigned char tcount02s; unsigned char ID; void main(void) TMOD=0x01; TH0=(65536-50000)/256; TL0=(6553

33、6-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; case 3: P1_3=P1_3; break; 七. 編譯 在

34、編譯環(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í)到來(lái)時(shí),相應(yīng)LED點(diǎn)亮,本實(shí)驗(yàn)要求有小時(shí)、分鐘、秒鐘、0.01秒的顯示。 三. 主要實(shí)驗(yàn)設(shè)備及元件計(jì)算機(jī)、PROTEUS軟件環(huán)境系統(tǒng)、WAVE或KEILE C軟件環(huán)境四. 實(shí)驗(yàn)要求1. 能正確運(yùn)用PROT

35、EUS軟件進(jìn)行簡(jiǎn)單圖樣的設(shè)計(jì)2. 掌握中斷程序的編寫(xiě)和定時(shí)器的應(yīng)用,掌握顯示程序的編寫(xiě)思路五. 實(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,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar i

36、data 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=jk/10; dis_buff3=miao%10; dis_buff4=miao/10; dis_buff5=fen%10; dis_buff6=fen/10; dis_buff7=shi%10; dis_buff0=shi/10; if(time=8)time

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論