51单片机 | 数字电路与C语言基础 | 51单片机最小系统
文章目錄
- 一、數(shù)字電路基礎(chǔ)
- 1.電平特性
- 2.二進制與十六進制
- 2.1 二進制
- 2.2 十六進制
- 3.二進制的邏輯運算
- 二、C語言基礎(chǔ)語法
- 三、51單片機最小系統(tǒng)
- 1. 51 單片機最小系統(tǒng)構(gòu)成
- 1.1 晶振電路
- 1.2 復(fù)位電路
- 1.3 電源電路
- 1.4 下載電路
一、數(shù)字電路基礎(chǔ)
1.電平特性
??單片機是一種數(shù)字集成芯片,數(shù)字電路中只有兩種電平:高電平和低電平。我們暫時定義單片機輸出與輸入為 TTL 電平,其中高電平為+5V,低電平為 0V。計算機的串口為 RS232電平,其中高電平為-12V,低電平為12V。這里強調(diào)的是,RS232C 電平為負(fù)邏輯電平,因此當(dāng)計算機與單片機之間要通信時,需要依靠電平轉(zhuǎn)換芯片,比如 MAX232 電平轉(zhuǎn)換芯片。
??常用的邏輯電平還有很多,比如 TTL、CMOS、LVTTL、RS-232、RS-485 等。其中TTL和CMOS的邏輯電平按典型電壓可分為四類:5V系列(5V TTL和5V CMOS)、3.3V 系列,2.5V 系列和 1.8V 系列。5V TTL 和 5V CMMOS 是通用的邏輯電平。3.3V 及以下的邏輯電平被稱為低電壓邏輯電平,常用的為 LVTTL 電平。低電壓邏輯電平還有 2.5V 和 1.8V 兩種。RS-232 和 RS-485 是串口的接口標(biāo)準(zhǔn),RS-232 是單端輸入/輸出。RS-485 是差分輸入/輸出
??TTL 電平信號用的最多,這是因為數(shù)據(jù)表示通常采用二進制,+5V 等價于邏輯 1,0V 等價于邏輯 0,這被稱為 TTL(晶體管-晶體管邏輯電平)信號系統(tǒng)。CMOS 電平 VCC 可達 12V,CMOS 電路輸出高電平約為0.9VCC,而輸出低電平約為 0.1VCC。CMOS 電路中不使用的輸入端不能懸空,否則會造成邏輯混亂。另外,CMOS 集成電路電源電壓可以在較大范圍內(nèi)變化,因而對電源的要求不像 TTL集成電路那樣嚴(yán)格。
??TTL 電路和 CMOS 電路的邏輯電平關(guān)系如下:
- VOH:邏輯電平 1 的輸出電壓。
- VOL:邏輯電平 0 的輸出電壓。
- VIH:邏輯電平 1 的輸入電壓。
- VIL:邏輯電平 0 的輸入電壓。
TTL 電平臨界值:
- VOHmin=2.4V,VOLmax=0.4V。
- VIHmin=2.0V,VILmax=0.8V。
CMOS 電平臨界值(假設(shè)電源電壓為+5V):
- VOHmin=4.99V,VOLmax=0.01V。
- VIHmin=3.5V,VILmax=1.5V。
??TTL 和 CMOS 的邏輯電平轉(zhuǎn)換:CMOS 電平能驅(qū)動 TTL 電平,但 TTL 電平不能驅(qū)動 CMOS 電平,需加上拉電阻。
??常用邏輯芯片的特點如下:
- 74LS 系列: TTL 輸入:TTL, 輸出:TTL
- 74HC 系列: CMOS 輸入:CMOS, 輸出:CMOS
- 74HCT 系列: CMOS 輸入:TTL, 輸出:CMOS
- CD4000 系列: CMOS 輸入:TTL, 輸出:CMOS
??通常情況下,單片機、DSP、FPGA 之間引腳能否直接相連要參考以下方法進行判斷:一般來說,同電壓的是可以相連的,不過最好還是要查看下芯片技術(shù)手冊上的 VIL、VIH、VOL 和 VOH 的值,看是否能夠匹配。有些情況在一般應(yīng)用中沒有問題,但是參數(shù)上就是有點不夠匹配,在某些情況下運行可能就不夠穩(wěn)定,或者不同批次的器件就不能運行。
2.二進制與十六進制
2.1 二進制
??數(shù)字電路中只有兩種電平特性,即高電平和低電平,這也就決定了數(shù)字電路中使用二進制。對于十進制與二進制之間的轉(zhuǎn)換,我們能熟練掌握0-15 以內(nèi)的數(shù)就夠用了,為了方便記憶,我們歸納如下:
??實際開發(fā)中常常會用到其它比較大的數(shù),這時我們用 Windows 系統(tǒng)自帶的計算器,選擇程序員模式,可以非常方便的進行二進制、八進制、十進制、十六進制數(shù)之間的任意轉(zhuǎn)換,如下圖所示:
2.2 十六進制
??十六進制與二進制大同小異,不同之處就是十六進制是“逢十六進一,借一當(dāng)十六”。十進制的 0-15 表示成十六進制為 0~9、A、B、C、D、E、F,即十進制的 10 對應(yīng)十六進制的 A,11 對應(yīng) B,以此類推。我們一般在十六進制數(shù)的最后面加上后綴 H,表示該數(shù)為十六進制數(shù),如 AH、DEH等。這里的字母不區(qū)分大小寫,在 C 語言編程時要寫成“0xa,0xde”,在數(shù)的最前面加上“0x”表示該數(shù)為十六進制數(shù)。二進制、十進制、十六進制 0-15 的數(shù)的轉(zhuǎn)換關(guān)系如下:
3.二進制的邏輯運算
二、C語言基礎(chǔ)語法
- C語言基礎(chǔ)語法可以參考這個專欄
下面簡單補充一些:
-
單片機的 C 語言中常用的基本數(shù)據(jù)類型如下:
-
存儲器類型
存儲器類型是用于指明變量所處的單片機的存儲器區(qū)域情況。存儲器類型與存儲種類完全不同。C51 編譯器能識別的存儲器類型有以下幾種,見表所示:存儲器類型描述 data 直接尋址的片內(nèi)RAM低128B,訪問速度快 bdata 片內(nèi)RAM的可位尋址區(qū)(20H~2FH),允許字節(jié)和位混合訪問 idata 間接尋址訪問的片內(nèi)RAM,允許訪問全部片內(nèi)RAM pdata 用Ri間接訪問的片外RAM的低256B xdata 用DPTR間接訪問的片外RAM,允許訪問全部64k片外RAM code 程序存儲器ROM64k空間 -
特殊功能寄存器變量
sfr 或 sfr16 特殊功能寄存器名=地址;
51 系列單片機片內(nèi)有許多特殊功能寄存器,通過這些特殊功能寄存器可以控制 51 系列單片機的定時器、計數(shù)器、串口、I/O 及其它功能部件,每一個特殊功能寄存器在片內(nèi) RAM 中都對應(yīng)于一個字節(jié)單元或兩個字節(jié)單元。
在 C51 中,允許用戶對這些特殊功能寄存器進行訪問,訪問時須通過 sfr 或sfr16 類型說明符進行定義,定義時須指明它們所對應(yīng)的片內(nèi) RAM 單元的地址。格式如下:sfr 用于對 51 單片機中單字節(jié)的特殊功能寄存器進行定義,sfr16 用于對雙字節(jié)特殊功能寄存器進行定義。特殊功能寄存器名一般用大寫字母表示。地址一般用直接地址形式。
sfr PSW=0xd0; sfr SCON=0x98; sfr TMOD=0x89; sfr P1=0x90; sfr16 DPTR=0x82; sfr16 T1=0X8A; -
位變量
bit 位變量名;
在 C51 中,允許用戶通過位類型符定義位變量。位類型符有兩個:bit 和 sbit??梢远x兩種位變量。
bit 位類型符用于定義一般的可位處理位變量。它的格式如下:在格式中可以加上各種修飾,但注意存儲器類型只能是 bdata、data、idata。只能是片內(nèi) RAM 的可位尋址區(qū),嚴(yán)格來說只能是 bdata。 sbit 位類型符用于定義在可位尋址字節(jié)或特殊功能寄存器中的位,定義時須指明其位地址,可以是位直接地址,可以是可位尋址變量帶位號,也可以是特殊功能寄存器名帶位號。格式如下:
sbit 位變量名=位地址;如位地址為位直接地址,其取值范圍為 0x00~0xff;如位地址是可位尋址變 量帶位號或特殊功能寄存器名帶位號,則在它前面須對可位尋址變量或特殊功能 寄存器進行定義。字節(jié)地址與位號之間、特殊功能寄存器與位號之間一般用“^” 作間隔。如定義 51 單片機管腳:
sbit LED=P1^0;
三、51單片機最小系統(tǒng)
??在前面章節(jié),我們已經(jīng)認(rèn)識了 51 單片機芯片,51 單片機要工作,光靠一個芯片肯定是不行的,它必須搭配相應(yīng)的外圍電路,我們把能使 51 單片機工作的最簡單基礎(chǔ)的電路統(tǒng)稱為 51 單片機最小系統(tǒng)。
1. 51 單片機最小系統(tǒng)構(gòu)成
??若要使系統(tǒng)正常運行,必須確保單片機的最小系統(tǒng)穩(wěn)定工作。51 單片機的最小系統(tǒng)由以下幾部分組成:
- 晶振電路
- 復(fù)位電路
- 電源電路
- 下載電路
實際上最小系統(tǒng)只由前面 3 個部分組成。為什么要加入第4部分呢?僅靠前面 3 個部分電路只能使單片機正常運行,但如果我們要給系統(tǒng)更新程序即燒入程序時就沒有辦法了,所以我們將第4部分電路也加入到最小系統(tǒng)當(dāng)中,這時候我們就可以給系統(tǒng)自由燒入程序了。
??晶振電路提供時鐘給單片機工作,猶如人的心臟。復(fù)位電路提供系統(tǒng)復(fù)位操作,當(dāng)系統(tǒng)出現(xiàn)運行不正?;蛘咚罊C等情況時,可以通過復(fù)位按鍵重新啟動系統(tǒng)。電源電路也是非常關(guān)鍵的一個部分,因為單片機對供電電壓是有要求的,如果電壓過大將燒壞芯片,如果電壓過小系統(tǒng)將運行不了。所以選擇一個合適穩(wěn)定的電源電路是非常關(guān)鍵的。還有一點非常重要,由于 51 單片機的 P0 口是漏極開路(沒有辦法輸出高電平,要輸出高電平必須外接上拉電阻),即輸出高電平會導(dǎo)致高阻態(tài),要讓它輸出高電平就必須外接上拉電阻,如下:
相同網(wǎng)絡(luò)標(biāo)號的表示其線路是連接在一起的。為了
增強其他 IO 口的驅(qū)動能力,開發(fā)板上也都為其外接了上拉電阻(除了串口),通常上拉電阻選擇 10K 左右。
1.1 晶振電路
??由于單片機正常工作需要一個時鐘,因此就需要在其晶振引腳上外接晶振(我們使用的 STC89CXX 單片機晶振引腳是 18 和 19 腳),至于需要多大晶振這就取決于你所使用的單片機,由于我們使用的是 51 單片機,其時鐘頻率可在0-40MHZ 上運行,一般情況下我們建議選擇 12M(適合計算延時時間)或者是11.0592M(適合串口通信)。若直接將此晶振接入單片機晶振引腳,會發(fā)現(xiàn)系統(tǒng)工作不穩(wěn)定,這是因為晶振起振的一瞬間會產(chǎn)生一些電感,為了消除這個電感所帶來的干擾,可以在此晶振兩端分別加上一個電容,電容的選取需要無極性的,另一端需要共地。根據(jù)選取的晶振大小決定電容值,通常電容可在 10-33PF 值范圍內(nèi)選取。我們使用的是 33PF 電容。這樣一來就構(gòu)成了晶振電路。只有保證晶振電路穩(wěn)定,單片機才能繼續(xù)工作。其電路如下所示:
1.2 復(fù)位電路
??前面我們已經(jīng)將晶振電路搭建完成,我們知道晶振猶如人的心臟,需要無時無刻給單片機提供運行周期。但即使時鐘周期在不停的運行,系統(tǒng)也有可能會出現(xiàn)崩潰或者癱瘓狀態(tài)。這就需要設(shè)計一個復(fù)位電路來實現(xiàn)此功能。我們知道單片機引腳當(dāng)中就有一個 RST 復(fù)位引腳,而 STC89CXX 單片機又是高電平復(fù)位,所以只需要讓這個引腳保持一段時間高電平就可以復(fù)位。要實現(xiàn)此功能通常有兩種方式,一種是通過按鍵進行手動復(fù)位,還有一種是上電復(fù)位,即電源開啟后自動復(fù)位。
- 手動復(fù)位是通過一個按鍵及電容電阻所組成,利用按鍵的開關(guān)功能實現(xiàn)復(fù)位,按鍵按下后 VCC 直接進入到單片機RST 引腳,松開后 VCC 斷開,RST 被電阻拉為低電平。這一合一開就實現(xiàn)了手動復(fù)位。
- 自動復(fù)位主要是利用 RC 充放電功能,電源已開啟,由于電容隔直,VCC直接進入 RST,然后電容開始慢慢充電,直到充電完成,此時 RST 被電阻拉低。這樣就起到上電復(fù)位的效果。
這里我們采用手動復(fù)位。不到系統(tǒng)崩潰,我們幾乎不會操作復(fù)位。復(fù)位電路如下圖所示:
當(dāng)按下按鍵 RSTK1,VCC 直接連接到 RST 復(fù)位腳,VCC 是高電平,所以系統(tǒng)復(fù)位。
1.3 電源電路
??任何電子器件都需要有一個合適的電源進行供電,沒有電源,系統(tǒng)是不會工作的。STC89CXX 單片機的工作電壓是 3.3-5.5V 范圍,通常我們使用 5V 直流。將電源接入到各芯片電源引腳即可。開發(fā)板電源電路如下圖所示:
使用AMS117-3.3芯片,通過這個芯片將外部輸入的直流5V轉(zhuǎn)換成3.3V,3.3V(預(yù)留給用戶使用)供給外部用戶所接的傳感器。但是在板載硬件上通常都是使用5V進行供電。開發(fā)板上還預(yù)留了 P3(5V/3V)端子,將5V、GND、3.3V全部引出來,用戶需要電源時直接接入管腳,這些端子可以很方便的給外部模塊連接電源。
1.4 下載電路
??程序要燒寫到單片機內(nèi)是通過上位機(PC 機)及對應(yīng)的軟件將編譯器生成的xxx.HEX 文件通過單片機串口寫入單片機flash里面。
??我們知道現(xiàn)在的筆記本電腦沒有 RS232 接口,所以要使用 USB 轉(zhuǎn) TTL 串口電平芯片來建立 PC 機和單片機數(shù)據(jù)傳輸通路。通常使用 CH340G 或者 CH340C 芯片來完成電平轉(zhuǎn)換。CH340G 需外接 12M 晶振,而 CH340C 內(nèi)部自帶晶振,所以可以不接外部 12M 晶振。開發(fā)板上使用的是 CH340C 芯片。通過該芯片可以將USB與單片機串口建立一條通路,這樣就可以直接利用電腦跟我們的開發(fā)板進行連接。
??開發(fā)板下載電路如下圖所示:
從上圖可以知道,USB1 接口即為程序下載接口,D-和 D+連接到 C H340 芯片的 D-和 D+,然后 CH340 芯片的串口 TXD 和 RXD 管腳就連接到單片機的串口(P3.0、P3.1)上,這里不是直接連接到單片機串口,而是通過 P5 端子進行轉(zhuǎn)接。這樣做不僅可以讓開發(fā)板 USB 接口下載程序,還可以讓單片機串口不受 CH340 干擾,這樣開發(fā)板也可以當(dāng)成 USB 轉(zhuǎn) TTL 模塊使用,該設(shè)計也是考慮 WIFI、藍牙等模塊與串口通信不受干擾問題。 需要特別注意,串口通信是需要交叉連接:TXD -> RXD-U -> RXD、RXD -> TXD-U -> TXD。
??USB1 接口不僅可以作為程序下載口,還可以作為串口通信口,因為它本身就是實現(xiàn)串口下載。同時還可以作為電源供電口,可以看到 USB1 的管腳 1 就是 5V電源腳,所以開發(fā)板的可以直接使用 USB 線來供電,如果提供的 USB 線有問題,可以使用安卓手機數(shù)據(jù)線,接口都是兼容的。當(dāng)電源開關(guān)打開后,電源指示燈DP1 即會點亮,表明系統(tǒng)電源正常。
??本電路是一鍵自動下載電路,無需冷啟動。主要依靠上位機軟件(PZ-ISP)控制 CH340 芯片的 RTS 和 DTR 腳輸出,進而使 MOS 管 Q3 自動斷
電后上電,完成冷啟動工作。
總結(jié)
以上是生活随笔為你收集整理的51单片机 | 数字电路与C语言基础 | 51单片机最小系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用六年成为一个全能的机器人工程师
- 下一篇: Windows下目录下文件批量重命名