找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 114763|回復: 76
打印 上一主題 下一主題
收起左側(cè)

第二章 點亮你的LED

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:1 發(fā)表于 2013-6-6 04:56 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
本文作者:金沙灘宋老師

 

這節(jié)課的標題是點亮LED,但是需要大家了解的單片機基礎(chǔ)知識的內(nèi)容也非常多,特別是對于初學者,剛開始要在頭腦中建立一個單片機的概念,課程最后通過點亮一個LED小燈來增加初學者對實驗的好奇心和自信心。

1.1 單片機的內(nèi)部資源

在這里我所講到的單片機內(nèi)部資源,和傳統(tǒng)單片機書籍講單片機內(nèi)部結(jié)構(gòu)不同,我這里講到的內(nèi)部資源,是指我們作為單片機用戶,單片機提供給我們可使用的一些內(nèi)容?偨Y(jié)起來,主要是三大資源

1、FLASH(程序存儲空間,早期單片機是OTPROM)

2、RAM(數(shù)據(jù)存儲空間)

3、SFR(特殊功能寄存器)

在早期的技術(shù)里邊,主要是用OTPROM(One Time Programable Read-Only Memory,即一次可編程只讀存儲器)來存儲單片機的程序,隨著技術(shù)的發(fā)展,FLASH以其可重復擦寫且大容量低成本的優(yōu)點成為絕大多數(shù)單片機的程序存儲器。對于單片機來說FLASH最大的意義是斷電后數(shù)據(jù)不丟失,這個概念類似于我們電腦的硬盤,你看我們保存了電影、文檔、音樂等文件,我們把電源關(guān)掉后,下次重新開電腦,所有的文件都還照樣存在。

RAM是單片機的數(shù)據(jù)存儲空間,用來存儲程序運行過程產(chǎn)生的和需要的數(shù)據(jù),和我們電腦的內(nèi)存是一個概念,其實最典型的比喻是我們的計算器,我們用計算器計算個加減法,一些中間的數(shù)據(jù)都會保存在RAM里邊,關(guān)電后數(shù)據(jù)丟失,所以我們每次打開計算器,都是從歸零開始計算。但是他的優(yōu)點第一是讀寫速度非?,第二是理論上是無限次寫的,即壽命無限,不管程序怎么運行怎么讀寫它都不會壞。

第三個資源是SFR,特殊功能寄存器。這個概念大家可能剛開始理解不了,但是一定要記住。單片機有很多很多功能,每個功能都會配一個或多個SFR,我們就是通過SFR的讀寫來實現(xiàn)單片機的多種多樣的功能的。

講到這里,我們來了解一下51單片機。通常我們一說到51單片機,指的都是兼容Intel MCS-51體系架構(gòu)的一系列單片機。全球有眾多的半導體廠商推出了無數(shù)款這一系列的單片機,比如AtmelAT89C52,NXP(Philips)P89V51,宏晶科技的STC89C52,具體型號千差萬別,但他們的基本操作都是一樣的,程序開發(fā)環(huán)境也是一樣的。這里我們要分清楚51這個統(tǒng)稱和具體的單片機型號之間的關(guān)系。

單片機內(nèi)部資源的三個主要部分我們清楚了,那么我們選擇STC89C52RC這款單片機來進行學習。STC89C52RC單片機是宏晶科技出品的一款51內(nèi)核的單片機,具有標準的51體系結(jié)構(gòu),全部的51標準功能,程序下載方式簡單,方便學習,我們就用它來學習單片機。它的資源呢,Flash程序空間是8K字節(jié)(1K=1024字節(jié),1字節(jié)= 8)RAM數(shù)據(jù)空間是512字節(jié),SFR我們后邊需要逐一提到并且應(yīng)用。

1.2  單片機最小系統(tǒng)

為什么稱之為單片機最小系統(tǒng)呢?單片機最小系統(tǒng),也叫做單片機最小應(yīng)用系統(tǒng),是指用最少的原件組成單片機可以工作的系統(tǒng)。單片機最小系統(tǒng)的三要素就是電源、晶振、復位電路,如圖2-1所示。

