《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目一_第1頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目一_第2頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目一_第3頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目一_第4頁
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目一_第5頁
已閱讀5頁,還剩168頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

模塊1閃爍的LED燈設(shè)計(jì)1.1項(xiàng)目描述1.2項(xiàng)目目的與要求1.3項(xiàng)目支撐知識(shí)鏈接1.4項(xiàng)目實(shí)施項(xiàng)目小結(jié)項(xiàng)目拓展技能與練習(xí)

【項(xiàng)目導(dǎo)入】

現(xiàn)今是一個(gè)科技迅猛發(fā)展的時(shí)代,我們生活中的每個(gè)領(lǐng)域幾乎都有單片機(jī)的蹤跡,比如,冰箱、空調(diào)、洗衣機(jī)、微波爐、電飯煲等家用電器的控制系統(tǒng)以及工業(yè)自動(dòng)控制領(lǐng)域的智能儀表、機(jī)器人、無人機(jī)和導(dǎo)彈的導(dǎo)航裝置等都離不開單片機(jī)。在此,我們通過一個(gè)項(xiàng)目—閃爍的LED燈設(shè)計(jì),讓同學(xué)們走進(jìn)單片機(jī)的學(xué)習(xí)樂園,了解單片機(jī)的應(yīng)用領(lǐng)域與發(fā)展趨勢(shì),理解單片機(jī)的開發(fā)過程,體驗(yàn)學(xué)習(xí)單片機(jī)的無限樂趣。

【項(xiàng)目目標(biāo)】

1.知識(shí)目標(biāo)

(1)了解單片機(jī)的概念、發(fā)展歷史以及常見產(chǎn)品型號(hào);

(2)理解單片機(jī)的外部引腳功能;

(3)理解單片機(jī)的存儲(chǔ)器地址分配;

(4)掌握單片機(jī)最小系統(tǒng)的搭建;

(5)熟悉單片機(jī)系統(tǒng)設(shè)計(jì)的開發(fā)過程。

2.能力目標(biāo)

(1)能正確區(qū)分和使用單片機(jī)的RAM和ROM;

(2)能正確區(qū)分單片機(jī)的4個(gè)并行口用途;

(3)能獨(dú)立搭建簡(jiǎn)單的單片機(jī)最小系統(tǒng);

(4)能利用KeilC51和Proteus軟件對(duì)系統(tǒng)進(jìn)行仿真調(diào)試。

1.1項(xiàng)目描述

單片機(jī)在控制與測(cè)量領(lǐng)域有著廣泛的應(yīng)用。單片機(jī)的應(yīng)用系統(tǒng)設(shè)計(jì)一般包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩大部分,這兩部分通過調(diào)試才能實(shí)現(xiàn)完整的系統(tǒng)功能。本項(xiàng)目通過搭建一個(gè)簡(jiǎn)單的單片機(jī)最小系統(tǒng)來實(shí)現(xiàn)對(duì)LED燈的閃爍頻率的控制。通過該項(xiàng)目的學(xué)習(xí),使學(xué)生掌握單片機(jī)的硬件組成、芯片各引腳的功用和它的復(fù)位電路等基本知識(shí),理解單片機(jī)系統(tǒng)的開發(fā)過程,學(xué)會(huì)搭建一個(gè)簡(jiǎn)單的單片機(jī)最小系統(tǒng)。

1.2項(xiàng)目目的與要求

本項(xiàng)目的目的就是搭建一個(gè)單片機(jī)系統(tǒng),通過C語言編程來點(diǎn)亮一個(gè)LED燈。項(xiàng)目在實(shí)施過程中需要解決下面

幾個(gè)關(guān)鍵問題:

(1)什么是單片機(jī)最小系統(tǒng)?怎樣構(gòu)建?

(2)?LED燈與單片機(jī)的輸入/輸出口怎樣連接?如何

控制?

(3)發(fā)光二極管如何進(jìn)行0.2s閃爍?

(4)如何使用KeilC51和Proteus軟件進(jìn)行系統(tǒng)的仿真?

1.3項(xiàng)目支撐知識(shí)鏈接

1.3.1認(rèn)識(shí)單片機(jī)

1.單片機(jī)的基本概念

單片機(jī)(SingleChipMicrocomputer,SCM)實(shí)際上是集成在一塊芯片上的微型計(jì)算機(jī),在這塊芯片內(nèi)部集成了中央處理器(CentralProcessingUnit,CPU)、隨機(jī)存儲(chǔ)器(RandomAccessMemory,RAM)、只讀存儲(chǔ)器(Read-OnlyMemory,ROM)、定時(shí)器/計(jì)算器(Time/Count)、輸入/輸出(Input/Output,I/O)接口等功能部件。雖然單片機(jī)只是一個(gè)芯片,

但從組成和功能上看,它已具有微型計(jì)算機(jī)系統(tǒng)的含義。圖1-1是不同封裝形式的單片機(jī)示意圖,其中黑色的是塑料外殼,保護(hù)著里面的半導(dǎo)體芯片,針狀部分是它的引腳。圖1-1不同封裝形式的單片機(jī)芯片單片機(jī)CPU的功能沒有PC的CPU強(qiáng)大,但單片機(jī)的體積小,能將微型計(jì)算機(jī)的各主要部分集成在一塊芯片上,大大縮短了系統(tǒng)內(nèi)信號(hào)的傳送距離,從而提高了系統(tǒng)的可靠性及運(yùn)行速度,因而在工業(yè)測(cè)控領(lǐng)域中,單片機(jī)系統(tǒng)是最理想的控制系統(tǒng)。另外,由于單片機(jī)的體積小,常常被嵌入各種現(xiàn)代設(shè)備中作為控制器使用,因此單片機(jī)又被稱為微控制器(MicroControllerUnit,MCU),它的這種使用方式是嵌入式系統(tǒng)低端應(yīng)用的最佳選擇。單片機(jī)的設(shè)計(jì)目標(biāo)主要是增強(qiáng)“控制”能力,滿足實(shí)時(shí)控制方面的需要。它在硬件結(jié)構(gòu)、指令系統(tǒng)、I/O端口、功率消耗及可靠性等方面均有其獨(dú)特之處,其最顯著的特點(diǎn)之一就是具有非常有效的控制功能。又因?yàn)樗钤绫挥迷诠I(yè)控制領(lǐng)域,因此,單片機(jī)又常常被人稱為微控制器。單片機(jī)比專用處理器更適合應(yīng)用于嵌入式系統(tǒng),因此它得到了更多的應(yīng)用?,F(xiàn)代人類生活中所用的幾乎每件電子和機(jī)械產(chǎn)品中都會(huì)集成有單片機(jī):手機(jī)、電話、計(jì)算器、家用電器、電子玩具、掌上電腦等都配有1或2塊單片機(jī);個(gè)人電腦中也有為數(shù)不少的單片機(jī)在工作;汽車上的電控設(shè)備一般配備有40多塊單片機(jī);復(fù)雜的工業(yè)控制系統(tǒng)上甚至可能有數(shù)百臺(tái)單片機(jī)在同時(shí)工作。

2.單片機(jī)技術(shù)的發(fā)展過程

單片機(jī)誕生于20世紀(jì)70年代末,其發(fā)展經(jīng)歷了探索、完善、微控制器、全面發(fā)展等四個(gè)階段。

(1)探索階段(1976—1978):本階段主要是以Intel公司的MCS-48為代表。

(2)完善階段(1978—1982):以Intel公司推出的單片機(jī)系列MCS-51為典型代表。

(3)微控制器階段(1982—1990):該階段的主要技術(shù)方向是,不斷擴(kuò)展?jié)M足系統(tǒng)要求的各種外圍電路與接口電路,具有智能化的控制能力,其特點(diǎn)如下:

①滿足嵌入式應(yīng)用要求的外圍擴(kuò)展,如WDT、PWM、ADC、DAC、高速I/O口等。

②眾多計(jì)算機(jī)外圍功能集成,如提供串行擴(kuò)展總線SPI、I2C、BUS、Microwire,配置現(xiàn)場(chǎng)總線接口CANBUS。

③?CMOS化,提供功耗管理功能。

④提供OTP供應(yīng)狀態(tài),有利于大規(guī)模和批量生產(chǎn)。

(4)全面發(fā)展階段(1990—):?jiǎn)纹瑱C(jī)發(fā)展到這一階段,已成為工業(yè)控制領(lǐng)域中普遍采用的智能化控制工具,小到玩具、家電行業(yè),大到車載、艦船電子系統(tǒng),遍及計(jì)量測(cè)試、工業(yè)過程控制、機(jī)械電子、金融電子、商用電子、辦公自動(dòng)化、工業(yè)機(jī)器人、軍事和航空航天等領(lǐng)域。為滿足不同的要求,出現(xiàn)了高速、大尋址范圍、強(qiáng)運(yùn)算能力和多機(jī)通信能力的8位、16位、32位通用型單片機(jī)、小型廉價(jià)單片機(jī)、外圍系統(tǒng)集成的專用型單片機(jī)以及形形色色、各具特色的現(xiàn)代單片機(jī)??梢哉f,單片機(jī)的發(fā)展進(jìn)入了百花齊放的時(shí)代,為用戶的選擇提供了廣闊的空間。

