單片機(jī)驅(qū)動(dòng)一個(gè)閃爍_第1頁(yè)
單片機(jī)驅(qū)動(dòng)一個(gè)閃爍_第2頁(yè)
單片機(jī)驅(qū)動(dòng)一個(gè)閃爍_第3頁(yè)
單片機(jī)驅(qū)動(dòng)一個(gè)閃爍_第4頁(yè)
單片機(jī)驅(qū)動(dòng)一個(gè)閃爍_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)驅(qū)動(dòng)一個(gè)閃爍第一頁(yè),共二十四頁(yè),2022年,8月28日3.1單片機(jī)驅(qū)動(dòng)一個(gè)LED閃爍

單片機(jī)的I/O口可以直接驅(qū)動(dòng)一些器件,通過單片機(jī)運(yùn)行程序,達(dá)到單片機(jī)對(duì)一些器件的控制。LED是一種常用的顯示器件,單片機(jī)的I/O可以直接驅(qū)動(dòng)。本節(jié)任務(wù)是利用單片機(jī)的一個(gè)I/O口驅(qū)動(dòng)LED電路,設(shè)計(jì)程序使其閃爍。在了實(shí)現(xiàn)P0.0口驅(qū)動(dòng)負(fù)載特點(diǎn)基礎(chǔ)上掌握程序設(shè)計(jì)一般方法,同時(shí)還要掌握單片機(jī)系統(tǒng)仿真、程序下載的一般過程。

第二頁(yè),共二十四頁(yè),2022年,8月28日電路原理

STC-89C51單片機(jī)的P0口采用為OD門輸出,高電平輸出時(shí)不存在拉出電流,但P0口輸出低電平時(shí),P0口灌入電流達(dá)到20毫安,因此P0只具有較強(qiáng)的低電平驅(qū)動(dòng)能力。如果利用P0驅(qū)動(dòng)門電路以及如LED這樣的小功率負(fù)載,必須加上拉電阻,否則,即使編程讓P0輸出高電平,但是實(shí)際只能輸出低電平。

第三頁(yè),共二十四頁(yè),2022年,8月28日?qǐng)D3-1-1是單片機(jī)驅(qū)動(dòng)LED電路,圖中P0.0端口與電源之間接有一個(gè)電阻R2,當(dāng)P0.0口輸出低電平時(shí),從電源正極出發(fā)經(jīng)過電阻的電流通過P0.0口進(jìn)入單片機(jī),LED的正極為低電平,此時(shí)LED不亮,當(dāng)此時(shí)P0口輸出高電平時(shí),經(jīng)過電阻的電流無法進(jìn)入P0.0端口,只能通過LED,此時(shí)LED亮。這種LED驅(qū)動(dòng)方式為高電平有效方式。P0.7驅(qū)動(dòng)LED采用的是低電平有效方式,直接了利用了P0口的低電平驅(qū)動(dòng)能力。當(dāng)P0.7端口輸出高電平時(shí),LED不亮,只有當(dāng)P0.7端口輸出低電平時(shí),LED才亮。第四頁(yè),共二十四頁(yè),2022年,8月28日?qǐng)D3-1-1單片機(jī)驅(qū)動(dòng)LED電路原理第五頁(yè),共二十四頁(yè),2022年,8月28日程序設(shè)計(jì)與編譯一、程序設(shè)計(jì)單片機(jī)內(nèi)部的P0~P3寄存器都可以進(jìn)行位操作,P0~P3對(duì)應(yīng)的端口即單片機(jī)的32個(gè)I/O口會(huì)輸出P0~P3的結(jié)果。本例實(shí)現(xiàn)LED閃爍,只要讓P0.0電平周期性變化即可。程序流程見圖3-1-2所示。圖3-1-2LED閃爍程序流程第六頁(yè),共二十四頁(yè),2022年,8月28日在Kiel程序設(shè)計(jì)軟件中,P0.0口定義為P0^0,因此在利用C語(yǔ)言程序設(shè)計(jì)時(shí),要想讓P0.0為低電平,只要編寫P0^0=0一條語(yǔ)句即可。為了是程序簡(jiǎn)單明了,也可以利用sbitLED1=P0^0語(yǔ)句,讓LED1代替P0^0。本案例的程序清單如下:第七頁(yè),共二十四頁(yè),2022年,8月28日/*******************************************************************/#include<reg51.h>//包含頭文件sbitLED1=P0^0;//LED接P0.0。在kellC51軟件中, //定義P0.0為sbitsbitLED2=P0^7;voiddelay(unsignedcharx)//延時(shí)函數(shù){ unsignedchari,j; for(i=0;i<x;i++) for(j=0;j<200;j++);}第八頁(yè),共二十四頁(yè),2022年,8月28日voidmain(void)//主函數(shù){ while(1)//程序死循環(huán) {LED1=0;//P0.0輸出低電平,LED1滅 delay(100);//調(diào)用延時(shí)函數(shù),延時(shí)一段時(shí)間,約0.3秒, //不精確 LED1=1;//P0.0輸出高電平,LED1亮delay(100);}}/************************************************************/第九頁(yè),共二十四頁(yè),2022年,8月28日二、程序說明(1)因?yàn)槭褂玫膯纹瑱C(jī)芯片為STC89C51,因此程序包含reg51.h文件,reg51.h文件定義了51單片機(jī)所有特殊功能寄存器的名稱定義和相對(duì)應(yīng)的地址值;(2)單片機(jī)程序順序執(zhí)行程序,先執(zhí)行主函數(shù),在主函數(shù)內(nèi)可以調(diào)用分函數(shù),分函數(shù)可以調(diào)用分函數(shù),但分函數(shù)不能調(diào)用主函數(shù),程序執(zhí)行一條命令再執(zhí)行下一條,執(zhí)行完畢后返回到主函數(shù)入口進(jìn)行下次循環(huán)。延時(shí)的過程是單片機(jī)執(zhí)行了一個(gè)delay(100)函數(shù)而浪費(fèi)一段時(shí)間。在執(zhí)行delay()的過程中,如果沒有中斷單片機(jī)只能忙這一件事,第十頁(yè),共二十四頁(yè),2022年,8月28日

