九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
單片機(jī)入門培訓(xùn)專題(四) – 嘗試點亮你的LED ② – 著名的PCB哥

微信公眾平臺獲取碼:'單片機(jī)入門4',關(guān)注著名的PCB哥微信公眾平臺,回復(fù)上述獲取碼即可快速獲取本文

上期單片機(jī)入門專題我們講述了點亮LED所需要知曉的基礎(chǔ)知識,本期專題我們要講述如何通過程序控制LED的點亮與熄滅,貌似很簡單的一件事情,但對于單片機(jī)入門來說,確實是必不可少的一步。下面我們開始我們今天的程序編寫。


4.1程序代碼編寫


  這是我們第一個實驗程序,因此大家還是得耐心點,先來了解一下一些51單片機(jī)特有的程序語法以及Keil軟件的基本操作步驟。


4.1.1 特殊功能寄存器和位定義

   我們主要是用C語言來對單片機(jī)編程,有的單片機(jī)也有那么幾條很特殊的獨有的編程語句,51單片機(jī)就有,先介紹兩條。

  第一條語句是: sfr P0 = 0x80;

  SFR這個關(guān)鍵字,是51單片機(jī)特有的,他的作用是定義一個單片機(jī)特殊功能寄存器(special function register)。51單片機(jī)內(nèi)部有很多個小模塊,每個模塊有8個開關(guān)。每個模塊呢,都有一個房間和唯一的房間號。那么P0就是一個功能模塊,就住在了0x80這個房間里,我們就是通過設(shè)置P0的內(nèi)部這個模塊的8個開關(guān),來讓單片機(jī)的P0這8個IO口輸出高電平或者低電平的。

  第二條語句是: sbit LED = P0^0;

  這個sbit,就是對剛才所說的SFR里邊的8個開關(guān)其中的一個進(jìn)行定義。經(jīng)過上邊第二條語句后,以后只要在程序里寫LED,就代表了P0.0口(“^”這個符號在數(shù)字鍵6上邊),注意這個P必須大寫,也就是說我們給P0.0又取了一個更形象的名字叫做LED。

  了解了這兩個語句后,我們來大概看一下單片機(jī)的特殊功能寄存器。注意,每個型號的單片機(jī)都會配有生產(chǎn)廠商所寫的數(shù)據(jù)手冊(Datasheet),所以我們來看一下STC89C52RC的數(shù)據(jù)手冊,從21頁到24頁,全部是對特殊功能寄存器的介紹以及地址映射列表。我們在使用這個寄存器之前,必須對這個寄存器的地址進(jìn)行說明。是不是花花綠綠的太多了,記不住啊,這個沒關(guān)系的,不需要你記住,了解一下,后邊大部分我會慢慢給大家解釋,少部分需要用到的時候,自己過來查手冊就可以了,做技術(shù)不是為了應(yīng)付考試,你可以隨時翻閱手冊查找你需要的資料

  繼續(xù)往下看,在22頁最下邊有一個表格



表4-1 IO口特殊功能寄存器

  我們來看一下表4-1,其中P4口是擴(kuò)展出來的功能,我們暫時先不看,只看前邊的P0,P1,P2,P3這4個,每個Px口本身又有8個控制端口。大家可以結(jié)合上期專題中的單片機(jī)封裝圖來看,那么這樣就確定了我們的單片機(jī)一共有32個IO口(IO,Input和Output,分別是輸入和輸出)。

  其中P0口所在的地址是0x80,一共有從7到0這8個IO口控制位,后邊有個Reset Value(復(fù)位值),這個很重要,我們看寄存器必看的一個參數(shù),8個控制位復(fù)位值全部都是1。這里也就告訴了我們,這個單片機(jī)上電復(fù)位的時候,所有的引腳的值默認(rèn)是高電平,我們在設(shè)計電路的時候也要充分的考慮這個問題。

  那么上邊那兩條語句,我們寫sfr的時候,必須要根據(jù)手冊里的這個地址(add)去寫,sbit的時候,就可以直接將一個字節(jié)其中某一位取出來。我們編程的時候,也有現(xiàn)成的寫好寄存器地址的頭文件,我們直接包含該頭文件就可以了,不需要逐一去寫了。


4.1.2 新建一個工程

  對于單片機(jī)程序來說,每個功能程序,都必須要有一個配套的工程文件(Project),即使是點亮LED這樣簡單的功能程序也不例外,因此我們首先要新建一個工程,打開我們的Keil軟件后,點擊:Project–>New uVision Project…然后會出現(xiàn)一個新建工程的界面,如圖4-2所示。