3.單片機(jī)的分類

單片機(jī)按不同方式分類如下:

(1)按應(yīng)用領(lǐng)域可分為家電類、工控類、通信類等。

(2)按總線結(jié)構(gòu)可分為總線型與非總線型。

(3)按結(jié)構(gòu)體系可分為諾依曼結(jié)構(gòu)和哈佛結(jié)構(gòu)。

(4)按字長、位數(shù)可分為4位機(jī)、8位機(jī)、16位機(jī)、32

位機(jī)。

(5)按指令體系可分為復(fù)雜指令體系(ComplexInstructionSetComputer,CISC)和精簡(jiǎn)指令體系(ReducedInstructionSetComputer,RISC)。

4.單片機(jī)的特點(diǎn)與適用范圍

1)特點(diǎn)

(1)優(yōu)異的性價(jià)比。一塊單片機(jī)芯片價(jià)格在幾元至幾十元之間,比較便宜。

(2)集成度高,體積小,可靠性高。

(3)控制能力強(qiáng)。為了滿足工業(yè)控制的要求,單片機(jī)的指令系統(tǒng)均有豐富的轉(zhuǎn)移指令、I/O口的邏輯操作和位處理功能。

(4)低功耗、低電壓,便于生產(chǎn)便攜式產(chǎn)品。

(5)外部總線增加了I2C等串行總線方式,進(jìn)一步縮小了體積,簡(jiǎn)化了結(jié)構(gòu)。

2)適用領(lǐng)域

由于單片機(jī)具有極高的可靠性、微型性和智能性(只要編寫不同的程序就能夠完成不同的控制工作),因此其成為工業(yè)控制領(lǐng)域中普遍采用的智能化控制工具,并深深地滲入到人們的日常生活當(dāng)中。以下是一些應(yīng)用舉例。

(1)工業(yè)控制領(lǐng)域:?jiǎn)纹瑱C(jī)廣泛用于工業(yè)生產(chǎn)過程的自動(dòng)控制、物理量的自動(dòng)檢測(cè)與處理、工業(yè)機(jī)器人、電機(jī)控制、數(shù)據(jù)傳輸?shù)阮I(lǐng)域。

(2)智能儀表:儀表中引入單片機(jī),使儀表智能化,提高測(cè)試的精度和自動(dòng)化水平。

(3)電信領(lǐng)域:?jiǎn)纹瑱C(jī)在程控交換機(jī)、手機(jī)、電話機(jī)、智能調(diào)制/解調(diào)器等方面的使用也很廣泛。

(4)軍用導(dǎo)航領(lǐng)域:?jiǎn)纹瑱C(jī)應(yīng)用在宇宙飛船、電子干擾、導(dǎo)彈控制、智能武器裝置、魚雷制導(dǎo)控制、航天航空的導(dǎo)航等軍用領(lǐng)域。

(5)日常生活中的應(yīng)用:目前家用電器已普遍采用單片機(jī)代替?zhèn)鹘y(tǒng)的控制電路。比如,單片機(jī)廣泛用于洗衣機(jī)、電冰箱、空調(diào)、微波爐和智能家居等產(chǎn)品中。

5.單片機(jī)的產(chǎn)品介紹

1)?Intel公司

Intel公司是單片機(jī)的領(lǐng)跑者,MCS-51系列單片機(jī)是該公司單片機(jī)產(chǎn)品的總稱。該系列有8031、80C51、8751、8032、8052、8752等,其中80C51是典型代表,因此大家常以80C51來稱呼MCS-51系列單片機(jī)。此外,該公司將MCS-51核心技術(shù)授權(quán)給多家公司,市場(chǎng)上陸續(xù)出現(xiàn)了與80C51兼容的各廠家生產(chǎn)的單片機(jī)。

2)?Atmel公司

Atmel公司的8位單片機(jī)有AT89和AT90系列。89系列與51系列完全兼容,具有8KB的閃速存儲(chǔ)器(FlashMemory),采用靜態(tài)時(shí)鐘方式;90系列采用了增強(qiáng)精簡(jiǎn)指令體系(RISC)結(jié)構(gòu),大多數(shù)指令僅需一個(gè)晶振周期,運(yùn)行速度快。

3)?Microchip公司

Microchip公司推出的是8位PIC系列單片機(jī),該系列單片機(jī)采用的是RISC結(jié)構(gòu)。其中主要產(chǎn)品系列是:

(1)?PIC16C5x:低端產(chǎn)品,價(jià)位低,家電產(chǎn)品中常

使用。

(2)?PIC12C6xx:中端產(chǎn)品,性能相對(duì)較高,內(nèi)部帶有A/D轉(zhuǎn)換器和PWM輸出等。

(3)?PIC17Cxx:高端產(chǎn)品,運(yùn)算速度快,可外接擴(kuò)展存儲(chǔ)器RAM或EPROM,控制功能豐富。

4)?Motorola公司

Motorola公司在單片機(jī)生產(chǎn)上多采用內(nèi)部倍頻技術(shù)或鎖相環(huán)技術(shù),從而使得相同時(shí)鐘頻率下單片機(jī)內(nèi)部總線速度大大提高。該公司生產(chǎn)的單片機(jī)系列有M6805、M68HC05、M68HC11、M68HC12等,其中M68HC12是該公司8位單片機(jī)的典型代表。由于STC系列單片機(jī)不僅完全與51單片機(jī)兼容而且加密技術(shù)高,因此目前國內(nèi)有很多用戶使用STC系列單片機(jī)芯片來開發(fā)控制系統(tǒng)。

STC系列單片機(jī)由STMicroelectronics公司生產(chǎn),由深圳宏晶公司作為大陸代理。此外,還有一些單片機(jī)生產(chǎn)廠商,如Zilog公司、Philips公司、Siemens公司、NEC公司、EMC公司等,其產(chǎn)品型號(hào)可在網(wǎng)上查詢,此處不再一一介紹。1.3.2單片機(jī)中的數(shù)制與編碼

1.單片機(jī)中的數(shù)制

數(shù)制在日常生活中被人們經(jīng)常使用,最常見的有十進(jìn)制、八進(jìn)制、十六進(jìn)制等。在單片機(jī)中,一切信息(包括數(shù)值、字符、指令等)的存儲(chǔ)、處理與傳送均采用二進(jìn)制的形式。二進(jìn)制數(shù)中只有“0”和“1”兩個(gè)數(shù)字符號(hào),利用二進(jìn)制進(jìn)行操作和運(yùn)算比較容易在電路中實(shí)現(xiàn),符合單片機(jī)的特點(diǎn),但閱讀和書寫比較復(fù)雜。由于十六進(jìn)制與二進(jìn)制間有著非常簡(jiǎn)單的對(duì)應(yīng)關(guān)系,因此在閱讀與書寫時(shí)常常采用十六進(jìn)制。常用的這三種計(jì)數(shù)法的表示及其相互關(guān)系見表1-1和表1-2。

3.單片機(jī)中數(shù)的表示

1)機(jī)器數(shù)與真值

機(jī)器數(shù)是指機(jī)器中數(shù)的表示。它將數(shù)值連同符號(hào)位放在一起,其長度一般是8的整數(shù)倍。機(jī)器數(shù)通常有2種:有符號(hào)數(shù)和無符號(hào)數(shù)。有符號(hào)數(shù)的最高位是符號(hào)位,其余各位用來表示數(shù)的大小;無符號(hào)數(shù)的所有各位都用來表示數(shù)的大小。真值是指機(jī)器數(shù)所代表的實(shí)際數(shù)值。有符號(hào)數(shù)的符號(hào)位通常的做法是用一位二進(jìn)制表示符號(hào),稱為“符號(hào)位”,放在有效數(shù)字的前面,用“0”表示正,用“1”表示負(fù)。②采用補(bǔ)碼進(jìn)行運(yùn)算,所得結(jié)果仍為補(bǔ)碼。為了得到結(jié)果的真值,還得進(jìn)行轉(zhuǎn)換(還原)。轉(zhuǎn)換前應(yīng)先判斷符號(hào)位,若符號(hào)為0,則所得結(jié)果為正數(shù),其值與真值相同;若符號(hào)位為1,則應(yīng)將它轉(zhuǎn)換成原碼,然后才得到它的真值。

③補(bǔ)碼與原碼、反碼不同,數(shù)值0的補(bǔ)碼只有一個(gè),即

?[0]補(bǔ)=00000000B=00H。④若字長為8位,則補(bǔ)碼所表示的范圍為-128~+127;若字長為16位,則補(bǔ)碼所表示的范圍為-32768~+32767。

⑤進(jìn)行補(bǔ)碼運(yùn)算時(shí),應(yīng)注意所得結(jié)果不應(yīng)超過上述補(bǔ)碼所能表示數(shù)的范圍,否則會(huì)產(chǎn)生溢出而導(dǎo)致錯(cuò)誤。采用其他碼制運(yùn)算時(shí)同樣應(yīng)注意這一問題。