圖片

2-1 單片機最小系統(tǒng)電路

備注:本教材中的大部分電路圖示例都節(jié)選自我們的KST-51開發(fā)板原理圖,但也有部分電路圖示例與KST-51開發(fā)板無關(guān),而僅是用其來說明一些具體問題。讀者可自行對照KST-51開發(fā)板原理圖,以下不再做特殊說明。

1.2.1 電源

這個很好理解,電子設(shè)備都需要供電,就連我們的家用電器(手電筒^_^)也不例外。主流單片機的電源現(xiàn)在是5V3.3V這兩個標準,當然現(xiàn)在還有對電壓要求更低的單片機系統(tǒng)。

我們所學的STC89C52RC,它需要5V的供電系統(tǒng),我們的開發(fā)板是使用USB口出來的5V直流電壓直接供電的。從圖2-1可以看到,供電電路在40腳和20腳的位置上,40腳接的是VCC,代表的是電源正極,20腳接的是GND,代表的是電源的負極。VCCGND之間還有個電容,作用我們下節(jié)課介紹。

這個地方我們還要普及一個看原理圖的知識。電路原理圖是為了表達這個電路的工作原理而存在的,很多器件在繪制的時候更多考慮是方便分析原理,不是表達各個器件實際位置的。比如上邊的單片機引腳圖,引腳的位置我們是可以隨意放的,但是每個引腳上有一個引腳標號(在表示芯片的方框的內(nèi)部),這個引腳標號代表的才是單片機真正的引腳位置,如圖2-2所示。一般情況下,這種雙列直插的封裝的芯片,左上角是1腳,逆時針旋轉(zhuǎn)引腳號依次增加,一直到右上角是最大腳位,咱們現(xiàn)在選用的單片機一共40個引腳,因此右上角就是40。

圖片

2-2單片機封裝圖

1.2.2 晶振

    晶振,又叫晶體振蕩器,從這個名字我們就可以看出來,它注定一生都要不停振動的。他起到的作用是為單片機系統(tǒng)提供基準時鐘信號,類似于我們部隊訓練時喊口令的人,單片機內(nèi)部所有的工作都是以這個時鐘信號為步調(diào)基準來進行工作的。STC89C52RC單片機的18腳和19腳是晶振的引腳,我們接了一個11.0592M的晶振(它每秒鐘震蕩11,059,200,外加兩個20pF的電容,電容的作用是幫助晶振起振,并維持震蕩信號的穩(wěn)定。

1.2.3 復位電路

在圖2-1左側(cè)是一個復位電路,接到了單片機的9RST(Reset)復位引腳上,這個復位電路如何起到的作用我們后邊再講,現(xiàn)在著重講一下復位對單片機的作用。單片機復位一般是3種情況,上電復位、手動復位、程序自動復位。

我們假如我們的單片機程序有100行,當某一次運行到第50行的時候,突然停電了,這個時候單片機內(nèi)部有的區(qū)域數(shù)據(jù)會丟失掉,有的區(qū)域數(shù)據(jù)沒丟失,那么下次打開設(shè)備的時候,我們希望單片機能正常運行。所以上電后,單片機要進行一個內(nèi)部的初始化過程,這個過程就可以理解為上電復位,上電復位保證單片機每次都從一個固定的相同的狀態(tài)開始工作。這個過程我們打開電腦電源開電腦的過程是一致的。

當我們的程序運行,遭受到意外干擾而導致程序死機,或者程序跑飛的時候,我們就可以按下一個復位按鍵,讓程序重新初始化重新運行,這個過程就叫做手動復位,最典型的就是我們電腦的重啟按鈕。

當我們的程序死機或者跑飛的時候,我們的單片機往往有一套自動復位機制,比如看門狗,具體應(yīng)用以后再了解。在這種情況下,如果程序長時間失去響應(yīng),單片機看門狗模塊會自動復位重啟單片機。還有一些情況是我們程序故意重啟復位單片機。

電源、晶振、復位構(gòu)成了單片機最小系統(tǒng)的三要素,也就是說,一個單片機具備了這三個條件,就可以運行我們下載的程序了,其他的比如LED小燈、數(shù)碼管、液晶等設(shè)備都是屬于單片機的外設(shè),我們最終完成我們想要的功能就是通過對單片機編程來控制這些外設(shè)實現(xiàn)的。

1.3  LED小燈 

LED小燈通常我們也叫做發(fā)光二極管,它的種類很多,參數(shù)也不盡相同,我們板子上用的是最普通的貼片發(fā)光二極管。這種二極管通常的正向?qū)?/span>電壓是1.8V2.2V之間,工作電流一般在1mA20mA之間。其中,當電流在1mA5mA之間變化時,隨著通過發(fā)光二極管(LED)的電流越來越大,我們的肉眼會感覺到這個小燈越來越亮,當電流從5mA20mA之間變化時,我們看到的發(fā)光二極管的亮度基本上沒有什么太大變化了。當電流超過20mA時,LED就會有燒壞的危險了,電流越大,燒壞的也就越快。所以我們在使用過程中應(yīng)該特別注意他電流參數(shù)上的設(shè)計要求。

那么下面我們來看一下這個發(fā)光二極管在我們的開發(fā)板上的設(shè)計應(yīng)用。

圖片

2-3 USB接口電路

2-3是我們開發(fā)板上的USB接口電路,通過USB線,電腦給我們的開發(fā)板供電和下載程序以及實現(xiàn)電腦和開發(fā)板之間的通信。從圖上可以看出,USB座共有6個接口,其中2腳和3腳是數(shù)據(jù)通信引腳,1腳和4腳是電源引腳,1腳是VCC正電源,4腳是GND即地線5腳和6腳是外殼,我們直接接到了GND上,大家可以觀察一下開發(fā)板上的這個USB口的座的6個引腳。

我們現(xiàn)在主要來看1VCC4GND。1腳通過F1(自恢復保險絲)接到右側(cè),在正常工作的情況下,保險絲可以直接看成導線,因此左右兩邊都是USB電源+5V,自恢復保險絲的作用是,當你后級電路哪個地方有發(fā)生短路的時候,保險絲會自動切斷電路,保護我們的板子以及電腦的USB口,當電路正常后,保險絲會恢復暢通,正常工作。

右側(cè)有2條支路,第一條是在+5VGND接了一個470uF的電容,電容是隔離直流的,所以這條支路是沒有電流的,電容的作用,我們下節(jié)課再介紹,這節(jié)課我們主要看第二條支路。我們把第二條支路摘取出來就是這個樣子了。

圖片

2-4 Led小燈電路(1)

發(fā)光二極管是二極管中的一種,因此和普通二極管一樣,這個二極管有陰極和陽極,習慣上也稱之為正極和負極,這樣方便在電路上觀察,方向必須接對了才會有電流通過讓LED小燈發(fā)光。剛才我提到了我們接入的VCC電壓是5V,發(fā)光二極管自身壓降大概可認為是2V,那么在右邊RES這個電阻上承受的電壓就是3V。那么現(xiàn)在我們要求電流范圍是1~20mA的話,就可以根據(jù)伏安特性,把這個電阻的上限和下限值求出來。

(VCC - 2)/I= R

當電流是1mA的時候,電阻值是3K;當電流是20mA的時候,電阻值是150歐,也就是RES的取值范圍是150~3000歐姆。這個電阻值大小的變化,直接可以限制整條通路的電流的大小,因此這個電阻我們通常稱之為“限流電阻”。在圖2-3中,我們用的電阻是1K,這條路電流的大小,我想大家可以輕松計算出來了,而這個發(fā)光二極管在這里的作用,就是個電源指示燈,使用USB線將開發(fā)板和電腦連起來,這個燈就會亮了。