單片機(jī)在執(zhí)行此函數(shù)相關(guān)指令時(shí)浪費(fèi)和占用的時(shí)間就是執(zhí)行延時(shí)函數(shù)獲得的時(shí)間,但利用delay()不能得到精確的延時(shí)。延時(shí)函數(shù)還可以利用帶有形參的函數(shù)實(shí)現(xiàn),例如:/******************************/voiddelay(unsignedintx){ while(x) x--;}/******************************/第十一頁(yè),共二十四頁(yè),2022年,8月28日

(3)利用位定義命令讓LED等價(jià)于P0.0,程序執(zhí)行LED1=1后,P0.0對(duì)以的單片機(jī)內(nèi)部位寄存器就設(shè)置為高電平,P0.0端口輸出高電平,單片機(jī)的所有I/O口都可位位定義,也可以字節(jié)定義。(4)單片機(jī)C語(yǔ)言程序設(shè)計(jì)需要的C語(yǔ)言關(guān)鍵字不多,并且在keilC中用到的關(guān)鍵字是獨(dú)有的,因此對(duì)于沒有學(xué)習(xí)過C語(yǔ)言的人學(xué)習(xí)單片機(jī)C語(yǔ)言程序設(shè)計(jì)困難并不是很大,重點(diǎn)掌握單片機(jī)C語(yǔ)言書寫格式和怎樣用C語(yǔ)言控制單片機(jī)的硬件資源皆可;另外,在編程時(shí),還要有清晰的邏輯思維頭腦和認(rèn)真實(shí)踐,由淺逐步深入學(xué)習(xí),當(dāng)你堅(jiān)持到最后時(shí),單片機(jī)C語(yǔ)言程序設(shè)計(jì)會(huì)讓你感覺很簡(jiǎn)單。第十二頁(yè),共二十四頁(yè),2022年,8月28日

(5)每個(gè)人在利用C語(yǔ)言編寫單片機(jī)程序時(shí)都有自己的風(fēng)格。一般情況下,函數(shù)的字符左行距為0,其下每條語(yǔ)句前留一個(gè)“tab”鍵空。算數(shù)邏輯符號(hào)的左右各留一個(gè)空格,關(guān)鍵語(yǔ)句要有中文或英文說明,每一個(gè)函數(shù)有時(shí)也可以用“/**.....**/”上下隔開,這樣有助于提高程序的層次感和可讀性。第十三頁(yè),共二十四頁(yè),2022年,8月28日三、程序編譯程序設(shè)計(jì)采用第二章介紹的Kiel軟件。針對(duì)本節(jié)例子,在電腦上運(yùn)行Kiel,首先新建一個(gè)項(xiàng)目,項(xiàng)目使用的單片機(jī)為AT89C51,這個(gè)項(xiàng)目暫且命名為L(zhǎng)ED;然后新建一個(gè)文件,并保存為”LED.c”文件,并添加到工程項(xiàng)目中。由于本案例程序比較簡(jiǎn)單,可以直接在Keil軟件界面中編寫,也可以先把程序清單形成一個(gè)TXT文件,然后剪切到Keil的程序編輯界面中。當(dāng)程序設(shè)計(jì)完成后,通過Kiel編譯并創(chuàng)建LED.HEX目標(biāo)文件,見圖3-1-3所示。第十四頁(yè),共二十四頁(yè),2022年,8月28日

