溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

第一個(gè)單片機(jī)程序(C言語(yǔ)編寫)

發(fā)布時(shí)間:2020-07-16 18:13:36 來(lái)源:網(wǎng)絡(luò) 閱讀:996 作者:yuw2017 欄目:網(wǎng)絡(luò)安全

忙活了半天,預(yù)備任務(wù)做了那么多,終于要編寫我們的程序代碼了。假如學(xué)過(guò) C 言語(yǔ)的話,你應(yīng)當(dāng)很輕松的跟著我的編程本人寫出來(lái),假如沒學(xué)過(guò) C 言語(yǔ)也沒緊要,你先照著我的抄,我會(huì)在適宜的地位寫出來(lái)對(duì) C 言語(yǔ)語(yǔ)法的說(shuō)明,如許抄幾回后再看看說(shuō)明,就應(yīng)當(dāng)很明確了,抄的時(shí)分必定要仔細(xì),特別標(biāo)點(diǎn)符號(hào)弗成以搞錯(cuò)。
第一個(gè)單片機(jī)程序:

			#include <reg52.h> //包括特別功用存放器界說(shuō)的頭文件 sbit LED = P0^0; //位地址聲明,留意:sbit 必需小寫、P 大寫! void main(){ //任何一個(gè) C 程序都必需有且僅有一個(gè) main 函數(shù) LED = 0; //分號(hào)表現(xiàn)一條語(yǔ)句完畢 }


先從程序語(yǔ)法下去剖析一下:

  • main 是主函數(shù)的函數(shù)名字,每個(gè) C 程序都必需有且僅有一個(gè) main 函數(shù)。

  • void 是函數(shù)的前往值類型,本程序沒有前往值,用 void 表現(xiàn)。

  • {}在這里是函數(shù)開端和完畢的標(biāo)記,弗成省略。

  • 每條 C 言語(yǔ)語(yǔ)句以;完畢的。


邏輯下去看,程序如許寫就可以了,然則在實(shí)踐單片機(jī)使用中,存在一個(gè)成績(jī)。比方我們的程序空間可以包容 100 行代碼,然則我們實(shí)踐上的程序只用了 50 行代碼,當(dāng)運(yùn)轉(zhuǎn)完了50 行,再持續(xù)運(yùn)轉(zhuǎn)時(shí),第 51 行的程序不是我們想運(yùn)轉(zhuǎn)的程序,而是不肯定的未知內(nèi)容,一旦履行下去程序就會(huì)失足從而能夠招致單片機(jī)主動(dòng)復(fù)位,所以我們平日在程序中參加一個(gè)死輪回,讓程序逗留在我們?cè)竿倪@個(gè)形態(tài)下,不要亂運(yùn)轉(zhuǎn),有以下兩種寫法可以參考:
參考程序一:

			#include <reg52.h> sbit LED = P0^0; void main(){ while(1){ LED = 0; } }


參考程序二:

			#include <reg52.h> sbit LED = P0^0; void main(){ LED = 0; while(1); }


程序一的功用是程序在重復(fù)不時(shí)的有限次履行 LED = 0;這條語(yǔ)句,而程序二的功用是履行一次,然后程序直接逗留下來(lái)等候,絕對(duì)程序一來(lái)說(shuō)程序二愈加簡(jiǎn)練一些。針關(guān)于圖 2-6,我們這個(gè)程序可以把小燈點(diǎn)亮,然則這個(gè)程序卻點(diǎn)不亮我們板子上的小燈,這是為什么呢?
這里人人就要培育一個(gè)認(rèn)識(shí)了,我們做單片機(jī)編程,實(shí)踐上算是硬件底層驅(qū)動(dòng)程序開辟,這種程序的開辟,是離不開電路圖的,必需依據(jù)我們的電路圖來(lái)停止程序的編寫。假如我們?cè)O(shè)計(jì)電路板的電路圖和圖 2-6 一樣的話,程序可以勝利點(diǎn)亮小燈,然則假如紛歧樣,就能夠點(diǎn)不亮。
我們的開辟板上,還有一個(gè) 74HC138 作為 8 個(gè) LED 小燈的總開關(guān),而 P0.0 僅僅是個(gè)離開關(guān)。好像我們家里老是有一個(gè)供電總閘,然后每一個(gè)電燈又有一個(gè)專門的開關(guān),我們方才的程序僅僅翻開了誰(shuí)人電燈的開關(guān),然則沒有翻開誰(shuí)人總電閘,所以程序需求加上這局部代碼。
由于這節(jié)課要引見的內(nèi)容比擬多,所以我們把 74HC138 的道理以及為什么要加額定的代碼鄙人節(jié)課一致引見,這節(jié)課我們直接加上這局部代碼,人人曉得有這么一回事就可以了。

			#include <reg52.h> //包括特別功用存放器界說(shuō)的頭文件 sbit LED = P0^0; //位地址聲明,留意:sbit 必需小寫、P 大寫! sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void main(){ ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; LED = 0; //點(diǎn)亮小燈 while (1); //程序中止在這里 }


