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