4.信息編碼

由于單片機(jī)所有的信息都是以二進(jìn)制形式存儲(chǔ)的,因此各種非數(shù)值型數(shù)據(jù),如字符或符號(hào),都采用二進(jìn)制數(shù)碼的組合來表示,稱為二進(jìn)制編碼。最常見的編碼形勢(shì)有BCD碼編碼和ASCII碼編碼。

1)?BCD碼編碼

用二進(jìn)制數(shù)來直接表示十進(jìn)制數(shù),保留各數(shù)位之間“逢十進(jìn)一”的關(guān)系,這就是二-十進(jìn)制編碼,也稱為BCD(BinaryCodedDecimal)碼。這種編碼將一位十進(jìn)制數(shù)用4位二進(jìn)制數(shù)表示,通常以8421為權(quán)進(jìn)行編制。它有十個(gè)不同的數(shù)字符號(hào),按“逢十進(jìn)一”的原則進(jìn)位。表1-3是十進(jìn)制數(shù)1~14的BCD碼對(duì)應(yīng)表。

BCD(8421)碼用0000B~1001B代表十進(jìn)制數(shù)的0~9,運(yùn)算法則是逢十進(jìn)一。例如,158的BCD碼表示為000101011000B。

BCD碼的運(yùn)算結(jié)果也必須是BCD碼,因此BCD碼在進(jìn)行加法運(yùn)算時(shí),必須對(duì)二進(jìn)制加法的結(jié)果進(jìn)行修正,其修正原則是:若各位的和均在0~9之間,則不需要修正;若和的低4位大于9或低4位向高4位有進(jìn)位(和大于15),則低4位加6修正;若高4位大于9或高4位的最高位有進(jìn)位,則高4位加6修正。

2)?ASCII碼編碼

ASCII碼是國際標(biāo)準(zhǔn)化組織ISO規(guī)定采用的美國標(biāo)準(zhǔn)信息交換碼(AmericanStandardCodeforInformationInterchange)。標(biāo)準(zhǔn)的ASCII碼的高位為0,用7位二進(jìn)制碼對(duì)字符進(jìn)行編碼,所以總共有27=128個(gè),從0~127,見附錄A。

ASCII碼主要用于微機(jī)與外設(shè)的通信,當(dāng)微機(jī)與ASCII碼制的鍵盤、打印機(jī)及CRT等連用時(shí),均以ASCII碼形式傳輸數(shù)據(jù)。1.3.3

MCS-51系列單片機(jī)的基本結(jié)構(gòu)

89C51單片機(jī)有40個(gè)引腳,采用HMOS或CHMOS工藝制造,通常采用雙列直插式封裝(DIP)。下面以AT89C51為例介紹51系列兼容單片機(jī)的引腳功能。89C51的引腳和封裝如圖1-2所示,其中圖(a)為雙列直插封裝DIP方式,圖(b)為方形封裝方式。圖1-2AT89C51的封裝和引腳分配圖

1.89C51引腳功能

1)主電源引腳Vcc和GND

Vcc(40腳):主電源?+5?V,正常操作和對(duì)EPROM編程及驗(yàn)證時(shí)均接?+5?V電源。

Vss(20腳):電源的接地端。

2)外接晶振引腳:XTAL1(19腳)和XTAL2(18腳)

XTAL1和XTAL2為接外部晶振的兩個(gè)引腳。當(dāng)使用內(nèi)部時(shí)鐘時(shí),這兩個(gè)引腳端外接石英晶體和微調(diào)電容;當(dāng)采用外部時(shí)鐘時(shí),XTAL1引腳接地,XTAL2作為外部振蕩信號(hào)的輸入端。

3)控制信號(hào)引腳RST/VPD、ALE/、、/Vpp

(1)?RST/VPD(9腳):?jiǎn)纹瑱C(jī)復(fù)位/備用電源引腳,具有單片機(jī)復(fù)位和備用電源引入雙重功能。當(dāng)該引腳作為RST時(shí),該引腳要連續(xù)保持兩個(gè)機(jī)器周期以上的高電平,單片機(jī)才完成復(fù)位;當(dāng)作為VPD時(shí),單片機(jī)掉電或電源發(fā)生波動(dòng)導(dǎo)致電源電壓下降到一定值,備用電源給內(nèi)部RAM供電,保持其中的信息,直到單片機(jī)工作電壓恢復(fù)正常。

(2)?ALE/

(30腳):地址鎖存允許信號(hào)輸出/編程脈沖輸入雙重功能引腳。當(dāng)訪問片外存儲(chǔ)器時(shí),該引腳是地址鎖存信號(hào);當(dāng)不訪問外部存儲(chǔ)器時(shí),ALE引腳周期性地輸出固定頻率脈沖信號(hào)(1/6振蕩器頻率),因此,它可用作外部時(shí)鐘或外部定時(shí)脈沖使用。應(yīng)注意的是,當(dāng)訪問片外數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖;ALE端可以驅(qū)動(dòng)(吸收或輸出電流)8個(gè)LSTTL負(fù)載。對(duì)含有EPROM的單片機(jī)(8751),在片內(nèi)EPROM編程期間,此引腳用于輸入專門的編程脈沖和編程電源(

)。

(3)

(29腳):輸出訪問片外程序存儲(chǔ)器的讀選通信號(hào)。在訪問外部ROM時(shí),(信號(hào)定時(shí)輸出脈沖)作為外部ROM的選通信號(hào)。CPU從片外程序存儲(chǔ)器取指令(或常數(shù))期間,每個(gè)機(jī)器周期兩次有效。每當(dāng)訪問片外數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的信號(hào)將不會(huì)出現(xiàn)。該端有效

(低電平)時(shí),實(shí)現(xiàn)外部ROM單元的讀操作,同樣可驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。

(4)

/Vpp(31腳):片內(nèi)片外程序存儲(chǔ)器選擇/片內(nèi)固化編程電壓輸入雙重功能引腳。當(dāng)輸入高電平時(shí),CPU可先訪問片內(nèi)ROM4KB的地址范圍,若超出4KB地址,將自動(dòng)轉(zhuǎn)向執(zhí)行片外ROM;當(dāng)輸入低電平時(shí),不論片內(nèi)是否有程序存儲(chǔ)器,CPU只能訪問片外程序存儲(chǔ)器。

4)輸入/輸出引腳P0、P1、P2、P3

89C51有32條I/O端口,構(gòu)成四個(gè)8位雙向端口。P0、P1、P2、P3為8位雙向口線,P0.0~P0.7對(duì)應(yīng)39~32腳;P1.0~P1.7對(duì)應(yīng)1~8腳;P2.0~P2.7對(duì)應(yīng)21~28腳;P3.0~P3.7對(duì)應(yīng)10~17腳,P3具有雙重功能,這些引腳的使用將在后續(xù)部分進(jìn)行介紹。

2.89C51的內(nèi)部結(jié)構(gòu)

51系列單片機(jī)在內(nèi)部結(jié)構(gòu)上基本相同,其中不同型號(hào)的單片機(jī)只不過在個(gè)別模塊和功能方面有些區(qū)別。89C51單片機(jī)內(nèi)部硬件結(jié)構(gòu)框圖如圖1-3所示。它由一個(gè)8位中央處理器(CPU)、1個(gè)256B片內(nèi)RAM及4KBFlashROM、21個(gè)特殊功能寄存器、4個(gè)8位并行I/O口、2個(gè)16位定時(shí)器/計(jì)數(shù)器、1個(gè)串行I/O口以及中斷系統(tǒng)等部分組成,各功能部件通過片內(nèi)單一總線連成一個(gè)整體,集成在一塊芯片上。圖1-389C51單片機(jī)內(nèi)部硬件結(jié)構(gòu)框圖在圖1-3中,對(duì)其結(jié)構(gòu)按功能進(jìn)行詳細(xì)劃分,可以得到89C51內(nèi)部結(jié)構(gòu),如圖1-4所示。圖1-489C51單片機(jī)內(nèi)部結(jié)構(gòu)圖

1)運(yùn)算器

運(yùn)算器主要由算術(shù)邏輯運(yùn)算部件ALU、累加器ACC、寄存器B、暫存器、程序狀態(tài)字寄存器PSW及專門用于位操作的布爾處理機(jī)等組成,它能實(shí)現(xiàn)數(shù)據(jù)的算術(shù)邏輯運(yùn)算、位變量處理和數(shù)據(jù)的傳送操作。ALU主要用于對(duì)8位二進(jìn)制數(shù)據(jù)進(jìn)行加、減、乘、除四則運(yùn)算和與、或、非、異或等邏輯運(yùn)算,此外還具有置位、移位、測(cè)試轉(zhuǎn)移等功能。布爾處理器是具有位處理邏輯功能的電路,專門用于位操作。暫存器專門用來存放參與算術(shù)運(yùn)算和邏輯運(yùn)算的另一個(gè)操作數(shù),對(duì)用戶不開放。此外,累加器A、寄存器B和程序狀態(tài)字寄存器PSW的介紹見后續(xù)存儲(chǔ)器部分。