寫了這么多煩瑣的語(yǔ)句,剛開端人人能夠認(rèn)為很費(fèi)事,為什么有的書上程序很復(fù)雜就可以點(diǎn)亮小燈,我們這里卻這么費(fèi)事呢。人人要理解一點(diǎn),就是我們做這個(gè)進(jìn)修板,固然僅僅供給給人人復(fù)雜進(jìn)修運(yùn)用,然則我們也得依照實(shí)踐產(chǎn)物的開辟形式去設(shè)計(jì),所以綜合思索要素許多,人人學(xué)到后邊就會(huì)明確它的設(shè)計(jì)價(jià)值了,這里人人只需跟著我們?nèi)プ鼍涂梢粤恕?/span>
程序編好了,我們要對(duì)我們的程序停止編譯,生成我們需求的可以下載到單片機(jī)里的文件,在編譯之前,我們先要勾選一個(gè)選項(xiàng),Project-->Options for Target Target1...,或許直接點(diǎn)圖 2-17 中紅框內(nèi)的快捷圖標(biāo):

第一個(gè)單片機(jī)程序(C言語(yǔ)編寫)
圖 2-17  工程選項(xiàng)圖標(biāo)


在彈出的對(duì)話框中,點(diǎn)擊 Output 選項(xiàng)頁(yè),勾選個(gè)中的“Create HEX File”復(fù)選框,然后點(diǎn) OK,如圖 2-18 所示。

第一個(gè)單片機(jī)程序(C言語(yǔ)編寫)
圖 2-18  創(chuàng)立 HEX 文件


設(shè)置好今后呢,點(diǎn)擊“Project-->rebuild all target files”,或許鼠標(biāo)點(diǎn)擊圖 2-19 中紅框內(nèi)的快捷圖標(biāo),就可以對(duì)程序停止編譯了。

第一個(gè)單片機(jī)程序(C言語(yǔ)編寫)
圖2-19  編譯程序


編譯完成后,在我們的 Keil 下方的 Output 窗口會(huì)呈現(xiàn)響應(yīng)的提醒,人人留意看圖 2-20,這個(gè)窗口通知我們編譯完成后的狀況,data=9.0,指的是我們的程序運(yùn)用了單片機(jī)外部的 256字節(jié) RAM 資本中的 9 個(gè)字節(jié),code=29 的意思是運(yùn)用了 8K 代碼 Flash 資本中的 29 個(gè)字節(jié)。
當(dāng)提醒“0 Error(s), 0 warning(s)”表現(xiàn)我們的程序沒有毛病和正告,就會(huì)呈現(xiàn)“creating hex file from “LED”...,意思是從以后工程生成了一個(gè) HEX 文件,我們要下載到單片機(jī)上的就是這個(gè)HEX 文件。假如呈現(xiàn)有毛病和正告提醒的話,就是 Error 和 warning 不是 0,那么我們就要對(duì)程序停止反省,找出成績(jī),處理好了再停止編譯發(fā)生 HEX 才可以。

第一個(gè)單片機(jī)程序(C言語(yǔ)編寫)
圖2-20  編譯輸入信息


到此為止,程序就編譯好了,下邊我們就要把編譯好的程序文件下載到單片機(jī)里了。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI