|
本章的標題是點亮LED,雖然任務很簡單,但是需要了解的單片機基礎知識卻很多,特別是對于初學者,剛開始要在頭腦中建立
一個單片機的概念,然后通過點亮一個LED小燈來增加初學者對單片機的興趣和自信。
2.1單片機的內部資源 在這里所講到的單片機內部資源,和傳統單片機書籍中講單片機內部結構不同,這里講到的內部資源,是指作為單片機用戶,單片機提供給用戶可使用的東西。總結起來,主要是三大資源: (1)Flash——程序存儲空間,早期單片機是OTPROM。 (2)RAM——數據存儲空間。 (3)SFR——特殊功能寄存器。 早期的單片機中,主要是用OTPROM(One Time Programmable Read-Only Memory,即一次可編程只讀存儲器)來存儲單片機的程序,程序只能寫入一次,如果發現錯了,沒辦法,只能換一片重新寫入。隨著技術的發展,Flash以其可重復擦寫且容量大、成本低的優點成為現在絕大多數單片機的程序存儲器。對于單片機來說Flash最大的意義是斷電后數據不丟失,這個概念類似于計算機的硬盤,保存了電影、文檔、音樂等文件,把電源關掉后,下次重新開計算機,所有的文件都還照樣存在。 RAM是單片機的數據存儲空間,用來存儲程序運行過程中產生的和需要的數據,跟計算機的內存是相似的概念,其實最典型的比喻是計算器。用計算器計算加減法,一些中間的數據都會保存在RAM里邊,斷電后數據丟失,所以每次打開計 算器都是從歸零開始計算。但是它的優點是讀寫速度非常快,理論上是可無限次寫入的,即壽命無限,不管程序怎么運行怎么讀寫,它都不會壞。 第三個資源是SFR,特殊功能寄存器。這個概念可能剛開始理解不了,但需要記住。單片機有很多很多特殊功能,每個功能都會對應一個或多個SFR,用戶就是通過對SFR的讀寫來實現單片機的多種多樣的功能的。 講到這里,首先來了解一下51單片機。通常一說到51單片機,指的都是兼容Intel MCS-51體系架構的一系列單片機,而51是它的一個通俗的簡稱。全球有眾多的半導體廠商推出了無數款這一系列的單片機,比如Atmel的AT89C52,NXP(Philips)的P89V51,宏晶科技的STC89C52……具體型號千差萬別,但它們的基本原理和操作都是一樣的,程序開發環境也是一樣的。這里要分清楚51這個統稱和具體的單片機型號之間的關系。 單片機內部資源的三個主要部分清楚了,那么就選擇STC89C52RC這款單片機來進行學習。STC89C52RC是宏晶科技出品的一款51內核的單片機,具有標準的51體系結構,全部的51標準功能,程序下載方式簡單,方便學習。它的資源情況:Flash程序空間是8K字節(1K=1024,1字節= 8位),RAM數據空間是512字節,SFR后邊會逐一提到并且應用。 2.2單片機最小系統 什么是單片機最小系統呢?單片機最小系統是指用最少的原件組成單片機可以工作的系統。單片機最小系統的三要素就是電源、晶振、復位電路,如圖2-1所示。
2-1.png (78.52 KB, 下載次數: 0)
下載附件
2026-3-13 11:14 上傳
圖2-1 單片機最小系統電路 這張最小系統的電路圖節選自Kingst51開發板原理圖,下面就照這張電路圖來具體分析最小系統的三要素。
2.2.1電源
這個很好理解,電子設備都需要供電。目前主流單片機的電源分為5V和3.3V這兩個標準,當然現在還有對電壓要求更低的單片機系統,一般多用在一些特定場合,在學習中不做過多的關注。 STC89C52需要5V的供電系統,Kingst51開發板是使用USB口輸出的5V直流電直接供電的。從圖2-1可以看到,供電電路在38腳和16腳的位置上,38腳接的是+5V,通常也稱為VCC或VDD,代表的是電源正極,16腳接的是GND,也可稱為VSS,代表的是電源的負極。+5V和GND之間還有個電容,作用下節課介紹。 此處普及一個看電路原理圖的知識。電路原理圖是為了表達這個電路的工作原理而存在的,很多器件在繪制的時候更多考慮的是方便原理分析,而不是表達各個器件實際位置。比如原理圖中的單片機引腳圖,引腳的位置是可以隨意放的,但是每個引腳上有一個數字標號,這個數字標號代表的才是單片機真正的引腳位置。 單片機通常有不同的封裝形式,所謂的不同封裝可以理解為,同樣是加了水的面,但是捏成不同的形狀的饅頭,只是表現形式不同,實現的功能完全一致。在2014年《手把手教你學51單片機--C語言版》(第1版)時所設計的Kingst51開發板采用了DIP40封裝,是一種雙列直插式的封裝形式。目前編寫第3版的時候,決定采用QFP-44的封裝形式,是一種方形扁平式,如圖2-2所示。 除部分單片機開發板還采用DIP40封裝外,當前現實中的產品幾乎見不到這種封裝的身影了。一方面QFP封裝體積更小,密度更高,集成度更高,占據空間更少;另外一方面產品設計要考慮成本,QFP封裝采用SMT表面貼技術焊接,而DIP封裝采用波峰焊或者手工焊接,后者單個引腳的焊接費用接近前者的10倍。這樣一片DIP40封裝的單片機的焊接費可能都會超過一片單片機的價格,因此在實際產品開發當中除特殊需求外(比如散熱性能考慮),很少采用DIP封裝形式的芯片了。無限接近實際項目,從單片機封裝選擇開始。 圖2-2可以看出,DIP封裝的1腳在其最左上角,逆時針旋轉引腳號依次增加,一直到右上角是最大引腳號40腳。QFP封裝中,有一個小圓圈的位置為1腳,逆時針旋轉引腳號依次增加,一直旋轉一圈到最大引腳號44腳。圖2-2的封裝圖就是單片機實際引腳的位置
2-2-1.png (68.16 KB, 下載次數: 0)
下載附件
2026-3-13 11:14 上傳
2-2-2.png (38.32 KB, 下載次數: 0)
下載附件
2026-3-13 11:14 上傳
圖2-2 單片機封裝圖 2.2.2晶振
晶振,又叫晶體振蕩器,從這個名字就可以看出來,它注定一生都要不停振蕩的。它起到的作用是為單片機系統提供基準時鐘信號,類似于部隊訓練時喊口令的人,單片機內部所有的工作都是以這個時鐘信號為步調基準來進行工作的。STC89C52RC單片機的14腳和15腳是晶振引腳,接了一個11.0592M的晶振(它每秒鐘振蕩11059200次),外加兩個20pF的電容,電容的作用是幫助晶振起振,并維持振蕩信號的穩定。
2.2.3復位電路
在圖2-1左側是一個復位電路,接到了單片機的4腳RST(Reset)復位引腳上,這個復位電路如何起作用后邊再講,現在著重講一下復位對單片機的作用。單片機復位一般分為三種情況:上電復位、手動復位、程序自動復位。 假如單片機程序有100行,當某一次運行到第50行的時候,突然停電了,這個時候單片機內部有的區域數據會丟失,有的區域數據可能還沒丟失。那么下次打開設備的時候,用戶希望單片機能正常運行,所以上電后,單片機要進行一個內部的初始化過程,這個過程就可以理解為上電復位,上電復位保證單片機每次都從一個固定的相同的狀態開始工作。這個過程跟打開計算機電源開機的過程是一致的。 當單片機的程序運行時,如果遭受到意外干擾而導致程序死機,或者程序跑飛的時候,就可以按下一個復位按鍵,讓程序重新初始化重新運行,這個過程就叫做手動復位,最典型的就是計算機的重啟按鈕(目前大多數電腦都沒有重啟按鈕了,而是通過長按開機鍵關閉電源的方式)。 當程序死機或者跑飛的時候,單片機往往有一套自動復位機制,比如看門狗,具體應用以后再了解。在這種情況下,如果程序長時間失去響應,單片機看門狗模塊會自動復位重啟單片機。還有一些情況是程序故意重啟復位單片機。 電源、晶振、復位構成了單片機最小系統的三要素,也就是說,一個單片機具備了這三個條件,就可以運行下載的程序了,其他的比如LED小燈、數碼管、蜂鳴器等設備都是屬于單片機的外部設備,即外設。最終完成用戶想要的功能就是通過對單片機編程來控制各種各樣的外設實現的。
2.3 LED小燈
LED(light-emitting diode),即發光二極管,俗稱LED小燈,它的種類很多,參數也不盡相同,Kingst51開發板上用的是普通的貼片發光二極管。這種二極管通常的正向導通電壓是1.8V到2.2V之間,工作電流一般在1mA~20mA之間。其中,當電流在1mA~5mA之間變化時,隨著通過LED的電流越來越大,肉眼會明顯感覺到這個小燈越來越亮,而當電流從5mA~20mA之間變化時,看到的發光二極管的亮度變化就不太明顯了。當電流超過20mA時,LED就會有燒壞的危險了,電流越大,燒壞的速度也就越快。所以在使用過程中應該特別注意它在電流參數上的設計要求。 下面來看一下發光二極管在Kingst51開發板上的設計應用。USB供電接口圖以及電源開關圖如圖2-3所示。
2-3.png (105.66 KB, 下載次數: 0)
下載附件
2026-3-13 11:14 上傳
圖2-3 USB接口電路和電源開關電路 圖2-3是Kingst51開發板上的USB接口電路。通過USB線,電腦給開發板供電和下載程序以及實現電腦和開發板之間的通信。這是一個標準16引腳的type-C的USB接口,從圖上可以看出,其中A6腳和A7腳是數據通信引腳,+5IN為USB電源正極,GND為電源負極。 將電源開關左邊的LED部分的電路單獨摘出來分析,如圖2-4所示。
2-4.png (3.67 KB, 下載次數: 0)
下載附件
2026-3-13 11:14 上傳
圖2-4 LED小燈電路(一) 發光二極管是二極管中的一種,因此和普通二極管一樣,這個二極管也有陰極和陽極,習慣上也稱之為負極和正極,方向必須接對了才會有電流通過讓LED小燈發光。剛才提到接入的VCC電壓是5V,發光二極管自身壓降大概是2V,那么在右邊R34這個電阻上承受的電壓就是3V。現在要求電流范圍是1~20mA的話,就可以根據歐姆定律R=U/I,把這個電阻的上限和下限值求出來。 U=3V,當電流是1mA的時候,電阻值是3K;當電流是20mA的時候,電阻值是150歐,也就是R34的取值范圍是150~3K歐姆。這個電阻值大小的變化,直接可以限制整條通路的電流的大小,因此這個電阻通常稱之為“限流電阻”。在圖2-3中用的電阻是1K,這條支路電流的大小可以計算出來了,而這個發光二極管在這里的作用,是作為電源指示燈的,使用USB線將開發板和電腦連起來,這個燈就會亮了。 同理,在電源開關后級控制的位置,又添加了一個LED10發光二極管,當打開開關時,這個二極管才會亮起,如圖2-5所示。
2-5.png (26.13 KB, 下載次數: 0)
下載附件
2026-3-13 11:14 上傳
圖2-5 電源開關電路 把圖2-4進行一下變化,把右側的GND去掉,改成一個單片機的I/O口,如圖2-6所示。
2-6.png (2.92 KB, 下載次數: 0)
下載附件
2026-3-13 11:14 上傳
圖2-6 LED小燈電路(二) 圖2-4由于電源從正極到負極有電壓差,并且電路是導通的,所以就會有電流通過,LED小燈因為有了電流通過,就會發光。把右側的原GND處接到單片機P0.0引腳上,那么如果單片機輸出一個低電平,也就是跟GND一樣的0V電壓,就可以讓LED小燈和圖2-4一樣發光了。 因為單片機是可以編程控制的,可以讓P0.0這個引腳輸出一個高電平,就是跟VCC一樣的5V電壓,那么這個時候,左側VCC電壓和右側的P0.0的電壓是一致的,那就沒有電壓差,沒有電壓差就不會產生電流,沒有電流LED小燈就不會亮,也就是會處于熄滅狀態。下面,就用編程軟件來實現控制小燈的亮和滅。
|