《單片機原理及應用:C語言程序設計與實現》介紹51系列單片機的結構、基本原理、指令系統和硬件資源,重點介紹C51編程技術及其應用。《單片機原理及應用:C語言程序設計與實現》的特點是通過實例以及練習使讀者掌握相應知識點,讀者能夠通過完整的實例,快速、有效地掌握用C51語言開發51單片機的流程,并通過各章的習題掌握各章重點和難點,真正對相關知識做到融會貫通。
《單片機原理及應用:C語言程序設計與實現》可作為高等學校計算機科學與技術、計算機應用及相關專業的教材,也可以作為相關專業人員的培訓教材。
在全國高等工科院校中,已普遍開設單片機及相關課程。51系列單片機奠定了8位單片機的基礎,形成了單片機的經典體系結構。隨著51單片機的發展,應用C語言開發51單片機成為一種流行的趨勢。《單片機原理及應用:C語言程序設計與實現》在介紹51系列單片機的硬件結構、匯編語言及單片機擴展技術的同時,著重介紹了C51編程技術及其應用。
系統介紹51單片機硬件結構
著重介紹C51編程技術及應用
配合實例講解單片機擴展技術
隨著計算機應用技術的不斷發震,單片機在工業測量控制領域內的應用越來越廣泛。同時,隨著超大規模集成電路工藝和集成制造技術的不斷完善,單片機的硬件集成度也在不斷提高,出現了能滿足各種不同需求的具有各種特殊功能的單片機。就8051系列單片機而言,由于Intel公司將8051 CPU內核向全世界各大半導體公司的擴散,目前已有Philips、Siemens、Dallas、OKI、Advance Micro Device、Atmel等多家公司生產了100多種型號的51系列單片機。這類單片機具有集成度高、性能價格比優良的特點,在工業測量控制領域內獲得了極為廣泛的應用,預計在今后的相當一個時期內,51單片機仍將是主流機種。
在開發一個單片機應用系統時,系統程序的編寫效率在很大程度上決定了目標系統的研制成效。早期在研制單片機應用系統時,大多以匯編語言作為軟件工具。匯編語言程序能夠直接操作機器硬件。指令的執行速度快。但由于匯編語言不是一種結構化的程序設計語言,相對較難編寫和調試,程序本身的編寫效率較低。隨著單片機硬件性能的提高,其工作速度越來越快,目前51單片機的時鐘頻率可達40MHz以上。因此在編寫單片機應用系統程序時,更著重于程序本身的編寫效率。為了適應這種要求,現在的單片機系統開發過程中,除了采用匯編語言之外,經常采用高級語言,如C51、PLM51來編程實現。
在全國高等工科院校中,已普遍開設單片機及相關課程。51系列單片機奠定了8位單片機的基礎,形成了單片機的經典體系結構。隨著51單片機的發展,應用c語言開發51單片機成為一種流行的趨勢,這是因為它具有使用方便、編程效率高及仿真調試容易等突出特點。
本書在介紹51系列單片機的硬件結構、匯編語言及單片機擴展技術的同時,著重介紹了C51鳊程技術及其應用。C51語言是專門用于51系列單片機編程的C語言,除了一些基于描述單片機硬件的特殊部分外,可以說與標準C語言完全相同。所以以C51語言實現單片機系統更有利于系統的修改及擴展。為了體現匯編語言實現與C51編程實現的不同,本書在相關章節提供了上述兩種實現方法的源程序,并進行了相關的講解。同時本書還配有電子教案,便于教師教學和對教材內容的補充與完善。
本書由馬斌、韓忠華、王長濤和夏興華共同編寫。參與本書編寫工作與提供幫助的還有東北大學的孫秋野、渤船重工的王延房、北京航空航天大學的王志強、沈陽建筑大學的閻煥忠、戴敬、張萬江、閔麗和王鑫以及沈陽大學的唐璐。此外,馮冬、榪艷雙、遲鐵參與了文字處理及圖表繪制工作,在此一并表示誠摯的謝意。
第1章 51單片機結構及工作原理 1
1.1 微型計算機基礎 1
1.1.1 單片機及其發展概況 1
1.1.2 計算機中的數制及相互轉換 3
1.1.3 二進制數的運算 7
1.1.4 計算機中數的表示方法 10
1.2 51單片機的基本組成和功能 13
1.2.1 51系列單片機的主要功能 13
1.2.2 51系列單片機基本結構 14
1.2.3 51系列單片機外部引腳 15
1.3 51單片機的內部結構 19
1.3.1 中央處理單元 19
1.3.2 存儲器 21
1.3.3 定時器/計數器 25
1.3.4 I/O口 26
1.3.5 中斷系統 26
1.4 51單片機的工作方式 29
1.4.1 時鐘和時鐘電路 29
1.4.2 CPU時序 29
1.4.3 復位狀態和復位電路 30
本章小結 32
習題與思考 32
第2章 51單片機指令系統及匯編語言程序設計基礎 33
2.1 51單片機指令格式 33
2.1.1 指令格式 33
2.1.2 指令的字節數 34
2.1.3 指令的分類 35
2.2 51單片機尋址方式 36
2.2.1 立即尋址 37
2.2.2 直接尋址 37
2.2.3 寄存器尋址 38
2.2.4 寄存器間接尋址 38
2.2.5 變址尋址 39
2.2.6 相對尋址 39
2.2.7 位尋址 40
2.3 51單片機指令 40
2.3.1 數據傳送類指令 40
2.3.2 算術運算類指令 44
2.3.3 邏輯運算及移位指令 47
2.3.4 控制轉移類指令 51
2.3.5 位操作類指令 56
2.3.6 偽指令 59
2.4 匯編語言程序設計基礎 61
2.4.1 匯編語言程序的格式 62
2.4.2 匯編語言程序的基本結構 63
2.4.3 順序結構程序設計 63
2.4.4 分支程序設計 64
2.4.5 循環程序設計 67
2.4.6 查表程序設計 72
2.4.7 子程序設計 74
本章小結 79
習題與思考 79
第3章 51單片機的硬件資源 81
3.1 51單片機并行I/O口 81
3.1.1 I/O口的作用 81
3.1.2 內部并行I/O口 82
3.1.3 內部并行I/O口的應用 85
3.2 51單片機中斷系統 85
3.2.1 中斷的定義 86
3.2.2 中斷源 86
3.2.3 中斷控制 87
3.2.4 中斷優先級結構 89
3.2.5 中斷響應 90
3.2.6 中斷響應時間 91
3.2.7 中斷請求的撤除 91
3.2.8 中斷系統的初始化 92
3.2.9 外部中斷源的擴展 93
3.3 51單片機定時器/計數器 95
3.3.1 定時器/計數器的結構及工作原理 95
3.3.2 控制定時器/計數器的寄存器 96
3.3.3 定時器/計數器的初始化 97
3.3.4 定時器/計數器的工作方式 99
3.4 51單片機串行通信 105
3.4.1 串行通信 105
3.4.2 51單片機串行接口 107
3.4.3 51單片機串行通信的工作方式 109
本章小結 112
習題與思考 112
第4章 C51程序設計基礎 114
4.1 C51語言的符號類型 114
4.1.1 標識符 114
4.1.2 關鍵字 114
4.1.3 運算符 116
4.1.4 分隔符 118
4.2 常量與變量 120
4.2.1 基本數據類型 120
4.2.2 常量 121
4.2.3 變量 122
4.2.4 變量的作用范圍 123
4.3 C51語句 124
4.3.1 說明語句與空語句 124
4.3.2 表達式語句 126
4.3.3 條件語句 127
4.3.4 開關、跳轉語句 128
4.3.5 循環語句 130
4.3.6 復合語句 132
4.3.7 函數調用語句 132
4.3.8 預處理 133
本章小結 137
習題與思考 137
第5章 C51數據結構 139
5.1 數組 139
5.1.1 數組的定義和引用 139
5.1.2 字符數組 139
5.1.3 數組元素賦初值 140
5.1.4 數組作為函數的參數 140
5.2 指針 141
5.2.1 指針與地址 141
5.2.2 指針變量 141
5.3 結構 142
5.3.1 結構說明和結構變量定義 142
5.3.2 結構變量的使用 143
5.3.3 結構數組和結構指針 143
5.4 聯合 144
5.5 枚舉 145
本章小結 146
習題與思考 146
第6章 C51編譯器及簡介 147
6.1 KEIL C51編譯器簡介 147
6.1.1 KEIL C51開發套件 147
6.1.2 KEIL C51的安裝 147
6.1.3 KEIL C51開發實例 147
6.2 C51庫函數概述 150
6.2.1 本征庫函數和非本征庫函數 150
6.2.2 幾類重要庫函數 150
6.2.3 C51庫函數原型列表 151
本章小結 153
習題與思考 153
第7章 51單片機人機交互 154
7.1 外部顯示元件設計 154
7.1.1 LED數碼管 154
7.1.2 16*2字符型液晶顯示器編程 161
7.2 鍵盤輸入設計 168
7.2.1 鍵盤接口類型 168
7.2.2 鍵盤的防抖技術 171
7.2.3 鍵盤掃描方式編程 172
7.2.4 鍵盤中斷方式編程 174
7.3 外接打印機接口設計 176
7.3.1 打印機接口信號 177
7.3.2 字符和漢字編碼 178
7.3.3 打印命令 178
7.3.4 外接打印機接口電路設計 180
7.3.5 外接打印機驅動程序設計 182
本章小結 184
習題與思考 184
第8章 51單片機數據采集 185
8.1 傳感器技術概述 185
8.1.1 傳感器的組成 185
8.1.2 傳感器的基本特性 186
8.2 常用的A/D轉換元件 187
8.2.1 A/D轉換元件的結構和工作原理 187
8.2.2 A/D轉換元件的接口電路 192
8.2.3 單片機A/D轉換軟件編程 192
8.3 溫度數據采集元件設計 194
8.3.1 溫度數據采集元件的結構和工作原理 194
8.3.2 溫度數據采集元件的接口電路 198
8.3.3 單片機溫度數據采集軟件編程 199
8.4 壓力數據采集元件設計 205
8.4.1 壓力數據采集元件的結構和工作原理 205
8.4.2 壓力數據采集元件接口電路 210
8.4.3 單片機壓力數據采集軟件編程 211
本章小結 212
習題與思考 212
第9章 51單片機串行通信 214
9.1 單片機串行通信設計 214
9.1.1 常用接口芯片結構和工作原理 214
9.1.2 單片機串行通信電路設計 220
9.1.3 單片機串行通信軟件編程 221
*9.2 Windows.NET環境下計算機與單片機串行通信程序設計 230
9.2.1 Windows.NET串行類介紹 230
9.2.2 計算機與下位機通信協議 232
9.2.3 計算機的串行通信程序的設計 238
9.2.4 單片機串行通信程序的設計 240
本章小結 249
習題與思考 249
第10章 51單片機外部存儲器擴展 251
10.1 外部I/O的擴展 251
10.1.1 I/O口擴展概述 251
10.1.2 I/O地址譯碼技術 252
10.2 存儲器概述 253
10.2.1 存儲器的類型 254
10.2.2 常用的存儲器 255
10.2.3 存儲器擴展電路的工作方式 258
10.3 外部存儲器擴展 259
10.3.1 擴展程序存儲器 259
10.3.2 擴展數據存儲器及編程 261
10.3.3 程序存儲器與數據存儲器同時擴展 266
本章小結 267
習題與思考 267
第11章 51單片機輸出控制 269
11.1 常用輸出接口電路 269
11.1.1 單片機與光電隔離元件的接口電路 269
11.1.2 單片機與模擬開關元件的接口電路 271
11.1.3 單片機與繼電器的接口電路 273
11.2 常用D/A轉換器設計 279
11.2.1 D/A轉換器的結構和工作原理 279
11.2.2 D/A轉換器的接口電路 281
11.2.3 D/A轉換器的單片機編程 282
*11.3 直流電動機的控制設計 283
11.3.1 直流電動機驅動電路的基本工作原理 284
11.3.2 采用單片機的直流電動機控制電路設計 291
11.3.3 直流電動機驅動的編程 291
本章小結 293
習題與思考 293
附錄A 51單片機指令系統表 294
附錄B C51語言的庫函數 298
參考文獻 303
第1章 51單片機結構及工作原理
1975年,美國Texas Instruments公司成功研制了世界上第一臺單片機,它的出現是計算機技術發展史上的一個里程碑,從此,計算機技術不僅在數值處理方面得到了進一步的發展,而且在智能化控制領域里也得到了迅猛的發展,并占有越來越重要的地位。51系列單片機是目前應用最廣泛的單片機,該系列單片機簡單易學,具有豐富的指令系統和高級語言編譯系統。本章重點介紹單片機的基本概念、特點、結構以及工作方式等。
1.1 微型計算機基礎
1.1.1單片機及其發展概況
1.單片機的發展
單片機的全稱為單片微型計算機(Single Chip Microcomputer),它是將組成微型計算機的各個功能部件,如中央處理器(CPU)、隨機存儲器(RAM)、只讀存儲器(ROM)、基本輸入/輸出接口(I/O接口)、定時器/計數器以及串行通信接口等部件有機地結合在一塊集成芯片中,構成一臺完整的微型計算機,因此單片機又可以稱為微處理器(Microcontroller Unit)。一個完整的單片機如圖1.1所示。