本書系統、全面地介紹了基于8051內核單片機的基本原理、硬件結構、指令系統,并從應用的角度介紹了匯編語言程序設計、單片機外部電路的擴展,以及與鍵盤、LED顯示、LCD顯示、打印機等多種硬件接口的設計方法,詳細介紹了串行、并行接口的A/D、D/A轉換器功能特點和典型應用,STC15F2K60S2系列增強型單片機的應用技術、單片機C51程序設計、單片機應用系統設計、Proteus仿真、單片機實驗等內容。本書從現實教學和工程實際應用出發,對傳統單片機教材內容進行了改良。針對單片機更注重單芯片、少引腳擴展應用,對并行器件、并行總線擴展及8255、8155、8279等已經淘汰的器件進行了精簡或摒棄,只著重介紹它們的擴展方法、原理和典型應用,補充了串行總線技術、串行總線器件接口應用、STC15F2K60S2系列單片機體系結構和內部新增功能部件的使用,以及C51編程規范等內容。結構完整,內容豐富,應用實例翔實,實驗內容精練,力求做到與市場接軌,與現實同步,既重視原理,更注重實效。
本書配有PPT、程序源代碼、課程設計指導書等教學資源;為便于實驗環節的教學,可為任課教師提供本書設計的單片機實驗開發板。
推 薦 序
21世紀全球全面進入了計算機智能控制/計算時代,而其中的一個重要方向就是以單片機為代表的嵌入式計算機控制/計算。由于最適合中國工程師/學生入門的8051單片機已有30多年的應用歷史,絕大部分工科院校均有此必修課,有幾十萬名對該單片機十分熟悉的工程師可以相互交流開發/學習心得,有大量的經典程序和電路可以直接套用,從而大幅降低了開發風險,極大地提高了開發效率,這也是STC宏晶科技基于8051系列單片機產品的巨大優勢。
Intel 8051技術誕生于20世紀70年代,不可避免地面臨著落伍的危險,如果不對其進行有效的創新,我國的單片機教學與應用就會陷入被動局面。本書在系統介紹了基于8051內核單片機原理和編程規范基礎上,順應現實形勢,站在教學高度,結合實際對現有的單片機教材進行了有益改良,淘汰了一些過時的教學內容,補充了單片機的新技術(如串行總線接口技術),增加了STC宏晶科技最新推出的STC15F2K60S2系列單片機內容的講授。由于STC15F2K60S2系列單片機采用Flash技術(可反復編程10萬次以上)和ISP/IAP(在系統可編程/在應用可編程)技術,完全兼容8051,但指令執行速度最快提高了24倍;針對抗干擾進行了專門設計,具有超強抗干擾能力,并有特別加密設計,無法解密;同時,片內集成了A/D、CCP/PCA/PWM、高速同步串行通信端口SPI、高速異步串行通信端口UART、雙串口、看門狗、大容量SRAM、E2PROM(Data Flash)和大容量Flash程序存儲器,定時器最多可達6個,片內高可靠復位電路可徹底省掉外部復位,內部高精準時鐘可徹底省掉外部昂貴的晶振,使單片機應用系統設計真正步入“單片”時代。
如今的高性能單片機,內部都集成了豐富的硬件資源。因此,在單片機應用系統設計中,應逐步摒棄多芯片設計方法,轉變傳統單片機應用系統的設計思路,充分利用單片機內部資源開發新產品、掌握新技術,提高系統的可靠性和穩定性。也正是這些高性能單片機的不斷推出,使智能電子產品的小型化、袖珍式設計變為可能。
本書作者朱兆優老師長期從事單片機應用系統設計和項目開發工作,在8051單片機應用中積累了豐富的教學經驗和實踐能力,從而保證本書內容的理論性、實踐性、前瞻性于一體。本書的特點是準確把握了單片機發展的脈絡,精簡或摒棄了很多已淘汰的并行器件(如8255、8155、8279、0809等)的擴展,對比較實用的串行總線技術、串行總線器件接口應用做了必要的補充,對新型高性能STC15F2K60S2系列單片機進行了系統講述與實踐應用,對ASM編程、C語言編程和混合編程技術也進行了實例展示,使之兼有時代感、大融合和創新性。本書配有簡單實用的單片機應用開發板,為單片機應用開發提供了眾多典型教學案例和實踐應用,可有效保證單片機教學的時效性和實用性,對提升單片機教學水平、教學效果有諸多益處。
最后,感謝Intel公司發明了經久不衰的8051體系結構,感謝朱兆優教授編寫出版的新書,從而保證了中國30多年來的單片機教學與世界同步。
STC創始人:姚永平
www.STCMCU.com
2012.6
前 言
自1972年Intel公司推出第一款微處理器以來,計算機技術遵循著摩爾定律,以每18個月為一個周期微處理器性能提高一倍、價格降低一半的速度快步向前發展。以微處理器為核心的微型計算機在最近20年中發生了巨大的變化,經歷了從8088/8086到286、386、486、586、PⅡ、PⅢ等系列眾多CPU的飛躍。計算機對整個社會進步的影響有目共睹,其應用面的迅速拓寬,對個人與社會多方面的滲透表明,計算機技術已不再是深踞于高層次科技領域里的寵兒,它已經深入到社會活動的一切領域之中,闖進了平常百姓的生活里,使人們跨入信息時代、數字時代。
隨著電子技術的發展和近代超大規模集成電路的出現,通過對計算機的功能部件進行剪裁及優化,將CPU、程序存儲器(ROM)、數據存儲器(RAM)、并行I/O口(PIO)、串行I/O口(SIO)、定時/計數器(CTC)及中斷控制器(ICU)等基本部件集成在一塊芯片中,制成了單芯片微型計算機(Single Chip Microcomputer),簡稱單片機,又稱為微控制器(Micro Controller Unit,MCU)。由于它能嵌入到某個電路或電子產品設備中,也稱為嵌入式控制器(Embedded Controller)。要把前面提到的眾多功能集合在一起,在過去需要具備專門的知識,采用很多電路組建成一個電子系統來實現。而今卻簡化成只需選擇一片合適的單片機,并對其已有的功能、指標、參數及引腳進行合理的使用即可完成。單片機與可編程邏輯器件相結合,構成了新一代電子工程應用技術。
20世紀90年代,單片機在我國迅速普及。在電子技術日新月異的今天,在人們的生活里,到處都可以看到單片機的具體應用。單片機可以嵌入到各種電子產品之中,成為機電產品的核心部件,控制著各種產品的工作。隨著大規模集成電路的發展,單片機已從過去的單一品種,發展成為多品種、多系列機型,內部結構從過去的基本部件發展到集成有A/D、D/A、監控定時器(WDT)、通信控制器(CCU)、脈寬調制器(PWM)、浮點運算器(FPU)、模糊控制器(FCU)、數字信號處理器(DSP),以及具有I2C、SPI、ISP等眾多特殊功能部件,成為功能越來越強的增強型、高檔型單片機。由于單片機具有功能強、體積小、功耗低、成本低、裸機編程、軟件代碼少、工作可靠、自動化程度高、實時響應速度快、使用方便等特點,因此被廣泛應用于工業制造、過程控制、數據采集、通信、智能化儀器儀表、汽車、船舶、航空航天、軍工及消費類電子產品中。
由單片機作為主控制器的全自動洗衣機、高檔電風扇、電子廚具、變頻空調、遙控彩電、攝像機、VCD/DVD機、組合音響、電子琴等產品早已進入了人們的生活。從家用消費類電器到復印機、打印機、掃描儀、傳真機等辦公自動化產品;從智能儀表、工業測控裝置到CT、MRI、γ刀等醫療設備;從數碼相機、攝錄一體機到航天技術、導航設備、現代軍事裝備;從形形色色的電子貨幣(如電話卡、水電氣卡)到身份識別卡、門禁控制卡、檔案管理卡以及相關讀/寫卡終端機等,都有單片機在其中扮演重要角色。因此有人說單片機“無處不在,無所不能”。
現今,炙手可熱的“三網”(即電信網、有線電視網、國際互聯網)融合產品、物聯科技已開始興起;在汽車中普遍都需要有30多個單片機被用于其中的空調、音響、儀表盤、自動窗、遙控門、自控前后蓋、空氣質量監測、反射鏡角度調整、自動滅火、防盜報警等的控制,協調控制著發動機、傳動器、制動器、安全氣囊、車載全球定位系統(GPS)等有條不紊地工作;此外,還有工業自動化控制和軍事科技等。這些領域的應用開發都還存在很多技術問題尚要解決,這正是電子技術人員可以大展拳腳的領域。
從學習的角度,單片機作為一個完整的數字處理系統,具備了構成計算機的主要單元部件,在這個意義上稱為單片微機并不過分。通過學習和應用單片機進入計算機硬件設計之門,可達到事半功倍的效果。
從應用的角度,單片機是一片大規模集成電路,可自成一體,對于其他微處理器所需的大量外部器件的連接都在單片機內部完成,各種信息傳遞的時序關系變得非常簡單,易于理解和接受。用單片機實現某個特定的控制功能十分方便。
從設計思想的角度,單片機的應用意味著“從以硬件電路設計為主的傳統設計方法向以軟件設計為主、對單片機內部資源及外部引腳功能加以利用的設計方法的轉變”,從而使硬件成本大大降低,設計工作靈活多樣。往往只需改動部分程序,就可以增加產品功能,提高產品性能。
單片機技術的功效神奇,有時也給人一種神秘莫測、難于駕馭之感。究其原因,很多初學者不太重視實踐,缺乏行之有效的經驗總結,缺乏將分散的實踐經驗上升到知識的理解層面。其實,如果從應用的角度來看,單片機既不神秘,也不難駕馭。單片機課程是一門實踐性、綜合性、應用性很強的課程,初學者應樹立在學中“做”,在做中“學”的思想。先學習單片機硬件結構、存儲結構、指令系統及中斷系統,然后不斷地進行編程練習,通過實驗提升技能,加深理解,結合單片機最小系統板或開發板等實物進行硬件編程控制,提高動手能力。如此循序漸進、舉一反三,才會有“登堂入室”之感,才能逐步將單片機應用于各種場合中以解決實際問題。
總之,單片機不同于通用微型計算機,它能夠靈活嵌入到各類電子產品中,使電子產品具備智能化和“傻瓜”化操作,已經成為電子自動化技術的核心基礎。因此,學習單片機非常有必要。
由于目前的單片機教材大多是沿用20世紀80年代的內容,使用的芯片(如8031)過于陳舊,很多學生學完單片機課程后,到工作單位從事實際的單片機系統設計時總感覺學無所用,而且脫離實際,F在,單片機的應用已真正步入“單片”時代。單片機內部集成的功能部件越來越多,功能越來越強,對單片機應用系統的設計已很少采用外部的并行總線擴展RAM和ROM,而是采用選擇包含不同存儲容量的單片機。即使是需要擴展外部RAM存儲器,也往往會選用串行I2C、SPI總線擴展技術。對I/O口的擴展也不再使用8255或8155這樣的芯片,而是選擇具有不同引腳封裝的單片機。當需要的I/O口少時,可以選擇封裝引腳少的單片機(最少的只有8個引腳,含6個I/O口引腳);若需要的I/O口較多時,可以
第1章 單片機概述(1)
1.1 什么叫單片機(1)
1.2 單片機的特點(2)
1.3 單片機的發展概況(2)
1.4 單片機主要制造廠家和機型(3)
1.5 8位單片機系列介紹(4)
1.5.1 8051內核的單片機(4)
1.5.2 Motorola內核的單片機(8)
1.5.3 PIC內核的單片機(8)
1.5.4 其他公司8位單片機(9)
1.6 16位和32位單片機系列介紹(10)
1.6.1 16位單片機(10)
1.6.2 32位單片機(10)
1.7 單片機的發展趨勢(11)
1.8 單片機的應用領域(13)
1.9 單片機技術主要網站介紹(14)
本章小結(15)
練習與思考題(15)
第2章 8051單片機體系結構(16)
2.1 8051單片機內部結構(16)
2.2 8051單片機芯片引腳功能(18)
2.3 8051中央處理器(20)
2.3.1 運算器(20)
2.3.2 控制器(22)
2.3.3 程序執行過程(23)
2.4 8051單片機的存儲結構(24)
2.4.1 8051單片機的存儲器結構(24)
2.4.2 程序存儲器(25)
2.4.3 內部數據存儲器(25)
2.4.4 特殊功能寄存器(28)
2.4.5 外部數據存儲器(30)
2.5 并行輸入/輸出端口(31)
2.5.1 P0口結構(31)
2.5.2 P1口結構(33)
2.5.3 P2口結構(33)
2.5.4 P3口結構(34)
2.6 單片機的時序與復位操作(35)
2.6.1 時鐘電路(35)
2.6.2 CPU的時序(36)
2.6.3 復位電路(38)
2.6.4 復位和復位狀態(40)
2.7 單片機的省電工作模式(41)
本章小結(42)
練習與思考題(42)
第3章 8051單片機指令系統(44)
3.1 指令系統概述(44)
3.2 指令格式(44)
3.2.1 指令的構成(44)
3.2.2 指令格式(45)
3.2.3 指令中常用的符號(45)
3.3 指令系統的尋址方式(46)
3.4 8051單片機指令系統(50)
3.4.1 數據傳送類指令(50)
3.4.2 算術操作類指令(55)
3.4.3 邏輯運算與移位指令(61)
3.4.4 控制轉移類指令(64)
3.4.5 位操作指令(69)
本章小結(71)
練習與思考題(71)
第4章 單片機匯編語言程序設計(74)
4.1 匯編語言程序設計概述(74)
4.1.1 計算機編程語言(74)
4.1.2 單片機源程序的匯編(75)
4.1.3 偽指令(75)
4.1.4 匯編程序分段格式(78)
4.2 匯編語言程序設計(79)
4.2.1 基本結構(79)
4.2.2 匯編語言程序設計步驟(82)
4.2.3 程序流程圖(82)
4.3 匯編語言程序設計實例(83)
4.3.1 分支轉移程序(83)
4.3.2 循環程序(85)
4.3.3 子程序(86)
4.3.4 算術運算程序(87)
4.3.5 邏輯運算程序(89)
4.3.6 數制轉換程序(90)
4.3.7 查表程序(93)
4.3.8 關鍵字查找程序(95)
4.3.9 數據極值查找程序(96)
4.3.10 數據排序程序(96)
本章小結(98)
練習與思考題(98)
第5章 8051單片機的中斷系統(101)
5.1 中斷的概念(101)
5.2 8051單片機中斷系統結構(102)
5.2.1 中斷系統結構(102)
5.2.2 中斷源(102)
5.2.3 中斷的控制(IE、IP)(104)
5.3 中斷響應處理過程(106)
5.3.1 中斷響應條件(106)
5.3.2 外部中斷響應時間(107)
5.3.3 中斷請求的撤銷(107)
5.3.4 中斷返回(108)
5.3.5 中斷服務程序編程方法(108)
5.4 外部中斷擴充方法(110)
5.4.1 中斷和查詢結合法(110)
5.4.2 矢量中斷擴充法(110)
5.5 中斷系統軟件設計(112)
5.6 中斷系統應用實例(113)
本章小結(114)
練習與思考題(115)
第6章 8051單片機定時器/計數器
及應用(117)
6.1 8051單片機定時器/計數器
的結構(117)
6.1.1 工作方式控制寄存器
TMOD(117)
6.1.2 定時器/計數器控制寄存器
TCON(118)
6.2 定時器/計數器的工作方式(118)
6.2.1 方式0(118)
6.2.2 方式1(119)
6.2.3 方式2(119)
6.2.4 方式3(120)
6.3 定時器/計數器的編程(121)
6.3.1 定時器/計數器的初始化(121)
6.3.2 定時器/計數器的編程實例(122)
6.4 定時器/計數器的應用實例(125)
6.4.1 門控位GATE的應用(125)
6.4.2 簡易實時時鐘設計(126)
6.4.3 讀定時器/計數器(128)
6.4.4 用定時器/計數器作外部
中斷(128)
本章小結(129)
練習與思考題(129)
第7章 8051單片機串行口及應用(131)
7.1 單片機串行口結構(131)
7.1.1 串行口的結構(131)
7.1.2 串行口控制寄存器SCON(132)
7.1.3 特殊功能寄存器PCON(132)
7.2 串行口的工作方式(133)
7.2.1 方式0(133)
7.2.2 方式1(134)
7.2.3 方式2和方式3(134)
7.3 單片機串行通信波特率(135)
7.3.1 波特率的定義(135)
7.3.2 波特率的計算(135)
7.4 串行口的編程應用(136)
7.4.1 串行口做串/并轉換(137)
7.4.2 串行口雙機通信接口(137)
7.4.3 串行口多機通信接口(139)
本章小結(140)
練習與思考題(140)
第8章 STC15系列單片機技術應用(142)
8.1 STC15系列單片機性能特點(142)
8.2 STC15系列單片機體系結構(143)
8.3 STC15系列單片機內部存儲器(145)
8.3.1 STC15系列單片機內部
存儲器的使用(145)
8.3.2 單片機ISP/IAP技術(148)
8.4 STC15系列單片機輸入/輸出口(151)
8.5 STC15系列單片機中斷系統(152)
8.5.1 中斷系統結構(153)
8.5.2 中斷控制寄存器(154)
8.5.3 中斷系統應用程序設計(156)
8.6 STC15系列單片機定時器/
計數器(157)
8.6.1 定時器/計數器的控制
寄存器(157)
8.6.2 定時器/計數器的工作方式(158)
8.6.3 定時器/計數器的編程應用(158)
8.7 STC15系列單片機串行通信(159)
8.7.1 STC15系列單片機串行
通信口(160)
8.7.2 SPI同步串行外圍接口(162)
8.8 STC15系列單片機片上A/D
轉換器(167)
8.8.1 片上A/D轉換器原理(167)
8.8.2 片上A/D轉換器的使用(169)
8.9 STC15系列單片機片上PCA/PWM
模塊(170)
8.9.1 PCA/PWM模塊工作原理(170)
8.9.2 CCP/PCA模塊的工作模式(174)
8.9.3 CCP/PCA模塊編程使用(177)
8.10 STC15系