2)控制器

控制器是單片機(jī)內(nèi)部按一定時(shí)序協(xié)調(diào)工作的控制核心,是分析和執(zhí)行指令的部件??刂破髦饕沙绦蛴?jì)數(shù)器(ProgramCounter,PC)、指令寄存器IR、指令譯碼器ID、數(shù)據(jù)指針DPTR、堆棧指針SP、振蕩器與定時(shí)控制電路、中斷控制器、串行口控制器和定時(shí)器等構(gòu)成。

(1)程序計(jì)數(shù)器PC。PC是一個(gè)16位專用寄存器,用來存放下一條指令的地址,它具有自動(dòng)加1的功能。當(dāng)CPU要取指令時(shí),PC的內(nèi)容首先送至地址總線上,然后再從存儲(chǔ)器中取出指令,從該地址的存儲(chǔ)單元中取指令后,PC的內(nèi)容自動(dòng)加1,指向下一條指令的地址,以保證程序按順序執(zhí)行。在執(zhí)行轉(zhuǎn)移、子程序調(diào)用指令和中斷響應(yīng)時(shí)例外,PC的內(nèi)容不再加1,而是由指令或中斷響應(yīng)過程自動(dòng)給PC置入新的地址。單片機(jī)復(fù)位時(shí),PC自動(dòng)清零,即裝入地址0000H,從而保證了復(fù)位后,程序從0000H地址開始執(zhí)行。

(2)指令寄存器IR。指令寄存器是一個(gè)8位寄存器,用于暫存待執(zhí)行的指令,等待譯碼。

(3)指令譯碼器ID。指令譯碼器對(duì)指令寄存器中的指令進(jìn)行譯碼,將指令轉(zhuǎn)變?yōu)閳?zhí)行此指令所需要的電信號(hào)。根據(jù)譯碼器輸出的信號(hào),再經(jīng)定時(shí)控制電路定時(shí)地產(chǎn)生執(zhí)行該指令所需要的各種控制信號(hào),完成指令的功能。

(4)數(shù)據(jù)指針DPTR。DPTR是一個(gè)16位專用地址指針寄存器,通常在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)作地址指針使用,是單片機(jī)中唯一一個(gè)供用戶使用的16位寄存器,具體介紹見后續(xù)存儲(chǔ)器部分。

(5)堆棧指針SP。堆棧指針SP是一個(gè)8位特殊功能寄存器,用于指出堆棧棧頂?shù)牡刂?,在調(diào)用子程序或進(jìn)入中斷程序前保存一些重要數(shù)據(jù)及程序返回地址,具體介紹見后續(xù)存儲(chǔ)器部分。

3.89C51單片機(jī)存儲(chǔ)器的配置

普通微型計(jì)算機(jī)中廣泛采用將程序和數(shù)據(jù)合用一個(gè)存儲(chǔ)器的空間結(jié)構(gòu),這種結(jié)構(gòu)稱為普林斯頓結(jié)構(gòu)(Princeton);而大部分單片機(jī)采用的是把程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器空間截然分開,即ROM和RAM獨(dú)立編址并分別尋址的結(jié)構(gòu),相互空間不會(huì)沖突,這種結(jié)構(gòu)就是哈佛結(jié)構(gòu)(Harvard)。

1)程序存儲(chǔ)器(ROM)

51系列單片機(jī)的程序存儲(chǔ)器用于存放編好的應(yīng)用程序、表格和常數(shù)。由于采用16位的地址總線,因而其可擴(kuò)展的地址空間為64KB,且這64KB地址是連續(xù)、統(tǒng)一的。不同型號(hào)的機(jī)型,片內(nèi)的程序存儲(chǔ)器結(jié)構(gòu)和空間也不同,如89C51有4KB的FLASHROM,80C51片內(nèi)有4KB的ROM,地址為0000H~0FFFH,8751片內(nèi)有4KB的EPROM,803l片內(nèi)無程序存儲(chǔ)器。

CPU如何訪問ROM呢?當(dāng)為高電平時(shí),CPU從片內(nèi)存儲(chǔ)器的0000H單元開始讀取指令,若指令地址超過0FFFH

(4KB),CPU會(huì)自動(dòng)轉(zhuǎn)向片外讀取指令;當(dāng)該引腳為低電

平時(shí),CPU只能從片外讀取指令。

89C51單片機(jī)中,程序存儲(chǔ)器的某些單元已被保留作為特定的程序入口地址(中斷服務(wù)程序入口地址),這些單元具有特殊功能。特殊單元為0000H~0002H。系統(tǒng)復(fù)位后的PC值為0000H,故系統(tǒng)從0000H單元開始取指令,執(zhí)行程序,它是系統(tǒng)的啟動(dòng)地址。若程序不從0000H單元開始,則必須在這三個(gè)單元中存放一條無條件轉(zhuǎn)移指令,以便直接去執(zhí)行指定的程序。另外,還有幾個(gè)特殊的地址:外部中斷0入口地址0003H,定時(shí)器0中斷入口地址000BH,外部中斷1入口地址0013H,定時(shí)器1中斷入口地址001BH,串行口中斷入口地址0023H,定時(shí)器2溢出中斷入口地址002BH。在編程使用時(shí),用戶程序的存放位置選取在0030H之后比較安全。

2)數(shù)據(jù)存儲(chǔ)器(RAM)

51系列單片機(jī)的數(shù)據(jù)存儲(chǔ)器用于存放運(yùn)算中間結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)志位等。數(shù)據(jù)存儲(chǔ)器在物理上和邏輯上都分為兩個(gè)地址空間:一個(gè)是片內(nèi)256字節(jié)的RAM,另一個(gè)是片外最大可擴(kuò)充64KB的RAM。片內(nèi)RAM的訪問通過定義數(shù)據(jù)類型即可,比如data、bdata、idata;片外RAM的訪問可把數(shù)據(jù)定義為pdata或xdata。數(shù)據(jù)存儲(chǔ)器由通用工作寄存器區(qū)、可位尋址區(qū)、通用RAM區(qū)和特殊功能寄存器區(qū)等四個(gè)部分組成,其結(jié)構(gòu)如圖1-5所示。其中,圖(a)表示低128B的RAM區(qū),圖(b)表示RAM的特殊功能寄存器區(qū),即地址從80H開始至FFH的高128B的空間區(qū)域。圖1-5片內(nèi)數(shù)據(jù)存儲(chǔ)器的結(jié)構(gòu)

(1)通用工作寄存器區(qū)(00H~1FH)。51系列單片機(jī)的通用工作寄存區(qū)共有32個(gè)單元,分為四組,每組由8個(gè)通用寄存器R0~R7組成。由于通用寄存器常用于存放操作數(shù)和中間結(jié)果等,它們的功能及使用不作預(yù)先規(guī)定,因此稱為通用工作寄存器。在任何一個(gè)時(shí)刻,CPU只能使用其中的一組寄存器,正在使用的寄存器稱為當(dāng)前寄存器。到底是哪一組,由程序狀態(tài)寄存器PSW中RS1、RS0位的狀態(tài)組合決定。工作區(qū)的設(shè)置與工作寄存器的地址見表1-4。單片機(jī)上電或復(fù)位后,RS1=0H,RS0=0H,CPU默認(rèn)選中的是第0區(qū)的8個(gè)單元為當(dāng)前工作寄存器。

(2)可位尋址區(qū)(20H~2FH)。位尋址區(qū)作為一般的RAM單元,共16個(gè)字節(jié),既可以作為一般RAM單元使用,進(jìn)行字節(jié)操作,又可以用位尋址方式訪問這16個(gè)字節(jié)的128個(gè)位,因此,該區(qū)稱為位尋址區(qū)。位尋址區(qū)分布如表1-5所示。

(3)通用RAM區(qū)(30H~7FH)。通用RAM區(qū)共有80個(gè)單元,其單元地址為30H~7FH。對(duì)通用RAM區(qū)的使用,沒有任何規(guī)定或限制,但在一般應(yīng)用中常存放用戶數(shù)據(jù)或作為堆棧區(qū)使用。