圖4-2 新建一個工程

  我們首先改一下路徑,改到了我們預(yù)先建立好的LED文件夾內(nèi),這樣方便我們今后管理我們的程序,不同的功能程序放到不同的文件夾下,并且給這個工程起一個名字叫做LED,軟件會自動加擴(kuò)展名為.uvproj。

  我們直接點保存就可以了,工程會自動保存成LED.uvproj文件,下次你要打開LED這個工程,可以直接找到文件夾,雙擊這個.uvproj文件就可以直接打開了。




圖4-3 保存工程

  保存之后會彈出一個對話框,這個對話框讓我們選擇單片機(jī)型號。因為Keil這軟件是外國人開發(fā)的,所以我們國內(nèi)的STC89C52RC沒有上榜,但是只要選擇同類型號就可一樣編程和應(yīng)用,因為51內(nèi)核是Intel公司創(chuàng)始的,所以這里我們直接選擇Intel公司名下的80/87C52來代替,這個選項的選擇對于我們后邊的編程是沒有什么影響的,所以大家跟著我來選就可以了,不過感興趣的童鞋可以去STC官網(wǎng)下載STC單片機(jī)的庫文件,那么我們就可以直接選擇STC相應(yīng)單片機(jī)型號了。



圖4-4 單片機(jī)型號選擇

  點OK之后,會彈出一個對話框,如圖4-5所示,這個地方會有部分啟動代碼,如果點“否”編譯器會自動處理這個問題,如果點“是”,這部分代碼會提供給我們用戶,我們用戶就可以自己去處理這部分代碼,那這部分代碼在我們初學(xué)51的這個時間段,我們一般是不需要去修改的,但是隨著技術(shù)的提高和知識的擴(kuò)展,我們有可能會了解這塊內(nèi)容,因此這個地方我們選一下“是”,讓這段代碼出現(xiàn),但是我們暫時不需要修改它,大家知道這么回事就可以了。



圖4-5 初始化文件選擇

  這樣工程就建立好了,如圖4-6所示,如果我們點擊Target 1左邊的加號,會出現(xiàn)我們剛才加入的初始化文件STARTUP.A51,這個我們先不管。



圖4-6 工程文件

  工程有了之后,我們要建立編寫代碼的文件,點擊File–>New,新建一個文件,也就是我們編寫程序的平臺。然后點File–>Save或者直接點擊那個Save的快捷鍵,可以保存文件并且命名為LED.C,這個地方必須加上.C了,因為如果寫匯編語言,這個地方的擴(kuò)展名是.ASM,頭文件就是.H等等,我們編寫的是C語言程序,這個地方必須自己添加文件的擴(kuò)展名.C,如圖4-7所示。



圖4-7 新建文件



圖4-8 保存文件

  現(xiàn)在我們就可以在我們建立好的文件中輸入我們編寫的程序了,在編寫之前還有個工作要做。我們每做一個功能程序,必須要新建一個工程,一個工程代表了單片機(jī)要實現(xiàn)的一個功能。但是一個工程,有時候我們可以把我們的程序分多個文件寫,所以每寫一個文件,我們都要添加到我們所建立的工程中去,鼠標(biāo)右鍵點Source Group 1,點Add Files to Group ‘Source Group 1’,



圖4-9 添加文件

  單擊LED.C然后點Add,或者雙擊LED.C都可以將文件加入到這個工程下,然后點Close,關(guān)閉添加。 這個時候大家會看到在Source Group 1下邊又多了一個LED.C文件。


1.4.3 編寫點亮LED的程序

  忙活了半天,準(zhǔn)備工作做了那么多,終于要編寫我們的代碼了。如果有學(xué)過C語言的話,你應(yīng)該很輕松的跟著我的編程自己寫出來,如果沒學(xué)過C語言也沒關(guān)系,你先照著我的抄,我會在合適的位置寫出來對C語言語法的一些解釋,這樣抄幾次后再看看解釋,就應(yīng)該很明確了。


#include<reg51.h>//包含特殊功能寄存器定義的頭文件

sbit LED = P0^0; //位地址聲明,注意:sbit必須小寫、P大寫!

void main() //任何一個C程序都是從main函數(shù)開始執(zhí)行的

{

LED = 0;

}

  按照正常的邏輯,程序這樣寫就可以了,但是在實際單片機(jī)應(yīng)用中,存在一個問題。比如我們的程序空間可以寫100行代碼,但是我們程序只有50行代碼,當(dāng)運(yùn)行完了50行,再繼續(xù)運(yùn)行時,第51行的程序不是我們想運(yùn)行的程序,而是不確定的未知內(nèi)容,所以我們通常要在程序中加一個死循環(huán),讓程序停留在我們希望的這個狀態(tài)下,不要亂運(yùn)行,有以下兩種寫法可以參考:

1

參考程序一            

#include<reg51.h>

sbit  LED = P0^0;

void  main()

{

while(1)

{

LED = 0;

}

}

2

參考程序二            

#include<reg51.h>

sbit  LED = P0^0;