同理,我們在板子后級開關(guān)控制的地方,又添加了一個LED10發(fā)光二極管,作用就是當我們打開開關(guān)時,這個二極管亮起。

圖片 

2-5 USB供電電路

    大家注意,這里的開關(guān)雖然只有一個,但是是2,2路開關(guān)并聯(lián)更能確保給后級提供更大的電流。電容C19C10,都是隔離斷開直流的,作用我們下節(jié)課介紹,這里大家可以忽略。

那么下面呢,我們把圖2-4進行一下變化,把右側(cè)的GND去掉,改成一個單片機的IO口,如圖2-6所示。

圖片

2-6 LED小燈電路(2)

2-4由于電源從正極到負極有電壓差,并且電路是導通的,所以就會有電流通過,LED小燈因為有了電流通過,所以就會直接發(fā)光。我們把右側(cè)的GND接到單片機P0.0引腳上,那么如果我們單片機輸出一個低電平,也就是跟GND一樣的0V電壓,就可以讓LED小燈和圖2-4一樣發(fā)光。

因為我們的單片機是可以編程控制的,我們可以讓P0.0這個引腳輸出一個高電平,就是VCC一樣的5V電壓,那這個時候,左側(cè)VCC電壓和右側(cè)的P0.0的電壓是一致的,那就沒有電壓差,沒有電壓差就不會產(chǎn)生電流,沒有電流LED小燈就不會亮,也就是會處于熄滅狀態(tài)。下面,我們就用我們的編程軟件來實現(xiàn)控制小燈的亮和滅。

1.4 程序代碼編寫

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

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

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

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

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

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

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

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

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

 

 

 

圖片

2-1 IO口特殊功能寄存器

我們來看一下表2-1,其中P4口是擴展出來的功能,我們暫時先不看,只看前邊的P0,P1,P2,P34個,每個Px口本身又有8個控制端口。大家可以結(jié)合我們的開發(fā)板原理圖或者圖2-1來看,那么這樣就確定了我們的單片機一共有32IO(IO,InputOutput,分別是輸入和輸出)。

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

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

1.4.2 新建一個工程

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

圖片

2-7 新建一個工程

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

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

圖片

2-8 保存工程

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

圖片

2-9 單片機型號選擇

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

圖片

2-10 初始化文件選擇

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

圖片

2-11 工程文件

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

圖片

2-12新建文件

圖片

2-13 保存文件

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

圖片

2-14 添加文件()

圖片

2-15 添加文件()

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

1.4.3 編寫點亮小燈的程序

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

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

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

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

{

    LED = 0;

}

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

參考程序一:                     參考程序二:

#include <reg52.h>             #include <reg52.h>     

sbit  LED = P0^0;              sbit  LED = P0^0; 

void  main()                    void  main()

{                                {

    while(1)                         LED = 0;

    {                                 while(1);

        LED = 0;                 }

    }                            

}

這兩個程序都可以實現(xiàn)點亮LED小燈的功能,看起來第二種比較簡潔一些。針對于圖2-6,我們這個程序能夠完全把小燈點亮,但是這個程序卻點不亮我們板子上的小燈,這是為什么呢?

這里我們大家就要培養(yǎng)一個意識了,我們做單片機編程,實際上算是硬件底層驅(qū)動程序開發(fā),這種程序的開發(fā),是離不開電路圖的,必須根據(jù)我們的電路圖來進行程序的編寫。如果我們設(shè)計電路板的電路圖和圖2-6一樣的話,我們那個程序可以成功點亮,但是如果不一樣,不能點亮小燈。

我們的開發(fā)板上,還有一個74HC138作為8LED小燈的總開關(guān),而P0.0僅僅是個分開關(guān)。如同我們家里總是有一個供電總閘,然后每個電燈又有一個專門的開關(guān),我們剛才的程序僅僅打開了那個電燈的開關(guān),但是沒有打開那個總電閘,所以程序需要加上這部分代碼。因為這節(jié)課要介紹的內(nèi)容比較多,所以我們把74HC138的原理以及為什么要加額外的代碼下節(jié)課統(tǒng)一介紹,這節(jié)課我們直接加上這部分代碼,大家知道有這么一回事就可以了。

