官术网_书友最值得收藏!

第1篇 理論知識

第1章 單片機知識概述

1.1 單片機簡介

單片機是單片微型計算機的簡稱。單片機將計算機必需的運算器、控制器、存儲器、輸入單元、輸出單元五大部件集成在一個芯片上,從結構和功能上看,都具有微型計算機的特點,因此稱為單片微型計算機。單片機主要用來完成小型智能系統的控制功能,因此也稱為微控制器,英文名為 Micro Control Unit(MCU)。

單片機應用已深入人們的生活,主要體現在家用電器領域。據統計,2000年,一般美國家庭中的單片機應用數量達到226個。隨著物質生活水平的提高,人們對于智能電器的需求也將越來越廣泛。因此掌握單片機應用系統設計技術,是電子工程師的硬性要求。

目前常用的單片機型號有多種,如ATMEL公司的以AT89 系列為代表的51單片機和ATMEG系列AVR單片機、TI公司的MSP430單片機、Microchip公司的PIC單片機等。各種單片機從功耗、內部結構、存儲容量、引腳結構等方面都有一定區別。設計者應從產品需求、成本控制、自我熟悉程度等角度來選擇合適的單片機型號進行產品設計。雖然各種型號單片機硬件上有較大區別,但單片機的開發思想和流程基本相同。本書將以經典的51系列單片機為例,深入介紹單片機應用系統的設計開發方法,以期讀者能活學活用,舉一反三,熟練掌握單片機技術。

1.2 單片機中的數據存儲格式與數制轉換

1.2.1 單片機中的數據存儲格式

單片機作為計算機的一個種類,在數據存儲上與計算機具有一致性。計算機存儲信息的最小單位是一個二進制位(bit)。一位可存儲一個二進制數(0或1),每8位組成1字節(B)。常用的數據存儲格式有如下幾種。

字節:存儲器中存取信息的基本單位。我們常說某存儲器容量是64MB,就是說該存儲器有64兆字節(64MB,1MB=220字節)。

字:一個字16位,占用2字節。

雙字:一個雙字32位,由4字節組成。

四字:一個四字64位,由8字節組成。

計算機內部數據的存儲模式可分為大端模式和小端模式兩種,51單片機內部數據存儲采用了大端模式。所謂的大端模式,是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中;小端模式,是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中。例如,有一個整型數據 15 536,其存儲于單片機的存儲器中時,將占據2個字節,假設這兩個字節將存儲于地址為51和52的存儲器單元中。將15 536轉換成十六進制數,結果為3CB0,此時,如果3C存儲于地址51,B0存儲于地址52,就稱為大端模式;如果3C存儲于地址52,B0存儲于地址51,就稱為小端模式。

大端模式

小端模式

下面結合一個例子說明數據在單片機數據存儲器中的存取過程。

假設要使用單片機對一個脈沖信號計數,每計滿 1 000 個脈沖時,計數值清零并重新開始計數,計數值要通過顯示器顯示出來。工作模型如圖1.1.1所示。

圖1.1.1 單片機數據存儲原理

要對單片機外部脈沖計數,并將計數值顯示出來,我們先要定義一個計數變量。由于要求計1 000個脈沖,則計數值范圍為0~999,最大計數值超過了1字節所能表示的范圍,因此我們需要一個存儲空間為雙字節(字)的計數變量,當第一字節(低字節,如圖1.1.1中30H)計滿(FFH)時,可以將其清零,同時將第二字節(高字節,如圖1.1.1中31H)加1,依次進行下去。當計到999時,高字節(31H)中的值達到03H,低字節(30H)中的值達到E7H。實際上,在用C語言完成此任務時,我們只要定義一個整型變量作為計數變量即可。編譯器在給整型變量分配存儲空間時,就是分配了兩個連續的字節,在加1過程中的低字節向高字節進位也是自動的。在定義好計數變量后,CPU只要檢測到外部脈沖,就會將變量加 1。如果要對計數值進行顯示,一般處理方法是,開辟一個顯示緩沖區(如圖1.1.1中60H開始處),將計數變量的值的百位、十位、個位分離出來,轉存至顯示緩沖區,CPU最后調用顯示函數,把顯示緩沖區中的數字顯示出來。