(4)特殊功能寄存器區(qū)(80~FFH)。特殊功能寄存器區(qū)共128個(gè)單元,其單元地址范圍為80~FFH,其中僅有21個(gè)地址單元可用,它們主要用于存放控制指令、狀態(tài)信息或數(shù)據(jù)。由于這21個(gè)寄存器的功能已作專門規(guī)定,故稱之為特殊功能寄存器(SpecialFunctionRegister,SFR)。其地址分布以及對(duì)應(yīng)的位地址如表1-6所示。專用寄存器并未占滿80H~FFH整個(gè)地址空間,對(duì)空閑的地址,用戶是不能使用的。對(duì)專用寄存器操作,只能使用直接尋址方式,書寫時(shí),既可以使用寄存器符號(hào),也可以使用寄存器單元地址。另外,表中凡字節(jié)地址不帶括號(hào)的寄存器都是可進(jìn)行位尋址的寄存器,帶括號(hào)的是不可進(jìn)行位尋址的寄存器。①累加器(Accumulator,ACC)。ACC是一個(gè)8位的寄存器,簡(jiǎn)稱A。它通過暫存器與ALU相連,是CPU工作中使用最頻繁的寄存器,用來存放一個(gè)操作數(shù)或中間結(jié)果。在一般指令中,累加器用“A”表示,在位操作和堆棧操作指令中用“ACC”表示。②B寄存器。B寄存器是一個(gè)8位的寄存器,主要用于乘除運(yùn)算。在乘除法指令中用于暫存數(shù)據(jù),用來存放一個(gè)操作數(shù)和存放運(yùn)算后的一部分結(jié)果。乘法指令的兩個(gè)操作數(shù)分別取自累加器A和寄存器B,其中B為乘數(shù),乘積的高8位存放于寄存器B中。除法指令中,被除數(shù)取自A,除數(shù)取自B,除法的結(jié)果商數(shù)存放于A,余數(shù)存放于B。在其他指令中,B可以作為RAM中的一個(gè)單元來使用。③數(shù)據(jù)指針DPTR。DPTR是一個(gè)16位的專用地址指針寄存器。編程時(shí)DPTR既可以作16位寄存器使用,也可以拆成兩個(gè)獨(dú)立的8位寄存器,即DPH(高8位字節(jié))和DPL(低8位字節(jié)),分別占據(jù)83H和82H兩個(gè)地址。DPTR通常在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)作地址指針使用,用于存放外部數(shù)據(jù)存儲(chǔ)

器的存儲(chǔ)單元地址。由于外部數(shù)據(jù)存儲(chǔ)器的尋址范圍為

64KB(0000H~FFFFH),故把DPTR設(shè)計(jì)為16位,通過DPTR寄存器間接尋址方式可以訪問0000H~FFFFH全部64KB的外部數(shù)據(jù)存儲(chǔ)器空間。89C51單片機(jī)可以外接64KB的數(shù)據(jù)存儲(chǔ)器和I/O端口,可以使用DPTR來間接尋址。④堆棧指針(StackPointer,SP)。堆棧是RAM中一個(gè)特殊的存儲(chǔ)區(qū),用來暫存數(shù)據(jù)和地址,它是按先進(jìn)后出、后進(jìn)先出的原則存取數(shù)據(jù)的。堆棧共有兩種操作:進(jìn)棧和出棧。為了正確存取堆棧區(qū)的數(shù)據(jù),需要一個(gè)寄存器來指示最后進(jìn)入堆棧的數(shù)據(jù)所在存儲(chǔ)單元的地址,堆棧指針就是為此而設(shè)計(jì)的。SP總是指向堆棧頂端的存儲(chǔ)單元。

89C51單片機(jī)的堆棧是向上生成的,即進(jìn)棧時(shí),SP的內(nèi)容是增加的,出棧時(shí),SP的內(nèi)容是減少的(數(shù)據(jù)的進(jìn)棧和出棧的操作過程如圖1-6所示)。系統(tǒng)復(fù)位后,SP初始化為07H,使得堆棧實(shí)際上從08H單元開始。由于08H~1FH單元分屬于工作寄存器的1~3區(qū),因此若程序中要用到這些區(qū),則最好把SP值改為1FH或更大的值。一般在內(nèi)部RAM的30H~7FH單元中開辟堆棧區(qū)間。SP的內(nèi)容一旦確定,堆棧的位置也就跟著確定了。由于可初始化為不同值,因此堆棧位置是浮動(dòng)的。圖1-6數(shù)據(jù)進(jìn)棧和出棧操作過程⑤程序狀態(tài)字寄存器(ProgramStatusWord,PSW)。PSW是一個(gè)8位的專用寄存器,用于存放程序運(yùn)行中的各種狀態(tài)信息,它可以進(jìn)行位尋址。PSW中一些位的狀態(tài)是根據(jù)程序運(yùn)行結(jié)果由硬件自動(dòng)設(shè)置的,而另外一些位則使用軟件方法設(shè)定。PSW的位狀態(tài)可以用專門指令進(jìn)行測(cè)試,也可以用指令讀出。一些條件轉(zhuǎn)移指令將根據(jù)PSW有些位的狀態(tài)進(jìn)行程序轉(zhuǎn)移。PSW各位的定義如表1-7所示。

Cy(PSW.7)進(jìn)位標(biāo)志:Cy是PSW中最常見的標(biāo)志位。其功能有二:一是存放算術(shù)運(yùn)算的進(jìn)位標(biāo)志,在進(jìn)行加法或減法運(yùn)算時(shí),如果操作結(jié)果最高位有進(jìn)位或借位,Cy由硬件置“1”,否則清“0”;二是在進(jìn)行位操作時(shí),Cy又可以被認(rèn)為是位累加器,它的作用相當(dāng)于CPU中的累加器A。

Ac(PSW.6)輔助進(jìn)位標(biāo)志:在進(jìn)行加法或減法運(yùn)算時(shí),如果低四位數(shù)向高位有進(jìn)位或借位,硬件會(huì)自動(dòng)將Ac置“l(fā)”,否則清“0”;在進(jìn)行十進(jìn)制調(diào)整指令時(shí),將借助Ac狀態(tài)進(jìn)行判斷。Ac位可用于BCD碼調(diào)整時(shí)的判斷位。

F0(PSW.5)用戶標(biāo)志位:它可作為用戶自行定義的狀態(tài)標(biāo)記位,由用戶根據(jù)需要用軟件方法置位或復(fù)位,用以控制程序的轉(zhuǎn)向。

RS1、RS0(PSW.4、PSW.3)工作寄存器區(qū)選擇位:這兩位通過軟件置“0”或“1”來選擇當(dāng)前工作寄存器區(qū)。被選中的寄存器即為當(dāng)前通用寄存器組,但單片機(jī)上電或復(fù)位后,RS1RS0=00。通用寄存器共有4組,RS0與RS1的取值及其

對(duì)應(yīng)關(guān)系如下:RS1RS0為00,選中第0組,地址為00H~07H;RS1RS0為01,選中第1組,地址為08H~0FH;RS1RS0為10,選中第2組,地址為10H~17H;RS1RS0為11,選中第3組,地址為18H~1FH。

OV(PSW.2)溢出標(biāo)志位:當(dāng)進(jìn)行算術(shù)運(yùn)算時(shí),如果產(chǎn)生溢出,則由硬件將OV位置l,否則清“0”。當(dāng)執(zhí)行有符號(hào)數(shù)的加法指令或減法指令時(shí),溢出標(biāo)志OV的邏輯表達(dá)式為

OV?=?Cy6Cy7。式中,Cy6表示D6位有否向D7位的進(jìn)位或借位,有為“1”,否則為“0”;Cy7表示D7位有否向Cy位的進(jìn)位或借位,有為“1”,否則為“0”。因此溢出標(biāo)志位在硬件上可以通過一個(gè)異或門獲得。

F1(PSW.1)用戶標(biāo)志位:其作用同F(xiàn)0。

P(PSW.0)奇偶標(biāo)志位:該位始終跟蹤累加器A內(nèi)容的奇偶性,每個(gè)指令周期由硬件來置位或清零,用以表示累加

器A中1的個(gè)數(shù)的奇偶性。如果A中有奇數(shù)個(gè)“1”,則P置“l(fā)”,否則置“0”。1.3.4單片機(jī)最小系統(tǒng)的搭建

單片機(jī)本身只是一塊芯片,只有和其他一些電路器件或設(shè)備有機(jī)結(jié)合才能構(gòu)成一個(gè)真正的單片機(jī)系統(tǒng),在此只介紹簡(jiǎn)單的最小系統(tǒng)的搭建。一個(gè)單片機(jī)最小系統(tǒng)至少應(yīng)由電源電路、時(shí)鐘電路、復(fù)位電路、輸入/輸出接口電路四部分組成,具體結(jié)構(gòu)如圖1-7所示。圖1-7單片機(jī)最小系統(tǒng)框圖

1.電源電路

單片機(jī)要工作,必須要有電源提供能量,89C51單片機(jī)一般使用5?V直流電源。單片機(jī)芯片中有2個(gè)引腳分別為Vcc和GND,Vcc外接5V直流電源,GND接地。

2.時(shí)鐘電路

時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào)。時(shí)序所研究的是指令執(zhí)行中各信號(hào)之間的相互關(guān)系。單片機(jī)本身如同一個(gè)復(fù)雜的同步時(shí)序邏輯電路,為了保證同步工作方式的實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下嚴(yán)格地按時(shí)序進(jìn)行工作,因此時(shí)鐘電路對(duì)于單片機(jī)而言是必需的。

1)時(shí)鐘產(chǎn)生的方式

單片機(jī)的時(shí)鐘產(chǎn)生方式通常有兩種,如圖1-8所示。

