




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第1章 基礎知識1.1 概述作為初學者,在全面、深入學習單片機開發(fā)應用技術之初,一定會提出許許多多與單片機相關的問題(如下所列),正確理解并回答這些問題,無疑為學好、用好單片機開了個好頭。1.1.1什么是單片機單片機是單片微型計算機的簡稱。圖1-1是常見單片機實物圖,其中包括51系列、stc系列、pic系列和avr系列單片機。說它們是一款計算機,你可能會產生質疑:這也是計算機?從外觀來看,它與我們日常使用的臺式電腦、筆記本電腦大相徑庭,但它們的確是計算機。俗話說:“麻雀雖小,五臟俱全”,一般計算機所擁有的基本結構,例如處理器、存儲器、輸入/輸出等,單片機同樣擁有。之所以稱為單片計算機,是因為它
2、們將處理器、存儲器、輸入/輸出等組件全部集成在一塊芯片上的原因。圖1-1 常見單片機實物圖1.1.2單片機能干什么目前,單片機在工業(yè)控制、智能儀器儀表、消費類電子、軍事、醫(yī)用、網絡通信等領域都有十分廣泛的應用,且其應用領域還在進一步地拓展。1、工業(yè)控制領域:工業(yè)現(xiàn)場實時測控、數(shù)據(jù)采集等;2、智能儀器儀表領域:數(shù)字萬用表、數(shù)字示波器、數(shù)字信號源、數(shù)字頻率計等;3、消費類電子領域:洗衣機、電冰箱、空調、電視機、微波爐、ic卡、電子玩具、數(shù)碼相機、數(shù)碼攝像機等;4、軍事領域:飛機、坦克、導彈、魚雷、制導、智能武器等;5、醫(yī)用領域:呼吸機、監(jiān)護儀、超聲診斷、病床呼叫等;6、網絡通信領域:電話機、手機、
3、程控交換機、樓宇自動呼叫、無線通信等??傊?,單片機的應用已經并將滲透到人類工作和生活的多個領域。據(jù)不完全統(tǒng)計,目前世界上單片機的年銷售量已超過12億片。1.1.3什么是單片機應用系統(tǒng)單片機應用系統(tǒng)是軟件、硬件相結合的綜合應用系統(tǒng),軟件和硬件二者缺一不可,如圖1-2所示。圖1-2 單片機應用系統(tǒng)對于硬件,首指就是單片機。單片機種類較多(51,avr,pic,stc等系列),我們選用51系列單片機,圖1-1中就有40個引腳的雙列直插式(pdip40)封裝的51系列單片機。一個單片機應用系統(tǒng)的硬件部分,只有單片機是遠遠不夠的。單片機是必需的,但還需其它外部硬件設備或元件,這些外部硬件設備或元件一般被
4、稱為外部設備,簡稱外設,如圖1-3所示。這些外設器件與單片機一起工作,才能完成或者實現(xiàn)具體功能。 圖1-3 51單片機硬件系統(tǒng)使用的部分常見外設硬件我們暫且放在一邊不談,再說軟件。軟件開發(fā)簡言之就是編寫程序。選用什么語言?用什么軟件?怎樣編寫程序等等問題都將接踵而來,以下我們先簡單說明一下這些問題。選用什么語言?c語言!其實,在單片機軟件系統(tǒng)開發(fā)中,編程語言有兩種:c語言和匯編語言。之所以選用c語言而未選用匯編語言,是由于在編寫單片機程序方面,c語言相比匯編語言有許許多多的優(yōu)勢,在此,我們不再歷數(shù)那些優(yōu)勢具體是什么,總之,就用c語言了!用什么軟件?keil !這是目前用得最多、最廣泛的單片機c
5、語言軟件開發(fā)環(huán)境。keil有vision2,vision3,vision4等版本,我們選用vision3。怎樣編寫單片機c語言程序?這個問題不是一兩句話能解釋清楚的,但有一個總體的目標,這就是以硬件為前提基礎,準確運用c語言,編寫出結構完整、具有一定功能、能在單片機上實際運行、能實現(xiàn)具體功能的c語言程序。c語言的語法比較少,單片機中用到的c語言語法更少!所以在使用c語言進行單片機編程前,沒有必要將c語言的全部知識系統(tǒng)地學習或復習一遍。以往,要學習單片機,并準備用c編寫程序,一般是先系統(tǒng)地學習c語言,再系統(tǒng)地學習單片機知識,最后將二者結合起來,再學習c語言的單片機開發(fā)應用。現(xiàn)在,我們的思路與以前
6、大不相同,具體做法是,打破傳統(tǒng)的知識體系框架,設計一系列從簡單到復雜的單片機應用開發(fā)項目,將c語言知識、單片機知識融入具體項目中,在具體應用開發(fā)項目的實際工作過程中,學習并掌握基于c語言的單片機應用開發(fā)技術。教學中,針對具體項目,僅對本項目涉及到的c語言知識點、單片機知識點做細化講解,本項目不涉及的知識點暫且不提,以夠用、實用為原則,以解決實際問題為最終目的。在一個個應用項目開發(fā)的實踐和實現(xiàn)過程中,逐步學習和掌握c語言單片機開發(fā)的方法和技巧。在本書后續(xù)章節(jié)中,我們將舉出大量單片機c語言應用開發(fā)的實例,結合這些具體實例,無論你以前學過還是沒有學過c語言、了解不了解單片機知識,都沒有關系,只要緊跟
7、本書的章節(jié)和每一個具體實例,深入研究和學習,相信你一定會掌握單片機c語言開發(fā)的技術,成為單片機應用開發(fā)的高手。1.2 單片機應用系統(tǒng)開發(fā)流程1.2.1單片機應用系統(tǒng)開發(fā)流程概述如圖1-2所示,單片機應用系統(tǒng)包括硬件系統(tǒng)和軟件系統(tǒng),對應地,單片機應用系統(tǒng)的開發(fā),也主要包括硬件部分開發(fā)和軟件部分開發(fā)兩大部分。實際工作中,當軟件和硬件開發(fā)工作完成之后,還要將軟件開發(fā)生成的.hex文件下載(俗稱“燒片)到單片機的程序存儲器rom中。由于下載燒片工作一般使用專門的設備(如編程器)來完成,因此操作比較簡單,使用者只要正確操作該設備及相關軟件,都能成功下載燒片,所以在單片機應用系統(tǒng)的開發(fā)流程中,下載燒片這一
8、開發(fā)環(huán)節(jié)往往被淡化或者忽略不提。本書沿襲慣例,對下載燒片環(huán)節(jié)不做過多說明,有興趣的讀者請參看附錄c或其它資料。此處專門提出這一環(huán)節(jié),只是希望能引起讀者的注意,不要忘記最后這一環(huán)節(jié)。再說單片機開發(fā)中的軟件和硬件,可以說,硬件是整個應用系統(tǒng)的基礎,而軟件則依賴于系統(tǒng)的硬件。在硬件不再改變的條件下,軟件程序的改變,可以部分改變系統(tǒng)的功能。但從整體而言,單片機應用系統(tǒng)的開發(fā),本是一個“軟硬兼施”的過程,軟件和硬件需要互相彌補,密切配合。部分用硬件不能實現(xiàn)或者不便實現(xiàn)的功能,可以考慮用軟件去補充或實現(xiàn);同樣道理,選擇適當?shù)挠布?,也可以彌補軟件功能上的缺憾或不足,二者相得益彰,互相配合,才能使任務最終實現(xiàn)
9、。就單片機應用系統(tǒng)的開發(fā)流程而言,硬件和軟件在開發(fā)次序方面,原則上無先后之分,先開發(fā)哪一個都可以,有時候二者還可以同步進行設計和開發(fā)。但考慮到硬件是基礎,所以通常情況下是先開發(fā)硬件,再開發(fā)軟件。對于硬件部分的開發(fā),簡言之就是設計和加工電子線路板,或者手動焊接電子線路板。具體而言,硬件部分的開發(fā)絕非易事。首先是硬件電路所用元器件種類繁多,特性各異,全部掌握或了解實屬不大可能;再次,硬件電路的設計開發(fā)需要很高的設計技巧,絕非一日之功可以成就。本書作為單片機初學者的入門教材,對后續(xù)各章節(jié)中列舉的各個實例,針對不同的任務要求,直接給出了硬件電路圖,并對部分主要和重要元器件的特性和功能,也做了詳細介紹,
10、方便初學者參考學習并逐漸積累硬件設計的經驗,以便日后能自行設計較復雜的硬件電路。 相對于硬件部分的開發(fā),軟件部分的開發(fā)則較為靈活。正如前面所述,開發(fā)語言可以選擇匯編語言,也可選擇c語言,還可以是匯編語言和c語言混合編程。我們主要選用的是c語言,開發(fā)環(huán)境則選用keil的vision3。需要特別說明的是,在軟件開發(fā)部分,開發(fā)流程幾乎是固定不變的,如圖1-4所示,主要包括工程建立、源程序編寫和編譯調試三個步驟;軟件開發(fā)的結果是生成擴展名為.hex的文件,該文件被用于下載或者燒片到單片機的程序存儲器rom中,供單片機上電后再讀出來執(zhí)行,從而驅動或者控制外部設備按照預定的要求正常工作。從軟件開發(fā)的流程可
11、見,針對不同的項目任務,編寫的源程序不大相同,其余步驟則基本固定不變。與對硬件開發(fā)的處理思路一樣,本書對于后續(xù)各章節(jié)中列舉的各個實例,針對不同的任務要求,直接給出源程序清單,對主要和重要的功能模塊,給予解釋和說明,供初學者參考學習,而軟件開發(fā)過程中的其它步驟則一概簡化或略去,重點放在功能實現(xiàn)和源程序的編寫上,其它與keil相關的軟件操作則被淡化,只因這些操作和步驟基本上是固定不變的。鑒于以上概述,以下僅就軟件開發(fā)的具體流程做詳細說明。圖1-5是在圖1-4的基礎上,細化其中的三個主要步驟所得單片機軟件開發(fā)流程圖。 圖1-4 軟件開發(fā)流程 圖1-5 細化的軟件開發(fā)流程1.2.2單片機應用系統(tǒng)軟件開
12、發(fā)流程1、工程建立(1)啟動keil vision3軟件假設keil vision3軟件已正確安裝,啟動keil vision3軟件與啟動其它軟件的方法完全相同:單擊并依次選擇【開始】【程序】【keil vision3】,或者直接雙擊桌面上keil vision3的快捷方式圖標,均可啟動keil vision3。啟動過程中,屏幕出現(xiàn)如圖1-6所示啟動界面。啟動界面消失后,keil vision3就進入了如圖1-7所示編輯界面,此時keil vision3軟件已成功啟動。圖1-6 keil vision3啟動界面圖1-7 keil vision3啟動成功后的編輯界面(2)新建工程keil 與現(xiàn)在
13、眾多的軟件開發(fā)環(huán)境一樣,均采用工程或者項目的管理方式來管理文件。一個應用開發(fā)任務就是一個工程或項目。一般地,以開發(fā)任務的名稱為新建的文件夾名,所有與該開發(fā)任務有關的文件都存放在該文件夾中,不同開發(fā)任務的文件夾名一般不相同。下面首先是新建工程。單擊keil vision3的【project】菜單,在展開的下拉菜單中單擊【new project】,如圖1-8所示。在隨后打開的保存新建工程窗口中,選擇新建工程的保存路徑,并為新建的工程命名,最后單擊【保存】按鈕保存該新建的工程。注意,工程的擴展名不用輸入,系統(tǒng)會默認選擇為“.uv2”。此處將工程暫且命名為“l(fā)ed1”,并保存在f盤的文件夾led下。如
14、圖1-9所示。圖1-8 新建工程圖1-9 保存工程(3)選擇單片機型號當單擊圖1-9所示新建工程保存窗口中的【保存】按鈕之后,keil vision3會彈出單片機型號選擇對話窗口,如圖1-10(a)所示。在該對話窗口中,要求用戶選擇該工程準備使用的單片機芯片的型號。此處選擇atmel公司生產、使用最普及的at89c51芯片。具體操作是:在圖1-10(a)左側欄所列眾多廠家中找見“atmel”,單擊“atmel”名稱前的加號“”,展開atmel公司生產的單片機系列產品,如圖1-10(b)所示;接著,在展開的atmel公司生產的單片機系列產品中,單擊選中“at89c51”,如圖1-10(c)所示;
15、最后,單擊【確定】按鈕,芯片型號的選擇完成。此時,keil vision3會彈出如圖1-11所示對話窗口,詢問是否復制并添加標準8051啟動代碼到當前工程,一般單擊選擇【是】即可。圖1-10(a) 選擇51單片機的生產廠家圖1-10(b) 單擊展開atmel公司生產的單片機產品圖1-10(c) 選中atmel公司生產的單片機at89c51圖1-11 是否添加8051啟動代碼到當前工程對話窗口完成以上步驟之后,屏幕重新回到如圖1-12所示編輯界面,圖1-12與圖1-7基本相同,不同之處是左側“工程管理工作臺”中的內容,圖1-7中,“工程管理工作臺”中什么也沒有,而圖1-12中,“工程管理工作臺”
16、中有名為“target 1”的對象,單擊其名稱前面的加號,還可以看到該對象內所包含的文件。圖1-12 已含有“target 1”對象的編輯界面2、源程序編寫新建工程完成之后,以下該進入源程序的編寫環(huán)節(jié)了。(1)新建并保存源程序文件單擊打開keil vision3的【file】菜單,再單擊選擇第一項【new】,或者直接單擊工具欄中“創(chuàng)建一個新文件”快捷圖標,都可以新建一個默認名字為“text 1”的文件。新建之后,i型光標就在“text 1”文件的編輯窗口中閃爍,如圖1-13所示。需要說明的是,默認的文件名也許由于多次新建文件而出現(xiàn)“text n”的字樣,其中n是一整數(shù),因為馬上要將該文件進行保
17、存或另存為其它名稱的文件,所以原來的文件名是什么都無關緊要。接下來將源文件進行換名保存。單擊【file】菜單中的【save】或者【save as】,也可直接單擊工具欄中的存盤快捷圖標,都可打開如圖1-14(a)所示文件另存為窗口。將其中的原始默認文件名“text 1”更換為“l(fā)ed1.c”。此處特別要提起注意的是,因為我們使用c語言來編寫源程序,所以源程序的命字中,其擴展名必須是“.c”,正如前面提到的,單片機的編程語言除c語言外,還有匯編語言,如果使用匯編語言編寫源程序,則源程序文件名的擴展名就必須是“.asm”。此處,源文件更名為“l(fā)ed1.c”,其中的擴展名“.c”表明這是用c語言編寫的
18、源程序,如圖1-14(b)所示,最后單擊【保存】。單擊【保存】后,源程序文件的名字已經更換,且源程序編輯窗口的標題欄顯示為“f:ledled1.c”字樣。如圖1-15所示。圖1-13 新建源程序文件界面圖1-14(a) 源程序文件更名前界面 圖1-14(b) 源程序文件更名后界面圖1-15 更名保存后的源程序文件界面(2)加載源程序到工程中加載源程序到項目工程是非常重要的一個步驟。未加載源程序之前,該項目工程管理工作臺如圖1-16(a)所示,加載源程序文件之后如圖1-16(b)所示??梢姡虞d源程序之后,源程序文件led1.c被添加進入了工程管理的工作臺中。 圖1-16(a)加載源程序之前 圖
19、1-16(b)加載源程序之后加載源程序的具體過程如下:在工程管理工作臺中,單擊對象“target 1”前面的加號“”將其展開,右擊文件夾“source group 1”圖標,在彈出如圖1-17所示快捷菜單中,選擇“add files to group source group 1”菜單項。隨后,屏幕彈出選擇源程序文件對話窗口,如圖1-18所示。雙擊圖1-18中文件“l(fā)ed1.c”之后再單擊【close】按鈕,或者單擊圖1-18中文件“l(fā)ed1.c”之后再單擊【add】按鈕,都可將源程序文件“l(fā)ed1.c”加載到工程項目中,結果如圖1-16(b)所示。此過程之所以重要,原因是,如果沒有添加源程序
20、文件,則該工程項目如同一個軀殼或者空的框架,因為沒有包含源程序文件,該工程自然不具有任何功能,即使編譯鏈接等環(huán)節(jié)順利通過,預期的功能也一定不會實現(xiàn)。另一方面,如果給工程項目添加了錯誤的或者多余的源程序文件,在工程的編譯調試環(huán)節(jié)可能就會報錯,即使編譯通過,也不能保證其功能是正確的。如果出現(xiàn)這樣的情況,也不必驚慌,只需將這些錯誤的、或者多余的文件從工程項目中移除即可。具體做法是:在工程管理工作臺中,在準備移除的文件上右擊,在彈出的快捷菜單中選擇“remove file xxx.c”(xxx代表被移除文件的名字)即可。(3)編譯選項設置工程編譯的目的,是將源程序文件經編譯、鏈接,最終生成可以用于下載
21、燒片的.hex文件,其中,.hex是十六進制文件的擴展名。在進行工程的編譯、鏈接之前,首先要對編譯環(huán)境進行必要的設置,設置完成后才可以進行編譯。單擊打開【project】下拉菜單,在展開的下拉菜單項目中,單擊選擇【options for target target 1】,或者直接單擊工具欄中options for target快捷方式圖標,都可以打開編譯選項設置窗口,如圖1-19所示。可以看到,盡管此窗口包含多個用于編譯選項設置的標簽頁,但在一般使用中,只有兩個標簽頁中的部分選項需要設置,其余標簽頁則保持原始默認值即可。這兩個標簽頁就是output和debug標簽頁,如圖1-19中所示。單擊【
22、output】標簽頁,即可打開output(輸出)選項設置窗口。如圖1-20(a)所示。在此窗口中,只須選中“創(chuàng)建.hex文件選項”:在如圖1-20(a)中標注指示的復選框中,單擊打鉤,表明工程編譯之后,輸出或者說生成用于下載燒片的.hex文件。相反,如果此選項沒有打鉤選中,即使工程完全正確,且編譯通過,但不會生成用于下載燒片的.hex文件。因此,如果需要進行程序的下載燒片或仿真調試,則此選項必須要打鉤選中。此選項打鉤選中后如圖1-20(b)所示。圖1-17 添加源程序到工程的快捷菜單圖1-18 選擇源程序文件對話窗口圖1-19 編譯選項設置窗口 圖1-20(a) output選項設置窗口(創(chuàng)
23、建.hex文件選項未選中) 圖1-20(b)創(chuàng)建.hex文件選項選中接下來就該設置debug標簽頁了。單擊如圖1-19中所示【debug】標簽頁,即可打開debug(調試)選項設置窗口,如圖1-21所示。此標簽頁默認的調試工具是simulator。如果使用默認的調試工具,具體調試時,只能從keil vision3軟件的部分調試窗口中觀察數(shù)據(jù)的變化情況,實際的硬件電路是不工作的,自然看不到硬件電路中元器件的實際動作和運作現(xiàn)象,所以一般不選默認調試工具。另外,在調試時,為了讓程序能直接跳轉到主函數(shù)main后再開始繼續(xù)運行,一般都將圖1-21中所示“go till main()前面的復選項打鉤選中。
24、如果不使用默認的調試工具,則可以選定自己熟悉的、手頭上可用的調試工具。選擇如圖1-22所示debug標簽頁右半邊的“use” 單選項(默認調試工具“simulator”與此處的“use”二者只能選擇其一),并從其右側的下拉列表欄中選中自己使用的調試工具。例如,作者一般使用偉福v系列仿真器、proteus vsm simulator、keil monitor-51 等調試工具。同樣,在調試時,為了讓程序直接運行到主函數(shù)main后再開始繼續(xù)運行,圖1-22中所示“go till main()前面的復選項一般也打鉤選中。當以上兩項設置結束之后,單擊【確定】按鈕,保存此選項設置。需要說明的是,對于一個
25、工程,此編譯調試選項設置只需做一次;新建了新的工程后,此編譯調試選項需重新設置一次,并且每次設置幾乎完全相同。圖1-21 默認調試工具選項設置 圖1-22 自定義調試工具選項設置(4)編輯源程序接下來就該編寫源程序文件了,源程序文件在源程序編輯窗口中編輯輸入。假定源程序文件如下:#include sbit led0=p20;main()led0=0;在編輯輸入或修改源程序期間,編輯窗口標題欄顯示為“f:ledled1.c*”,其中,文件名后面緊跟一個星號“*”,星號表明此源文件正處于編輯未保存狀態(tài)。無論在任何時候,都可通過單擊工具欄中的保存快捷圖標(打開【file】菜單后選擇保存也一樣)保存源
26、程序文件,此時,標題欄中文件名后的星號就會消失,表明文件已保存。在編輯輸入上述源程序并保存之后,源程序的編輯即已完成。注意,在編輯或者修改完源程序之后,一定要保存源程序,這樣做的意義是,能保證編譯及生成的.hex文件是編輯或修改后的源程序生成的,而非編輯或修改前源程序編譯生成的。另外,此處不用急于弄清楚這個源程序的具體功能,讀者只需按照原樣編輯輸入即可,因為現(xiàn)在的重點是掌握使用keil vision3軟件來生成單片機下載(燒片)所需文件的具體流程,重點不在源程序是什么具體功能。相反,在后續(xù)章節(jié)中,結合多個具體的實例,分析源程序的功能,甚至每一條語句的功能,自然成為了重點。3、編譯調試接下來該對
27、工程進行編譯和調試了,編譯和調試的目標就是生成可用于下載燒片的.hex文件。對于軟件程序開發(fā)而言,編譯調試與源程序的編輯修改是一個循環(huán)往復的過程,一般是經歷編輯編譯再編譯再修改這樣一個循環(huán)往復的過程,直至編譯成功、預期的功能完全實現(xiàn)為止。在keil vision3的工具欄中,有三個編譯快捷方式圖標和一個調試快捷方式圖標,如圖1-23中標注所示。圖1-23 編譯和調試快捷圖標從字面理解,編譯當前,就是對當前正在操作的文件進行編譯;全部編譯就是將該工程中所有文件全部重新編譯,而編譯則是僅將本次修改過的文件進行編譯,沒有修改或變動的文件不編譯。實際使用中,為了防止疏漏,一般選擇全部編譯者居多。對于調
28、試,單擊圖1-23所示調試快捷方式圖標,可使工程進入調試狀態(tài)。此時,keil vision3的工具欄出現(xiàn)如圖1-24所示調試工具欄。運用這些調試工具,可以監(jiān)控和調試程序的每一條語句及其執(zhí)行結果的每一個細節(jié)。圖1-24 調試工具欄介紹了編譯和調試工具之后,下面僅就如何編譯做具體說明,有關調試的相關細節(jié),請讀者參閱附錄b和第2章部分內容,亦可參閱其它書籍或資料,也可自己通過實踐去掌握。現(xiàn)在,源程序已經編輯完成,并且已被加載到工程中,相關的編譯調試選項也已設置完畢,下面就開始工程的編譯了。單擊圖1-23中所示全部編譯快捷圖標,工程開始編譯。編譯結束后,編譯信息就出現(xiàn)在信息輸出窗口中,如圖1-25所示
29、。此處的編譯信息表明,該工程編譯是成功的,生成了.hex文件:led1.hex,編譯時沒有出現(xiàn)錯誤,也沒有出現(xiàn)警告(“0 error(s), 0 warning(s).”)。此時,若查驗存放該工程的文件夾,就會發(fā)現(xiàn),與該工程同名、擴展名為.hex的文件在該文件夾中存在,該文件就是本工程編譯生成的、用于下載燒片的文件led1.hex。圖1-25 信息輸出窗口中的編譯信息如果源程序文件有錯誤,在工程編譯時,就會在信息輸出窗口中顯示錯誤的位置所在和錯誤、警告的個數(shù)。在信息輸出窗口中,通過在提示出現(xiàn)錯誤的信息行文字上雙擊,鼠標的光標就會定位在源程序中出現(xiàn)錯誤的位置附近,依據(jù)錯誤提示信息,找出錯誤所在并
30、修改,修改完成后要注意保存源程序。保存修改后的源程序之后,再進行編譯,直到工程沒有錯誤(警告可以忽略),并且生成正確的.hex文件為止。有關編譯時常見的錯誤信息及其含義請參閱附錄b。至此,軟件開發(fā)過程結束。通過軟件開發(fā),最終生成了下載燒片所需要的.hex文件。后續(xù)的工作就是通過編程器或者下載器,將該.hex文件下載或者燒片到單片機的程序存儲器中,然后給硬件電路上電,讓單片機與其外部的硬件設備一起工作,完成預定的各項任務功能。下載和燒片的相關內容可參閱附錄c。1.3 mcs-51單片機主要引腳介紹51系列單片機中,雙列直插、40只引腳單片機的實物圖和引腳原理圖如圖1-26(a)和1-26(b)所
31、示。 圖1-26(a)dip40引腳51單片機實物圖 圖1-26(b)dip40引腳51單片機引腳原理圖觀察51單片機芯片實物,可以發(fā)現(xiàn)其正面頂端中央有一個直徑約2.5毫米的半圓形凹坑,凹坑左側、引腳旁邊有一引腳起始標記。對于起始標記,一般用一個小三角形作為標記,也有用一個小圓點和指向小圓點的三角形箭頭共同作為標記的。無論用什么做起始標記都不大重要,重要的是這個標記左側的第一個引腳就是該芯片的第一只引腳,即引腳1。然后沿逆時針方向,引腳號依次為2,3,4,40,共計40只引腳。在芯片上印有起始引腳標記,不是單片機芯片特有的,幾乎所有的芯片都有此標記,依據(jù)此標記,可以找到起始引腳1,沿逆時針方向
32、,其它引腳自然能夠找到。芯片引腳在硬件電路的設計和焊接過程中非常重要。如果一個單片機系統(tǒng)的硬件部分出現(xiàn)引腳的連接錯誤或其它類似問題,這個系統(tǒng)自然不會正常工作,也不可能得到預期的功能和結果。在能清楚地找到和區(qū)別51單片機的40只引腳后,下面就這40只引腳做較為細致的說明。51單片機的40只引腳,可以分成三類:、電源和時鐘引腳:vcc,gnd,xtal2,xtal1;、i/o口引腳:p0口,p1口,p2口,p3口,每一個口有8只引腳;、編程和控制引腳:rst,ale,psen,ea;vcc(40腳):是電源端,一般接5v10%電源。gnd(20腳):接地端。xtal2(18腳)和xtal1(19腳
33、):外接時鐘引腳。當單片機使用內部振蕩電路時,此二腳之間連接石英晶體(晶振)和振蕩電容。常用晶振的頻率有6mhz,12mhz,11.0592mhz,24mhz,一般選12 mhz者居多。如果是串行通信,則選11.0592mhz為最佳。振蕩電容一般選無極性電容,容量在30 pf左右均可。p0口(39腳32腳):p0口是一個漏極開路8位準雙向三態(tài)口,由于內部沒有上拉電阻,故呈高阻態(tài),因而不能正常輸出高或者低電平,在使用時要外接上拉電阻,一般取4.7k或5.1k均可。p0口的8個位分別是p0.0,p0.1,p0.2,p0.7,且每一個位可以單獨控制。p1口(1腳8腳):p1口是一個內部有上拉電阻的8
34、位準雙向i/o口。由于輸入不能鎖存,輸出沒有高阻態(tài),所以不是真正的雙向i/o口,姑且稱之為“準”雙向i/o口。p1口在輸出時沒有什么特殊要求,但在輸入時,必須先置1,即先向口寫入高電平1,然后外部的高或者低電平才能被單片機準確地“讀”取。p1口的8個位分別是p1.0,p1.1,p1.2,p1.7,且每一個位可以單獨控制。p2口(21腳28腳):p2口也是一個內部有上拉電阻的8位準雙向i/o口。其特點與p1口完全相同,輸入時也必須先置1。p2口的8個位分別是p2.0,p2.1,p2.2,p2.7,且每一個位可以單獨控制。p3口(10腳17腳):p3口也是一個內部有上拉電阻的8位準雙向i/o口,但
35、它具有第二功能。p3口的第一功能就是用作一般i/o口,此時,它與p1口和p2口完全一樣。用作第二功能時,p3口的8個引腳分別具有不同的功能,具體如表1-1所示。p3口的8個位分別是p3.0,p3.1,p3.2,p3.7,且每一個位可以單獨控制。需要特殊說明的是,p3大多使用其第二功能。表1-1 p3口第二功能列表引腳序號引腳名1引腳名2第二功能描述10p3.0rxd串行輸入(數(shù)據(jù)接收)引腳11p3.1txd串行輸出(數(shù)據(jù)發(fā)送)引腳12p3.2外部中斷0輸入引腳13p3.3外部中斷1輸入引腳14p3.4t0定時器0外部輸入引腳15p3.5t1定時器1外部輸入引腳16p3.6外部數(shù)據(jù)存儲器寫選通信
36、號輸出引腳17p3.7外部數(shù)據(jù)存儲器讀選通信號輸入引腳rst(9腳):單片機復位引腳。在單片機電源上電接通的情況下,從該腳向單片機輸入連續(xù)兩個以上機器周期(12mhz晶振時,約2s)的高電平,就可以使單片機復位,即讓單片機從程序存儲器(rom)的0000h地址處開始(h代表16進制),重新執(zhí)行程序。ale(30腳):地址鎖存信號輸出端。此引腳的功能有三。一是當單片機在訪問擴展的片外存儲器時,該引腳上出現(xiàn)的下降沿(高電平到低電平)信號,用于將p0口上的地址信號送入鎖存器(例如74hc573或373)鎖存起來,從而實現(xiàn)p0口上輸出的地址信息和數(shù)據(jù)信息的隔離;二是該引腳在沒有訪問擴展的片外存儲器時,
37、其上固定輸出1/6晶振頻率的時鐘信號,例如,當外接晶振12mhz時,ale引腳將固定輸出2mhz的時鐘信號,此信號可作為其它相關外部器件的時鐘信號使用;三是在燒片(程序下載)時要用到此引腳,目前燒片工作有專門的設備(編程器)來完成,開發(fā)者對該引腳不用做任何額外的電路設計或操作,此功能可以不予關注。psen(29腳):片外程序存儲器輸出允許控制端,低電平有效。目前所用單片機的程序存儲器空間已經足夠大,中小型應用開發(fā)一般不需要外接片外程序存儲器,所以此引腳也暫且不用關注。ea(31腳):內部和外部程序存儲器選擇端。當單片機內部沒有程序存儲器時,必須要在單片機的外部擴展掛接程序存儲器,此時,該引腳必
38、須接低電平(接地)。目前所使用的單片機內部都有程序存儲器,且容量足夠大,故該引腳應接高電平(接+5v電源)??紤]到51單片機在復位以后,所有懸空未接的引腳都呈現(xiàn)高電平,所以此引腳可以懸空不接。若想保證該引腳上是穩(wěn)定可靠的高電平,也可以直接將其與+5v電源正極連接。至此,51單片機的40只引腳已經一一列舉,可以看到,具有固定硬件連接的引腳有電源和時鐘引腳、復位引腳:vcc,gnd,xtal2,xtal1和rst,共計5個。ale,psen,ea三只引腳幾乎不用,特別是ea和psen兩只引腳,暫時可以不予關注。剩余32只引腳,分屬4個i/o口,p0,p1,p2,p3,它們是單片機應用系統(tǒng)中,單片機
39、與外界聯(lián)系的通道,自然是以后學習的重點。1.4 晶振電路和復位電路單片機的晶振電路和復位電路,對于任何一個基于單片機的應用系統(tǒng)都是必不可少的,并且該電路具有典型性和通用性。只要是基于51單片機的應用系統(tǒng),其晶振電路和復位電路幾乎完全相同,所以我們直接給出電路圖,讀者只要依據(jù)此電路圖的要求,選取相關元器件,正確焊接,就可以完成51單片機應用系統(tǒng)的晶振電路和復位電路。圖1-27給出晶振和復位電路中用到的瓷片電容、電解電容、晶振、按鈕和電阻的實物圖片及其典型參數(shù)。圖1-27 單片機晶振及復位電路使用元件圖片及參數(shù)瓷片電容無正負極之分,晶振和復位電路中,需要兩片電容值相同的瓷片電容,其典型參數(shù)是30p
40、f;電解電容有正負極之分,具體焊接時應注意區(qū)分正負極,引腳相對較長的為正極,引腳相對較短的為負極,如圖1-27中引腳端頭正負號(,)所示,其典型參數(shù)值為10f;對于晶振,兩根引腳無正負極之分,常用晶振的晶振頻率有6mhz、11.0592mhz、12mhz、24mhz等,圖1-27所示標有參數(shù)“12.000”的晶振就是12mhz晶振;圖中1-27所示按鈕有四個引腳,但是引腳是兩兩短路接通的,具體哪兩個腳短路接通,用萬用表簡單測量便知;51單片機的晶振和復位電路中使用的電阻是阻值為10k的色環(huán)電阻,如果不熟悉色環(huán)電阻的標稱值讀法也沒有關系,用萬用表的歐姆檔直接測量即知其阻值大小。1.4.1 晶振電
41、路為什么單片機要接晶振電路?簡言之,單片機應用開發(fā)電路屬于時序電路范疇,沒有晶振就無法產生時序電路所必需的時鐘信號,單片機就無法按照時鐘信號提供的時序,一步步地執(zhí)行程序代碼,自然無法正常工作,所以必須要接晶振電路。1.4.2 復位電路單片機為什么要復位?單片機的復位如同電腦的重新啟動一樣。單片機一旦復位,便重新從程序存儲器(rom)的0000h地址處開始,逐條取出并執(zhí)行已經“燒”錄在單片機內部程序存儲器中的每一條指令,這些指令屬于單片機應用系統(tǒng)的軟件部分,也就是先前我們編寫的具有一定功能的程序。單片機的復位電路有上電復位和按鈕復位兩類。上電復位是單片機電源上電,單片機就復位,復位后就開始工作;
42、另一類是按鈕復位,通過按下按鈕,使單片機的第9腳rst上,有連續(xù)兩個以上機器周期(一般約2s)的高電平輸入到單片機,就可使單片機復位。而人的手指迅速按一下按鈕(按下并松開)的時間至少在ms級別,遠遠大于單片機復位所要求的微秒級復位時間,所以按鈕按下一次的這段時間完全可以使單片機復位。常見的通用晶振和復位電路如圖1-28所示。注意,圖中的供電電源是+5v直流電源,vcc接+5v直流電源的正極,接地端接+5v直流電源的負極。圖1-28 單片機晶振和復位電路1.5 電平數(shù)字電路中的電平有兩種:高電平和低電平,高電平一般用邏輯1表示,低電平一般用邏輯0表示。那么,電壓多高就算作是高電平,電壓多低就屬于
43、低電平呢?簡單說,+5v電壓是高電平,0v是低電平,這種說法是針對最常見的ttl電平而言的,除ttl電平以外,常見的還有cmos電平等等,且電平的高低判定不是以一個數(shù)值點為依據(jù),相反,電平高低是一個范圍。例如,對于ttl電平,5v是高電平,4.9v,4.8v也是高電平;0v屬于低電平,0.5v也是低電平??梢?,高電平是一個范圍,處于這個范圍的電平都可以認為是高電平,用邏輯1表示;低電平也是一個范圍,處于這個范圍的電平都可以認為是低電平,用邏輯0表示。表1-2以最常見的5v ttl和5v cmos電平為對象,說明其高低電平的范圍。表1-2 ttl電平和cmos電平范圍名稱含義ttlcmos (5
44、v電源)vohmin輸出高電平的下限2.4v4.99vvolmax輸出低電平的上限0.4v0.01vvihmin輸入高電平的下限2.0v3.5vvilmax輸入低電平的上限0.8v1.5v可見,對于ttl電平,輸出電壓只要大于2.4v,都可認為是高電平;輸出電壓低于0.4v,都可認為是低電平。輸入時,輸入電壓大于2v,就可認為是高電平;輸入電壓低于0.8v,即可認為輸入的是低電平。需要注意的是:當輸出電壓處于0.4v,2.4v區(qū)間時,即電平不高也不低,電平高低不能確定,屬邏輯混亂。輸入電壓在0.8v,2.0v區(qū)間,電平高低也不能確定,同樣屬邏輯混亂。對于cmos電平,輸出電壓只要大于4.99v
45、,都可認為是高電平;輸出電壓低于0.01v,都可認為是低電平。當輸入時,輸入電壓大于3.5v,就可認為是高電平;輸入電壓低于1.5v,即可認為輸入的是低電平。51單片機系統(tǒng)屬于數(shù)字電路系統(tǒng),與其相關的電平大多是ttl和cmos電平。1.6數(shù)制及其轉換在單片機應用系統(tǒng)中,常用的數(shù)制有十進制、二進制和十六進制。十進制數(shù)是我們最熟悉的一種數(shù)制,有0,1,2,3,4,5,6,7,8,9共十個元素,計數(shù)規(guī)則是:逢十進一,借一當十;類似的,二進制就只有兩個元素:0和1,計數(shù)規(guī)則是:逢二進一,借一當二。例如:0+1=1,1+0=1,而1+1=10,此處10讀作“一零”或者“幺零”,不讀“十”,原因它不是十進
46、制,而是二進制,并且二進制數(shù)10就等于十進制數(shù)2。對于十六進制,自然就有16個元素,即0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f。其中的a代表十進制數(shù)10,b代表十進制數(shù)11,c代表十進制數(shù)12,d代表十進制數(shù)13,e代表十進制數(shù)14,f代表十進制數(shù)15。計數(shù)規(guī)則:逢十六進一,借一當十六。十進制數(shù)015對應的二進制、十六進制數(shù)如表1-3所示。表1-3 十進制數(shù)015對應的二進制和十六進制數(shù) 十進制二進制十六進制十進制二進制十六進制0008100081119100192102101010a3113111011b41004121100c51015131101d611061411
47、10e71117151111f在單片機應用系統(tǒng)的開發(fā)過程中,可以借助電腦windows中自帶的計算器,方便地實現(xiàn)數(shù)制的轉換或變換。計算器在windows系統(tǒng)的附件里,通過路徑【開始】【程序】【附件】【計算器】就可以打開。默認狀態(tài)下的計算器是標準型的,如圖1-29所示,可以通過其【查看】菜單,選擇【科學型】,即可打開如圖1-30所示科學型計算器窗口界面,在其中就可方便地進行各類數(shù)制的相互轉換及常規(guī)運算了。 圖1-29 標準型計算器窗口界面 圖1-30 科學型計算器窗口界面 1.7單片機c語言基礎1.7.1單片機c語言數(shù)據(jù)類型在c語言數(shù)據(jù)類型的基礎上,增加“位類型”,就構成了單片機c語言的數(shù)據(jù)類型
48、,圖1-31所示為單片機c語言數(shù)據(jù)類型分類圖。表1-4為單片機c語言中常用數(shù)據(jù)類型名稱、長度及取值范圍。圖1-31 單片機c語言基本數(shù)據(jù)類型分類表1-4 單片機c語言基本數(shù)據(jù)類型數(shù)據(jù)類型長度取值范圍類型類型名bit(位)數(shù)byte(字節(jié))數(shù)位型位變量bit10,1字符型無符號字符型unsigned char810255(有符號)字符型(signed) char81127128整型無符號整型unsigned int162065535(有符號)整型int1623276832767長整型無符號長整型unsigned long32402321(有符號)長整型long324231(2311)浮點型單精度
49、浮點型float3243.410383.41038雙精度浮點型double6481.7103081.7103081.7.2 單片機c語言中的常量和變量1、常量和符號常量 在程序運行過程中,其值不發(fā)生變化的量稱為常量。依據(jù)數(shù)據(jù)類型的不同,常量可分為不同類型。例如:a、m為字符常量;27、0、2為整型常量;3.14、2.34567為浮點型常量。 (1)整型常量 整型常量就是整型常數(shù)。在單片機c語言中,十進制和十六進制表示形式最為常見。例如:27、0、2為十進制整型常量;0x25、0xcf、0x3ef5為十六進制常量。需要注意的是:十六進制常量必須以0x(數(shù)字零和小寫字母x)打頭。(2)浮點型常量浮
50、點型數(shù)據(jù)就是我們熟知的實數(shù),浮點型常數(shù)就是實數(shù)常量。在c語言中一般有小數(shù)和指數(shù)兩種表示方式。例如:3.14、2.34567為小數(shù)形式的浮點型常量;3.14e2、2.34567e3為指數(shù)形式的浮點型常量。其中3.14e2相當于3.14102,而2.34567e3相當于2.34567103。(3)字符型常量在c語言中,字符常量是指用單撇號括(或引)起來的一個字符。例如:a、a、!、6為字符型常量,需要注意的是:a和a是兩個不同的字符常量,數(shù)字09用單撇號括起來也是字符常量,另外,單撇號是英文格式下的單撇號。字符常量的值是該字符相應的ascii代碼的值(參見附錄a)。例如,a的ascii值為十進制數(shù)
51、65(十六進制的0x41);a的ascii值為十進制數(shù)97(十六進制的0x61);字符常量6的ascii碼值不是十進制數(shù)6,而是十進制數(shù)54。小技巧:字符常量0的ascii值是十進制數(shù)48,加上數(shù)值6是54,剛好就是字符常量6的ascii碼值,所以字符常量6也可以用0+6表示。據(jù)此有結論:某個數(shù)字(09)對應的ascii值,可以用字符常量0加上該數(shù)字得到。 (4)字符串常量 c語言中的字符串是由一對雙撇號括(或引)起來的字符序列。例如:”how are you?”、”china”、”a”、”123.456”都是字符串常量。注意:a和”a”是有本質的差別:a是字符常量,而”a”是字符串常量,a在
52、計算機內存中占一個字節(jié)的存儲空間,而”a”則占兩個字節(jié)的存儲空間(字符串結束標志“0”占一個字節(jié))。2、變量變量是在程序運行期間,其值可以改變的量。就本質而言,變量代表內存中的一個存儲單元,該存儲單元可以用來存放數(shù)據(jù),存放的數(shù)據(jù)就是該變量的值,而存儲單元的編號則稱為地址。任意一個變量都有兩個基本屬性變量值和變量名,變量名就是變量的名字,又稱為變量的標識符,只有擁有名字的變量才方便被引用。(1)標識符和變量名c語言中,給變量、符號常量、函數(shù)、數(shù)組、數(shù)據(jù)類型等對象命名的名字統(tǒng)稱為標識符。c語言規(guī)定,標識符只能由字母、數(shù)字和下劃線(“_”是下劃線,“”是減號)3種字符組成,且第一個字符必須為字母或下
53、劃線,即數(shù)字不能打頭。變量名就是給變量起的名字,它是一種標識符,理應遵守有關標識符的要求和規(guī)定。同時,在給變量起名或命名時,還應盡量做到“見名知意”,即選取有含義的英文單詞(或其縮寫)做變量名。對于c語言本身已經使用的專用名稱(稱為關鍵字),在給變量起名時應該避免使用。(2)變量的聲明或定義c語言規(guī)定,所有的變量在引用或使用之前必須要先進行聲明或是定義,即要求變量是“先定義,后使用”。聲明或定義變量的一般形式是:類型名變量序列;其中的表示空格,言下之意,類型名和變量序列之間至少要有一個空格;常見的類型名如表1-4中所列;變量序列的意思是,類型名后面可以是一個變量名,也可以是同類型的多個變量名,
54、多個變量名之間用逗號(,)分隔開;變量序列的最后是分號(;),表示這條語句結束(分號是c語言語句的結束符)。例如:聲明定義2個變量i和j為無符號整型變量: unsigned int i,j; 聲明定義2個變量ch1和ch2為字符型變量: char ch1,ch2;(3)給變量賦初值變量最初的值叫初始值,給變量一個初始值稱為“賦初值”??梢栽谧兞柯暶鞫x之后對其賦初值,也可以在聲明定義的同時賦初值。例1:先聲明定義2個變量i和j為無符號整型變量,再給i賦初值12,給j賦初值65535:unsigned int i,j;i=12;j=65535;例2:聲明定義2個變量i和j為無符號整型變量,同時給
55、i賦初值12,給j賦初值65535:unsigned int i=12,j=65535;1.7.3 c語言的運算符單片機c語言的運算符主要有算術運算符、關系運算符、邏輯運算符、賦值運算符、指針運算符和位運算符等,如表1-5所列。表1-5 單片機c語言常用運算符運算符范例說明舉例算數(shù)運算符+a+ba變量值加上b變量值a=5,b=3時,a+b的值為8-a-ba變量值減去b變量值a=5,b=3時,a-b的值為2*a*ba變量值乘以b變量值a=5,b=3時,a*b的值為15a/ba變量值除以b變量值a=5,b=2時,a/b的值為21%a%b對整型變量a以整型變量b為模求余 a=5,b=3時,a%b的值為2關系
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度解除雙方影視制作合作合同
- 2025年度科幻電影總導演專業(yè)聘用合同
- 二零二五年度電子商務平臺軟件使用及推廣許可協(xié)議
- 2025年度生態(tài)果園產權及種植技術引進合同
- 2025年度紡織品普通采購合同書
- 二零二五年度醫(yī)療健康行業(yè)業(yè)務員委托合同
- 二零二五年度手農機售后服務與技術支持合同
- 2025年度環(huán)保項目投資欠款付款協(xié)商協(xié)議書
- 二零二五年度民間借貸合同-跨境電商供應鏈融資
- 二零二五年度員工股權激勵與股權鎖定期協(xié)議
- (高清版)AQ 1038-2007 煤礦用架空乘人裝置安全檢驗規(guī)范
- DL∕T 5210.6-2019 電力建設施工質量驗收規(guī)程 第6部分:調整試驗
- 項賢明主編馬工程教材《教育學原理》第七章-課程
- 第1課 文明之光(課件)-2023-2024學年初中美術湘美版八年級下冊
- 2024年新改版青島版(六三制)三年級下冊科學全冊知識點復習資料
- 排列五歷史開獎數(shù)據(jù)(2004年11月至2013年7月)
- (高清版)DZT 0282-2015 水文地質調查規(guī)范(1:50000)
- 嬰幼兒二便,三浴等
- 項目利益相關者溝通計劃
- 建設項目安全設施“三同時”課件
- 既有建筑混凝土結構改造設計規(guī)范DBJ-T 15-182-2020
評論
0/150
提交評論