圖1.1.1中,地址為30H的字節單元存儲了數據FFH,根據數制轉換的基礎可知,30H單元的8個位都為二進制數“1”。計數變量的值為01FFH,即十進制數511。要注意的是,不同的單片機編譯器,其給變量分配地址的規律可能不同。以一個整型變量為例,430單片機的IAR編譯器在分配時,高字節在前,低字節在后,和圖1.1.1中所示一致,因此采用的是小端模式;51單片機的KEIL編譯器在分配時,剛好相反,就變成了(30H)=01H,(31H)=FFH,采用的是大端模式。

1.2.2 計算機中的常用數制

計算機中的進位計數制有4種,即二進制、八進制、十進制、十六進制。常用的數制有3種,即二進制數、十進制數和十六進制數。

1.十進制數

十進制數是我們最熟悉的一種進位計數制,其由0、1、2、3、4、5、6、7、8、9不同的基本數碼符號構成,基數為10。所謂基數,在數學中指計數制中所用到的數碼的個數。十進制數進位規則是“逢十進一”,一般在數的后面加符號D表示十進制數。

2.二進制數

二進制數是計算機內的基本數制。任何二進制數都只由 0 和 1 兩個數碼組成,其基數是2。進位規則是“逢二進一”。一般在數的后面用符號B表示這個數是二進制數。如數據10000110B,表示一個二進制數10000110,其轉換成符合人們計數習慣的十進制方法為:1×27+0×26+0×25+0×24+0×23+1×22+1×21+0×20,即134。

3.十六進制數

十六進制數是計算機軟件編程時常采用的一種數制。十六進制數由16個數符構成:0、1、2、…、9、A、B、C、D、E、F,其中A、B、C、D、E、F分別代表十進制數的10、11、12、13、14、15,其基數是 16。進位規則是“逢十六進一”。一般在數的后面加一個字母H表示是十六進制數。

1.2.3 數制間的轉換

1.二進制數與十六進制數的轉換

(1)二進制數轉換成十六進制數

采用4位二進制數合成一位十六進制數的方法,以小數點開始分成左側整數部分和右側小數部分,如:10010110.0110B=96.6H。

(2)十六進制數轉換成二進制數

將十六進制數的每位分別用4位二進制數碼表示,然后把它們連在一起即為對應的二進制數,如:F8.7H=11111000.0111B。

2.二進制數與十進制數間的轉換

(1)二進制數轉換成十進制數

將二進制數按權展開后相加即得到對應的十進制數。例如,將數 1001.101B 轉換為十進制數。

1001.101B=1×23+0×22+0×21+1×20+1×2?1+0×2?2+1×2?3=8+1+0.5+0.125=9.625

(2)十進制數轉換成二進制數

十進制數的整數部分和小數部分轉換成二進制數的方法不同,要將它們分別轉換,然后將結果合并到一起即得到對應的二進制數。

十進制整數轉換成二進制整數的常用方法是“除2取余法”,即用2連續去除要轉換的十進制數和所得的商,直到商小于2為止,依次記下各個余數,然后按最先得到的余數為最低位,最后得到的余數為最高位依次排列,就得到轉換后的二進制整數。

如將十進制數168轉換成二進制數:

十進制小數轉換成二進制小數的常用方法是“乘2取整法”,即用2連續去乘要轉換的十進制小數部分和前次乘積后的小數部分,依次記下每次乘積的整數部分,直到小數部分為0或滿足所需要的精度為止,然后按最先得到的整數為二進制小數的最高位,最后得到的為最低位依次排列,就得到轉換后的二進制小數。

如將0.686轉換成二進制小數:

0.686×2=1.372K?1=1

0.372×2=0.744K?2=0

0.744×2=1.488K?3=1

0.488×2=0.976K?4=0

0.976×2=1.952K?5=1

0.686≈0.10101B

3.十六進制數和十進制數間的轉換

(1)十六進制數轉換成十進制數

將十六進制數按權展開后相加即得到對應的十進制數。

(2)十進制數轉換成十六進制數

與二進制相似,十進制整數和小數要分別轉換。

十進制整數轉換成十六進制整數的方法是“除16取余法”,即用16連續去除要轉換的十進制整數和所得的商,直到商小于16為止,依次記下各個余數,然后按最先得到的余數為最低位,最后得到的余數為最高位依次排列,就得到所轉換的十六進制數。