在內(nèi)部時(shí)鐘方式中,石英晶體的振蕩器頻率一般選擇4~12MHz,起振電容一般選用20~30pF的瓷片電容;外部時(shí)鐘方式是把外部已有的時(shí)鐘信號(hào)引入單片機(jī),一般要求外部信號(hào)的高電平持續(xù)20ns,且為頻率低于12MHz的方波。圖1-889C51的時(shí)鐘產(chǎn)生方式

2)時(shí)鐘信號(hào)

CPU執(zhí)行指令的一系列動(dòng)作都是在定時(shí)控制部件的控制下按照一定的時(shí)序一拍一拍進(jìn)行的。指令字節(jié)數(shù)不同,操作數(shù)的尋址方式也不同,故執(zhí)行不同指令所需的時(shí)間差異也較大,工作時(shí)序也有區(qū)別。為了便于說明,通常按指令的執(zhí)行過程將時(shí)序化為幾種周期,即振蕩周期、狀態(tài)周期、機(jī)器周期和指令周期。

(1)振蕩周期。振蕩周期是單片機(jī)中最基本的時(shí)間單位,是為單片機(jī)提供時(shí)鐘脈沖信號(hào)的振蕩源的周期。在一個(gè)時(shí)鐘周期內(nèi),CPU僅完成一個(gè)最基本的動(dòng)作。51系列單片機(jī)中,把一個(gè)振蕩周期定義為一個(gè)節(jié)拍P。

(2)狀態(tài)周期。狀態(tài)周期是振蕩周期經(jīng)二分頻后得到的,它是單片機(jī)的時(shí)鐘信號(hào)的周期,用S來表示。狀態(tài)周

期由兩個(gè)節(jié)拍P1、P2組成,其前半周期對(duì)應(yīng)的節(jié)拍是P1,其后半周期對(duì)應(yīng)的節(jié)拍是P2,即兩個(gè)振蕩周期為一個(gè)狀態(tài)周期。

(3)機(jī)器周期。單片機(jī)把執(zhí)行一條指令的過程劃分為若干個(gè)階段,每一階段完成一項(xiàng)規(guī)定操作,完成某一個(gè)規(guī)定操作所需的時(shí)間稱為一個(gè)機(jī)器周期。一般情況下,一個(gè)機(jī)器周期由若干個(gè)狀態(tài)周期組成。51系列單片機(jī)采用定時(shí)控制方式,有固定的機(jī)器周期,規(guī)定一個(gè)機(jī)器周期為6個(gè)狀態(tài)周期,依次表示為S1~S6。在一個(gè)機(jī)器周期內(nèi),CPU可以完成一個(gè)獨(dú)立的操作。

(4)指令周期。指令周期是CPU執(zhí)行一條指令所需要的時(shí)間,一般由若干個(gè)機(jī)器周期組成。89C51指令系統(tǒng)中有單周期指令、雙周期指令和四周期指令,四周期指令只有乘法和除法指令兩條,其余均為單周期和雙周期指令。

3)?89C51單片機(jī)的時(shí)序

89C51單片機(jī)的每個(gè)機(jī)器周期包含6個(gè)狀態(tài)周期S,每個(gè)狀態(tài)S包含2個(gè)振蕩周期,即分為2個(gè)節(jié)拍,對(duì)應(yīng)于2個(gè)節(jié)拍時(shí)鐘有效時(shí)間。因此一個(gè)機(jī)器周期包含12個(gè)振蕩周期,依次表示為S1P1,S1P2,S2P1,S2P2,S3P1,S3P2,…,S6P1,S6P2,每個(gè)節(jié)拍持續(xù)一個(gè)振蕩周期,每個(gè)狀態(tài)周期持續(xù)2個(gè)振蕩周期。若采用12MHz的晶振頻率,則每個(gè)機(jī)器周期為1/12個(gè)振蕩周期,等于1μs。單片機(jī)執(zhí)行任何一條指令時(shí)都可以分為取指令階段和執(zhí)行指令階段。圖1-9列舉了幾種指令的取指令時(shí)序。由于用戶看不到內(nèi)部時(shí)序信號(hào),故我們可以通過觀察XTAL2和ALE引腳的信號(hào),分析CPU取指令時(shí)序。通常每個(gè)機(jī)器周期中ALE出現(xiàn)兩次有效高電平,第一次出現(xiàn)在S1P2和S2P1期間,第二次出現(xiàn)在S4P2和S5P1期間。ALE信號(hào)每出現(xiàn)一次,CPU就進(jìn)行一次取指令操作,但由于每種指令的字節(jié)

數(shù)和機(jī)器周期數(shù)不同,因此取指令操作也隨之不同,但差

異不大。圖1-989C51的取指令執(zhí)行時(shí)序

3.復(fù)位電路

89C51單片機(jī)通常采用上電自動(dòng)復(fù)位、按鍵復(fù)位兩種方式,如圖1-10所示。

上電復(fù)位是利用電容充電來實(shí)現(xiàn)的,由于電容兩端的電壓不能突變,因此上電瞬間RST/VPD端的電位與Vcc相同,隨著充電的進(jìn)行,RST/VPD的電位下降,最后被鉗位在0V。只要保證加在RST引腳上的高電平持續(xù)時(shí)間大于2個(gè)機(jī)器周期,便能正常復(fù)位,如圖1-10(a)所示。圖1-10單片機(jī)的復(fù)位電路按鍵復(fù)位電路如圖1-10(b)所示。若要復(fù)位,只需將按鈕按下,此時(shí)電源Vcc經(jīng)電阻R1、R2分壓,在RST端產(chǎn)生一個(gè)復(fù)位高電平。

設(shè)計(jì)復(fù)位電路時(shí)應(yīng)注意:

(1)要保證加在RST引腳上的高電平持續(xù)2個(gè)機(jī)器周期以上,才能使單片機(jī)有效地復(fù)位。

(2)在實(shí)際的應(yīng)用系統(tǒng)中,有些外圍芯片也需要復(fù)位。如果這些復(fù)位端的復(fù)位電平要求與單片機(jī)復(fù)位一致,則可以與之相連。

(3)在圖1-10所示的簡(jiǎn)單復(fù)位電路中,干擾容易串入復(fù)位端,在大多數(shù)情況下不會(huì)造成單片機(jī)的錯(cuò)誤復(fù)位,但會(huì)引起內(nèi)部某些寄存器錯(cuò)誤復(fù)位。這時(shí)可在RST引腳上接一個(gè)去耦電容。

(4)在應(yīng)用系統(tǒng)中,為了保證復(fù)位電路可靠地工作,常將RC電路先接施密特電路,然后再接入單片機(jī)復(fù)位端和外圍電路復(fù)位端。這樣,當(dāng)系統(tǒng)有多個(gè)復(fù)位端時(shí),能保證可靠地同步復(fù)位,且具有抗干擾作用。

4.輸入/輸出接口電路

89C51單片機(jī)有4個(gè)I/O端口,共32根I/O線,4個(gè)端口都是雙向口,分別為P0~P3。在訪問片外擴(kuò)展存儲(chǔ)器時(shí),低8位地址和數(shù)據(jù)由P0口分時(shí)傳送,高8位地址由P2口傳送。在無片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,這4個(gè)口的每一位均可作為雙向的I/O端口使用。

1)?P0口

P0口是一個(gè)8位漏極開路型準(zhǔn)雙向I/O端口。圖1-11是P0口的位結(jié)構(gòu)圖,它由1個(gè)輸出鎖存器、2個(gè)三態(tài)數(shù)據(jù)輸入緩沖器、1個(gè)輸出驅(qū)動(dòng)電路和1個(gè)輸出控制電路組成。輸出驅(qū)動(dòng)電路由一對(duì)FET(場(chǎng)效應(yīng)管)組成,其工作狀態(tài)受輸出控制電路的控制;輸出控制電路由一個(gè)與門電路、1個(gè)反相器和1個(gè)多路開關(guān)MUX組成。圖1-11P0口的位結(jié)構(gòu)圖

P0口可作為一般I/O口用,但當(dāng)應(yīng)用系統(tǒng)采用外部總線結(jié)構(gòu)時(shí),它分時(shí)用作低8位地址線和8位雙向數(shù)據(jù)總線。其工作狀態(tài)由CPU發(fā)出的控制信號(hào)決定。當(dāng)P0口作I/O端口使用時(shí),CPU內(nèi)部發(fā)出控制電平“0”信號(hào),當(dāng)P0口作地址/數(shù)據(jù)總線使用時(shí),CPU內(nèi)部發(fā)出控制電平“1”信號(hào)。