#include <reg52.h>        //包含寄存器的庫文件                   

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

sbit  ADDR0 = P1^0;

sbit  ADDR1 = P1^1;

sbit  ADDR2 = P1^2;

sbit  ADDR3 = P1^3;

sbit  ENLED = P1^4;

 

void  main()

{

    ENLED = 0;

    ADDR0 = 0;

    ADDR1 = 1;

    ADDR2 = 1;

    ADDR3 = 1;            //74HC138開啟三極管           

 

    LED = 0;              //點亮小燈

    while(1);             //程序停止在這里 

}

寫了這么多啰嗦的語句,剛開始大家可能覺得很麻煩,為什么有的書上程序很簡單就可以點亮小燈,我們這里要這樣來做。大家要了解一點,就是我們做這個學習板呢,雖然僅僅提供給大家簡單學習使用,但是我們也得按照實際產(chǎn)品的開發(fā)模式去設(shè)計,所以綜合考慮因素很多,大家學到后邊就會明白它的設(shè)計價值了,這里大家只要跟著我們?nèi)プ鼍涂梢粤恕?/span>

程序編好了,我們要對我們的程序編譯進行編譯,生成我們需要的可以下載到單片機里的文件,在編譯之前,我們先要勾選一個選項,Project-->Options for TargetTarget1...,或者直接點圖2-16中的快捷圖標:

圖片

2-16 Options for Target

彈出的對話框中,點擊Output選項頁勾選其中的Create HEX File復選框,然后點OK。

圖片

2-17 創(chuàng)建HEX選項配置

設(shè)置好以后呢,點擊“Project-->rebuild all target files,或者鼠標點擊圖2-18上的快捷圖標。

圖片

2-18 編譯程序

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

圖片

2-19 編譯輸出信息

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

1.5 程序下載

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

圖片

2-20 程序下載設(shè)置

下載軟件一共有5個步驟第一步,選擇單片機型號,我們現(xiàn)在用的單片機型號是STC89C52RC,這個一定不能錯了;第二步,點擊“打開程序文件”,找到我們剛才建立工程的那個LED文件夾下,找到LED.HEX這個文件,點擊打開;第三步,選擇正確的COM口,這個COM口在裝好驅(qū)動插上板子后,在電腦上的設(shè)備管理器里才會出現(xiàn),這個問題大家可以參考“全板子測試視頻”,波特率我們使用默認的就行了;第四步里邊的所有選項我們?nèi)渴褂媚J,不要隨便改動,有的選項改錯了以后可能會產(chǎn)生麻煩。第五步,因為STC單片機要冷啟動下載,就是先點下載,后給單片機上電,所以我們先關(guān)閉板子上的電源開關(guān),然后點擊“Download/下載”,等待軟件提示你請上電后,如圖2-21所示,然后再打開板子開關(guān),就可以將程序下載到單片機里邊,當軟件顯示“已加密”就表示程序成功下載,如圖2-22所示。

圖片

2-21 程序下載過程

圖片

2-22 程序下載完畢

    程序下載完畢后,程序會自動運行,大家可以在板子上看到那一排LED最右側(cè)的小燈已經(jīng)發(fā)光了。那現(xiàn)在如果我們把LED = 0改成LED = 1,再編譯程序下載進去新的HEX文件,燈就會熄滅。至此,點亮一個LED的實驗已經(jīng)完成,終于邁出了第一步,是不是還挺好玩的呢。如有不懂可參考: http://www.torrancerestoration.com/mcuteach/252.html  第2課里面的詳解.

1.6 作業(yè)

1、了解普通發(fā)光二級管的參數(shù),掌握限流電阻的計算方法。

2、理解單片機最小系統(tǒng),單片機外圍電路,FLASH,RAMSFR這些概念。