void  main()

{

LED = 0;

while(1);

}

  這兩個程序都可以實現(xiàn)點亮LED小燈的功能,看起來第二種比較簡潔一些。

  這里我們大家就要培養(yǎng)一個意識了,我們做單片機(jī)編程,實際上算是硬件底層驅(qū)動程序開發(fā),這種程序的開發(fā),是離不開電路圖的,必須根據(jù)我們的電路圖來進(jìn)行程序的編寫。

  程序編好了,我們要對我們的程序編譯進(jìn)行編譯,生成我們需要的可以下載到單片機(jī)里的文件,在編譯之前,我們先要勾選一個選項,Project–>Options for Target‘Target1’…,或者直接點圖4-10中的快捷圖標(biāo):



圖4-10 Options for Target

  在彈出的對話框中,點擊Output選項頁,勾選其中的“Create HEX File”復(fù)選框,然后點OK。



圖4-11 創(chuàng)建HEX選項配置

  設(shè)置好以后呢,點擊“Project–>rebuild all target files”,或者鼠標(biāo)點擊圖4-12上的快捷圖標(biāo)。



圖4-12 編譯程序

  編譯完成后,在我們的Keil下方的Output窗口會出現(xiàn)相應(yīng)的提示,大家注意看圖4-13,這個窗口告訴我們編譯完成后的情況,data=9.0,指的是我們的程序使用了單片機(jī)內(nèi)部的256字節(jié)RAM資源中的9個字節(jié),code=29的意思是使用了8K代碼Flash資源中的29個字節(jié)。當(dāng)提示“0 Error, 0 warning”表示我們的程序沒有錯誤和警告,就會出現(xiàn)“creating hex file from “LED”,意思是從當(dāng)前工程生成了一個HEX文件,我們下載給單片機(jī)的就是這個HEX文件。如果出現(xiàn)有錯誤和警告提示的話,就是Error和warning不是0,那么我們要對我們的程序進(jìn)行檢查,找出問題,解決好了再進(jìn)行編譯產(chǎn)生HEX才可以。



圖4-13 編譯輸出信息

  這樣就編譯好了,下邊我們就可以把我們編譯好的程序文件下載到單片機(jī)里邊了。


4.2程序下載

  首先,我們要把硬件連接好,把板子插到我們的電腦上,通過設(shè)備管理器里找到是哪個COM口,這些基礎(chǔ)的知識就不多說了,說一下STC-ISP下載軟件的設(shè)置,如圖4-14所示。

另外,要把編譯好的程序燒寫到單片機(jī)中,還必須要有燒寫電路,大家可以按照單片機(jī)數(shù)據(jù)手冊中燒寫電路圖中的電路自己焊接,當(dāng)然如果你有一塊單片機(jī)開發(fā)板的話,也完全可以使用開發(fā)板自帶燒寫電路進(jìn)行燒寫。



圖4-14 程序下載設(shè)置

下載程序共有以下五個步驟:

第一步,選擇單片機(jī)型號,我們現(xiàn)在用的單片機(jī)型號是STC89C52RC,這個一定不能錯了;

第二步,點擊“打開程序文件”,找到我們剛才建立工程的那個LED文件夾下,找到LED.HEX這個文件,點擊打開;

第三步,選擇正確的COM口;

第四步,設(shè)置里邊的所有選項我們暫時全部使用默認(rèn),不要隨便改動,有的選項改錯了以后可能會產(chǎn)生麻煩;

第五步,因為STC單片機(jī)要冷啟動下載,就是先點下載,然后給單片機(jī)上電,所以我們先關(guān)閉板子上的電源開關(guān),然后點擊“Download/下載”,等待軟件提示你請上電后,如圖4-15所示,然后再打開板子開關(guān),就可以將程序下載到單片機(jī)里邊,當(dāng)軟件顯示“已加密”就表示程序成功下載,如圖4-16所示。



圖4-15 程序下載過程



圖4-16 程序下載完畢

  程序下載完畢后,程序會自動運(yùn)行,下面可以看一下,LED是否已經(jīng)被成功點亮了呢?如果沒有,還是需要檢查下電路的。那現(xiàn)在如果我們把LED = 0改成LED = 1,再編譯程序下載進(jìn)去新的HEX文件,燈就會熄滅。至此,點亮一個LED的實驗已經(jīng)完成,我們在學(xué)習(xí)單片機(jī)的道路上,也終于邁出了第一步。


 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用寄存器點亮LED—跟51單片機(jī)一樣寫代碼教學(xué)(初步入門)
第二章 點亮你的LED
為什么程序能操控硬件軟件和硬件之間的橋梁是什么一篇就夠
PIC單片機(jī)之I/O控制
零基礎(chǔ)入門51單片機(jī)圖文教程(Proteus Keil)
實訓(xùn)三
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服