P0口作一般I/O端口使用時(shí),CPU內(nèi)部發(fā)出控制電平“0”信號(hào)封鎖與門,使輸出上拉場(chǎng)效管V1截止,同時(shí)把圖1-11中的多路開關(guān)撥到下方,將輸出鎖存器端與輸出場(chǎng)效應(yīng)管V2的柵極接通。此時(shí),P0口即作一般I/O端口使用。當(dāng)P0口作輸出口輸出數(shù)據(jù)時(shí),內(nèi)部數(shù)據(jù)總線上的信息由寫脈沖鎖存至輸出鎖存器,并通過MUX、下拉場(chǎng)效應(yīng)管V2輸出到P0口的引腳。當(dāng)輸入D?=?0時(shí),Q?=?0,V2導(dǎo)通,P0口的引腳輸出0;當(dāng)輸入D?=?1時(shí),Q?=?1,V2截止,P0口的引腳輸出1。由此可見,內(nèi)部數(shù)據(jù)總線與P0口是同相位的。應(yīng)注意的是,作為輸出口時(shí),由于輸出級(jí)為漏級(jí)開路電路,引腳上應(yīng)外接上拉電阻(一般為5~10?Ω),才有高電平輸出,才可以驅(qū)動(dòng)NMOS或其他拉電流負(fù)載。P0口的輸出可以驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。當(dāng)P0口作輸入口輸入數(shù)據(jù)時(shí),端口中有2個(gè)三態(tài)輸入緩沖器用于讀操作,實(shí)現(xiàn)讀引腳和讀鎖存器(讀端口)兩種操作。

應(yīng)注意的是,作為輸入口時(shí),如果下拉場(chǎng)效應(yīng)管V2導(dǎo)通,則會(huì)將輸入的高電平拉為低電平,從而造成誤讀,所以在進(jìn)行輸入操作前,應(yīng)先向端口輸出鎖存器寫入“1”,以避免鎖存器為0狀態(tài)時(shí),對(duì)引腳讀入的干擾。在擴(kuò)展系統(tǒng)中,P0端口分時(shí)作為地址/數(shù)據(jù)總線使用,此時(shí)可分為兩種情況:一種是以P0口引腳輸出地址/數(shù)據(jù)信息。這時(shí)CPU內(nèi)部發(fā)出高電平的控制信號(hào),打開與門,同時(shí)使多路開關(guān)MUX把CPU內(nèi)部地址/數(shù)據(jù)總線反相后與輸出驅(qū)動(dòng)場(chǎng)效應(yīng)管V2的柵極接通。V1和V2兩個(gè)FET管處于反相,共同構(gòu)成了推拉式的輸出電路,其負(fù)載能力大大增強(qiáng)。另一種情況由P0口輸入數(shù)據(jù),此時(shí)輸入的數(shù)據(jù)直接從引腳通過下面的一個(gè)三態(tài)輸入緩沖器進(jìn)入內(nèi)部總線。實(shí)際應(yīng)用中,P0口絕大多數(shù)情況下都作為單片機(jī)系統(tǒng)的地址/數(shù)據(jù)總線使用,比一般I/O端口的使用簡(jiǎn)單。

P0口的輸出級(jí)與P1~P3口的輸出級(jí)在結(jié)構(gòu)上是不相同的,因此它們的負(fù)載能力和接口要求也不相同。P0口的每一位輸出可驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。P0口既可作通用I/O使用,也可作地址/數(shù)據(jù)總線使用。當(dāng)作為通用I/O口輸出時(shí),輸出級(jí)是開漏電路,當(dāng)它驅(qū)動(dòng)NMOS或其他拉電流負(fù)載時(shí),需要外接上拉電阻才有高電平輸出;當(dāng)作為地址/數(shù)據(jù)總線時(shí),無需外接上拉電阻,此時(shí)不能作通用I/O口使用。

2)?P1口

P1是一個(gè)帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,其位結(jié)構(gòu)如圖1-12所示。P1口在結(jié)構(gòu)上與P0口的區(qū)別是:沒有多路開關(guān)MUX和控制電路部分,輸出驅(qū)動(dòng)電路部分與P0也不相同,只有一個(gè)FET場(chǎng)效應(yīng)管,同時(shí)內(nèi)部帶上拉電阻,此電阻與電源相連。上拉電阻是一個(gè)作為電阻性元件使用的場(chǎng)效應(yīng)管FET,稱為負(fù)載場(chǎng)效應(yīng)管。圖1-12P1口的位結(jié)構(gòu)圖

Pl口可作通用雙向I/O口用,每1位均可獨(dú)立作為I/O口。當(dāng)P1口輸出高電平時(shí),能向外部提供拉電流負(fù)載,因此不必再外接上拉電阻。當(dāng)端口用作輸入時(shí),和P0口一樣,為了避免誤讀,必須先向?qū)?yīng)的輸出鎖存器寫入“l(fā)”,使FET截止,然后再讀端口引腳。由于片內(nèi)輸入電阻較大,約為20~40kΩ,所以不會(huì)對(duì)輸入的數(shù)據(jù)產(chǎn)生影響。

3)?P2口

圖1-13是P2口的位結(jié)構(gòu)圖。P2口的位結(jié)構(gòu)中上拉電阻的結(jié)構(gòu)與P1口相同,但比P1口多了一個(gè)輸出轉(zhuǎn)換多路控制部分。當(dāng)多路開關(guān)MUX倒向鎖存器輸出Q端時(shí),構(gòu)成了一個(gè)準(zhǔn)雙向I/O口,此時(shí)P2口作通用I/O使用。P2引腳的數(shù)據(jù)與內(nèi)部總線相同,MUX與Q端連通,P2.x=D。圖1-13P2口的位結(jié)構(gòu)圖當(dāng)系統(tǒng)擴(kuò)展片外程序存儲(chǔ)器時(shí),多路開關(guān)MUX在CPU的控制下,倒向內(nèi)部地址線一端,此時(shí)P2口僅可用于輸出高8位地址。

在使用P2口時(shí)應(yīng)注意:

(1)在不接外部存儲(chǔ)器或片外存儲(chǔ)器容量小于256B的系統(tǒng)中,可以使用“MOVX@Ri”類指令訪問片外存儲(chǔ)器,僅由P0口輸出低8位地址,而P2口引腳上的內(nèi)容在整個(gè)訪問期間不會(huì)變化,此時(shí)P2口仍可作通用I/O口使用。

(2)當(dāng)應(yīng)用系統(tǒng)擴(kuò)展有大于256B而小于64?KB的外部存儲(chǔ)器,且P2口用于輸出高8位地址時(shí),由于訪問外部存儲(chǔ)器的操作是連續(xù)不斷的,P2口要不斷輸出高8位地址,因此此時(shí)P2口不能再作通用I/O口使用。

(3)在外部擴(kuò)充的存儲(chǔ)器容量大于256B而小于64?KB時(shí),可以采用軟件方法利用P1~P3中的某幾位口線輸出高8位地址,而保留P2口中的部分或全部口線作通用I/O口使用。

4)?P3口

P3口的位結(jié)構(gòu)見圖1-14。它是一個(gè)多功能的端口。P3口的輸出驅(qū)動(dòng)電路部分及內(nèi)部上拉電阻結(jié)構(gòu)與P1口相同,比P1口多了一個(gè)第二功能控制電路(由一個(gè)與非門和一個(gè)輸入緩沖器組成)。P3口是一個(gè)多功能口。當(dāng)“第二輸出功能”端保持高電平時(shí),與非門打開,P3口作為通用I/O口使用。輸出數(shù)據(jù)時(shí),鎖存器輸出的信號(hào)可以通過與非門經(jīng)V輸出到P3口的引腳。輸入時(shí),引腳上的數(shù)據(jù)將通過兩個(gè)相串的三態(tài)緩沖器在讀引腳選通信號(hào)控制下進(jìn)入內(nèi)部數(shù)據(jù)總線。這就是第一功能,此功能同P1口,每1位均可獨(dú)立作為I/O口。圖1-14P3口的位結(jié)構(gòu)圖

P3口除了作通用I/O使用外,它的各位還具有第二功能,第二功能詳見表1-8。當(dāng)P3口某一位用于第二功能作輸出時(shí),該位的鎖存器應(yīng)置“l(fā)”,打開與非門,第二功能端上的內(nèi)容通過“與非門”和V送至端口引腳。當(dāng)作第二功能輸入時(shí),端口引腳的第二功能信號(hào)通過第一個(gè)緩沖器送到第二輸入功能線上。

使用時(shí)注意:無論P(yáng)3口用作通用輸入口還是第二功能輸入口,相應(yīng)位的輸出鎖存器和第二輸出功能端都應(yīng)置“l(fā)”,使V截止。另外,每1位具有的兩個(gè)功能不能同時(shí)使用。1.3.5單片機(jī)應(yīng)用系統(tǒng)的開發(fā)過程

單片機(jī)應(yīng)用系統(tǒng)是以單片機(jī)為核心的智能控制系統(tǒng),由于應(yīng)用目標(biāo)不同,因此其構(gòu)成、規(guī)模、功能、復(fù)雜程度等均不相同。但不管怎么變化,其設(shè)計(jì)方法和開發(fā)過程是一樣的。單片機(jī)應(yīng)用系統(tǒng)的開發(fā)過程一般要經(jīng)歷如圖1-15所示的開發(fā)過程。圖1-15單片機(jī)系統(tǒng)的開發(fā)過程