3、了解Keil的基本用法和單片機編程的基本流程,能夠獨立完成編程下載等基本操作。 

 

上一課:第一章 如何學習單片機
下一課:第三章 硬件基礎(chǔ)知識學習
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏13 分享淘帖 頂4 踩
回復

使用道具 舉報

75#
ID:966468 發(fā)表于 2022-6-23 09:24 | 只看該作者
實例非常詳細,值得學習
回復

使用道具 舉報

74#
ID:615425 發(fā)表于 2019-9-25 22:38 來自手機 | 只看該作者
謝謝分享
回復

使用道具 舉報

73#
ID:476127 發(fā)表于 2019-9-4 09:46 | 只看該作者
東西很好,謝謝分享
回復

使用道具 舉報

72#
ID:492020 發(fā)表于 2019-3-21 08:21 | 只看該作者
十分詳細,很有幫助
回復

使用道具 舉報

71#
ID:288930 發(fā)表于 2019-1-29 10:22 | 只看該作者
謝謝分享!
回復

使用道具 舉報

70#
ID:391744 發(fā)表于 2018-10-13 15:22 | 只看該作者
我在網(wǎng)上買的沒老師講的詳細、以后跟著
回復

使用道具 舉報

69#
ID:403648 發(fā)表于 2018-9-30 12:14 | 只看該作者
“1.5 程序下載

首先,我們要把硬件連接好,把板子插到我們的電腦上,通過設(shè)備管理器里找到是哪個COM口,這些基礎(chǔ)的知識我在測試視頻里都介紹過了,就不多說了,”
測試視頻在哪里?能給個鏈接嗎?
回復

使用道具 舉報

68#
ID:400123 發(fā)表于 2018-9-20 11:22 | 只看該作者
大師,請問兩只腳的3色RGB-LED燈泡,怎么用單片機控制顏色和亮度?
回復

使用道具 舉報

67#
ID:382944 發(fā)表于 2018-8-4 19:26 | 只看該作者
不錯,很詳細
回復

使用道具 舉報

66#
ID:93625 發(fā)表于 2018-6-27 11:18 | 只看該作者
還是更習慣C的形式。
回復

使用道具 舉報

65#
ID:356113 發(fā)表于 2018-6-22 09:05 來自手機 | 只看該作者
講的真的很詳細,比網(wǎng)上買的開發(fā)版送的視屏教程詳細很多
回復

使用道具 舉報

64#
ID:319785 發(fā)表于 2018-5-1 13:25 | 只看該作者
差一分才能下載
回復

使用道具 舉報

63#
ID:72088 發(fā)表于 2018-4-30 19:46 | 只看該作者
很詳細,我認定你的文章了,不錯
回復

使用道具 舉報

62#
ID:72088 發(fā)表于 2018-4-30 19:45 | 只看該作者
好知識,我要一步步向你學習
回復

使用道具 舉報

61#
ID:288930 發(fā)表于 2018-3-7 21:45 | 只看該作者
很好,感謝分享
回復

使用道具 舉報

60#
ID:279667 發(fā)表于 2018-2-28 09:48 | 只看該作者
老師的教程很詳盡,看了一遍感覺自己可以掌握,買塊開發(fā)板試試~~
回復

使用道具 舉報

59#
ID:279545 發(fā)表于 2018-1-25 13:32 | 只看該作者
老師辛苦了,感謝感謝
回復

使用道具 舉報

58#
ID:85073 發(fā)表于 2018-1-9 13:14 | 只看該作者
這么好的教程花錢也買不到呀!
回復

使用道具 舉報

57#
ID:241772 發(fā)表于 2017-12-30 10:58 來自手機 | 只看該作者
很詳細,值得學習。贊
回復

使用道具 舉報

56#
ID:267378 發(fā)表于 2017-12-27 10:58 | 只看該作者
很詳細 謝謝
回復

使用道具 舉報

55#
ID:155764 發(fā)表于 2017-10-22 13:28 | 只看該作者
絕世好貼!
回復