在Keil的應(yīng)用過程中,由于編譯過程成產(chǎn)生很多文件,因此新建一個(gè)項(xiàng)目需在一個(gè)目錄中建立。Keil軟件創(chuàng)建的HEX文件可以下載到單片機(jī)的程序存儲(chǔ)器中運(yùn)行,也可以被仿真軟件調(diào)用。第十五頁(yè),共二十四頁(yè),2022年,8月28日?qǐng)D3-1-3Keil軟件目標(biāo)文件創(chuàng)建第十六頁(yè),共二十四頁(yè),2022年,8月28日

匯編語(yǔ)言嵌入

在使用C語(yǔ)言所開發(fā)的項(xiàng)目中,有時(shí)需要寫一些匯編語(yǔ)言的程序,以提高程序的精煉和精確度。如本例中的delay()函數(shù)延時(shí)不夠精確,可以使用匯編語(yǔ)言實(shí)現(xiàn)時(shí)間延遲,提高延時(shí)的精確程度。在一個(gè)項(xiàng)目中要加入?yún)R編語(yǔ)言程序時(shí),有兩種方法,第一種方法是使用Inlineassembly,也就是在程序中直接加入?yún)R編語(yǔ)言碼,如以下的程序所示:第十七頁(yè),共二十四頁(yè),2022年,8月28日/************延時(shí)函數(shù)************/voiddelay100us(){ #pragraendasm more:movR3,#48 djnzR3,$ djnzR7,more #pragmaendasm}/*********************************/第十八頁(yè),共二十四頁(yè),2022年,8月28日在上面的程序中,直接加入?yún)R編語(yǔ)言碼時(shí)是使用編譯指令#pragmaasm和#pragmaendasm。編譯指令#pragmaasm和#pragmaendasm之間則加入您需要的匯編語(yǔ)言代碼。這一段程序主要是實(shí)現(xiàn)100微秒時(shí)間延遲,使用匯編語(yǔ)言我們可以通過如表3-1-1所示的計(jì)算方法估計(jì)出延遲時(shí)間大約是0.1ms。最后還有一條返回指令ret,所以總共需要100條指令,如果外接12MHz的石英晶體時(shí),每執(zhí)行一條指令需要1μs,所以執(zhí)行這一個(gè)子程序總共需要100μs,也就是0.1μs.但是這只是一個(gè)估計(jì)值,因?yàn)閳?zhí)行子程序時(shí)如果有中斷發(fā)生,就會(huì)造成執(zhí)行時(shí)間增加。第十九頁(yè),共二十四頁(yè),2022年,8月28日?qǐng)?zhí)行的指令執(zhí)行次數(shù)指令執(zhí)行周期計(jì)算結(jié)果More:movR3,#48111djnzR3,$1×48296djnzR7,more122表3-1-1計(jì)算方法第二十頁(yè),共二十四頁(yè),2022年,8月28日

第二種做法是將匯編語(yǔ)言的程序?qū)懺谝粋€(gè)文件中,然后再?gòu)闹鞒绦蛑姓{(diào)用這些使用匯編語(yǔ)言寫的子程序。C語(yǔ)言主程序調(diào)用匯編語(yǔ)言子程序時(shí),必須注意到,累加器(accumulator)和寄存器給的內(nèi)容都必須自行維護(hù),如果維護(hù)不當(dāng),可能會(huì)造成不可預(yù)期的結(jié)果。一般而言,可以在進(jìn)入?yún)R編語(yǔ)言程序之后,馬上將累加器A和寄存器R0~R7推入堆棧當(dāng)中,等到要離開匯編語(yǔ)言程序之前再使用POP指令,將累加器A和寄存器R0~R7從堆棧中取出,但是要特別注意,堆棧推入與取出的順序是相反的,也就是先進(jìn)者后出,后進(jìn)者先出。第二十一頁(yè),共二十四頁(yè),2022年,8月28日軟件仿真

在安裝過Proteus軟件的PC上運(yùn)行ISIS文件,即可進(jìn)入Proteus電路原理仿真界面,利用該軟件仿真時(shí)操作比較簡(jiǎn)單,其過程是首先構(gòu)造電路,然后雙擊單片機(jī)加載HEX文件,最后執(zhí)行仿真。Proteus界面以及本案例的仿真電路見圖所示。電路中單片機(jī)采用AT89C51,單片機(jī)默認(rèn)為最小系統(tǒng),不需要再外接晶體振蕩電路和復(fù)位電路。仿真過程中,單片機(jī)加載程序模擬運(yùn)行實(shí)際狀態(tài)。第二十二頁(yè),共二十四頁(yè),2022年,8月28日

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論