十進制小數轉換成十六進制小數的常用方法是“乘16取整法”,即用16連續去乘要轉換的十進制小數部分和前次乘積的小數部分,依次記下每次乘積的整數部分,直到小數部分為零或滿足所需要的精度為止,然后按最先得到的整數為十六進制小數的最高位,最后得到的為最低位依次排列,就得到所轉換的十六進制小數。

練習題:

1.將下列二進制數轉換成十進制數。

11110010110000  1101.11

2.將下列二進制數轉換成十六進制數。

10111100     11010010.1101

3.將下列十進制數轉換成二進制數。

100       95.3     55.625

1.3 單片機的特點及應用領域

美國Intel公司分別于1971年生產出4位單片機4004和1972年生產出8位單片機8008。隨著1976年MCS-48單片機的問世,單片機的發展進入了全盛時期,并在其后的30年里多次更新換代,大約每3年集成度就增大一倍、性能強度翻一番。

單片機由于其體積小、功耗低、價格低廉,且具有邏輯判斷、定時計數、程序控制等多種功能,廣泛應用于儀器儀表、家用電器、醫用設備、航空航天、專用設備的智能化管理及過程控制等領域。

單片機具有較強的實時數據處理能力和控制功能,可以使系統保持在最佳工作狀態,提高系統的工作效率和產品質量,所以在工業測控、航空航天、尖端武器等各種實時控制系統中,都作為控制器件使用。

全世界單片機的年產量數以億計,應用范圍之廣,種類之多,一時難以詳述。單片機應用的意義絕不僅僅限于它的廣闊應用范圍及所帶來的經濟效益,更重要的還在于它從根本上改變了傳統的控制系統設計思想和設計方法。從前必須由模擬電路或數字電路實現的大部分硬件控制電路,現在可以使用軟件編程的方法來實現。這種以軟代硬的控制技術稱為微控制技術。微控制技術的不斷發展和日趨完善,必將使單片機的應用更加深入、更加廣泛。

1.4 單片機的發展趨勢

目前單片機正朝著高性能和多品種方向發展,今后將進一步向低功耗、小體積、大容量、高性能、低價格、高速率、高可靠性方向發展。

1.低電壓、低功耗

目前新一代的單片機大都具有 SLEEP、STOP 等省電運行方式,可以在適當的時候喚醒單片機。電源電壓也呈下降趨勢,3.3V的單片機越來越成為主流,而一些低電壓供電的單片機電源下限可達1~2V。目前0.8V供電的MSP430單片機已經問世。

同時單片機的功耗已從mA級降到μA級,甚至1μA以下。低功耗的效應不僅是功耗降低,同時帶來了產品的高可靠性、高抗干擾能力及便攜化。

2.大容量

以前標準的8031單片機沒有ROM,8051單片機只有4KB的ROM,二者RAM均為128B。這在一些復雜控制的場合這些存儲容量常常是不夠的,必須進行外接擴充。目前,包括51在內的許多單片機都已經將內部存儲器做到了足夠大,能滿足復雜計算和控制應用對單片機存儲容量的要求。如STC的STC12C5A60系列,其內部FLASH有60KB,RAM有1280B;TI公司的MSP430f149單片機內部FLASH有60kB,RAM有2KB。

3.高速率

這主要是指進一步改進CPU的性能,加快指令運算的速度和提高系統控制的可靠性。采用精簡指令集(RISC)結構和流水線技術,可以大幅度提高運行速度。當前指令速度最高者已達100MIPS(Million Instruction Per Seconds,兆指令每秒),并加強了位處理功能、中斷和定時控制功能。美國Cygnal集成產品公司的C8051F系列單片機采用流水線結構,指令周期以時鐘周期為單位,由標準的12個系統時鐘周期降為1個系統時鐘周期,處理能力大大增強,運行速度比標準的51單片機快10倍以上。

4.低噪聲和高可靠性

為提高單片機的抗電磁干擾能力,使產品能適應惡劣的工作環境,滿足電磁兼容性方面更高標準的要求,各單片機廠家在單片機內部電路中都采取了新的技術措施。

5.小體積、低價格化