使用道具 舉報

54#
ID:217934 發(fā)表于 2017-9-1 23:08 | 只看該作者
很詳細,值得學習。贊
回復

使用道具 舉報

53#
ID:212343 發(fā)表于 2017-7-21 10:49 | 只看該作者
辛苦了,謝謝了
回復

使用道具 舉報

52#
ID:111144 發(fā)表于 2017-4-29 10:15 | 只看該作者
值得學習
回復

使用道具 舉報

51#
ID:193449 發(fā)表于 2017-4-27 11:46 | 只看該作者
講得非常詳細,理解起來沒有困難。謝謝
回復

使用道具 舉報

50#
ID:173848 發(fā)表于 2017-3-21 01:59 | 只看該作者
厲害厲害
回復

使用道具 舉報

49#
ID:162880 發(fā)表于 2017-1-24 16:06 | 只看該作者
網(wǎng)站的下載keil的鏈接用不了了…老師能不能再分享一個?
回復

使用道具 舉報

48#
ID:151661 發(fā)表于 2016-12-24 20:27 | 只看該作者
看來過反都逼傻 發(fā)表于 2016-12-19 10:10
sbit  ADDR0 = P1^0; sbit  ADDR1 = P1^1; sbit  ADDR2 = P1^2; sbit  ADDR3 = P1^3; sbit  ENLED = P1^4; ...

我們的開發(fā)板上,還有一個74HC138作為8個LED小燈的總開關(guān),而P0.0僅僅是個分開關(guān)。如同我們家里總是有一個供電總閘,然后每個電燈又有一個專門的開關(guān),我們剛才的程序僅僅打開了那個電燈的開關(guān),但是沒有打開那個總電閘,所以程序需要加上這部分代碼。(轉(zhuǎn)自上面)
回復

使用道具 舉報

47#
ID:154562 發(fā)表于 2016-12-19 10:18 來自手機 | 只看該作者
有單片機有原理圖嗎,不是很看懂引腳連接
回復

使用道具 舉報

46#
ID:154562 發(fā)表于 2016-12-19 10:10 來自手機 | 只看該作者
sbit  ADDR0 = P1^0; sbit  ADDR1 = P1^1; sbit  ADDR2 = P1^2; sbit  ADDR3 = P1^3; sbit  ENLED = P1^4;這是什么意思,是什么型號單片機??
回復

使用道具 舉報

45#
ID:149318 發(fā)表于 2016-11-21 20:29 | 只看該作者
不錯,很好。
回復

使用道具 舉報

44#
ID:142889 發(fā)表于 2016-11-4 14:14 來自手機 | 只看該作者
很詳細謝謝!
回復

使用道具 舉報

43#
ID:121883 發(fā)表于 2016-5-19 10:04 | 只看該作者
從基礎(chǔ)開始好好學習,
回復

使用道具 舉報

42#
ID:118448 發(fā)表于 2016-5-7 08:42 | 只看該作者
很詳細
回復

使用道具 舉報

41#
ID:95212 發(fā)表于 2015-11-9 23:13 | 只看該作者
感謝老師,受教了,想好好學習
回復

使用道具 舉報

40#
ID:88566 發(fā)表于 2015-8-19 09:24 | 只看該作者
初學者必修啊,謝謝
回復

使用道具 舉報

39#
ID:79275 發(fā)表于 2015-6-23 20:29 | 只看該作者
掃盲好貼
回復

使用道具 舉報

38#
ID:82659 發(fā)表于 2015-6-14 21:37 | 只看該作者
果斷是好東西啊
回復

使用道具 舉報

37#
ID:76554 發(fā)表于 2015-4-21 10:24 來自手機 | 只看該作者
講解細致,能學的很好
回復

使用道具 舉報

36#
ID:77205 發(fā)表于 2015-4-16 22:19 | 只看該作者
不錯,值得學習^^^^^^^^^^^^^^^^^^^^^^^^^^^
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表