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