與大容量化相反,以 4 位、8 位機為中心的小體積、低價格化也是一個趨勢。這類單片機的特點是把原來用集成電路組成的控制電路單片化,可廣泛用于家電產品。

6.集成多種外設功能

隨著集成度的不斷提高,越來越多的單片機把各種外圍設備的功能器件集成在片內。除了一般必須具有的 CPU、ROM、RAM、定時/計數器等以外,片內集成的部件常見的還有A/D轉換器、D/A轉換器、I2C總線、CAN總線、SPI總線、DMA控制器、PWM控制器、聲音發生器、監視定時器、鎖相電路等。

1.5 51單片機開發平臺與設計流程

目前,常用的51單片機軟件開發平臺為KEIL μVision3,仿真軟件為PROTEUS ISIS 7。限于篇幅,本書不在這里介紹軟件的詳細菜單等內容,只介紹如何使用開發平臺快速地開發一個微型項目——LED閃爍,讀者可在此基礎上多加探索與練習,熟練掌握單片機應用系統的設計流程。

【任務一】設計單個LED閃爍

任務目的

通過完成本任務,掌握單片機單片機應用系統的設計流程。

任務要求

使用PROTEUS ISIS 7仿真軟件構建系統硬件環境,使用KEIL μVision3開發平臺進行程序設計,完成單個LED間隔1秒左右閃爍的功能。

任務完成時間

2學時。

任務描述

1.使用PROTEUS ISIS 7構建系統硬件環境

首先,打開PROTEUS ISIS 7,如圖1.1.2所示,單擊圖中方框圖突出的器件模式,并單擊選擇器件,會彈出圖1.1.3所示器件庫界面。

圖1.1.2 查找器件1

在Keywords中輸入需要查找的器件名稱,如“AT89C51”,這時,在中間的Results (8)區域顯示找到的器件,最右邊還有對應的器件外形和封裝預覽。在 Results(8)區域雙擊我們需要的單片機型號如“AT89C51”,這時可以看到圖 1.1.4 所示的界面,與圖1.1.2所示界面相比,在用戶元件庫(下面的空白區域)中,可以看到“AT89C51”已被載入。接下來,按照相同的方法,在Keywords中依次輸入“res”“crystal”“cap”“cap-elec”“led-red”,將電阻、晶振、瓷片電容、電解電容、紅色LED加入用戶元件庫。

按圖1.1.5所示的電路進行連接。連接電路過程中,可以用鼠標右鍵單擊元件進行方向調整、用鼠標左鍵雙擊器件進行參數屬性調整等。單擊左欄按鈕表示的Terminal Mode,找到電源和地。

圖1.1.3 查找器件2

圖1.1.4 將器件加入用戶元件庫

圖1.1.5 單個LED閃爍硬件電路圖

至此,硬件環境構建完成,將它進行保存。此時,如果單擊左下角中的三角形給電路上電運行,是不會看到LED閃爍的,因為還沒有給單片機裝入程序。接下來將進行程序設計,并將設計好的程序導入單片機。

2.使用KEIL μVision3開發平臺進行程序設計

首先,單擊圖標運行KEIL μVision3程序,如圖1.1.6所示。KEIL μVision3對于單片機軟件是采用項目(project)進行管理的,一個項目(project)對應一個具體的應用,而根據項目的大小、復雜程度,可能需要設計多個程序文件。這種使用項目(project)來管理程序文件的模式在絕大多數軟件開發環境中都獲得了廣泛使用。比如,本次任務“設計單個LED閃爍”就可以看做是一個項目(project)。本次任務比較簡單,只需要一個程序文件即可,但項目(project)也是必須建立的。接下來,分4步完成程序設計任務。

第一步,新建項目。單擊Project菜單,選擇new\μVision project(選項會因為KEIL版本不同可能略有差異)。在彈出的“Creat New Project”界面中選擇保存的路徑并輸入新項目的名稱(自定義,需要強調的是,最好新建一個文件夾來保存新項目,如以路徑C:\KEIL\WORK\LED保存)。如圖1.1.7所示,項目名稱在這里舉例為led-flash,單擊“保存”按鈕。在彈出的圖1.1.8所示的界面中選擇目標器件,這里選擇ATMEL公司的AT89C51。單擊“確定”按鈕,即可看到圖1.1.9所示的界面,表示項目已建好。