1.明確任務(wù)

明確設(shè)計(jì)任務(wù)是系統(tǒng)設(shè)計(jì)的第一步,應(yīng)詳細(xì)了解控制對(duì)象的結(jié)構(gòu)、性能、特點(diǎn)和控制要求,深入認(rèn)真地進(jìn)行分析,根據(jù)適用場(chǎng)合、工作環(huán)境、具體用途考慮系統(tǒng)的可靠性、通用性、可維護(hù)性以及成本等,再根據(jù)用戶的具體要求,分析并提出符合要求的性能技術(shù)指標(biāo)。

2.軟件和硬件的功能劃分

單片機(jī)系統(tǒng)由軟件和硬件兩部分組成。有些功能既可以用軟件來實(shí)現(xiàn),也可以用硬件來實(shí)現(xiàn)。多用硬件雖可以提高系統(tǒng)的實(shí)時(shí)性和可靠性,但同時(shí)會(huì)帶來成本的增加。相反多用軟件,優(yōu)點(diǎn)是可以降低成本,但會(huì)帶來系統(tǒng)的復(fù)雜性。因此,必須綜合分析,根據(jù)實(shí)際要求來確定哪些功能用硬件實(shí)現(xiàn),哪些功能用軟件實(shí)現(xiàn),根據(jù)系統(tǒng)要求畫出單片機(jī)要實(shí)現(xiàn)控制的系統(tǒng)功能框圖。

3.總體設(shè)計(jì)

1)系統(tǒng)方案設(shè)計(jì)

方案設(shè)計(jì)就是為系統(tǒng)建立一個(gè)框架結(jié)構(gòu),主要包括以下幾點(diǎn):

(1)進(jìn)行必要的分析計(jì)算,確定合適的控制方案和算法。

(2)確定系統(tǒng)的硬件配置,即根據(jù)功能的劃分,確定外圍電路的配置和接口電路方案,畫出各部分的功能框圖。同時(shí)根據(jù)設(shè)計(jì)要求,選擇性價(jià)比合適的單片機(jī)芯片和其他電子元器件。選擇時(shí)要考慮精度、速度、容量、可靠性、貨源和成本等。

2)硬件設(shè)計(jì)

硬件設(shè)計(jì)是根據(jù)總體設(shè)計(jì)的要求,設(shè)計(jì)系統(tǒng)的硬件電路原理圖,并初步設(shè)計(jì)印刷電路板等。其主要內(nèi)容包括單片機(jī)系統(tǒng)的擴(kuò)展及系統(tǒng)配置兩部分。在系統(tǒng)擴(kuò)展及配置時(shí)一定要注意以下幾個(gè)原則:

(1)盡量選擇通用電路。

(2)系統(tǒng)的擴(kuò)展及配置要留一定的余地。

(3)硬件結(jié)構(gòu)要結(jié)合軟件考慮。

(4)適當(dāng)考慮CPU的總線驅(qū)動(dòng)能力和抗干擾設(shè)計(jì)。

3)軟件設(shè)計(jì)

軟件設(shè)計(jì)的任務(wù)是在總體設(shè)計(jì)和硬件設(shè)計(jì)的基礎(chǔ)上確定程序的結(jié)構(gòu),分配內(nèi)部存儲(chǔ)器的資源,并進(jìn)行主程序及各模塊程序的設(shè)計(jì),最終完成整個(gè)系統(tǒng)的控制程序。軟件設(shè)計(jì)的內(nèi)容包括系統(tǒng)定義和軟件結(jié)構(gòu)設(shè)計(jì)。系統(tǒng)定義就是在定義各輸入/輸出端口地址及工作方式后,分配主程序、中斷程序、表格、堆棧等的存儲(chǔ)空間。在軟件結(jié)構(gòu)設(shè)計(jì)方法上通常采用模塊化程序設(shè)計(jì)與自頂向下逐步求精的程序設(shè)計(jì)方法。

4.系統(tǒng)仿真調(diào)試

系統(tǒng)的仿真調(diào)試可分為硬件仿真調(diào)試和軟件仿真調(diào)試。在軟件設(shè)計(jì)時(shí)可以利用Keil軟件進(jìn)行匯編、連接執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯(cuò)誤和邏輯錯(cuò)誤并加以排除和糾正。在軟件設(shè)計(jì)完成后,可以利用Proteus軟件進(jìn)行仿真來觀察系統(tǒng)執(zhí)行的效果,找出設(shè)計(jì)中存在的問題。

5.系統(tǒng)調(diào)試

完成系統(tǒng)仿真后,把用Protel繪制的PCB印刷電路板圖交給電路板生產(chǎn)商進(jìn)行制板。完成制板后,把所有的電子元器件在電路板上進(jìn)行組裝和焊接,然后使用編程器把程序燒錄到單片機(jī)芯片中進(jìn)行系統(tǒng)聯(lián)調(diào),直到調(diào)試結(jié)果符合設(shè)計(jì)

要求。

為了學(xué)習(xí)方便和節(jié)約成本,在單片機(jī)教學(xué)中通常采用一些仿真軟件進(jìn)行試驗(yàn)。學(xué)生也可以通過單片機(jī)多功能仿真開發(fā)板進(jìn)行一些實(shí)驗(yàn)。

1.4項(xiàng)目實(shí)施

系統(tǒng)整體設(shè)計(jì)要求:在單片機(jī)的P0.0口上接一個(gè)發(fā)黃

色光的LED燈,編寫程序讓LED燈不停地閃爍,時(shí)間間隔為0.2秒。

1.4.1項(xiàng)目硬件設(shè)計(jì)

LED燈閃爍控制系統(tǒng)的結(jié)構(gòu)比較簡(jiǎn)單,其硬件電路模塊包括電源電路、時(shí)鐘電路、按鍵復(fù)位電路和LED燈接口電路,硬件原理圖見1-16所示。圖1-16閃爍LED燈電路原理圖1.4.2項(xiàng)目軟件設(shè)計(jì)

由硬件電路可知,要實(shí)現(xiàn)LED燈的點(diǎn)亮,必須要求P0.0引腳輸出低電平才能實(shí)現(xiàn);要讓LED燈熄滅,必須使P0.0引腳輸出高電平才能實(shí)現(xiàn)。因此可以用L1?=?0指令實(shí)現(xiàn)對(duì)該引腳輸出低電平,用L1?=?1指令實(shí)現(xiàn)對(duì)該引腳輸出高電平。那么又如何實(shí)現(xiàn)閃爍間隔圖1-17LED燈閃爍流程圖

0.2s呢?這里采用延時(shí)程序?qū)崿F(xiàn)。把系統(tǒng)要實(shí)現(xiàn)的功能搞清楚后,就可以編寫程序了。編寫程序的思路如程序流程圖

1-17所示。圖1-17LED燈閃爍流程圖根據(jù)程序流程圖,寫出單片機(jī)C語言的源程序:

#include<reg51.h>

sbitL1=P0^0;

voiddelay02s(void) //延時(shí)0.2s子程序//

{unsignedchari,j,k;

for(i=20;i>0;i--)

for(j=20;j>0;j--)

for(k=248;k>0;k--)

;

}

voidmain(void)

{while(1)

{L1=0; //P0.0置低電平//

delay02s();

L1=1; //P0.0置高電平//

delay02s();

}

}1.4.3項(xiàng)目綜合仿真與調(diào)試

1.使用KeilC51編譯源程序

KeilC51是51系列單片機(jī)的開發(fā)系統(tǒng),利用它可以編輯、編譯、匯編、連接C程序和匯編程序,從而可以生成在單片機(jī)中進(jìn)行燒錄的?.hex文件。

本項(xiàng)目的軟件編譯過程如下:

【步驟1】打開μVision2,開發(fā)界面如圖1-18所示。

該界面包括文件工具欄、編譯工具欄、工程窗口以及輸出

窗口等。圖1-18Keil軟件界面

【步驟2】新建一個(gè)工程,如圖1-19所示,選擇“Project”>“NewProject”菜單,在彈出的保存窗口中選擇

工程文件的保存位置,填寫文件名,單擊“保存”按鈕。圖1-19建立工程項(xiàng)目

【步驟3】在彈出的CPU選擇對(duì)話框中選擇單片機(jī)芯

片型號(hào)(此處選AT89C51),如圖1-20所示,然后單擊“確定”按鈕。圖1-20選擇單片機(jī)芯片

【步驟4】單擊文件工具欄中的新建文件按鈕,在編輯區(qū)域編輯C語言源程序,編輯完成后,單擊文件工具欄中的保存文件按鈕,將源程序保存為“.c”形式的文件,如圖1-21所示。圖1-21建立編輯與保存文件

【步驟5】在工程窗口的“SourceGroup1”文件夾上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“AddFilestoGroup'SourceGroup1'”選項(xiàng),在打開的對(duì)話框中選擇Led.c源文件,并單擊“Add”按鈕將其加入,整個(gè)過程如圖1-22所示。圖1-22在工程中添加源文件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論