目前,單片機型號種類繁多,以其優越的控制性能在自動化控制領域占有重要地位。如今單片機無處不在,像我們的電冰箱、空調、洗衣機都是單片機在內部控制,當然,他們所用的單片機是定制的,并不是我們學習時使用的單片機。除此不同品牌的單片機芯片采用的內核也會不同,比如INTEL公司的MCS-51內核(代表芯片:AT89系列、國產STC系列等),ARM公司的高性能”Cortex-M3”內核(代表芯片:STM32系列)等。因為內核的差異,使得他們在使用中也會有所不同。
對于初學者來說,51單片機中的STC89C52是很不錯的選擇,因為它便宜(單片價格在8RMB左右),而且相對容易學習。接下來將以這款芯片為例介紹51單片機。
![圖片](https://mmbiz.qpic.cn/mmbiz_jpg/Px0x0xOsMVYtRiaptO9smicSJgxvy60V2QAxC1gRj5JBuBMpN1srJ1tNg6NcjNg25ZnNERIxh3iaKIfzZlHXNCvmQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)
首先簡單介紹這款芯片:
1.STC89C52是STC公司(中國深圳宏晶科技公司)生產的一種低功耗、高性能CMOS8位微控制器,具有8K字節系統可編程Flash存儲器(8K對單片機來說不小了,當然不能跟我們的手機比),使用MCS-51內核,指令代碼完全兼容傳統8051。
2.工作電壓范圍很廣(這里只介紹5V版本),在3.3V~5.5V之間都能工作,但是電壓越高,工作電流也會更大,通俗的說,如果用單片機點亮一顆LED燈,使用5.5V供電,燈的亮度要比3.3V供電時亮,耗電也會更多。
3.通用I/O 口(4x8=32個),復位后為:P1/P2/P3 是準雙向口/弱上拉, P0 口是漏極開路輸出,作為 I/O 口用時,需加上拉電阻。(除非某I/0口置零,否則它就輸出高電平)
4.工作頻率范圍:0~40MHz,相當于普通8051 的0~80MHz,實際工作 頻率可達48MHz,其工作頻率取決于晶振頻率,我們常用的是12MHz、11.0592MHz。
5.ISP(在系統可編程)/IAP(在應用可編程),可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序。在學習過程中,我們只要使用ISP即可,也就是制作好電路板之后,只要把RxD/P3.0,TxD/P3.1通過排針引出來,我們就可以通過USB-TTL把程序燒錄到單片機,不需要再把單片機芯片從系統板上取出來。
6.共3 個16 位定時器/計數器。即定時器T0、T1、T2
首先需要了解這款芯片的引腳圖,才能根據引腳連接各種元件。(暫時只標注常用的的功能)
接下來詳細探討各模塊:
** 1,I/O口**
I/O口即輸入輸出口,是單片機用來輸出或者輸入信號的端口。STC89C52共有四組(P0、P1、P2、P3),每組8個(每組I/O口能同時輸出8位二進制數。其CPU計算時的數據寬度正好也是八位,所以該芯片為8位控制器),共32個I/O口。
單片機所有I/O口默認狀態都是高點平,除非在程序里將其置0,這樣的設定可以讓單片機運行更穩定。
通常,I/O口都會連接上拉電阻,其目的一是使單片機運行穩定,二是提高單片機驅動能力,即讓單片機能控制更大的負載。上拉電阻我們常用阻值為10K的9P排阻即可(其大小在1~10K都可,電阻小可提高驅動能力,電阻大可以降低功耗)。它有9個引腳,一個為公共端,另外八個引腳與I/O口相連。其結構及接線圖如下圖所示。注意,除了上拉電阻,還有下拉電阻,上拉電阻的公共端是接VCC,下拉電阻的公共端是接GND。
2.時鐘電路
這里的時鐘并不是我們所說的鐘表,而是指一種信號(理想的時鐘信號就是矩形波,或者說脈沖波)。從數字電子技術中學習知道,在邏輯電路中,必須依靠時鐘信號才能工作(例如觸發器,每收到一個時鐘信號,就動作一次),單片機其實就可以看成就是一個集成化的邏輯電路。所以我們需要外接時鐘電路,來讓單片機工作。
時鐘電路的核心是晶振,它是一種可以產生穩定震蕩頻率的電子元件。它的基本參數是震蕩頻率,單位為MHz,其參數決定了單片機的工作頻率。其數值一般刻在晶振元件上面。常用的單片機晶振主要有12.000MHz和11.0592MHz,當程序中使用了定時器,使用11.0592MHz晶振可以定時更準確。
時鐘電路除了晶振還有兩個瓷片電容(30pF),這兩個電阻可以起到微調頻率的作用。
晶振電路有兩個端口XT1和XT2,將這兩個端口分別與單片機的18腳(XTAL2)、19腳(XTAL1)相連即可為單片機提供時鐘信號(這兩個端口沒有順序,可以隨意連接)。
3.復位電路
復位電路說白了就是用來重啟單片機,使單片機初始化,重新開始執行程序。當單片機因程序問題出現故障(比如程序中出現不可控的死循環),可通過復位電路向單片機第9腳RET發送一個復位信號,單片機就可自行復位。這個復位信號是一個連續2個機器周期(24個時鐘周期)的高電平。也就是單片機的RES腳如果連續兩個機器周期都是被置于高電平,單片機就會自動復位。
所以最簡單的復位電路就是上圖所示。按下開關K,VCC接入單片機RST,兩個機器周期后,單片機復位。(實際使用中,你按下按鈕立刻松開,這段時間已經遠超過兩個機器周期,所以按下復位鍵不需要停頓再松開)如果一直按著復位鍵,單片機則不會進入工作狀態,只有松開復位鍵單片機才開始工作。
一般來說,單片機上電以后自動從程序開頭執行,所有寄存器也是初始值,上電之后立即執行程序本是沒有問題的。但是在一些復雜的電路中,單片機的外接電路很多,有時候會有電容電感之類的,他們上電之后并不能立即進入工作狀態,他們有個“充電”過程,雖然時間短,但是單片機執行一條指令是微秒級的,很容易讓單片機誤判,出現意想不到的錯誤。如何避免這種現象?
請設想:如果單片機上電之后,不立即進入工作狀態,而是停頓“一會兒”,等其他元件充電完畢,再進入工作狀態,那就可以躲開上電初期的不穩定因素,從而避免誤判。
那如何實現這個停頓呢?這就依賴于復位電路的上電自動復位了。
上面是單片機常用的復位電路。
其原理涉及到電路原理中的KCL定律和一階電路的零狀態響應,不感興趣可略過。
上電后,電解電容C1充電,其電壓變化為 [式1],
而RET處的電位即對地電壓,可以看到,電阻R9的電壓在數值上正好等于RET的電位,
根據基爾霍夫電壓定律,R9的電壓=電源電壓-電容C1電壓,即,
式中的τ為時間常數,其值為τ=RC=1000X22/1000000=22ms,其電壓變化曲線如圖(簡略繪制,僅供參考):
可以看到在很長一段時間里(其實不到20ms),Ur都保持在較高的電位,也就是RET為高電平(3.7V以上電壓單片機都認為是高電平),在這段時間,足夠單片機躲過上電初期的不穩定。當Ur的電壓減小到不足以讓單片機判定為高點平,復位失效,單片機工作。
可以看到這種復位電路也能手動復位,按下開關S1,電容C1通過R10放電,松開S1,電容C1又開始充電,其情形與上電復位相同,RET接收到高電平,單片機復位。
所以復位電路的作用一是開機自動復位,躲過上電時的不穩定;二是手動復位,在單片機運行出錯時使用。
4.其他引腳
并行串口:第10、11腳是單片機的并行串口,作用就是燒錄程序。注意這兩腳是P3.0、P3.1復用了。燒錄程序需要用到燒錄工具USB-TTL。
實際的USB-TTL有很多型號,有的型號有10個引腳,但燒錄程序只需用到四個(VCC、GND、RXD、TXD)。所以我們需要四根杜邦線,首先,將轉換工具上的VCC、GND與單片機系統板的VCC、GND連接,然后把燒錄工具的RXD與單片機的TXD連接,燒錄工具的TXD與單片機的RXD連接。因為兩個引腳一個是發送數據,一個是接收數據,轉換工具發送數據(TXD),單片機自然是接收數據(RXD),反之同理。另外,燒錄程序還需用到軟件STC-ISP,這是專門用于STC系列單片機的燒錄軟件。
存儲器選通:單片機的31腳是存儲器選通EA,單片機內部存儲空間很小,如果需要擴展空間,就需要用到這個功能。當EA置于高電平,單片機從內部存儲器開始執行程序;當EA置于低電平,單片機則從外部存儲器開始執行程序。對初學者來說,我們使用內部存儲器就足夠了,所以可以直接將EA接VCC。
同樣,第30腳ALE為地址鎖存信號,也是在有外部存儲器是使用,不用時將其懸空即可;29腳PSEN為外部存儲器讀選通信號,同樣將其懸空。另外的40腳、20腳分別接電源正極、負極(地)不用多說了。
-
微控制器
+關注
關注
48文章
7336瀏覽量
150107 -
存儲器
+關注
關注
38文章
7366瀏覽量
163092 -
STC89C52
+關注
關注
41文章
330瀏覽量
81820 -
51單片機
+關注
關注
272文章
5689瀏覽量
122167
發布評論請先 登錄
相關推薦
評論