第二步,新建程序文件。這一步是程序設計的重要步驟。單擊File\New,會彈出一個文本編輯框,先不需要輸入任何信息,單擊File\Save,在彈出的保存界面中選擇保存路徑(默認在項目所在文件夾led中即可),輸入程序文件的名稱LED.ASM(因為本例采用的是匯編語言,所以程序文件擴展名為.ASM,如果是C語言編寫的程序,擴展名為.C),如圖1.1.10所示。

圖1.1.6 KEIL μVision3初始界面

圖1.1.7 保存項目

圖1.1.8 選擇目標器件

圖1.1.9 新建項目

圖1.1.10 保存程序文件

在文本編輯框中輸入以下代碼并保存。

   LED BIT P1.7

   ORG 0000H

   SJMP MAIN

   ORG 0030H

MAIN:  CPL LED

   ACALL DELAY

   SJMP MAIN

DELAY: MOV R7,#4

LOOP1: MOV R6,#250

LOOP2: MOV R5,#250

   DJNZ R5,$

   DJNZ R6,LOOP2

   DJNZ R7,LOOP1

   RET

   END

第三步,將程序文件加入項目。雙擊,在彈出的窗口中,將文件類型選擇為第二項:“Asm Source File”,即可找到剛才建立的程序文件LED.ASM。選中該文件,單擊“添加”按鈕,即可看到圖1.1.11所示的添加完成界面。

圖1.1.11 程序文件加入項目

第四步,編譯項目,生成機器碼。在項目文件夾Target1上面用鼠標右鍵單擊,選擇“Options for Target1”,在彈出的圖 1.1.12 所示選項卡中選擇 Output,將Output選項卡下的“Create HEX File”勾上,單擊“確定”按鈕;在 KEIL μVision3 主界面下選擇 Project\build target,可以看到圖 1.1.13 所示的編譯信息,顯示已編譯成功并生成機器碼。

圖1.1.12 選中生成機器碼

圖1.1.13 編譯項目

至此,程序設計完成,生成了目標代碼:led-flash.hex。

3.軟硬件調試

打開PROTEUS ISIS 7繪制的單個LED閃爍硬件電路圖,雙擊單片機,在彈出的圖1.1.14所示的界面中,單擊 Program File 框右邊的圖標,在彈出的窗口“查找范圍”中找到C:\keil\work\led文件夾,即可看到led-flash.hex,選中該文件,單擊“OK”按鈕,退到PROTEUS ISIS 7主界面。單擊左下角,給電路上電運行,即可看到LED間隔大約1秒的閃爍。

圖1.1.14 給單片機裝載程序(.HEX文件)

任務總結

通過本任務,了解了單片機應用系統設計的一般流程,初步掌握了開發工具(KEIL μ Vision3,PROTEUS ISIS 7)的應用方法。

拓展理論學習

單片機應用系統一般的開發流程如圖1.1.15所示。

圖1.1.15 單片機應用系統開發流程

【思考與練習】

1.單片機中的數據是如何進行存儲的?

2.單片機應用系統設計過程中,常用的進位計數制有哪些?十進制數如何快速轉換成二進制數?

3.單片機在單片機應用系統中主要作用是什么?

4.列舉生活中常見的單片機應用實例。

5.單片機目前的應用情況如何?單片機發展趨勢有哪些?

6.使用KEIL軟件進行程序開發的步驟有哪些?使用KEIL軟件最后能得到什么?

7.簡述使用PROTEUS ISIS軟件進行原理圖繪制的方法。

主站蜘蛛池模板: 双江| 光泽县| 舟曲县| 西充县| 中宁县| 七台河市| 荔波县| 邯郸市| 白银市| 汉中市| 土默特右旗| 衡南县| 卢龙县| 黑龙江省| 南乐县| 乐昌市| 蚌埠市| 鄂伦春自治旗| 东至县| 昌宁县| 龙口市| 来凤县| 阿尔山市| 兴安县| 揭阳市| 即墨市| 孝昌县| 台东市| 随州市| 双鸭山市| 西吉县| 饶河县| 江安县| 济南市| 佛山市| 鹤峰县| 广州市| 应用必备| 鸡东县| 固安县| 襄城县|