版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
模塊1閃爍的LED燈設(shè)計1.1項目描述1.2項目目的與要求1.3項目支撐知識鏈接1.4項目實施項目小結(jié)項目拓展技能與練習(xí)
【項目導(dǎo)入】
現(xiàn)今是一個科技迅猛發(fā)展的時代,我們生活中的每個領(lǐng)域幾乎都有單片機的蹤跡,比如,冰箱、空調(diào)、洗衣機、微波爐、電飯煲等家用電器的控制系統(tǒng)以及工業(yè)自動控制領(lǐng)域的智能儀表、機器人、無人機和導(dǎo)彈的導(dǎo)航裝置等都離不開單片機。在此,我們通過一個項目—閃爍的LED燈設(shè)計,讓同學(xué)們走進單片機的學(xué)習(xí)樂園,了解單片機的應(yīng)用領(lǐng)域與發(fā)展趨勢,理解單片機的開發(fā)過程,體驗學(xué)習(xí)單片機的無限樂趣。
【項目目標(biāo)】
1.知識目標(biāo)
(1)了解單片機的概念、發(fā)展歷史以及常見產(chǎn)品型號;
(2)理解單片機的外部引腳功能;
(3)理解單片機的存儲器地址分配;
(4)掌握單片機最小系統(tǒng)的搭建;
(5)熟悉單片機系統(tǒng)設(shè)計的開發(fā)過程。
2.能力目標(biāo)
(1)能正確區(qū)分和使用單片機的RAM和ROM;
(2)能正確區(qū)分單片機的4個并行口用途;
(3)能獨立搭建簡單的單片機最小系統(tǒng);
(4)能利用KeilC51和Proteus軟件對系統(tǒng)進行仿真調(diào)試。
1.1項目描述
單片機在控制與測量領(lǐng)域有著廣泛的應(yīng)用。單片機的應(yīng)用系統(tǒng)設(shè)計一般包括硬件設(shè)計和軟件設(shè)計兩大部分,這兩部分通過調(diào)試才能實現(xiàn)完整的系統(tǒng)功能。本項目通過搭建一個簡單的單片機最小系統(tǒng)來實現(xiàn)對LED燈的閃爍頻率的控制。通過該項目的學(xué)習(xí),使學(xué)生掌握單片機的硬件組成、芯片各引腳的功用和它的復(fù)位電路等基本知識,理解單片機系統(tǒng)的開發(fā)過程,學(xué)會搭建一個簡單的單片機最小系統(tǒng)。
1.2項目目的與要求
本項目的目的就是搭建一個單片機系統(tǒng),通過C語言編程來點亮一個LED燈。項目在實施過程中需要解決下面
幾個關(guān)鍵問題:
(1)什么是單片機最小系統(tǒng)?怎樣構(gòu)建?
(2)?LED燈與單片機的輸入/輸出口怎樣連接?如何
控制?
(3)發(fā)光二極管如何進行0.2s閃爍?
(4)如何使用KeilC51和Proteus軟件進行系統(tǒng)的仿真?
1.3項目支撐知識鏈接
1.3.1認(rèn)識單片機
1.單片機的基本概念
單片機(SingleChipMicrocomputer,SCM)實際上是集成在一塊芯片上的微型計算機,在這塊芯片內(nèi)部集成了中央處理器(CentralProcessingUnit,CPU)、隨機存儲器(RandomAccessMemory,RAM)、只讀存儲器(Read-OnlyMemory,ROM)、定時器/計算器(Time/Count)、輸入/輸出(Input/Output,I/O)接口等功能部件。雖然單片機只是一個芯片,
但從組成和功能上看,它已具有微型計算機系統(tǒng)的含義。圖1-1是不同封裝形式的單片機示意圖,其中黑色的是塑料外殼,保護著里面的半導(dǎo)體芯片,針狀部分是它的引腳。圖1-1不同封裝形式的單片機芯片單片機CPU的功能沒有PC的CPU強大,但單片機的體積小,能將微型計算機的各主要部分集成在一塊芯片上,大大縮短了系統(tǒng)內(nèi)信號的傳送距離,從而提高了系統(tǒng)的可靠性及運行速度,因而在工業(yè)測控領(lǐng)域中,單片機系統(tǒng)是最理想的控制系統(tǒng)。另外,由于單片機的體積小,常常被嵌入各種現(xiàn)代設(shè)備中作為控制器使用,因此單片機又被稱為微控制器(MicroControllerUnit,MCU),它的這種使用方式是嵌入式系統(tǒng)低端應(yīng)用的最佳選擇。單片機的設(shè)計目標(biāo)主要是增強“控制”能力,滿足實時控制方面的需要。它在硬件結(jié)構(gòu)、指令系統(tǒng)、I/O端口、功率消耗及可靠性等方面均有其獨特之處,其最顯著的特點之一就是具有非常有效的控制功能。又因為它最早被用在工業(yè)控制領(lǐng)域,因此,單片機又常常被人稱為微控制器。單片機比專用處理器更適合應(yīng)用于嵌入式系統(tǒng),因此它得到了更多的應(yīng)用?,F(xiàn)代人類生活中所用的幾乎每件電子和機械產(chǎn)品中都會集成有單片機:手機、電話、計算器、家用電器、電子玩具、掌上電腦等都配有1或2塊單片機;個人電腦中也有為數(shù)不少的單片機在工作;汽車上的電控設(shè)備一般配備有40多塊單片機;復(fù)雜的工業(yè)控制系統(tǒng)上甚至可能有數(shù)百臺單片機在同時工作。
2.單片機技術(shù)的發(fā)展過程
單片機誕生于20世紀(jì)70年代末,其發(fā)展經(jīng)歷了探索、完善、微控制器、全面發(fā)展等四個階段。
(1)探索階段(1976—1978):本階段主要是以Intel公司的MCS-48為代表。
(2)完善階段(1978—1982):以Intel公司推出的單片機系列MCS-51為典型代表。
(3)微控制器階段(1982—1990):該階段的主要技術(shù)方向是,不斷擴展?jié)M足系統(tǒng)要求的各種外圍電路與接口電路,具有智能化的控制能力,其特點如下:
①滿足嵌入式應(yīng)用要求的外圍擴展,如WDT、PWM、ADC、DAC、高速I/O口等。
②眾多計算機外圍功能集成,如提供串行擴展總線SPI、I2C、BUS、Microwire,配置現(xiàn)場總線接口CANBUS。
③?CMOS化,提供功耗管理功能。
④提供OTP供應(yīng)狀態(tài),有利于大規(guī)模和批量生產(chǎn)。
(4)全面發(fā)展階段(1990—):單片機發(fā)展到這一階段,已成為工業(yè)控制領(lǐng)域中普遍采用的智能化控制工具,小到玩具、家電行業(yè),大到車載、艦船電子系統(tǒng),遍及計量測試、工業(yè)過程控制、機械電子、金融電子、商用電子、辦公自動化、工業(yè)機器人、軍事和航空航天等領(lǐng)域。為滿足不同的要求,出現(xiàn)了高速、大尋址范圍、強運算能力和多機通信能力的8位、16位、32位通用型單片機、小型廉價單片機、外圍系統(tǒng)集成的專用型單片機以及形形色色、各具特色的現(xiàn)代單片機。可以說,單片機的發(fā)展進入了百花齊放的時代,為用戶的選擇提供了廣闊的空間。
3.單片機的分類
單片機按不同方式分類如下:
(1)按應(yīng)用領(lǐng)域可分為家電類、工控類、通信類等。
(2)按總線結(jié)構(gòu)可分為總線型與非總線型。
(3)按結(jié)構(gòu)體系可分為諾依曼結(jié)構(gòu)和哈佛結(jié)構(gòu)。
(4)按字長、位數(shù)可分為4位機、8位機、16位機、32
位機。
(5)按指令體系可分為復(fù)雜指令體系(ComplexInstructionSetComputer,CISC)和精簡指令體系(ReducedInstructionSetComputer,RISC)。
4.單片機的特點與適用范圍
1)特點
(1)優(yōu)異的性價比。一塊單片機芯片價格在幾元至幾十元之間,比較便宜。
(2)集成度高,體積小,可靠性高。
(3)控制能力強。為了滿足工業(yè)控制的要求,單片機的指令系統(tǒng)均有豐富的轉(zhuǎn)移指令、I/O口的邏輯操作和位處理功能。
(4)低功耗、低電壓,便于生產(chǎn)便攜式產(chǎn)品。
(5)外部總線增加了I2C等串行總線方式,進一步縮小了體積,簡化了結(jié)構(gòu)。
2)適用領(lǐng)域
由于單片機具有極高的可靠性、微型性和智能性(只要編寫不同的程序就能夠完成不同的控制工作),因此其成為工業(yè)控制領(lǐng)域中普遍采用的智能化控制工具,并深深地滲入到人們的日常生活當(dāng)中。以下是一些應(yīng)用舉例。
(1)工業(yè)控制領(lǐng)域:單片機廣泛用于工業(yè)生產(chǎn)過程的自動控制、物理量的自動檢測與處理、工業(yè)機器人、電機控制、數(shù)據(jù)傳輸?shù)阮I(lǐng)域。
(2)智能儀表:儀表中引入單片機,使儀表智能化,提高測試的精度和自動化水平。
(3)電信領(lǐng)域:單片機在程控交換機、手機、電話機、智能調(diào)制/解調(diào)器等方面的使用也很廣泛。
(4)軍用導(dǎo)航領(lǐng)域:單片機應(yīng)用在宇宙飛船、電子干擾、導(dǎo)彈控制、智能武器裝置、魚雷制導(dǎo)控制、航天航空的導(dǎo)航等軍用領(lǐng)域。
(5)日常生活中的應(yīng)用:目前家用電器已普遍采用單片機代替?zhèn)鹘y(tǒng)的控制電路。比如,單片機廣泛用于洗衣機、電冰箱、空調(diào)、微波爐和智能家居等產(chǎn)品中。
5.單片機的產(chǎn)品介紹
1)?Intel公司
Intel公司是單片機的領(lǐng)跑者,MCS-51系列單片機是該公司單片機產(chǎn)品的總稱。該系列有8031、80C51、8751、8032、8052、8752等,其中80C51是典型代表,因此大家常以80C51來稱呼MCS-51系列單片機。此外,該公司將MCS-51核心技術(shù)授權(quán)給多家公司,市場上陸續(xù)出現(xiàn)了與80C51兼容的各廠家生產(chǎn)的單片機。
2)?Atmel公司
Atmel公司的8位單片機有AT89和AT90系列。89系列與51系列完全兼容,具有8KB的閃速存儲器(FlashMemory),采用靜態(tài)時鐘方式;90系列采用了增強精簡指令體系(RISC)結(jié)構(gòu),大多數(shù)指令僅需一個晶振周期,運行速度快。
3)?Microchip公司
Microchip公司推出的是8位PIC系列單片機,該系列單片機采用的是RISC結(jié)構(gòu)。其中主要產(chǎn)品系列是:
(1)?PIC16C5x:低端產(chǎn)品,價位低,家電產(chǎn)品中常
使用。
(2)?PIC12C6xx:中端產(chǎn)品,性能相對較高,內(nèi)部帶有A/D轉(zhuǎn)換器和PWM輸出等。
(3)?PIC17Cxx:高端產(chǎn)品,運算速度快,可外接擴展存儲器RAM或EPROM,控制功能豐富。
4)?Motorola公司
Motorola公司在單片機生產(chǎn)上多采用內(nèi)部倍頻技術(shù)或鎖相環(huán)技術(shù),從而使得相同時鐘頻率下單片機內(nèi)部總線速度大大提高。該公司生產(chǎn)的單片機系列有M6805、M68HC05、M68HC11、M68HC12等,其中M68HC12是該公司8位單片機的典型代表。由于STC系列單片機不僅完全與51單片機兼容而且加密技術(shù)高,因此目前國內(nèi)有很多用戶使用STC系列單片機芯片來開發(fā)控制系統(tǒng)。
STC系列單片機由STMicroelectronics公司生產(chǎn),由深圳宏晶公司作為大陸代理。此外,還有一些單片機生產(chǎn)廠商,如Zilog公司、Philips公司、Siemens公司、NEC公司、EMC公司等,其產(chǎn)品型號可在網(wǎng)上查詢,此處不再一一介紹。1.3.2單片機中的數(shù)制與編碼
1.單片機中的數(shù)制
數(shù)制在日常生活中被人們經(jīng)常使用,最常見的有十進制、八進制、十六進制等。在單片機中,一切信息(包括數(shù)值、字符、指令等)的存儲、處理與傳送均采用二進制的形式。二進制數(shù)中只有“0”和“1”兩個數(shù)字符號,利用二進制進行操作和運算比較容易在電路中實現(xiàn),符合單片機的特點,但閱讀和書寫比較復(fù)雜。由于十六進制與二進制間有著非常簡單的對應(yīng)關(guān)系,因此在閱讀與書寫時常常采用十六進制。常用的這三種計數(shù)法的表示及其相互關(guān)系見表1-1和表1-2。
3.單片機中數(shù)的表示
1)機器數(shù)與真值
機器數(shù)是指機器中數(shù)的表示。它將數(shù)值連同符號位放在一起,其長度一般是8的整數(shù)倍。機器數(shù)通常有2種:有符號數(shù)和無符號數(shù)。有符號數(shù)的最高位是符號位,其余各位用來表示數(shù)的大?。粺o符號數(shù)的所有各位都用來表示數(shù)的大小。真值是指機器數(shù)所代表的實際數(shù)值。有符號數(shù)的符號位通常的做法是用一位二進制表示符號,稱為“符號位”,放在有效數(shù)字的前面,用“0”表示正,用“1”表示負(fù)。②采用補碼進行運算,所得結(jié)果仍為補碼。為了得到結(jié)果的真值,還得進行轉(zhuǎn)換(還原)。轉(zhuǎn)換前應(yīng)先判斷符號位,若符號為0,則所得結(jié)果為正數(shù),其值與真值相同;若符號位為1,則應(yīng)將它轉(zhuǎn)換成原碼,然后才得到它的真值。
③補碼與原碼、反碼不同,數(shù)值0的補碼只有一個,即
?[0]補=00000000B=00H。④若字長為8位,則補碼所表示的范圍為-128~+127;若字長為16位,則補碼所表示的范圍為-32768~+32767。
⑤進行補碼運算時,應(yīng)注意所得結(jié)果不應(yīng)超過上述補碼所能表示數(shù)的范圍,否則會產(chǎn)生溢出而導(dǎo)致錯誤。采用其他碼制運算時同樣應(yīng)注意這一問題。
4.信息編碼
由于單片機所有的信息都是以二進制形式存儲的,因此各種非數(shù)值型數(shù)據(jù),如字符或符號,都采用二進制數(shù)碼的組合來表示,稱為二進制編碼。最常見的編碼形勢有BCD碼編碼和ASCII碼編碼。
1)?BCD碼編碼
用二進制數(shù)來直接表示十進制數(shù),保留各數(shù)位之間“逢十進一”的關(guān)系,這就是二-十進制編碼,也稱為BCD(BinaryCodedDecimal)碼。這種編碼將一位十進制數(shù)用4位二進制數(shù)表示,通常以8421為權(quán)進行編制。它有十個不同的數(shù)字符號,按“逢十進一”的原則進位。表1-3是十進制數(shù)1~14的BCD碼對應(yīng)表。
BCD(8421)碼用0000B~1001B代表十進制數(shù)的0~9,運算法則是逢十進一。例如,158的BCD碼表示為000101011000B。
BCD碼的運算結(jié)果也必須是BCD碼,因此BCD碼在進行加法運算時,必須對二進制加法的結(jié)果進行修正,其修正原則是:若各位的和均在0~9之間,則不需要修正;若和的低4位大于9或低4位向高4位有進位(和大于15),則低4位加6修正;若高4位大于9或高4位的最高位有進位,則高4位加6修正。
2)?ASCII碼編碼
ASCII碼是國際標(biāo)準(zhǔn)化組織ISO規(guī)定采用的美國標(biāo)準(zhǔn)信息交換碼(AmericanStandardCodeforInformationInterchange)。標(biāo)準(zhǔn)的ASCII碼的高位為0,用7位二進制碼對字符進行編碼,所以總共有27=128個,從0~127,見附錄A。
ASCII碼主要用于微機與外設(shè)的通信,當(dāng)微機與ASCII碼制的鍵盤、打印機及CRT等連用時,均以ASCII碼形式傳輸數(shù)據(jù)。1.3.3
MCS-51系列單片機的基本結(jié)構(gòu)
89C51單片機有40個引腳,采用HMOS或CHMOS工藝制造,通常采用雙列直插式封裝(DIP)。下面以AT89C51為例介紹51系列兼容單片機的引腳功能。89C51的引腳和封裝如圖1-2所示,其中圖(a)為雙列直插封裝DIP方式,圖(b)為方形封裝方式。圖1-2AT89C51的封裝和引腳分配圖
1.89C51引腳功能
1)主電源引腳Vcc和GND
Vcc(40腳):主電源?+5?V,正常操作和對EPROM編程及驗證時均接?+5?V電源。
Vss(20腳):電源的接地端。
2)外接晶振引腳:XTAL1(19腳)和XTAL2(18腳)
XTAL1和XTAL2為接外部晶振的兩個引腳。當(dāng)使用內(nèi)部時鐘時,這兩個引腳端外接石英晶體和微調(diào)電容;當(dāng)采用外部時鐘時,XTAL1引腳接地,XTAL2作為外部振蕩信號的輸入端。
3)控制信號引腳RST/VPD、ALE/、、/Vpp
(1)?RST/VPD(9腳):單片機復(fù)位/備用電源引腳,具有單片機復(fù)位和備用電源引入雙重功能。當(dāng)該引腳作為RST時,該引腳要連續(xù)保持兩個機器周期以上的高電平,單片機才完成復(fù)位;當(dāng)作為VPD時,單片機掉電或電源發(fā)生波動導(dǎo)致電源電壓下降到一定值,備用電源給內(nèi)部RAM供電,保持其中的信息,直到單片機工作電壓恢復(fù)正常。
(2)?ALE/
(30腳):地址鎖存允許信號輸出/編程脈沖輸入雙重功能引腳。當(dāng)訪問片外存儲器時,該引腳是地址鎖存信號;當(dāng)不訪問外部存儲器時,ALE引腳周期性地輸出固定頻率脈沖信號(1/6振蕩器頻率),因此,它可用作外部時鐘或外部定時脈沖使用。應(yīng)注意的是,當(dāng)訪問片外數(shù)據(jù)存儲器時,將跳過一個ALE脈沖;ALE端可以驅(qū)動(吸收或輸出電流)8個LSTTL負(fù)載。對含有EPROM的單片機(8751),在片內(nèi)EPROM編程期間,此引腳用于輸入專門的編程脈沖和編程電源(
)。
(3)
(29腳):輸出訪問片外程序存儲器的讀選通信號。在訪問外部ROM時,(信號定時輸出脈沖)作為外部ROM的選通信號。CPU從片外程序存儲器取指令(或常數(shù))期間,每個機器周期兩次有效。每當(dāng)訪問片外數(shù)據(jù)存儲器時,這兩次有效的信號將不會出現(xiàn)。該端有效
(低電平)時,實現(xiàn)外部ROM單元的讀操作,同樣可驅(qū)動8個LSTTL負(fù)載。
(4)
/Vpp(31腳):片內(nèi)片外程序存儲器選擇/片內(nèi)固化編程電壓輸入雙重功能引腳。當(dāng)輸入高電平時,CPU可先訪問片內(nèi)ROM4KB的地址范圍,若超出4KB地址,將自動轉(zhuǎn)向執(zhí)行片外ROM;當(dāng)輸入低電平時,不論片內(nèi)是否有程序存儲器,CPU只能訪問片外程序存儲器。
4)輸入/輸出引腳P0、P1、P2、P3
89C51有32條I/O端口,構(gòu)成四個8位雙向端口。P0、P1、P2、P3為8位雙向口線,P0.0~P0.7對應(yīng)39~32腳;P1.0~P1.7對應(yīng)1~8腳;P2.0~P2.7對應(yīng)21~28腳;P3.0~P3.7對應(yīng)10~17腳,P3具有雙重功能,這些引腳的使用將在后續(xù)部分進行介紹。
2.89C51的內(nèi)部結(jié)構(gòu)
51系列單片機在內(nèi)部結(jié)構(gòu)上基本相同,其中不同型號的單片機只不過在個別模塊和功能方面有些區(qū)別。89C51單片機內(nèi)部硬件結(jié)構(gòu)框圖如圖1-3所示。它由一個8位中央處理器(CPU)、1個256B片內(nèi)RAM及4KBFlashROM、21個特殊功能寄存器、4個8位并行I/O口、2個16位定時器/計數(shù)器、1個串行I/O口以及中斷系統(tǒng)等部分組成,各功能部件通過片內(nèi)單一總線連成一個整體,集成在一塊芯片上。圖1-389C51單片機內(nèi)部硬件結(jié)構(gòu)框圖在圖1-3中,對其結(jié)構(gòu)按功能進行詳細(xì)劃分,可以得到89C51內(nèi)部結(jié)構(gòu),如圖1-4所示。圖1-489C51單片機內(nèi)部結(jié)構(gòu)圖
1)運算器
運算器主要由算術(shù)邏輯運算部件ALU、累加器ACC、寄存器B、暫存器、程序狀態(tài)字寄存器PSW及專門用于位操作的布爾處理機等組成,它能實現(xiàn)數(shù)據(jù)的算術(shù)邏輯運算、位變量處理和數(shù)據(jù)的傳送操作。ALU主要用于對8位二進制數(shù)據(jù)進行加、減、乘、除四則運算和與、或、非、異或等邏輯運算,此外還具有置位、移位、測試轉(zhuǎn)移等功能。布爾處理器是具有位處理邏輯功能的電路,專門用于位操作。暫存器專門用來存放參與算術(shù)運算和邏輯運算的另一個操作數(shù),對用戶不開放。此外,累加器A、寄存器B和程序狀態(tài)字寄存器PSW的介紹見后續(xù)存儲器部分。
2)控制器
控制器是單片機內(nèi)部按一定時序協(xié)調(diào)工作的控制核心,是分析和執(zhí)行指令的部件??刂破髦饕沙绦蛴嫈?shù)器(ProgramCounter,PC)、指令寄存器IR、指令譯碼器ID、數(shù)據(jù)指針DPTR、堆棧指針SP、振蕩器與定時控制電路、中斷控制器、串行口控制器和定時器等構(gòu)成。
(1)程序計數(shù)器PC。PC是一個16位專用寄存器,用來存放下一條指令的地址,它具有自動加1的功能。當(dāng)CPU要取指令時,PC的內(nèi)容首先送至地址總線上,然后再從存儲器中取出指令,從該地址的存儲單元中取指令后,PC的內(nèi)容自動加1,指向下一條指令的地址,以保證程序按順序執(zhí)行。在執(zhí)行轉(zhuǎn)移、子程序調(diào)用指令和中斷響應(yīng)時例外,PC的內(nèi)容不再加1,而是由指令或中斷響應(yīng)過程自動給PC置入新的地址。單片機復(fù)位時,PC自動清零,即裝入地址0000H,從而保證了復(fù)位后,程序從0000H地址開始執(zhí)行。
(2)指令寄存器IR。指令寄存器是一個8位寄存器,用于暫存待執(zhí)行的指令,等待譯碼。
(3)指令譯碼器ID。指令譯碼器對指令寄存器中的指令進行譯碼,將指令轉(zhuǎn)變?yōu)閳?zhí)行此指令所需要的電信號。根據(jù)譯碼器輸出的信號,再經(jīng)定時控制電路定時地產(chǎn)生執(zhí)行該指令所需要的各種控制信號,完成指令的功能。
(4)數(shù)據(jù)指針DPTR。DPTR是一個16位專用地址指針寄存器,通常在訪問外部數(shù)據(jù)存儲器時作地址指針使用,是單片機中唯一一個供用戶使用的16位寄存器,具體介紹見后續(xù)存儲器部分。
(5)堆棧指針SP。堆棧指針SP是一個8位特殊功能寄存器,用于指出堆棧棧頂?shù)牡刂?,在調(diào)用子程序或進入中斷程序前保存一些重要數(shù)據(jù)及程序返回地址,具體介紹見后續(xù)存儲器部分。
3.89C51單片機存儲器的配置
普通微型計算機中廣泛采用將程序和數(shù)據(jù)合用一個存儲器的空間結(jié)構(gòu),這種結(jié)構(gòu)稱為普林斯頓結(jié)構(gòu)(Princeton);而大部分單片機采用的是把程序存儲器和數(shù)據(jù)存儲器空間截然分開,即ROM和RAM獨立編址并分別尋址的結(jié)構(gòu),相互空間不會沖突,這種結(jié)構(gòu)就是哈佛結(jié)構(gòu)(Harvard)。
1)程序存儲器(ROM)
51系列單片機的程序存儲器用于存放編好的應(yīng)用程序、表格和常數(shù)。由于采用16位的地址總線,因而其可擴展的地址空間為64KB,且這64KB地址是連續(xù)、統(tǒng)一的。不同型號的機型,片內(nèi)的程序存儲器結(jié)構(gòu)和空間也不同,如89C51有4KB的FLASHROM,80C51片內(nèi)有4KB的ROM,地址為0000H~0FFFH,8751片內(nèi)有4KB的EPROM,803l片內(nèi)無程序存儲器。
CPU如何訪問ROM呢?當(dāng)為高電平時,CPU從片內(nèi)存儲器的0000H單元開始讀取指令,若指令地址超過0FFFH
(4KB),CPU會自動轉(zhuǎn)向片外讀取指令;當(dāng)該引腳為低電
平時,CPU只能從片外讀取指令。
89C51單片機中,程序存儲器的某些單元已被保留作為特定的程序入口地址(中斷服務(wù)程序入口地址),這些單元具有特殊功能。特殊單元為0000H~0002H。系統(tǒng)復(fù)位后的PC值為0000H,故系統(tǒng)從0000H單元開始取指令,執(zhí)行程序,它是系統(tǒng)的啟動地址。若程序不從0000H單元開始,則必須在這三個單元中存放一條無條件轉(zhuǎn)移指令,以便直接去執(zhí)行指定的程序。另外,還有幾個特殊的地址:外部中斷0入口地址0003H,定時器0中斷入口地址000BH,外部中斷1入口地址0013H,定時器1中斷入口地址001BH,串行口中斷入口地址0023H,定時器2溢出中斷入口地址002BH。在編程使用時,用戶程序的存放位置選取在0030H之后比較安全。
2)數(shù)據(jù)存儲器(RAM)
51系列單片機的數(shù)據(jù)存儲器用于存放運算中間結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)志位等。數(shù)據(jù)存儲器在物理上和邏輯上都分為兩個地址空間:一個是片內(nèi)256字節(jié)的RAM,另一個是片外最大可擴充64KB的RAM。片內(nèi)RAM的訪問通過定義數(shù)據(jù)類型即可,比如data、bdata、idata;片外RAM的訪問可把數(shù)據(jù)定義為pdata或xdata。數(shù)據(jù)存儲器由通用工作寄存器區(qū)、可位尋址區(qū)、通用RAM區(qū)和特殊功能寄存器區(qū)等四個部分組成,其結(jié)構(gòu)如圖1-5所示。其中,圖(a)表示低128B的RAM區(qū),圖(b)表示RAM的特殊功能寄存器區(qū),即地址從80H開始至FFH的高128B的空間區(qū)域。圖1-5片內(nèi)數(shù)據(jù)存儲器的結(jié)構(gòu)
(1)通用工作寄存器區(qū)(00H~1FH)。51系列單片機的通用工作寄存區(qū)共有32個單元,分為四組,每組由8個通用寄存器R0~R7組成。由于通用寄存器常用于存放操作數(shù)和中間結(jié)果等,它們的功能及使用不作預(yù)先規(guī)定,因此稱為通用工作寄存器。在任何一個時刻,CPU只能使用其中的一組寄存器,正在使用的寄存器稱為當(dāng)前寄存器。到底是哪一組,由程序狀態(tài)寄存器PSW中RS1、RS0位的狀態(tài)組合決定。工作區(qū)的設(shè)置與工作寄存器的地址見表1-4。單片機上電或復(fù)位后,RS1=0H,RS0=0H,CPU默認(rèn)選中的是第0區(qū)的8個單元為當(dāng)前工作寄存器。
(2)可位尋址區(qū)(20H~2FH)。位尋址區(qū)作為一般的RAM單元,共16個字節(jié),既可以作為一般RAM單元使用,進行字節(jié)操作,又可以用位尋址方式訪問這16個字節(jié)的128個位,因此,該區(qū)稱為位尋址區(qū)。位尋址區(qū)分布如表1-5所示。
(3)通用RAM區(qū)(30H~7FH)。通用RAM區(qū)共有80個單元,其單元地址為30H~7FH。對通用RAM區(qū)的使用,沒有任何規(guī)定或限制,但在一般應(yīng)用中常存放用戶數(shù)據(jù)或作為堆棧區(qū)使用。
(4)特殊功能寄存器區(qū)(80~FFH)。特殊功能寄存器區(qū)共128個單元,其單元地址范圍為80~FFH,其中僅有21個地址單元可用,它們主要用于存放控制指令、狀態(tài)信息或數(shù)據(jù)。由于這21個寄存器的功能已作專門規(guī)定,故稱之為特殊功能寄存器(SpecialFunctionRegister,SFR)。其地址分布以及對應(yīng)的位地址如表1-6所示。專用寄存器并未占滿80H~FFH整個地址空間,對空閑的地址,用戶是不能使用的。對專用寄存器操作,只能使用直接尋址方式,書寫時,既可以使用寄存器符號,也可以使用寄存器單元地址。另外,表中凡字節(jié)地址不帶括號的寄存器都是可進行位尋址的寄存器,帶括號的是不可進行位尋址的寄存器。①累加器(Accumulator,ACC)。ACC是一個8位的寄存器,簡稱A。它通過暫存器與ALU相連,是CPU工作中使用最頻繁的寄存器,用來存放一個操作數(shù)或中間結(jié)果。在一般指令中,累加器用“A”表示,在位操作和堆棧操作指令中用“ACC”表示。②B寄存器。B寄存器是一個8位的寄存器,主要用于乘除運算。在乘除法指令中用于暫存數(shù)據(jù),用來存放一個操作數(shù)和存放運算后的一部分結(jié)果。乘法指令的兩個操作數(shù)分別取自累加器A和寄存器B,其中B為乘數(shù),乘積的高8位存放于寄存器B中。除法指令中,被除數(shù)取自A,除數(shù)取自B,除法的結(jié)果商數(shù)存放于A,余數(shù)存放于B。在其他指令中,B可以作為RAM中的一個單元來使用。③數(shù)據(jù)指針DPTR。DPTR是一個16位的專用地址指針寄存器。編程時DPTR既可以作16位寄存器使用,也可以拆成兩個獨立的8位寄存器,即DPH(高8位字節(jié))和DPL(低8位字節(jié)),分別占據(jù)83H和82H兩個地址。DPTR通常在訪問外部數(shù)據(jù)存儲器時作地址指針使用,用于存放外部數(shù)據(jù)存儲
器的存儲單元地址。由于外部數(shù)據(jù)存儲器的尋址范圍為
64KB(0000H~FFFFH),故把DPTR設(shè)計為16位,通過DPTR寄存器間接尋址方式可以訪問0000H~FFFFH全部64KB的外部數(shù)據(jù)存儲器空間。89C51單片機可以外接64KB的數(shù)據(jù)存儲器和I/O端口,可以使用DPTR來間接尋址。④堆棧指針(StackPointer,SP)。堆棧是RAM中一個特殊的存儲區(qū),用來暫存數(shù)據(jù)和地址,它是按先進后出、后進先出的原則存取數(shù)據(jù)的。堆棧共有兩種操作:進棧和出棧。為了正確存取堆棧區(qū)的數(shù)據(jù),需要一個寄存器來指示最后進入堆棧的數(shù)據(jù)所在存儲單元的地址,堆棧指針就是為此而設(shè)計的。SP總是指向堆棧頂端的存儲單元。
89C51單片機的堆棧是向上生成的,即進棧時,SP的內(nèi)容是增加的,出棧時,SP的內(nèi)容是減少的(數(shù)據(jù)的進棧和出棧的操作過程如圖1-6所示)。系統(tǒng)復(fù)位后,SP初始化為07H,使得堆棧實際上從08H單元開始。由于08H~1FH單元分屬于工作寄存器的1~3區(qū),因此若程序中要用到這些區(qū),則最好把SP值改為1FH或更大的值。一般在內(nèi)部RAM的30H~7FH單元中開辟堆棧區(qū)間。SP的內(nèi)容一旦確定,堆棧的位置也就跟著確定了。由于可初始化為不同值,因此堆棧位置是浮動的。圖1-6數(shù)據(jù)進棧和出棧操作過程⑤程序狀態(tài)字寄存器(ProgramStatusWord,PSW)。PSW是一個8位的專用寄存器,用于存放程序運行中的各種狀態(tài)信息,它可以進行位尋址。PSW中一些位的狀態(tài)是根據(jù)程序運行結(jié)果由硬件自動設(shè)置的,而另外一些位則使用軟件方法設(shè)定。PSW的位狀態(tài)可以用專門指令進行測試,也可以用指令讀出。一些條件轉(zhuǎn)移指令將根據(jù)PSW有些位的狀態(tài)進行程序轉(zhuǎn)移。PSW各位的定義如表1-7所示。
Cy(PSW.7)進位標(biāo)志:Cy是PSW中最常見的標(biāo)志位。其功能有二:一是存放算術(shù)運算的進位標(biāo)志,在進行加法或減法運算時,如果操作結(jié)果最高位有進位或借位,Cy由硬件置“1”,否則清“0”;二是在進行位操作時,Cy又可以被認(rèn)為是位累加器,它的作用相當(dāng)于CPU中的累加器A。
Ac(PSW.6)輔助進位標(biāo)志:在進行加法或減法運算時,如果低四位數(shù)向高位有進位或借位,硬件會自動將Ac置“l(fā)”,否則清“0”;在進行十進制調(diào)整指令時,將借助Ac狀態(tài)進行判斷。Ac位可用于BCD碼調(diào)整時的判斷位。
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)前通用寄存器組,但單片機上電或復(fù)位后,RS1RS0=00。通用寄存器共有4組,RS0與RS1的取值及其
對應(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)進行算術(shù)運算時,如果產(chǎn)生溢出,則由硬件將OV位置l,否則清“0”。當(dāng)執(zhí)行有符號數(shù)的加法指令或減法指令時,溢出標(biāo)志OV的邏輯表達式為
OV?=?Cy6Cy7。式中,Cy6表示D6位有否向D7位的進位或借位,有為“1”,否則為“0”;Cy7表示D7位有否向Cy位的進位或借位,有為“1”,否則為“0”。因此溢出標(biāo)志位在硬件上可以通過一個異或門獲得。
F1(PSW.1)用戶標(biāo)志位:其作用同F(xiàn)0。
P(PSW.0)奇偶標(biāo)志位:該位始終跟蹤累加器A內(nèi)容的奇偶性,每個指令周期由硬件來置位或清零,用以表示累加
器A中1的個數(shù)的奇偶性。如果A中有奇數(shù)個“1”,則P置“l(fā)”,否則置“0”。1.3.4單片機最小系統(tǒng)的搭建
單片機本身只是一塊芯片,只有和其他一些電路器件或設(shè)備有機結(jié)合才能構(gòu)成一個真正的單片機系統(tǒng),在此只介紹簡單的最小系統(tǒng)的搭建。一個單片機最小系統(tǒng)至少應(yīng)由電源電路、時鐘電路、復(fù)位電路、輸入/輸出接口電路四部分組成,具體結(jié)構(gòu)如圖1-7所示。圖1-7單片機最小系統(tǒng)框圖
1.電源電路
單片機要工作,必須要有電源提供能量,89C51單片機一般使用5?V直流電源。單片機芯片中有2個引腳分別為Vcc和GND,Vcc外接5V直流電源,GND接地。
2.時鐘電路
時鐘電路用于產(chǎn)生單片機工作所需要的時鐘信號。時序所研究的是指令執(zhí)行中各信號之間的相互關(guān)系。單片機本身如同一個復(fù)雜的同步時序邏輯電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在唯一的時鐘信號控制下嚴(yán)格地按時序進行工作,因此時鐘電路對于單片機而言是必需的。
1)時鐘產(chǎn)生的方式
單片機的時鐘產(chǎn)生方式通常有兩種,如圖1-8所示。
在內(nèi)部時鐘方式中,石英晶體的振蕩器頻率一般選擇4~12MHz,起振電容一般選用20~30pF的瓷片電容;外部時鐘方式是把外部已有的時鐘信號引入單片機,一般要求外部信號的高電平持續(xù)20ns,且為頻率低于12MHz的方波。圖1-889C51的時鐘產(chǎn)生方式
2)時鐘信號
CPU執(zhí)行指令的一系列動作都是在定時控制部件的控制下按照一定的時序一拍一拍進行的。指令字節(jié)數(shù)不同,操作數(shù)的尋址方式也不同,故執(zhí)行不同指令所需的時間差異也較大,工作時序也有區(qū)別。為了便于說明,通常按指令的執(zhí)行過程將時序化為幾種周期,即振蕩周期、狀態(tài)周期、機器周期和指令周期。
(1)振蕩周期。振蕩周期是單片機中最基本的時間單位,是為單片機提供時鐘脈沖信號的振蕩源的周期。在一個時鐘周期內(nèi),CPU僅完成一個最基本的動作。51系列單片機中,把一個振蕩周期定義為一個節(jié)拍P。
(2)狀態(tài)周期。狀態(tài)周期是振蕩周期經(jīng)二分頻后得到的,它是單片機的時鐘信號的周期,用S來表示。狀態(tài)周
期由兩個節(jié)拍P1、P2組成,其前半周期對應(yīng)的節(jié)拍是P1,其后半周期對應(yīng)的節(jié)拍是P2,即兩個振蕩周期為一個狀態(tài)周期。
(3)機器周期。單片機把執(zhí)行一條指令的過程劃分為若干個階段,每一階段完成一項規(guī)定操作,完成某一個規(guī)定操作所需的時間稱為一個機器周期。一般情況下,一個機器周期由若干個狀態(tài)周期組成。51系列單片機采用定時控制方式,有固定的機器周期,規(guī)定一個機器周期為6個狀態(tài)周期,依次表示為S1~S6。在一個機器周期內(nèi),CPU可以完成一個獨立的操作。
(4)指令周期。指令周期是CPU執(zhí)行一條指令所需要的時間,一般由若干個機器周期組成。89C51指令系統(tǒng)中有單周期指令、雙周期指令和四周期指令,四周期指令只有乘法和除法指令兩條,其余均為單周期和雙周期指令。
3)?89C51單片機的時序
89C51單片機的每個機器周期包含6個狀態(tài)周期S,每個狀態(tài)S包含2個振蕩周期,即分為2個節(jié)拍,對應(yīng)于2個節(jié)拍時鐘有效時間。因此一個機器周期包含12個振蕩周期,依次表示為S1P1,S1P2,S2P1,S2P2,S3P1,S3P2,…,S6P1,S6P2,每個節(jié)拍持續(xù)一個振蕩周期,每個狀態(tài)周期持續(xù)2個振蕩周期。若采用12MHz的晶振頻率,則每個機器周期為1/12個振蕩周期,等于1μs。單片機執(zhí)行任何一條指令時都可以分為取指令階段和執(zhí)行指令階段。圖1-9列舉了幾種指令的取指令時序。由于用戶看不到內(nèi)部時序信號,故我們可以通過觀察XTAL2和ALE引腳的信號,分析CPU取指令時序。通常每個機器周期中ALE出現(xiàn)兩次有效高電平,第一次出現(xiàn)在S1P2和S2P1期間,第二次出現(xiàn)在S4P2和S5P1期間。ALE信號每出現(xiàn)一次,CPU就進行一次取指令操作,但由于每種指令的字節(jié)
數(shù)和機器周期數(shù)不同,因此取指令操作也隨之不同,但差
異不大。圖1-989C51的取指令執(zhí)行時序
3.復(fù)位電路
89C51單片機通常采用上電自動復(fù)位、按鍵復(fù)位兩種方式,如圖1-10所示。
上電復(fù)位是利用電容充電來實現(xiàn)的,由于電容兩端的電壓不能突變,因此上電瞬間RST/VPD端的電位與Vcc相同,隨著充電的進行,RST/VPD的電位下降,最后被鉗位在0V。只要保證加在RST引腳上的高電平持續(xù)時間大于2個機器周期,便能正常復(fù)位,如圖1-10(a)所示。圖1-10單片機的復(fù)位電路按鍵復(fù)位電路如圖1-10(b)所示。若要復(fù)位,只需將按鈕按下,此時電源Vcc經(jīng)電阻R1、R2分壓,在RST端產(chǎn)生一個復(fù)位高電平。
設(shè)計復(fù)位電路時應(yīng)注意:
(1)要保證加在RST引腳上的高電平持續(xù)2個機器周期以上,才能使單片機有效地復(fù)位。
(2)在實際的應(yīng)用系統(tǒng)中,有些外圍芯片也需要復(fù)位。如果這些復(fù)位端的復(fù)位電平要求與單片機復(fù)位一致,則可以與之相連。
(3)在圖1-10所示的簡單復(fù)位電路中,干擾容易串入復(fù)位端,在大多數(shù)情況下不會造成單片機的錯誤復(fù)位,但會引起內(nèi)部某些寄存器錯誤復(fù)位。這時可在RST引腳上接一個去耦電容。
(4)在應(yīng)用系統(tǒng)中,為了保證復(fù)位電路可靠地工作,常將RC電路先接施密特電路,然后再接入單片機復(fù)位端和外圍電路復(fù)位端。這樣,當(dāng)系統(tǒng)有多個復(fù)位端時,能保證可靠地同步復(fù)位,且具有抗干擾作用。
4.輸入/輸出接口電路
89C51單片機有4個I/O端口,共32根I/O線,4個端口都是雙向口,分別為P0~P3。在訪問片外擴展存儲器時,低8位地址和數(shù)據(jù)由P0口分時傳送,高8位地址由P2口傳送。在無片外擴展存儲器的系統(tǒng)中,這4個口的每一位均可作為雙向的I/O端口使用。
1)?P0口
P0口是一個8位漏極開路型準(zhǔn)雙向I/O端口。圖1-11是P0口的位結(jié)構(gòu)圖,它由1個輸出鎖存器、2個三態(tài)數(shù)據(jù)輸入緩沖器、1個輸出驅(qū)動電路和1個輸出控制電路組成。輸出驅(qū)動電路由一對FET(場效應(yīng)管)組成,其工作狀態(tài)受輸出控制電路的控制;輸出控制電路由一個與門電路、1個反相器和1個多路開關(guān)MUX組成。圖1-11P0口的位結(jié)構(gòu)圖
P0口可作為一般I/O口用,但當(dāng)應(yīng)用系統(tǒng)采用外部總線結(jié)構(gòu)時,它分時用作低8位地址線和8位雙向數(shù)據(jù)總線。其工作狀態(tài)由CPU發(fā)出的控制信號決定。當(dāng)P0口作I/O端口使用時,CPU內(nèi)部發(fā)出控制電平“0”信號,當(dāng)P0口作地址/數(shù)據(jù)總線使用時,CPU內(nèi)部發(fā)出控制電平“1”信號。
P0口作一般I/O端口使用時,CPU內(nèi)部發(fā)出控制電平“0”信號封鎖與門,使輸出上拉場效管V1截止,同時把圖1-11中的多路開關(guān)撥到下方,將輸出鎖存器端與輸出場效應(yīng)管V2的柵極接通。此時,P0口即作一般I/O端口使用。當(dāng)P0口作輸出口輸出數(shù)據(jù)時,內(nèi)部數(shù)據(jù)總線上的信息由寫脈沖鎖存至輸出鎖存器,并通過MUX、下拉場效應(yīng)管V2輸出到P0口的引腳。當(dāng)輸入D?=?0時,Q?=?0,V2導(dǎo)通,P0口的引腳輸出0;當(dāng)輸入D?=?1時,Q?=?1,V2截止,P0口的引腳輸出1。由此可見,內(nèi)部數(shù)據(jù)總線與P0口是同相位的。應(yīng)注意的是,作為輸出口時,由于輸出級為漏級開路電路,引腳上應(yīng)外接上拉電阻(一般為5~10?Ω),才有高電平輸出,才可以驅(qū)動NMOS或其他拉電流負(fù)載。P0口的輸出可以驅(qū)動8個LSTTL負(fù)載。當(dāng)P0口作輸入口輸入數(shù)據(jù)時,端口中有2個三態(tài)輸入緩沖器用于讀操作,實現(xiàn)讀引腳和讀鎖存器(讀端口)兩種操作。
應(yīng)注意的是,作為輸入口時,如果下拉場效應(yīng)管V2導(dǎo)通,則會將輸入的高電平拉為低電平,從而造成誤讀,所以在進行輸入操作前,應(yīng)先向端口輸出鎖存器寫入“1”,以避免鎖存器為0狀態(tài)時,對引腳讀入的干擾。在擴展系統(tǒng)中,P0端口分時作為地址/數(shù)據(jù)總線使用,此時可分為兩種情況:一種是以P0口引腳輸出地址/數(shù)據(jù)信息。這時CPU內(nèi)部發(fā)出高電平的控制信號,打開與門,同時使多路開關(guān)MUX把CPU內(nèi)部地址/數(shù)據(jù)總線反相后與輸出驅(qū)動場效應(yīng)管V2的柵極接通。V1和V2兩個FET管處于反相,共同構(gòu)成了推拉式的輸出電路,其負(fù)載能力大大增強。另一種情況由P0口輸入數(shù)據(jù),此時輸入的數(shù)據(jù)直接從引腳通過下面的一個三態(tài)輸入緩沖器進入內(nèi)部總線。實際應(yīng)用中,P0口絕大多數(shù)情況下都作為單片機系統(tǒng)的地址/數(shù)據(jù)總線使用,比一般I/O端口的使用簡單。
P0口的輸出級與P1~P3口的輸出級在結(jié)構(gòu)上是不相同的,因此它們的負(fù)載能力和接口要求也不相同。P0口的每一位輸出可驅(qū)動8個LSTTL負(fù)載。P0口既可作通用I/O使用,也可作地址/數(shù)據(jù)總線使用。當(dāng)作為通用I/O口輸出時,輸出級是開漏電路,當(dāng)它驅(qū)動NMOS或其他拉電流負(fù)載時,需要外接上拉電阻才有高電平輸出;當(dāng)作為地址/數(shù)據(jù)總線時,無需外接上拉電阻,此時不能作通用I/O口使用。
2)?P1口
P1是一個帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,其位結(jié)構(gòu)如圖1-12所示。P1口在結(jié)構(gòu)上與P0口的區(qū)別是:沒有多路開關(guān)MUX和控制電路部分,輸出驅(qū)動電路部分與P0也不相同,只有一個FET場效應(yīng)管,同時內(nèi)部帶上拉電阻,此電阻與電源相連。上拉電阻是一個作為電阻性元件使用的場效應(yīng)管FET,稱為負(fù)載場效應(yīng)管。圖1-12P1口的位結(jié)構(gòu)圖
Pl口可作通用雙向I/O口用,每1位均可獨立作為I/O口。當(dāng)P1口輸出高電平時,能向外部提供拉電流負(fù)載,因此不必再外接上拉電阻。當(dāng)端口用作輸入時,和P0口一樣,為了避免誤讀,必須先向?qū)?yīng)的輸出鎖存器寫入“l(fā)”,使FET截止,然后再讀端口引腳。由于片內(nèi)輸入電阻較大,約為20~40kΩ,所以不會對輸入的數(shù)據(jù)產(chǎn)生影響。
3)?P2口
圖1-13是P2口的位結(jié)構(gòu)圖。P2口的位結(jié)構(gòu)中上拉電阻的結(jié)構(gòu)與P1口相同,但比P1口多了一個輸出轉(zhuǎn)換多路控制部分。當(dāng)多路開關(guān)MUX倒向鎖存器輸出Q端時,構(gòu)成了一個準(zhǔn)雙向I/O口,此時P2口作通用I/O使用。P2引腳的數(shù)據(jù)與內(nèi)部總線相同,MUX與Q端連通,P2.x=D。圖1-13P2口的位結(jié)構(gòu)圖當(dāng)系統(tǒng)擴展片外程序存儲器時,多路開關(guān)MUX在CPU的控制下,倒向內(nèi)部地址線一端,此時P2口僅可用于輸出高8位地址。
在使用P2口時應(yīng)注意:
(1)在不接外部存儲器或片外存儲器容量小于256B的系統(tǒng)中,可以使用“MOVX@Ri”類指令訪問片外存儲器,僅由P0口輸出低8位地址,而P2口引腳上的內(nèi)容在整個訪問期間不會變化,此時P2口仍可作通用I/O口使用。
(2)當(dāng)應(yīng)用系統(tǒng)擴展有大于256B而小于64?KB的外部存儲器,且P2口用于輸出高8位地址時,由于訪問外部存儲器的操作是連續(xù)不斷的,P2口要不斷輸出高8位地址,因此此時P2口不能再作通用I/O口使用。
(3)在外部擴充的存儲器容量大于256B而小于64?KB時,可以采用軟件方法利用P1~P3中的某幾位口線輸出高8位地址,而保留P2口中的部分或全部口線作通用I/O口使用。
4)?P3口
P3口的位結(jié)構(gòu)見圖1-14。它是一個多功能的端口。P3口的輸出驅(qū)動電路部分及內(nèi)部上拉電阻結(jié)構(gòu)與P1口相同,比P1口多了一個第二功能控制電路(由一個與非門和一個輸入緩沖器組成)。P3口是一個多功能口。當(dāng)“第二輸出功能”端保持高電平時,與非門打開,P3口作為通用I/O口使用。輸出數(shù)據(jù)時,鎖存器輸出的信號可以通過與非門經(jīng)V輸出到P3口的引腳。輸入時,引腳上的數(shù)據(jù)將通過兩個相串的三態(tài)緩沖器在讀引腳選通信號控制下進入內(nèi)部數(shù)據(jù)總線。這就是第一功能,此功能同P1口,每1位均可獨立作為I/O口。圖1-14P3口的位結(jié)構(gòu)圖
P3口除了作通用I/O使用外,它的各位還具有第二功能,第二功能詳見表1-8。當(dāng)P3口某一位用于第二功能作輸出時,該位的鎖存器應(yīng)置“l(fā)”,打開與非門,第二功能端上的內(nèi)容通過“與非門”和V送至端口引腳。當(dāng)作第二功能輸入時,端口引腳的第二功能信號通過第一個緩沖器送到第二輸入功能線上。
使用時注意:無論P3口用作通用輸入口還是第二功能輸入口,相應(yīng)位的輸出鎖存器和第二輸出功能端都應(yīng)置“l(fā)”,使V截止。另外,每1位具有的兩個功能不能同時使用。1.3.5單片機應(yīng)用系統(tǒng)的開發(fā)過程
單片機應(yīng)用系統(tǒng)是以單片機為核心的智能控制系統(tǒng),由于應(yīng)用目標(biāo)不同,因此其構(gòu)成、規(guī)模、功能、復(fù)雜程度等均不相同。但不管怎么變化,其設(shè)計方法和開發(fā)過程是一樣的。單片機應(yīng)用系統(tǒng)的開發(fā)過程一般要經(jīng)歷如圖1-15所示的開發(fā)過程。圖1-15單片機系統(tǒng)的開發(fā)過程
1.明確任務(wù)
明確設(shè)計任務(wù)是系統(tǒng)設(shè)計的第一步,應(yīng)詳細(xì)了解控制對象的結(jié)構(gòu)、性能、特點和控制要求,深入認(rèn)真地進行分析,根據(jù)適用場合、工作環(huán)境、具體用途考慮系統(tǒng)的可靠性、通用性、可維護性以及成本等,再根據(jù)用戶的具體要求,分析并提出符合要求的性能技術(shù)指標(biāo)。
2.軟件和硬件的功能劃分
單片機系統(tǒng)由軟件和硬件兩部分組成。有些功能既可以用軟件來實現(xiàn),也可以用硬件來實現(xiàn)。多用硬件雖可以提高系統(tǒng)的實時性和可靠性,但同時會帶來成本的增加。相反多用軟件,優(yōu)點是可以降低成本,但會帶來系統(tǒng)的復(fù)雜性。因此,必須綜合分析,根據(jù)實際要求來確定哪些功能用硬件實現(xiàn),哪些功能用軟件實現(xiàn),根據(jù)系統(tǒng)要求畫出單片機要實現(xiàn)控制的系統(tǒng)功能框圖。
3.總體設(shè)計
1)系統(tǒng)方案設(shè)計
方案設(shè)計就是為系統(tǒng)建立一個框架結(jié)構(gòu),主要包括以下幾點:
(1)進行必要的分析計算,確定合適的控制方案和算法。
(2)確定系統(tǒng)的硬件配置,即根據(jù)功能的劃分,確定外圍電路的配置和接口電路方案,畫出各部分的功能框圖。同時根據(jù)設(shè)計要求,選擇性價比合適的單片機芯片和其他電子元器件。選擇時要考慮精度、速度、容量、可靠性、貨源和成本等。
2)硬件設(shè)計
硬件設(shè)計是根據(jù)總體設(shè)計的要求,設(shè)計系統(tǒng)的硬件電路原理圖,并初步設(shè)計印刷電路板等。其主要內(nèi)容包括單片機系統(tǒng)的擴展及系統(tǒng)配置兩部分。在系統(tǒng)擴展及配置時一定要注意以下幾個原則:
(1)盡量選擇通用電路。
(2)系統(tǒng)的擴展及配置要留一定的余地。
(3)硬件結(jié)構(gòu)要結(jié)合軟件考慮。
(4)適當(dāng)考慮CPU的總線驅(qū)動能力和抗干擾設(shè)計。
3)軟件設(shè)計
軟件設(shè)計的任務(wù)是在總體設(shè)計和硬件設(shè)計的基礎(chǔ)上確定程序的結(jié)構(gòu),分配內(nèi)部存儲器的資源,并進行主程序及各模塊程序的設(shè)計,最終完成整個系統(tǒng)的控制程序。軟件設(shè)計的內(nèi)容包括系統(tǒng)定義和軟件結(jié)構(gòu)設(shè)計。系統(tǒng)定義就是在定義各輸入/輸出端口地址及工作方式后,分配主程序、中斷程序、表格、堆棧等的存儲空間。在軟件結(jié)構(gòu)設(shè)計方法上通常采用模塊化程序設(shè)計與自頂向下逐步求精的程序設(shè)計方法。
4.系統(tǒng)仿真調(diào)試
系統(tǒng)的仿真調(diào)試可分為硬件仿真調(diào)試和軟件仿真調(diào)試。在軟件設(shè)計時可以利用Keil軟件進行匯編、連接執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯誤和邏輯錯誤并加以排除和糾正。在軟件設(shè)計完成后,可以利用Proteus軟件進行仿真來觀察系統(tǒng)執(zhí)行的效果,找出設(shè)計中存在的問題。
5.系統(tǒng)調(diào)試
完成系統(tǒng)仿真后,把用Protel繪制的PCB印刷電路板圖交給電路板生產(chǎn)商進行制板。完成制板后,把所有的電子元器件在電路板上進行組裝和焊接,然后使用編程器把程序燒錄到單片機芯片中進行系統(tǒng)聯(lián)調(diào),直到調(diào)試結(jié)果符合設(shè)計
要求。
為了學(xué)習(xí)方便和節(jié)約成本,在單片機教學(xué)中通常采用一些仿真軟件進行試驗。學(xué)生也可以通過單片機多功能仿真開發(fā)板進行一些實驗。
1.4項目實施
系統(tǒng)整體設(shè)計要求:在單片機的P0.0口上接一個發(fā)黃
色光的LED燈,編寫程序讓LED燈不停地閃爍,時間間隔為0.2秒。
1.4.1項目硬件設(shè)計
LED燈閃爍控制系統(tǒng)的結(jié)構(gòu)比較簡單,其硬件電路模塊包括電源電路、時鐘電路、按鍵復(fù)位電路和LED燈接口電路,硬件原理圖見1-16所示。圖1-16閃爍LED燈電路原理圖1.4.2項目軟件設(shè)計
由硬件電路可知,要實現(xiàn)LED燈的點亮,必須要求P0.0引腳輸出低電平才能實現(xiàn);要讓LED燈熄滅,必須使P0.0引腳輸出高電平才能實現(xiàn)。因此可以用L1?=?0指令實現(xiàn)對該引腳輸出低電平,用L1?=?1指令實現(xiàn)對該引腳輸出高電平。那么又如何實現(xiàn)閃爍間隔圖1-17LED燈閃爍流程圖
0.2s呢?這里采用延時程序?qū)崿F(xiàn)。把系統(tǒng)要實現(xiàn)的功能搞清楚后,就可以編寫程序了。編寫程序的思路如程序流程圖
1-17所示。圖1-17LED燈閃爍流程圖根據(jù)程序流程圖,寫出單片機C語言的源程序:
#include<reg51.h>
sbitL1=P0^0;
voiddelay02s(void) //延時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項目綜合仿真與調(diào)試
1.使用KeilC51編譯源程序
KeilC51是51系列單片機的開發(fā)系統(tǒng),利用它可以編輯、編譯、匯編、連接C程序和匯編程序,從而可以生成在單片機中進行燒錄的?.hex文件。
本項目的軟件編譯過程如下:
【步驟1】打開μVision2,開發(fā)界面如圖1-18所示。
該界面包括文件工具欄、編譯工具欄、工程窗口以及輸出
窗口等。圖1-18Keil軟件界面
【步驟2】新建一個工程,如圖1-19所示,選擇“Project”>“NewProject”菜單,在彈出的保存窗口中選擇
工程文件的保存位置,填寫文件名,單擊“保存”按鈕。圖1-19建立工程項目
【步驟3】在彈出的CPU選擇對話框中選擇單片機芯
片型號(此處選AT89C51),如圖1-20所示,然后單擊“確定”按鈕。圖1-20選擇單片機芯片
【步驟4】單擊文件工具欄中的新建文件按鈕,在編輯區(qū)域編輯C語言源程序,編輯完成后,單擊文件工具欄中的保存文件按鈕,將源程序保存為“.c”形式的文件,如圖1-21所示。圖1-21建立編輯與保存文件
【步驟5】在工程窗口的“SourceGroup1”文件夾上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“AddFilestoGroup'SourceGroup1'”選項,在打開的對話框中選擇Led.c源文件,并單擊“Add”按鈕將其加入,整個過程如圖1-22所示。圖1-22在工程中添加源文件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年蓄電池組維護技術(shù)服務(wù)協(xié)議范本
- 城市燃?xì)夤?yīng)招投標(biāo)報名表
- 庫位管理與庫存控制
- 2024年香港企業(yè)間融資合同范本版B版
- 臨時教室電視租賃合同
- 建筑行業(yè)勞資管理實施辦法
- 產(chǎn)業(yè)基地租賃合同范本
- 施工協(xié)議書與施工溝通
- 私車賣車協(xié)議
- 鐵路工程外委施工協(xié)議
- 2023-2024學(xué)年高考英語專項真題練習(xí)-名詞性從句(附解析)
- 設(shè)備維修轉(zhuǎn)正述職報告
- 游戲發(fā)行計劃書
- 2023通信中級傳輸與接入(有線)實務(wù)知識點大匯總
- 半導(dǎo)體自動測試設(shè)備(ATE)全球市場、份額、市場規(guī)模、趨勢、行業(yè)分析報告2024-2030年
- 領(lǐng)導(dǎo)干部必須堅守廉潔底線課件
- 礦山三合一報告
- pet無紡布生產(chǎn)工藝
- 試驗樣機項目總結(jié)匯報
- 2022版新課標(biāo)下如何立足課程教學(xué)做好幼小銜接解讀
- 廣東省汕尾市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測化學(xué)試卷(含答案解析)
評論
0/150
提交評論