本書提供機電工程領域學生或專業人士學習微處理器的入門基礎。從數位電路與C語言的簡介、微處理器的架構、記憶體的規劃使用、C語言的編譯與程式撰寫,到各種基礎或先進的周邊功能介紹與使用,藉由Microchip PIC18F45K22 8位元微控制器為範例,完整的介紹使用微處理器的概念與方法。利用Microchip MPLAB X IDE/XC8/MCC等C語言開發工具與教學範例,深入且精確地引導讀者學習微處理器的設計、架構與運作的基礎原理,以及使用C語言開發應用的實務案例。
除了各個章節的介紹外,本書利用教學實驗板與C語言範例程式詳細的說明各項微處理器功能的使用方式,並在實驗板上實現各項基礎功能的應用開發。本書除了提供讀者學習的實務案例外,也可以做為未來自行開發微處理器應用的設計參考;不但適合作為初學者以C語言作為微處理器入門的學習教材,也可以作為專業人員的參考資料與開發應用程式範例。
作者簡介:
曾百由
現職:
國立臺北科技大學機械工程學系副教授
學歷:
國立交通大學機械工程學士(輔系:控制工程學系)
美國壬色列理工學院(Rensselaer Polytechnic Institute)機械工程碩士、博士
重要經歷:
美國喬治亞理工學院研究學者
波音公司技術專家
相關著作:
dsPIC數位訊號控制器原理與應用─MPLAB C30開發實務
微處理器原理與應用─組合語言與PIC18微控制器
微處理器原理與應用─C語言與PIC18微控制器
自動化控制元件設計與應用─台達PLC/HMI/SERVO應用開發
章節試閱
CHAPTER 1 微處理器與PIC18微控制器簡介
1.1 微處理器簡介
數位運算的濫觴要從1940年代早期的電腦雛形開始。早期的電腦使用真空管以及相關電路來組成數學運算與邏輯運算的數位電路,這些龐大的電路元件所組成的電腦大到足以占據一個數十坪的房間,但卻只能作簡單的基礎運算。一直到1947年,貝爾實驗室所發明的電晶體取代了早期的真空管,有效地降低了數位電路的大小以及消耗功率,逐漸地提高了電腦的使用率與普遍性。從此之後,隨著積體電路(Integrated Circuit, IC)的發明,大量的數位電路不但可以被建立在一個微小的矽晶片上,而且同樣的電路也可以一次大量重複製作在同一個矽晶圓上,使得數位電路的應用隨著成本的降低與品質的穩定,廣泛地進入到一般大眾的生活中。
在數位電路發展的過程中,所謂的微處理器(microprocessor)這個名詞首先被應用在Intel®於1971年所發展的4004晶片組。這個晶片組能夠執行4位元大小的指令並儲存輸出入資料於相關的記憶體中。相較於當時的電腦,所謂的「微」處理器在功能與尺寸上,當然是相當的微小。但是隨著積體電路的發達,微處理器的功能卻發展得越來越龐大,而主要的發展可以分為兩個系統。
第一個系統發展的方向主要強調強大的運算功能,因此硬體上將使用較多的電晶體來建立高位元數的資料通道、運算元件與記憶體,並且支援非常龐大的記憶空間定址。這一類的微處理器通常被歸類為一般用途微處理器,它本身只負責數學邏輯運算的工作以及資料的定址,通常會搭配著外部的相關元件以及程式資料記憶體一起使用。藉由這些外部輔助的相關元件,或稱為晶片組(chipset),使得一般用途微處理器可以與其他記憶體或輸出入元件溝通,以達到使用者設計要求的目的。例如在一般個人電腦中常見的Core®及Pentium® 處理器,也就是所謂的CPU(Central Processing Unit),便是屬於這一類的一般用途微處理器。
第二個微處理器系統發展的方向,則朝向將一個完整的數位訊號處理系統功能,完全建立在一個單一的積體電路上。因此,在這個整合的微處理器系統上,除了核心的數學邏輯運算單元之外,必須要包含足夠的程式與資料記憶體、程式與資料匯流排,以及相關的訊號輸出入介面周邊功能。而由於所具備的功能不僅能夠作訊號的運算處理,並且能夠擷取外部訊號或輸出處理後的訊號至外部元件,因此這一類的微處理器通常被稱作為微控制器(Micro-Controller),或者微控制器元件(Micro-Controller Unit, MCU)。
由於微控制器元件通常內建有數位訊號運算、控制、記憶體,以及訊號輸出入介面在同一個系統晶片上,因此在設計微控制器時,上述內建硬體與功能的多寡,便會直接地影響到微控制器元件的成本與尺寸大小。相對地,下游的廠商在選擇所需要的微控制器時,便會根據系統所需要的功能以及所能夠負擔的成本挑選適當的微控制器元件。通常微控制器製造廠商會針對一個相同數位訊號處理功能的核心微處理器設計一系列的微控制器晶片,提供不同程式記憶體大小、周邊功能、通訊介面,以及接腳數量的選擇,藉以滿足不同使用者以及應用需求的選擇。
目前微處理器的運算資料大小,已經由早期的8位元微處理器,發展到32位元,甚至於一般個人電腦的64位元的微處理器也可以在一般的市場上輕易地取得。因此,使用者必須針對應用設計的需求,選擇適當的微處理器,而選擇的標準不外乎是成本、尺寸、周邊功能與記憶體大小。有趣的是,在個人電腦的使用上,隨著視窗軟體系統的升級與應用程式的功能增加,使用者必須不斷地追求速度更快,位元數更多,運算功能更強的微處理器;但是在一般的微控制器實務運用上,8位元的微控制器便可以滿足一般應用系統的需求,使得8位元微控制器的應用仍然是目前市場的主流。所不同的是,隨著應用的增加,越來越多不同的周邊功能與資料通訊介面不斷地被開發,並整合到8位元的微控制器上,以滿足日益複雜的市場需求。
目前在實務的運用上,由於一般用途微處理器僅負責系統核心的數學或邏輯運算,必須搭配相關的晶片組才能夠進行完整的程式與資料記憶體的擷取、輸出入控制等等相關的功能,例如一般個人電腦上所使用的Core®及Pentium®微處理器。因此,在這一類的一般用途微處理器發展過程中,通常會朝向標準化的規格發展,以便相關廠商配合發展周邊元件。因為標準化的關係,即使是其他廠商發展類似的微處理器,例如AMD®所發展的同等級微處理器,也可以藉由標準化的規格以及類似的周邊元件達到同樣的效能。這也就是為什麼各家廠商或自行拼裝的個人電腦或有不同,但是它們都能夠執行一樣的電腦作業系統與相關的電腦軟體。
相反地,在所謂微控制器這一類的微處理器發展上,由於設計者在應用開發的初期便針對所需要的硬體、軟體,或所謂的韌體,進行了特殊化的安排與規劃,因此所發展出來的系統以及相關的軟硬體便有了個別的獨立性與差異性。在這樣的前提下,如果沒有經過適當的調整與測試,使用者幾乎是無法將一個設計完成的微控制系統直接轉移到另外一個系統上使用。例如,甲廠商所發展出來的汽車引擎微控制器或者是輪胎胎壓感測微控制器,便無法直接轉移到乙廠商所設計的車款上。除非經由工業標準的制定,將相關的系統或者功能制定成為統一的硬體界面或通訊格式,否則廠商通常會根據自我的需求與成本的考量,選用不同的控制器與程式設計來完成相關的功能需求。即便是訂定了工業標準,不同的微控制器廠商也會提供許多硬體上的解決方案,使得設計者在規劃時可以有差異性的選擇。例如,在規劃微控制器使用通用序列埠(Universal Serial Bus, USB)的設計時,設計者可以選用一般的微控制器搭配外部的USB介面元件,或者是使用內建USB介面功能的微控制器。因此,設計者必須要基於成本的考量以及程式撰寫的難易與穩定性做出最適當的設定;而不同的廠商與設計者便會選擇不同的設計方法、硬體規劃以及應用程式內容。也就是因為這樣的特殊性,微控制器可以客製化的應用在少量多樣的系統上,滿足特殊的使用要求,例如特殊工具機的控制系統;或者是針對數量龐大的特定應用,選擇低成本的微控制器元件有效地降低成本而能夠普遍地應用,例如車用電子元件與MP3播放控制系統;或者是具備完整功能的可程式控制系統,提供使用者修改控制內容的彈性空間,例如工業用的可程式邏輯控制器(Programmable Logic Controller, PLC)。也就是因為微控制器的多樣化與客製化的特色,使得微控制器可以廣泛地應用在各式各樣的電子產品中,小到隨身攜帶的手錶或者行動電話,大到車輛船舶的控制與感測系統,都可以看到微控制器的應用。也正由於它的市場廣大,引起了為數眾多的製造廠商根據不同的觀念、應用與製程開發各式各樣的微控制器,其種類之繁多即便是專業人士亦無法完全列舉。而隨著應用的更新與市場的需求,微控制器也不斷地推陳出新,不但滿足了消費者與廠商的需求,也使得設計者能夠更快速而方便的完成所需要執行的特定工作。
在種類繁多的微處理器產品中,初學者很難選擇一個適當的入門產品作為學習的基礎。即便是選擇微控制器的品牌,恐怕都需要經過一番痛苦的掙扎。事實上,各種微處理器的設計與使用觀念都是類似的,因此初學者只要選擇一個適當的入門產品,學習到基本觀念與技巧之後,便能夠類推到其他不同的微處理器應用。基於這樣的觀念,本書將選擇目前在全世界8位元微控制器市場占有率最高的Microchip®微控制器作為介紹的對象。本書除了介紹各種微處理器所具備的基本硬體與功能之外,並將使用Microchip®產品中功能較為完整的PIC18系列微控制器作為程式撰寫範例與微處理器硬體介紹的對象。本書將介紹一般撰寫微處理器所最普遍使用的程式語言—C語言,引導讀者能夠撰寫功能更完整、更有效率的應用程式。並藉由C語言程式的範例程式詳細地介紹微處理器的基本原理與使用方法,並包括Microchip專門為8位元微控制器所提供的XC8編譯器,使得讀者可以有效地學習微處理器程式設計的過程與技巧,利用XC8編譯器與函式庫所提供的程式編撰功能,有效地降低開發的時間與成本。
不論微處理器的發展如何的演變,相關的運算指令與周邊功能都是藉由基本的數位邏輯元件建構而成。因此,在詳細介紹微處理器的各個功能之前,讓我們一起回顧相關的基本數位運算觀念與邏輯電路元件。
CHAPTER 1 微處理器與PIC18微控制器簡介
1.1 微處理器簡介
數位運算的濫觴要從1940年代早期的電腦雛形開始。早期的電腦使用真空管以及相關電路來組成數學運算與邏輯運算的數位電路,這些龐大的電路元件所組成的電腦大到足以占據一個數十坪的房間,但卻只能作簡單的基礎運算。一直到1947年,貝爾實驗室所發明的電晶體取代了早期的真空管,有效地降低了數位電路的大小以及消耗功率,逐漸地提高了電腦的使用率與普遍性。從此之後,隨著積體電路(Integrated Circuit, IC)的發明,大量的數位電路不但可以被建立在一個微小的矽晶片上,而且...
作者序
序
「學習究竟是要登高望遠還是始於卑爾?」恐怕是教育界爭論不停的話題。
在科技發展快速,應用複雜的現代社會中,C語言是工程界中最普遍的應用程式撰寫工具,在高階微處理器應用中也需要使用C語言作為開發工具。因此許多人在使用微處理器時,就直接以C語言作為微處理器開發工具,而這樣的作法往往排除了學習微處理器的硬體架構及運作觀念,導致僅僅學習到使用既有的作業系統、應用函式庫撰寫應用程式,而忽略了微處理器的特性。最終只是利用執行速率更高的硬體來掩飾軟體或設計上的缺失。甚至於當沒有第三方提供對應的硬體或函式庫時,許多工程師便一籌莫展,因為他們只具備程式撰寫的技能,而不具備微處理器的基礎知識。所以學習目標的訂定是很重要的。聞道有先後,術業有專攻。作為教育界的一員,需要把先學到的知識,傳授給後進學員;學習者也要了解自己所需要的專業知識,這樣社會才會分工合作,一起進步。
可惜現代教育制度因為法規、科系、課程等等的分配與限制,許多課程無法連貫而有賴學習者自我規劃;作為教育者也只能盡力將所學以適當的形式記錄,讓讀者自行研讀。這本書就是基於讓有心的讀者不要只是一昧地在網路上尋找解決方案,而能夠培養自己的基礎能力;希望在使用C語言作為工具學習微處理器的同時,仍然可以了解其硬體的功能特性與使用方式,作為未來開發應用程式的基礎。雖然心中仍深信微處理器的基礎學習必須要從電子學、數位電路、組合語言等等的基礎課程開始。
萬丈高樓平地起。以專業人員為生涯規劃的同好,在登高望遠的同時,如果也能夠細細品味一磚一瓦的巧思與技法,除了讚嘆蒼穹美景之餘,不也能夠在需要另起爐灶時,旁徵博引、自由揮灑,可以海闊天空地創造另一個精采的作品?
希望這一次的努力可以讓另一個世代的學子有機會更上一層樓。也感謝所有一起付出辛勞與協助的夥伴。
序
「學習究竟是要登高望遠還是始於卑爾?」恐怕是教育界爭論不停的話題。
在科技發展快速,應用複雜的現代社會中,C語言是工程界中最普遍的應用程式撰寫工具,在高階微處理器應用中也需要使用C語言作為開發工具。因此許多人在使用微處理器時,就直接以C語言作為微處理器開發工具,而這樣的作法往往排除了學習微處理器的硬體架構及運作觀念,導致僅僅學習到使用既有的作業系統、應用函式庫撰寫應用程式,而忽略了微處理器的特性。最終只是利用執行速率更高的硬體來掩飾軟體或設計上的缺失。甚至於當沒有第三方提供對應的硬體或函式庫時,...
目錄
目錄
第一章 微處理器與PIC18微控制器簡介
1.1 微處理器簡介
1.2 數位運算觀念
1.3 邏輯電路
1.4 組合邏輯
1.5 順序邏輯
1.6 數值的邏輯計算
1.7 PIC系列微控制器簡介
1.8 Microchip® 產品的優勢
1.9 PIC18 系列微控制器簡介
1.10 PIC18F45K22 微控制器腳位功能
1.11 PIC18F45K22 微控制器程式記憶體架構
第二章 組合語言指令
2.1 PIC18 系列微處理器指令集
2.2 常用的虛擬指令
第三章 資料記憶體架構
3.1 資料記憶體組成架構
3.2 資料記憶體的擷取區塊
3.3 資料記憶體直接定址法
3.4 資料記憶體間接定址法
3.5 狀態暫存器與重置控制暫存器
第四章 C程式語言與XC8編譯器
4.1 C 程式語言簡介
4.2 C 程式語言檔的基本格式
4.3 變數型別與變數宣告
4.4 函式結構
4.5 陣列
4.6 結構變數
4.7 集合宣告
4.8 指標
4.9 MPLAB XC8 編譯器簡介
4.10 XC8 編譯器程式語言功能與特性
4.11 MPLAB XC8 編譯器特定的 C 語言功能
4.12 嵌入式組合語言指令
4.13 #pragma
4.14 特定微控制器的表頭檔
4.15 MPLAB XC8 的函式處理方式
4.16 混合 C 語言及組合語言程式碼
4.17 中斷執行程式的宣告
4.18 MPLAB XC8 函式庫
4.19 MPLAB Code Configurator, MCC程式設定器
第五章 PIC微控制器實驗板
5.1 PIC 微控制器實驗板元件配置與電路規劃
5.2 PIC 微控制器實驗板各部電路說明
第六章 數位輸出入埠
6.1 數位輸出入埠的架構
6.2 多工使用的輸出入埠
6.3 建立一個C語言程式的專案
6.4 數位輸出
6.5 數位輸入
6.6 受控模式的並列式輸出入埠
第七章 PIC18微控制器系統功能與硬體設定
7.1 微控制器系統功能
7.2 設定位元
7.3 調整設定位元
7.4 震盪器的設定
7.5 監視計時器
7.6 睡眠模式
7.7 閒置模式
7.8 特殊的時序控制功能
第八章 中斷與周邊功能運用
8.1 基本的周邊功能概念
8.2 計數的觀念
8.3 TIMER0計數器/計時器
8.4 中斷
8.5 中斷過程中的資料暫存器儲存
8.6 中斷事件訊號
8.7 使用MPLAB Code Configurator, MCC程式產生器撰寫程式
第九章 計時器/計數器
9.1 TIMER0 計時器/計數器
9.2 TIMER1/3/5 計時器/計數器
9.3 TIMER2/4/6 計時器/計數器
第十章 類比訊號模組
10.1 內部固定參考電壓
10.2 數位轉類比訊號轉換器
10.3 10 位元類比數位訊號轉換模組
10.4 類比訊號比較器
第十一章 CCP模組
11.1 傳統的 PIC18 系列微控制器 CCP 模組
11.2 輸入訊號捕捉模式
11.3 輸出訊號比較模式
11.4 CCP 模組的基本 PWM 模式
11.5 加強型 ECCP 模組的 PWM 控制
第十二章 通用非同步接收傳輸模組
12.1 通用同步/非同步接收傳輸簡介
12.2 鮑率產生器
12.3 加強的 EUSART 模組功能
第十三章 EEPROM資料記憶體
13.1 EEPROM 資料記憶體讀寫管理
13.2 讀寫 EEPROM 記憶體資料
第十四章 LCD液晶顯示器
14.1 液晶顯示器的驅動方式
第十五章 微控制器的同步串列通訊
15.1 通訊傳輸的分類
15.2 同步串列傳輸介面模組
附錄A Microchip開發工具
A.1 Microchip開發工具概況
A.2 MPLAB X IDE整合式開發環境
A.3 建立程式碼
A.4 MPLAB X IDE軟體模擬器
A.5 MPLAB ICD4與PICkit4線上除錯燒錄器
A.6 軟體燒錄程式Bootloader
附錄B 參考文獻
目錄
第一章 微處理器與PIC18微控制器簡介
1.1 微處理器簡介
1.2 數位運算觀念
1.3 邏輯電路
1.4 組合邏輯
1.5 順序邏輯
1.6 數值的邏輯計算
1.7 PIC系列微控制器簡介
1.8 Microchip® 產品的優勢
1.9 PIC18 系列微控制器簡介
1.10 PIC18F45K22 微控制器腳位功能
1.11 PIC18F45K22 微控制器程式記憶體架構
第二章 組合語言指令
2.1 PIC18 系列微處理器指令集
2.2 常用的虛擬指令
第三章 資料記憶體架構
3.1 資料記憶體組成架構
3.2 資料記憶體的擷取區塊
3.3...