本書是普通高等教育\"十一五”國家級規(guī)劃教材,以51系列單片機和C語言為基礎,全面系統(tǒng)地介紹單片機的C語言程序設計與應用的基本問題。本書主要內(nèi)容包括:單片機的C語言概述,51系列單片機硬件與C語言編程基礎,P0~P3口輸入/輸出、中斷系統(tǒng)、定時器/計數(shù)器、串行口、并行擴展、串行擴展的C51編程,?Vision2與Proteus使用基礎等。本書提供大量實例及詳細說明與注釋,硬件設計實例均可在Keil和Proteus軟件平臺上直接運行,每章后附本章小結(jié)、習題、實驗與設計等,提供電子課件、Proteus仿真電路及程序代碼、習題參考答案。
前 言
在單片機應用系統(tǒng)設計中,軟件編程占據(jù)著非常重要的地位。尤其是隨著單片機技術的發(fā)展,嵌入式系統(tǒng)的推廣和應用,硬件的集成化程度越來越高,同時對軟件編程的要求也越來越高。這就要求單片機開發(fā)人員能在短時間內(nèi)編寫出執(zhí)行效率高、運行可靠的代碼。同時,由于實際系統(tǒng)的日趨復雜,對使用代碼的規(guī)范性、模塊化的要求越來越高,要方便多個設計參與者以軟件工程的形式進行協(xié)同開發(fā)。在這種形勢下,僅靠單片機在推廣應用的初期使用的匯編語言來進行軟件開發(fā)是遠遠不夠的。
C語言是近年來在國內(nèi)外普遍使用的一種程序設計語言。C語言能直接對計算機硬件進行操作,既有高級語言的特點,又有匯編語言的特點,因此在單片機應用系統(tǒng)開發(fā)過程中得到了非常廣泛的應用。在單片機應用系統(tǒng)設計與開發(fā)過程中,只要簡單地熟悉相應單片機的硬件結(jié)構(gòu),利用C語言作為編程語言,就可以大大縮短開發(fā)周期。C語言已成為舉世公認的高效簡潔而又貼近硬件的編程語言之一。
以51單片機為硬件基礎,以C語言為軟件編程基礎,對于學習單片機的C語言程序設計是一種快捷的入門方式。51系列單片機,由于其具有集成度高、處理能力強、可靠性高、系統(tǒng)結(jié)構(gòu)簡單、價格低廉、易于使用等優(yōu)點,迅速占領了自動控制系統(tǒng)和智能儀器儀表行業(yè)的主要市場,在我國得到了廣泛的應用,并取得了令人矚目的成果。盡管目前世界各大公司研制的各種高性能、不同型號的單片機不斷問世,但由于51單片機具有易于學習和掌握、性價比高等優(yōu)點,并且以51單片機基本內(nèi)核為核心的各種擴展和增強型的單片機不斷推出,另外由于51單片機內(nèi)核技術幾乎包含了單片機理論基礎和技術的全部,具有較好的系統(tǒng)性和完整性,再加上幾十年來,國內(nèi)已積累了豐富的技術資料、完整的實驗環(huán)境與開發(fā)設備,因此51系列單片機技術非常適合課堂教學,學懂、弄通51單片機的基本理論與應用技術,也就打好了學習、應用單片機的基礎,即使學、用其他系列的單片機也就不難了。
本書是一本專門講解單片機的C語言(C51)編程的教材,以由淺入深、相互貫穿、重點突出、文字敘述與典型代碼實例相結(jié)合為原則,向每位單片機、嵌入式愛好者和開發(fā)者全面介紹C51語言程序的編寫。本書第4版仍然保持第3版的寫作風格,在內(nèi)容上對第3版進行了仔細的修訂,使敘述更加合理和順暢,更便于閱讀和理解。全書共9章,主要內(nèi)容包括:單片機的C語言概述,51系列單片機硬件與C51編程基礎,51系列單片機P0~P3口輸入/輸出、中斷系統(tǒng)、定時器/計數(shù)器、串行口、并行擴展、串行擴展的C51編程、Keil ?Vision2與Proteus使用基礎等。每章后附本章小結(jié)、習題等。
本書提供大量實例供讀者學習,在掌握了實例的基礎上又給讀者推出了“修改”內(nèi)容,目的是讓讀者根據(jù)實例能自己編寫滿足要求的程序,所有實例均可在Keil和Proteus軟件平臺上直接運行。主要章節(jié)提供了“實驗與設計”內(nèi)容,在實驗上給出實驗的目的、電路、基本內(nèi)容、參考程序,讀者在掌握基本實驗的基礎上可以根據(jù)具體情況對實驗進行豐富與設計;設計部分是為了鍛煉學生綜合分析問題與解決問題的能力,在硬件和軟件上都提出了設計要求,學生可以根據(jù)所學知識在硬件和軟件上進行詳細的設計。另外,對有些重要的內(nèi)容進行了重點的“強調(diào)”,強調(diào)的目的是提醒讀者在學習該部分內(nèi)容時要重點注意這些問題。本書提供相關的電子課件、程序代碼、習題參考答案,可登錄華信教育資源網(wǎng)http://www.hxedu.com.cn注冊下載。
本書的主要特色是,在介紹單片機的C語言程序設計的過程中清晰地說明單片機的所有功能,并對每項功能給出實例代碼,同時詳細介紹單片機的C語言開發(fā)與仿真環(huán)境的使用,透徹分析單片機的C語言語法和語義,以及開發(fā)過程中可能存在的問題和難點。
本書的另一個特點是突破了傳統(tǒng)的軟、硬件截然割裂的做法,使讀者對嵌入式系統(tǒng)的開發(fā)有一個整體的了解。相信本書的這一特點會節(jié)省讀者進入嵌入式C語言領域的時間,同時能夠更清楚地認識應用系統(tǒng)開發(fā)的過程,深入理解單片機的C語言編程機制。
本書由山東理工大學姜志海、煙臺汽車工業(yè)職業(yè)學院姜沛勛編寫。第3、4、5、6、7、8章由姜志海編寫;第1、2、9章由姜沛勛編寫;全書由姜志海負責整理與統(tǒng)稿。
本書在編寫過程中得到了許多專家和同行的大力支持與熱情幫助,他們對本書提出了許多建設性的建議和意見,在此一并表示衷心的感謝。
鑒于編者的水平有限,加之新的編程技術不斷涌現(xiàn),書中難免有不完善之處,懇請廣大讀者批評指正。反饋信息請發(fā)送至wyj@phei.com.cn。
作 者
2020年5月
目 錄
第1章 單片機的C語言概述 1
1.1 單片機的C語言 1
1.1.1 單片機的C語言(C51)的特點 1
1.1.2 單片機的C語言和標準C語言的
比較 2
1.1.3 單片機的C語言與匯編語言的優(yōu)
勢對比 2
1.2 硬件及軟件環(huán)境 6
1.2.1 硬件環(huán)境 6
1.2.2 軟件環(huán)境 8
本章小結(jié) 8
習題 8
第2章 51系列單片機硬件及C51編程
基礎 9
2.1 51單片機的總體結(jié)構(gòu) 9
2.1.1 內(nèi)部結(jié)構(gòu) 9
2.1.2 外部引腳說明 10
2.1.3 CPU的時序周期 13
2.2 51單片機的存儲器 14
2.2.1 程序存儲器 14
2.2.2 數(shù)據(jù)存儲器 15
2.2.3 特殊功能寄存器 17
2.3 C51語言的數(shù)據(jù) 20
2.3.1 常量 20
2.3.2 變量 22
2.4 C51語言對單片機主要資源的
控制 25
2.4.1 特殊功能寄存器的C51語言
定義 25
2.4.2 絕對地址的訪問 27
2.5 C51語言的基本運算與流程控制
語句 28
2.5.1 基本運算 28
2.5.2 分支判斷――if、switch語句 30
2.5.3 循環(huán)控制――while、for語句 32
2.5.4 break、continue、return和goto
語句 34
2.6 C51語言的數(shù)組、指針、函數(shù) 36
2.6.1 數(shù)組 36
2.6.2 指針 38
2.6.3 函數(shù) 39
2.7 C51語言的預處理命令及匯編語句
的嵌入 42
2.7.1 文件包含、宏定義、條件編譯 42
2.7.2 C51中匯編語句的嵌入 44
2.8 C51程序 45
2.8.1 C51的程序結(jié)構(gòu) 45
2.8.2 C51編程規(guī)范及注意事項 47
2.8.3 C51的標識符與關鍵字 48
本章小結(jié) 50
習題 50
第3章 P0~P3口輸入/輸出的C51編程 52
3.1 51單片機的P0~P3口基礎知識 52
3.1.1 P0~P3口結(jié)構(gòu) 52
3.1.2 P0~P3口特點總結(jié) 53
3.2 輸出操作 54
3.2.1 基本輸出操作舉例――字節(jié)輸出
與位輸出 54
3.2.2 擴展輸出操作舉例――流水燈與
霹靂燈 55
3.2.3 擴展輸出操作舉例――8段LED
數(shù)碼顯示器 57
3.3 輸入操作 62
3.3.1 閘刀型開關輸入信號 63
3.3.2 單個按鈕型開關輸入信號 64
3.3.3 多個按鈕型開關輸入信號――
鍵盤 66
3.4 實驗與設計 72
實驗1 閘刀型開關輸入/8段LED靜態(tài)
顯示輸出 72
實驗2 按鈕型開關輸入/8段LED靜態(tài)
顯示輸出 72
設計1:計時秒表的設計 74
設計2:模擬交通信號燈控制裝置的
設計 74
本章小結(jié) 74
習題 75
第4章 中斷系統(tǒng)的C51編程 76
4.1 中斷系統(tǒng)結(jié)構(gòu)與中斷控制 76
4.1.1 中斷系統(tǒng)結(jié)構(gòu) 76
4.1.2 特殊功能寄存器 77
4.2 中斷優(yōu)先級與中斷函數(shù) 78
4.2.1 中斷優(yōu)先級 78
4.2.2 中斷函數(shù)的結(jié)構(gòu)形式 80
4.3 外部中斷源的C51編程 80
4.3.1 外部中斷源初始化 80
4.3.2 編程示例 81
4.4 實驗與設計 84
實驗1 按鈕型開關模擬外部中斷
實驗 84
實驗2 外部中斷優(yōu)先級實驗 85
設計:出租車計價器里程計量裝置的
設計 87
本章小結(jié) 87
習題 88
第5章 定時器/計數(shù)器的C51編程 89
5.1 51單片機的定時器/計數(shù)器 89
5.1.1 結(jié)構(gòu) 89
5.1.2 特殊功能寄存器 90
5.2 定時器/計數(shù)器工作模式 91
5.3 定時器/計數(shù)器的應用舉例 94
5.3.1 定時器/計數(shù)器的初始化 95
5.3.2 應用舉例 96
5.4 實驗與設計 102
實驗1 按鈕型開關模擬計數(shù)器實驗 102
實驗2 定時器實驗 103
設計1:出租車計價器里程計量裝置
的設計 104
設計2:計時鐘的設計(倒計時) 104
本章小結(jié) 104
習題 105
第6章 串行口的C51編程 106
6.1 51單片機串行口基礎知識 106
6.1.1 串行口的結(jié)構(gòu)原理 106
6.1.2 串行口的應用控制 107
6.2 51單片機串行口的工作方式 108
6.2.1 串行口工作方式0 108
6.2.2 串行口工作方式1 112
6.2.3 串行口工作方式2 116
6.2.4 串行口工作方式3 119
6.3 51單片機串行口的應用舉例 122
6.3.1 串行口編程基礎 122
6.3.2 串行口應用舉例 124
6.4 實驗與設計 127
實驗1 串行口控制的流水燈實驗 127
實驗2 兩個單片機通信實驗 127
本章小結(jié) 129
習題 130
第7章 外部并行擴展的C51編程 131
7.1 51單片機并行I/O口擴展基礎 131
7.1.1 系統(tǒng)擴展總線結(jié)構(gòu)圖 131
7.1.2 數(shù)據(jù)線、控制線的連接 132
7.1.3 譯碼信號的形成――系統(tǒng)擴展
的尋址 132
7.2 可編程的I/O接口芯片8255A的
C51編程 135
7.2.1 8255A簡介 135
7.2.2 利用8255A擴展并行的輸入/輸出
口示例 139
7.2.3 利用Intel 8255A作為8段LED
靜態(tài)顯示輸出口的示例 140
7.2.4 利用Intel 8255A作為8段LED
動態(tài)顯示輸出口的示例 141
7.3 D/A與A/D轉(zhuǎn)換器的C51編程 143
7.3.1 D/A轉(zhuǎn)換器基礎 143
7.3.2 8位并行D/A轉(zhuǎn)換器DAC0832 145
7.3.3 A/D轉(zhuǎn)換器基礎 150
7.3.4 8位并行A/D轉(zhuǎn)換器ADC0809 151
7.4 液晶顯示器的C51編程 155
7.4.1 字符型LCD1602液晶顯示模塊
的C51編程 155
7.4.2 點陣式帶漢字庫12864液晶顯示
模塊接口技術 160
7.5 實驗與設計 168
實驗1 DAC0832單緩沖實驗 168
實驗2 ADC0809實驗 169
設計1:電子密碼鎖的設計 171
設計2:波形發(fā)生器的設計 171
本章小結(jié) 171
習題 172
第8章 外部串行擴展的C51編程 173
8.1 I2C總線器件的C51編程 173
8.1.1 認識I2C總線接口 173
8.1.2 I2C總線典型器件AT24C02
應用舉例 175
8.2 SPI總線器件的C51編程 180
8.2.1 認識SPI總線 181
8.2.2 SPI總線典型器件X25045應用
舉例 182
8.3 單總線的C51編程 186
8.3.1 認識單總線 186
8.3.2 單總線典型器件DS18B20應用
舉例 187
8.4 串行A/D接口芯片TLC2543的
C51編程 193
本章小結(jié) 196
習題 197
第9章 μVision2與Proteus使用基礎 198
9.1 μVision2集成開發(fā)環(huán)境 198
9.1.1 File、Edit和View菜單 199
9.1.2 Project、Debug和Flash菜單 201
9.1.3 Peripherals、Tools和Window
菜單 202
9.2 用μVision2建立與調(diào)試工程 203
9.2.1 工程創(chuàng)建、設置、編譯與鏈接 203
9.2.2 用μVision2調(diào)試工程 207
9.2.3 C51程序調(diào)試舉例說明――
HELLO.C 211
9.2.4 Keil C51的調(diào)試技巧及舉例 213
9.3 Proteus快速入門 216
9.3.1 集成Proteus ISIS環(huán)境 216
9.3.2 電路原理圖設計 221
9.4 Proteus仿真工具介紹 226
9.4.1 探針 226
9.4.2 虛擬儀器 226
9.4.3 信號發(fā)生器 227
9.4.4 仿真圖表 227
9.5 Proteus軟件中的C51程序運行與
調(diào)試 228
9.5.1 驅(qū)動的安裝 228
9.5.2 Keil和Proteus的配置 228
9.5.3 Keil和Proteus的調(diào)試過程 229
本章小結(jié) 229
習題 230
附錄A ASCII碼字符表 231
附錄B 單片機應用資料查詢方法 232
附錄C Proteus常用分離器件名稱 233
參考文獻 234