版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章單片機概述1第1章單片機概述1整體概述THEFIRSTPARTOFTHEOVERALLOVERVIEW,PLEASESUMMARIZETHECONTENT第一部分2整體概述第一部分2單片機又稱為微控制器(MicroControllerUnit,MCU),是微型計算機的一個非常重要的分支。自從20世紀70年代問世以來,就以其體積小、功能全、可靠性高、控制功能強、性價比高等特點在智能儀表、機電一體化、實時控制、家用電器、信息和通信產(chǎn)品等各個領(lǐng)域得到了廣泛的應用,對各行各業(yè)的改造和產(chǎn)品的更新?lián)Q代起著非常重要的推動作用,對人們的生活產(chǎn)生了深刻的影響。3單片機又稱為微控制器(MicroControllerUn本章首先介紹了單片機的基本結(jié)構(gòu)與特點、單片機與嵌入式系統(tǒng)和單片機應用的特點,然后簡述了單片機的發(fā)展趨勢,為了讓讀者對MCS-51系列單片機有一個較全面的了解,還介紹了MCS–51系列單片機的基本概況和MCS–51系列的最新發(fā)展。4本章首先介紹了單片機的基本結(jié)構(gòu)與特點、單片機與嵌入式系統(tǒng)和單1.1單片機與嵌入式系統(tǒng)單片機是將中央處理器(CPU)、隨機存儲器(RAM)、只讀存儲器(ROM或EPROM)、中斷系統(tǒng)、定時器/計數(shù)器和一些輸入/輸出接口等微型計算機的部件都集成在一個芯片上的微控制器(Microcontroller)。中央處理器包括運算器、控制器和寄存器3個主要部分,它是單片機的核心。51.1單片機與嵌入式系統(tǒng)單片機是將中央處理器(CPU)、隨機1.1.1單片機的基本結(jié)構(gòu)與特點80C51單片機的基本結(jié)構(gòu)與特點:程序存儲器和數(shù)據(jù)存儲器分開I/O端口多功能分時復用片內(nèi)特殊功能寄存器和工作寄存器組片內(nèi)有全雙工串行通信接口獨立的位處理器61.1.1單片機的基本結(jié)構(gòu)與特點80C51單片機的基本結(jié)構(gòu)1.1.2單片機與嵌入式系統(tǒng)1.嵌入式系統(tǒng)的主要特點嵌入式系統(tǒng)的主要特點體現(xiàn)在兩個方面:(1)目的性和針對性。(2)實時性。71.1.2單片機與嵌入式系統(tǒng)1.嵌入式系統(tǒng)的主要特點72.典型應用嵌入式系統(tǒng)的典型應用主要有以下幾個方面:(1)過程控制。(2)網(wǎng)絡(luò)通信。例如,在程控交換機、路由器、橋接器、集線器、Modem以及手機等設(shè)備和部件上的應用。(3)智能儀器。例如,在示波器、醫(yī)療儀器上的應用。(4)消費電子。例如,在掌上電腦、數(shù)字電視、游戲機、洗衣機等家用電器上。(5)計算機外部設(shè)備。例如在打印機、掃描儀、磁盤驅(qū)動器以及終端等設(shè)備上。(6)軍事電子。例如,在雷達、電子對抗、坦克、戰(zhàn)機以及戰(zhàn)艦等方面的應用。82.典型應用嵌入式系統(tǒng)的典型應用主要有以下幾個方面:81.1.3單片機應用的特點單機應用的領(lǐng)域主要有:(1)智能產(chǎn)品(2)智能儀表(3)測控系統(tǒng)(4)數(shù)控系統(tǒng)(5)智能接口91.1.3單片機應用的特點單機應用的領(lǐng)域主要有:9多機應用單片機的多機應用系統(tǒng)可分為功能彌散系統(tǒng)、并行多處理機系統(tǒng)以及局部網(wǎng)絡(luò)系統(tǒng)。(1)功能彌散系統(tǒng)(2)并行多機處理系統(tǒng)(3)局部網(wǎng)絡(luò)系統(tǒng)10多機應用單片機的多機應用系統(tǒng)可分為功能彌散系統(tǒng)、并行多處理機1.2單片機的發(fā)展趨勢單片機的發(fā)展推動了應用系統(tǒng)的發(fā)展,應用系統(tǒng)的發(fā)展又反過來對單片機提出了更高的要求,從而促進單片機的發(fā)展。目前,單片機正朝著功能更強、速度更快、功耗更低的方向發(fā)展。111.2單片機的發(fā)展趨勢單片機的發(fā)展推動了應用系統(tǒng)的發(fā)展,應1.2.1CPU的發(fā)展采用雙CPU結(jié)構(gòu),以提高處理能力。增加數(shù)據(jù)總線的寬度,單片機內(nèi)部采用16位數(shù)據(jù)總線,其數(shù)據(jù)處理能力明顯優(yōu)于8位單片機。采用流水線結(jié)構(gòu),指令以隊列形式出現(xiàn)在CPU中,且有很快的處理速度。采用串行數(shù)據(jù)總線結(jié)構(gòu)。121.2.1CPU的發(fā)展采用雙CPU結(jié)構(gòu),以提高處理1.2.2存儲器的發(fā)展存儲器的發(fā)展主要體現(xiàn)在以下三個方面:1.存儲容量加大2.片內(nèi)使用EEPROM或Flash3.程序保密化131.2.2存儲器的發(fā)展存儲器的發(fā)展主要體現(xiàn)在以下三個方面:1.2.3I/O端口多功能化隨著集成度的不斷提高,把眾多的外圍功能器件集成在片內(nèi)已經(jīng)具備了充分的條件。這也是單片機以后發(fā)展的重要趨勢。單片機除了集成有一般必須具有的ROM、RAM、定時器/計數(shù)器、中斷系統(tǒng)外,隨著單片機擋次的提高,以適應檢測、控制功能更高的要求,片內(nèi)集成的器件通常還有A/D、D/A、LED/LCD顯示驅(qū)動器、DMA控制、PWM(脈寬調(diào)制器)、PLC(鎖相環(huán)控制)、PCA(可編程計數(shù)陣列)、WDT(看門狗)等。141.2.3I/O端口多功能化隨著集成度的不斷提高,把1.2.4低功耗和寬電壓范圍COMS電路為實現(xiàn)低電壓、低功耗提供了條件。在8位單片機中已有二分之一的產(chǎn)品實現(xiàn)了COMS化,并設(shè)有空閑和掉電兩種工作方式。采用CHMOS制作工藝使單片機集HMOS的高速、高集成度和CMOS的低功耗技術(shù)為一體,使單片機的功耗進一步降低,適應的電壓范圍更寬。151.2.4低功耗和寬電壓范圍COMS電路為實現(xiàn)低電壓、低功1.2.5采用RISC體系結(jié)構(gòu)采用RISC(精簡指令系統(tǒng)計算機)的體系結(jié)構(gòu),可以使指令系統(tǒng)中的絕大部分指令成為單周期指令。提高指令的運行速度.目前,在一些采用RISC體系結(jié)構(gòu)的單片機中已達到了在一個時鐘周期內(nèi)執(zhí)行一條指令的運行速度。161.2.5采用RISC體系結(jié)構(gòu)采用RISC(精簡指令系統(tǒng)計1.2.6總線串行化采用串行接口雖然較之并行接口在數(shù)據(jù)傳輸速度上有所減緩,但由于串行傳輸速度的不斷提高,加之單片機面對對象的有限速度要求,使得單片機應用系統(tǒng)中的串行擴展技術(shù)仍然獲得很大的發(fā)展。隨著外圍電路串行接口技術(shù)的發(fā)展,以及單片機串行擴展接口設(shè)置的普遍化、高速化,以及由于在片F(xiàn)lashMemory使可以免去外部擴展EPROM等因素,從而導致單片機的并行接口技術(shù)日趨衰退。目前許多原來帶有并行總線的單片機系列,都推出了不少刪去了并行總線的非總線單片機。171.2.6總線串行化采用串行接口雖然較之并行接口在數(shù)據(jù)傳輸1.3MCS-51系列及其部分兼容機簡介目前已投放市場的主要單片機產(chǎn)品多達70多個系列,500多個品種。這還不包括那些系統(tǒng)或整機商定制的專用單片機以及針對專門業(yè)務、專門市場的單片機品種。181.3MCS-51系列及其部分兼容機簡介目前已投放市場的主1.3.1目前較有影響的單片機種類市場上較有影響的單片機有如下一些系列:Intel公司生產(chǎn)的MCS-51和MCS-96系列。Motorola公司生產(chǎn)的68HCXX系列。Microchip公司生產(chǎn)的16C5X/6X/7X/8X系列。Texas公司生產(chǎn)的MSP430FXX系列。191.3.1目前較有影響的單片機種類市場上較有影響的單片機有1.3.2MCS–51系列及其部分兼容單片機MCS-51系列單片機是國內(nèi)引進最早從而最為普及的單片機系列,具有種類多、應用廣和可替換性強的特點。201.3.2MCS–51系列及其部分兼容單片機MCS-51系1.Intel公司的MCS-51系列Intel公司于1980年推出的MCS-51奠定了嵌入式應用單片微型計算機的經(jīng)典CISC體系結(jié)構(gòu)。MCS-51系列的主要產(chǎn)品按照功能可以劃分為如下類型,(1)基本型(2)增強型(3)低功耗型(4)高級語言型(5)A/D型(6)DMA型(7)多并行接口型211.Intel公司的MCS-51系列Intel公司于19802.ATMEL公司的AT89系列ATMEL公司率先將獨特的Flash存儲技術(shù)注入MCS-51單片機中,其推出的AT89系列單片機,在世界電子行業(yè)中引起了極大的反響,在國內(nèi)也受到廣大用戶的歡迎。Flash存儲器的使用加速了單片機技術(shù)的發(fā)展,基于Flash存儲器的ISP/IAP(在系統(tǒng)可編程/在現(xiàn)場可編程)技術(shù)極大地改變了單片機應用系統(tǒng)的結(jié)構(gòu)模式以及開發(fā)和運行條件,是8051單片機技術(shù)發(fā)展的一次重大飛躍。222.ATMEL公司的AT89系列ATMEL公司率先將獨特的FAT89系列單片機的特點(1)內(nèi)部含電可擦寫閃速只讀存儲器—Flash(2)與80C51引腳兼容(3)可反復重新編程(4)可反復進行系統(tǒng)實驗23AT89系列單片機的特點(1)內(nèi)部含電可擦寫閃速只讀存儲器—本章結(jié)束!謝謝!!!24本章結(jié)束!24第2章MCS-51單片機的結(jié)構(gòu)和時序
25第2章MCS-51單片機的結(jié)構(gòu)和時序252.1關(guān)于MCS-51系列MCS-51系列單片機是Intel公司開發(fā)的一種應用非常廣泛的一種單片機,它集成有強大的片內(nèi)功能和強大的指令系統(tǒng),得到了廣大用戶的好評。MCS-51系列單片機有多種不同型號,常見的型號有:8031、8051、8751、80C31、80C51等,它們都是8位機單片機,它們的內(nèi)部結(jié)構(gòu)可能有一些不同,但它們的指令系統(tǒng)完全兼容。下表2-1是幾種常見MCS-51系列單片機的型號及它們的異同。262.1關(guān)于MCS-51系列MCS-51系列單片機2.1關(guān)于MCS-51系列表2-1幾種常見MCS-51系列單片機的型號器件型號制造技術(shù)常見封裝形式片內(nèi)程序存儲器片內(nèi)數(shù)據(jù)存儲器8031AHHMOSDIP-40無128B8051AHHMOSDIP-404KB-ROM128B8751HHMOSDIP-404KB-EPROM128B80C51CHMOSDIP-404KB-ROM128B80C31CHMOSDIP-40無128B8052AHCHMOSDIP-408KB-ROM256B8032AHCHMOSDIP-40無256B272.1關(guān)于MCS-51系列表2-1幾種常見MCS-51MCS-51系列單片機的主要特點:采用單+5V供電,40個引腳能夠兼容(只是31號引腳略有區(qū)別);8位字長即數(shù)據(jù)總線寬度8位,為8位機;片內(nèi)集成了振蕩器和時鐘電路(用戶一般只須增加很少的外圍電路);具有64KB的外部數(shù)據(jù)存儲器與外部程序存儲器的尋址空間(最大可達16位地址線);具有32條雙向I/O線;具有2個16位定時器/計數(shù)器(8052/8032具有3個);具有全雙工串行口,可同時收發(fā)數(shù)據(jù);具有128個位尋址單元;28MCS-51系列單片機的主要特點:采用單+5V供電,40個引2.2MCS-51單片機結(jié)構(gòu)及原理2.2.1MCS-51單片機的基本結(jié)構(gòu)2.2.2MCS-51單片機的基本原理292.2MCS-51單片機結(jié)構(gòu)及原理2.2.1MCS-2.2.1MCS-51單片機的基本組成MCS-51系列單片機都包括以下幾個部分:中央處理器CPU內(nèi)部數(shù)據(jù)存儲器RAM內(nèi)部程序存儲器ROM(個別型號不帶)輸入/輸出接口電源等302.2.1MCS-51單片機的基本組成MCS-51系列單片中央處理器CPU
中央處理器是單片機的核心,包括運算器和控制器兩大部分。運算器主要是用來完成算術(shù)邏輯運算等功能。它由算術(shù)邏輯單元(ALU)、位處理器、累加器ACC、寄存器B、暫存器等部分組成??刂破饔啥〞r和控制邏輯、內(nèi)部振蕩電路OSC、指令寄存器及其譯碼器、程序計數(shù)器PC、程序和數(shù)據(jù)寄存器、程序狀態(tài)字寄存器PSW、RAM地址寄存器、數(shù)據(jù)指針DPTR和堆棧指針SP等部分組成。31中央處理器CPU中央處理器是單片機的核心,包括運算器和控內(nèi)部數(shù)據(jù)存儲器RAM存儲器是單片計算機中用來存放程序或數(shù)據(jù)的部件。在單片機中,存儲器類型按功能可以分為只讀和隨機存取存儲器兩大類。32內(nèi)部數(shù)據(jù)存儲器RAM存儲器是單片計算機中用來存放程序或數(shù)據(jù)的MCS-51系列單片機內(nèi)存儲器的組織
MCS-51系列單片機的存儲器采用了三段彼此獨立的地址空間來組織。256B片內(nèi)數(shù)據(jù)存儲器地址空間;64KB片外數(shù)據(jù)存儲器地址空間;64KB儲蓄存儲器地址空間(片內(nèi)和片外地址空間有部分重疊);
33MCS-51系列單片機內(nèi)存儲器的組織MCS-51系程序存儲器地址空間
在8051單片機中,程序存儲器的地址范圍為:0000H—FFFFH.因為它有4KB的片內(nèi)ROM,所以片內(nèi)ROM和片外ROM有4KB的地址是重疊的。其重疊地址范圍為:0000H—0FFFH,當EA為高電平時,CPU的先從片內(nèi)ROM中取指令,直到超出它的地址范圍(0000H—0FFFH),再從外部ROM中取指令。當EA為低電平時,CPU只從外部ROM中取指令。
34程序存儲器地址空間在8051單片機中,程序存儲器的地址范圍8051單片機內(nèi)幾個特殊的地址單元及作用
地址作用0000H程序入口,系統(tǒng)復位時PC指向此處0003H外部中斷0入口000BHT0溢出中斷入口0013H外中斷1入口001BHT1溢出中斷入口0023H串口中斷入口358051單片機內(nèi)幾個特殊的地址單元及作用地址作用0000H數(shù)據(jù)存儲器的地址空間在8051單片機中,其數(shù)據(jù)存儲器分為兩個獨立的部分:片內(nèi)RAM和片外RAM。片內(nèi)RAM的地址范圍為:00H-FFH片外RAM的地址范圍為:0000H—FFFFH在MCS-51系列單片機內(nèi)部RAM中,存儲器分為四個區(qū)域,即工作寄存器區(qū),位尋址區(qū),用戶RAM和堆棧區(qū),特殊功能寄存器區(qū)(SFR)。36數(shù)據(jù)存儲器的地址空間在8051單片機中,其數(shù)據(jù)存儲器分為兩8051單片機存儲器的組織結(jié)構(gòu)圖
60KB外部ROM4KB內(nèi)部EA=14KB外部EA=0FFFFH1000H0FFFH0000H0000H0FFFH64KB外部RAMFFFFH0000H特殊功能寄存器SFR00H7FH80HFFH1FH20H2FH30HRAM位尋址區(qū)工作寄存器區(qū)378051單片機存儲器的組織結(jié)構(gòu)圖FFFFH1000H0FFMCS-51工作寄存器區(qū)工作寄存器區(qū)共32B,地址范圍為:00H—1FH;位尋址區(qū)共16B,地址范圍為:20H—2FH;用戶RAM和堆棧區(qū)的地址空間有80B,地址范圍為:30H—7FH;其他128B為特殊功能寄存器區(qū),其地址范圍為:80H—FFH。另外,32B工作寄存器區(qū)分為四組,如表2-2所示。其中的每個組都包含8個字節(jié),即8個寄存器(R0—R7)。用戶在使用時,只能同時使用其中的一組。
38MCS-51工作寄存器區(qū)工作寄存器區(qū)共32B,地址范圍為:0工作寄存器的分組及選擇控制名稱RS0RS1地址范圍R00000H—07HR10108H—0FHR21010H—17HR31118H—1FH注:RS0和RS1為程序狀態(tài)字(PSW)的D3和D4位39工作寄存器的分組及選擇控制名稱RS0RS1地址范圍R000位尋址區(qū)位地址分配
位尋址區(qū)字節(jié)地址位地址D7D6D5D4D3D2D1D02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00H40位尋址區(qū)位地址分配位尋址區(qū)字節(jié)地址位地址D7D6D5D4D8051單片機的特殊功能寄存器
418051單片機的特殊功能寄存器41特殊功能寄存器1)ACC:累加器(8位),通常用A表示。實際上它就是一個寄存器,因為常用于加法運算,所以稱它為加法器。累加器是單片機中最重要的也使用最頻繁的寄存器之一,大部分的運算類指令都要用到它。2)B:乘法寄存器(8位)。主要用于乘、除法運算,用于存放乘數(shù)或除數(shù)。在不做乘除法時,也可以做普通寄存器使用。3)PSW:程序狀態(tài)字(8位)。這是一個很重要的寄存器,用于存放CPU工作狀態(tài),通過PSW,我們可以了解CPU的當前工作(執(zhí)行程序)狀態(tài),并據(jù)此作出相應的處理。
42特殊功能寄存器1)ACC:累加器(8位),通常用A表示。實特殊功能寄存器4)DPTR(DPH、DPL):數(shù)據(jù)指針(16位)。通常用它來訪問外部數(shù)據(jù)存儲器中的任一單元。有時也可以用作通用寄存器。5)P0、P1、P2、P3:是四個并行輸入/輸出口的寄存器。
6)SP:堆棧指針(8位),是一個8位的專用寄存器。在單片機中,可以在RAM中構(gòu)造這樣一個特殊區(qū)域,用來存放數(shù)據(jù),這個區(qū)域存放數(shù)據(jù)的規(guī)則就是“先進后出,后進先出”,我們稱之為“堆?!薄?/p>
43特殊功能寄存器4)DPTR(DPH、DPL):數(shù)據(jù)指針(16堆棧舉例在使用堆棧時,當入棧操作時,SP先加1,然后執(zhí)行數(shù)據(jù)存儲操作。例如:開始時SP=34H,在單片機執(zhí)行PUSHA指令后,SP=35H,此時,存儲器地址34H中存放的就是累加器A的值(A=20H)。圖2—3堆棧指針的示意圖SPSP執(zhí)行指令后20H36H35H34H32H33H37H36H35H34H32H33H37H執(zhí)行指令前
44堆棧舉例在使用堆棧時,當入棧操作時,SP先加1,然后執(zhí)行數(shù)據(jù)2.3MCS-51單片機的引腳及其片外總線結(jié)構(gòu)
2.3.1
MCS-51引腳功能2.3.2片外三總線結(jié)構(gòu)2.3.3MCS-51單片機并行口結(jié)構(gòu)
452.3MCS-51單片機的引腳及其片外總線結(jié)構(gòu)2.3.2.3.1MCS-51引腳功能P1.7P1.0P1.1P1.2P1.4P1.6P1.3P1.5RST/VPDP3.0P3.1P3.2P3.4P3.6P3.3P3.5P3.7XTAL2XTAL1VSS805181235746910111214161315171819203340393836343735323130292725282624232221P0.7P0.0P0.1P0.2P0.4P0.6P0.3P0.5P2.0P2.7P2.6P2.5P2.3P2.1P2.4P2.2EA/VPPALE/PROGPSENRD,WR,T1,T0,INT1,INT0,RXD,TXD,VCCMCS-51單片機引腳功能分布圖
462.3.1MCS-51引腳功能P1.7P1.0P1.1P1單片機的時鐘電路
8051XTAL1XTAL2C1C2(a)內(nèi)部外部振蕩方式8051XTAL1XTAL2外部振蕩信號帶上拉電阻的TTL門(c)CHMOS型芯片外部振蕩方式8051XTAL2XTAL1外部振蕩信號TTL門Vcc(b)HMOS型芯片外部振蕩方式47單片機的時鐘電路
8051XTAL1XTAL2C1C2.3.2片外三總線結(jié)構(gòu)
單片機的管腳可以構(gòu)成三總線結(jié)構(gòu):地址總線數(shù)據(jù)總線控制總線
482.3.2片外三總線結(jié)構(gòu)單片機的管腳可以構(gòu)成三總線結(jié)構(gòu):地址總線(AB)
地址總線主要是在單片機擴展時,用于地址信號的傳輸??梢酝ㄟ^地址選通訪問外部存儲器或設(shè)備的內(nèi)容。MCS-51單片機地址總線寬度為16位,因此其能訪問的外部存儲器的地址范圍是0000H—FFFFH,即可達64KB。在單片機中,由P0口經(jīng)地址鎖存器提供16位地址總線的低8位地址(A7-A0),由P2口直接提供16位地址總線的高8位地址(A15—A8)49地址總線(AB)地址總線主要是在單片機擴展時,用于地址信號數(shù)據(jù)總線
MCS-51單片機是8位單片機,其數(shù)據(jù)總線的寬度位8位,由P0口提供。50數(shù)據(jù)總線MCS-51單片機是8位單片機,其數(shù)據(jù)總線的寬度位控制總線在MCS-51單片機中,控制信號主要有:RST,EA,WR,RD,ALE及PSEN等。這些信號在單片機擴展時非常重要,統(tǒng)稱為控制總線。51控制總線在MCS-51單片機中,控制信號主要有:RST,EA單片機的三總線
8051PSENALEEAP2.7P2.0…A15A8…8P0.7P0.0…A7A0…地址鎖存器D7D0…88地址總線RDWR數(shù)據(jù)總線控制總線52單片機的三總線8051PSENALEEAP2.7P2.0…2.3.3MCS-51單片機并行口結(jié)構(gòu)
532.3.3MCS-51單片機并行口結(jié)構(gòu)53P0口結(jié)構(gòu)P0.X鎖存器DCLP0口引腳圖2--7P0口1位結(jié)構(gòu)QQ寫鎖存器內(nèi)部總線Vcc讀鎖存器讀引腳MUX控制地址/數(shù)據(jù)54P0口結(jié)構(gòu)P0.X鎖存器DCLP0口引腳圖2--7P0P0口的特點P0口的特點:1)P0口可作通用I/O口使用,又可作地址/數(shù)據(jù)總線口;2)作地址/數(shù)據(jù)總線時,P0是一真正雙向口,而作通用I/O口時,只是一個準雙向口;3)P0口可作為地址/數(shù)據(jù)總線使用;4)P0既可按字節(jié)尋址,又可按位尋址;5)可帶8個TTL輸入,驅(qū)動NMOS時,需接上拉電阻。55P0口的特點P0口的特點:55P1口結(jié)構(gòu)P1.X鎖存器DCLP1口引腳圖2--8P1口1位結(jié)構(gòu)QQ寫鎖存器內(nèi)部總線Vcc讀鎖存器讀引腳56P1口結(jié)構(gòu)P1.X鎖存器DCLP1口引腳圖2--8P1口P1口的特點P1口的特點:1)只能作I/O口使用,且也是一個準雙向口;2)內(nèi)部已有上拉電阻,不是開漏輸出口;3)可按字節(jié)尋址,也可按位尋址。57P1口的特點P1口的特點:57P2口結(jié)構(gòu)P2.X鎖存器DCLP2口引腳圖2—9P2口1位結(jié)構(gòu)QQ寫鎖存器內(nèi)部總線Vcc讀鎖存器讀引腳MUX地址控制58P2口結(jié)構(gòu)P2.X鎖存器DCLP2口引腳圖2—9P2口P2口的特點P2口的特點:1)當P2口作為通用I/O時,是一準雙向口。2)從P2口輸入數(shù)據(jù)時,先向鎖存器寫“1”。3)可位尋址,也可按字節(jié)尋址4)做地址總線時,輸出地址高8位。59P2口的特點P2口的特點:59P3口結(jié)構(gòu)P3.X鎖存器DCLP3口引腳圖2—10P3口1位結(jié)構(gòu)QQ寫鎖存器內(nèi)部總線讀鎖存器讀引腳Vcc控制第二輸入功能第二輸入功能60P3口結(jié)構(gòu)P3.X鎖存器DCLP3口引腳圖2—10P3口P3口的第二功能I/O引腳字節(jié)地址注釋P3.0RXD串行數(shù)據(jù)接受端P3.1TXD串行數(shù)據(jù)發(fā)送端P3.2外部中斷0請求端P3.3外部中斷1請求端P3.4T0定時/計數(shù)器0外部輸入端P3.5T1定時/計數(shù)器1外部輸入端P3.6外部數(shù)據(jù)存儲器寫選通P3.7外部數(shù)據(jù)存儲器讀選通61P3口的第二功能I/O引腳字節(jié)地址注釋P3.0RXD串行數(shù)P3口特點P3口特點:1)作通用I/O時,“第二輸入功能”應保持高電平,此時它是一個準雙向口;2)工作于第二功能時,該位的鎖存器應置162P3口特點P3口特點:622.4MCS-51單片機的工作方式單片機系統(tǒng)可以有多種工作方式.包括:復位方式、程序執(zhí)行方式、單步執(zhí)行方式、掉電和節(jié)電工作方式EPROM編程和校驗方式632.4MCS-51單片機的工作方式單片機系統(tǒng)可以有多種工作2.4.1復位方式RST/VPD復位電路RAMVCCVSSD1D2圖2--118051復位電路的結(jié)構(gòu)642.4.1復位方式RST/VPD復位電路RAMVCCVSS2.4.1復位方式PC=0000HACC=00HPSW=00HSP=07HDPTR=0000HP0~P3=FFHIP=××000000BIE=0×000000BRAM內(nèi)容不受影響TMOD=OOHTCON=00HTL0=00HTH0=00HTL1=00HTH1=00HSCON=00HSBUF=××××××××BPCON=0×××0000B系統(tǒng)復位后,內(nèi)部各寄存器進入下列特定的狀態(tài)(×為不定數(shù))652.4.1復位方式PC=0000HTMOD=OOH系統(tǒng)復位各種復位電路RST/VPDVCCVSSVCC22μF1kΩRST/VPDVCCVSSVCC22μF1kΩ1kΩRESET22μFRST/VPDVCCVSSVCC22μF1kΩRESET22μF(a)上電復位電路(b)手動復位電路(c)手動復位電路66各種復位電路RST/VPDVCCVSSVCC22μF1kΩ2.4.2程序執(zhí)行方式程序執(zhí)行方式是單片機的基本工作方式。所執(zhí)行的程序可以放在內(nèi)部ROM、外部ROM,或同時放在內(nèi)部ROM和外部ROM中。由于復位后PC=0000H,所以程序的執(zhí)行總是從0000H單元開始的,但是,用戶的程序一般不可能從0000H單元開始存放。因此,需要從0000H單元開始存放一條長轉(zhuǎn)移指令,以使執(zhí)行轉(zhuǎn)移到用戶程序的入口地址。例如:ORG0000HLJMPMAIN;MAIN為用戶程序入口……ORG0100HMAIN:……;用戶程序
672.4.2程序執(zhí)行方式程序執(zhí)行方式是單片機的基本工2.4.3單步執(zhí)行方式單步執(zhí)行是指單片機系統(tǒng)在外界脈沖的控制下,每次只執(zhí)行一條指令后就暫停下來的執(zhí)行方式。因此它是調(diào)試程序、跟蹤程序執(zhí)行,以了解程序執(zhí)行流程的一種有效手段。實現(xiàn)單步執(zhí)行方式,要借助于MCS-51的中斷控制系統(tǒng)。682.4.3單步執(zhí)行方式單步執(zhí)行是指單片機系統(tǒng)在外界脈沖的控2.4.4掉電和節(jié)電方式(1)8051的掉電方式具體作法:信息轉(zhuǎn)存,啟用備用電源維持供電。因此是一種低功耗節(jié)電方式。692.4.4掉電和節(jié)電方式(1)8051的掉電方式692.4.4掉電和節(jié)電方式(2)80C51的節(jié)電方式節(jié)電方式也是一種能減少單片機功耗的工作方式,通常可以分為待機(等待)方式和掉電(停機)方式兩種.只有CHMOS型器件才有這種工作方式.待機方式和掉電方式由專用寄存器PCON(電源控制寄存器)的有關(guān)位來控制的。702.4.4掉電和節(jié)電方式(2)80C51的節(jié)電方式70PCON寄存器格式PCOND7D6D5D4D3D2D1D0SMOD———GF1GF0PDIDL87H通用標志位通用標志位掉電方式位波特率加倍位圖2-14PCON寄存器格式71PCON寄存器格式PCOND7D6D5D4D3D2D1D0待機與掉電方式控制電路振蕩器時鐘發(fā)生器中斷、串行口、定時器等模塊CPU圖2-15待機與掉電方式控制電路XTAL1XTAL272待機與掉電方式控制電路振蕩器時鐘中斷、串行口、定時器等模塊C2.4.5編程和校驗方式編程是指利用特殊手段對單片機內(nèi)EPROM進行寫人的過程.校驗則是對剛剛寫人的程序代碼進行讀出驗的過程。例如:8751H片內(nèi)EPROM有編程、校驗和保密位編程三種工作方式732.4.5編程和校驗方式編程是指利用特殊手段對單片機內(nèi)EP表2-88751HEPROM操作方式ALE/方式RSTP2.7P2.6P2.5P2.4編程10VPP010××禁止10×110××校驗101100××保密位編程10VPP011××注:表中×表示任意電平,0表示低電平,1表示高電平。VPP為21±0.5V,的編程脈沖為50ms負脈沖。74表2-88751HEPROM操作方式ALE/方式RS(1)EPROM編程方式P1RST/VPDXTAL2XTAL1VSS8751HP0P2.4P2.5P2.6P2.3-P2.0P2.7EA/VPPALE/PROGPSENVCCA7-A0A11-A8編程代碼VPP1圖2-168751H編程時的各引腳連接圖××01+5V50ms75(1)EPROM編程方式P1RST/VPDXTAL2XTAL(2)EPROM程序校驗如果程序的保險位未設(shè)置,則無論是在編程期間或編程之后,都可以將片上程序存儲器的內(nèi)容讀出來進行校驗。程序的校驗時,需要用到微型計算機控制,微型計算機把12位地址送入被校驗的8751H的P2和P1口,以讀出選中的EPROM存儲單元中的代碼,經(jīng)P0口送給微型計算機。微型計算機將讀出的代碼與編程時寫入的編程代碼進行比較,若兩者相同,則該EPROM單元編程正確,否則編程不正確。76(2)EPROM程序校驗如果程序的保險位未設(shè)置,則無論是在編2.5MCS-51單片機的時序ALEP1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2S1S2S3S4S5S6S1S2S3S4S5S6P1P2P1P2P1P2S1S2S3S4S5S6讀操作碼讀第二字節(jié)讀下一指令S1S2S3S4S5S6S1S2S3S4S5S6讀操作碼讀操作碼(無效)S1S2S3S4S5S6讀操作碼(無效)讀操作碼(無效)讀操作碼讀操作碼(無效)S1S2S3S4S5S6讀下一指令S1S2S3S4S5S6單字節(jié)兩周期指令兩字節(jié)一周期指令單字節(jié)一周期指令圖2-17MCS-51指令系統(tǒng)的取指/執(zhí)行時序772.5MCS-51單片機的時序ALEP1P2P1P2P1P訪問外部ROM和RAM的時序P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2S1S2S3S4S5S6S1S2S3指令ALEPSENP0P2A15~A8A15~A8A7~A0指令A7~A0圖2-18讀外部程序ROM時序78訪問外部ROM和RAM的時序P1P2P1P2P1P2P1P2讀外部數(shù)據(jù)RAM時序指令輸入P0PCH輸出P2~A8PCL輸出數(shù)據(jù)輸入地址輸出P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2P1P2S1S2S3S4S5S6S1S2S3S4S5S6P1P2P1P2P1P2ALEPSENRDPCH輸出PDH輸出/P2輸出PCH輸出P2指令輸入PCL輸出79讀外部數(shù)據(jù)RAM時序指令輸入P0PCH輸出P2~A8PCL謝謝!80謝謝!80第4章單片機匯編語言
程序設(shè)計81第4章單片機匯編語言
程序設(shè)計81第4章單片機匯編語言
程序設(shè)計4.1概述4.2偽指令4.3匯編語言程序設(shè)計方法4.4匯編語言程序設(shè)計舉例82第4章單片機匯編語言
程序設(shè)計4.1概述824.1概述單片機匯編語言程序?qū)嶋H上就是單片機的所支持的能完成指定功能的指令系列。構(gòu)成匯編語言程序的是匯編語句。在MCS-51系列單片機匯編語言中匯編語句一般分為兩種:指令性語句(即匯編指令)指示性語句(即偽指令)指令性語句在匯編后成為單片機執(zhí)行的指令碼,而指示性語句并不能產(chǎn)生可執(zhí)行的指令碼,它只是在匯編時通知匯編程序如何工作。834.1概述單片機匯編語言程序?qū)嶋H上就是單片機的所支持的能完4.1.1匯編的概念在單片機中,匯編是將單片機的匯編語言助記符指令(匯編程序)翻譯成單片機能識別執(zhí)行的二進制機器指令(目標程序)。目前匯編一般有兩種方法:手工匯編機器匯編手工匯編是用人工查表的方式進行匯編程序的翻譯為目標程序。匯編程序是一種翻譯程序,利用匯編指令與機器碼指令的一一對應的關(guān)系。將源程序翻譯成目標程序844.1.1匯編的概念在單片機中,匯編是將單片機的匯編語言助匯編過程源程序(匯編指令程序)匯編目標程序(機器碼指令程序)圖4-1匯編過程85匯編過程源程序匯編目標程序圖4-1匯編過程854.1.2匯編程序匯編語言程序轉(zhuǎn)換成機器語言的過程稱為匯編過程。能實現(xiàn)匯編語言到機器語言的轉(zhuǎn)換的程序稱為匯編程序。匯編時匯編過程可以由匯編程序完成,也可以由人工完成。因此,匯編可以分為:手工匯編機器匯編864.1.2匯編程序匯編語言程序轉(zhuǎn)換成機器語言的過程稱為匯編(1)手工匯編手工匯編就是根據(jù)指令表,將源程序由匯編指令逐條翻譯成機器指令,并把這些機器指令代碼以字節(jié)為單元從起始地址依次排列成目標程序的過程。手工匯編一般分兩步進行(即兩次匯編過程):第一步:確定各條指令(第一字節(jié))的地址并翻譯出各條指令的機器碼。第二步:將第一步未處理的標號進行代替,求出標號所代表的具體地址或地址偏移量,從而形成最終機器代碼。87(1)手工匯編手工匯編就是根據(jù)指令表,將源程序由匯編指令逐條手工匯編舉例源程序地址目標程序第一次匯編第二次匯編ORG1000HSTART:MOVR0,BUFFER1000A830A830MOVR2,#00H10027A007A00MOVA,@R01004E6E6MOVR3,A1005FBFBINCR310060B0BSJMPNEXT100780NEXT8005LOOP:INCR010090808CJNE@R0,#44H,NEXT100AB644NEXTB64402INCR2100D0A0ANEXT:DJNZR3,LOOP100EDBLOOPDBF9MOVRESULT,R210108A2A8A2ASJMP$101280FE80FEBUFFERDATA30HRESULTDATA2AHEND88手工匯編舉例源程序地址目標程序第一次匯編第二次匯編ORG(2)機器匯編機器匯編是由計算機的匯編軟件將匯編語言源程序自動生成機器語言程序,稱匯編軟件為匯編程序。機器匯編可在單片機開發(fā)系統(tǒng)(如仿真器)上匯編軟件實現(xiàn),稱駐留匯編;在其它計算機(如PC機)上進行,稱交叉匯編。89(2)機器匯編機器匯編是由計算機的匯編軟件將匯編語言源程序4.2偽指令偽指令是單片機中的指示性指令,它主要是匯編時告訴匯編程序,如何匯編源程序的指令。說明:偽指令不能被匯編成機器代碼,也不能被機器執(zhí)行完成某種操作,因此稱為偽指令904.2偽指令偽指令是單片機中的指示性指令,它主要是匯編時告(1)、起始地址偽指令ORG指令格式:ORGaddr16指令功能:用于規(guī)定目標程序段或數(shù)據(jù)塊的在程序存儲器中的起始地址,需放置在被設(shè)置在程序段或數(shù)據(jù)塊的開始處。例如:ORG3000HSTART:MOVA,#30H……91(1)、起始地址偽指令ORG指令格式:ORG(2)、匯編結(jié)束偽指令END指令格式:END或END標號指令功能:匯編時通知匯編程序,對源程序的匯編到此結(jié)束。一個程序中只出現(xiàn)一次,在程序的最后出現(xiàn)。92(2)、匯編結(jié)束偽指令END92(3)賦值偽指令EQU指令格式:標識符EQU數(shù)值或匯編符號指令功能:匯編時告訴匯編程序,將匯編語句操作數(shù)的值賦予本語句的標識符。“標識符”在源程序中可以作數(shù)值使用,也可以作數(shù)據(jù)地址、位地址使用。要使用此標識符必須先定義后使用,且放在程序開頭。注意:標識符后沒有冒號,只須一個空格分隔。例如:DATAEQU29HMOVA,DATA……93(3)賦值偽指令EQU指令格式:標識符EQU(4)、定義字節(jié)偽指令DB指令格式:[標號:]DB字節(jié)數(shù)據(jù)或字節(jié)數(shù)據(jù)表指令功能:匯編時告訴匯編程序從指定的地址單元開始,定義若干字節(jié)存儲單元,并將指定的數(shù)據(jù)或數(shù)據(jù)表賦予作為初值。注意:數(shù)據(jù)表中各字節(jié)數(shù)據(jù)用逗號分隔,如果是字符數(shù)據(jù)還需要用“”引起來,數(shù)據(jù)可以是二進制、十六進制和ASCII碼;DB指令在匯編語言程序中可以多次使用。例如:ORG1000HADDR:DB20HDATA:DB0AFH,“A”,00100001B……匯編結(jié)果是將20H存放于ADDR即1000H地址單元中,將0AFH存放于ADDR+1地址單元,將“A”存放于ADDR+2地址單元;將00100001B存放于ADDR+3地址單元。94(4)、定義字節(jié)偽指令DB指令格式:[標號:](5)、定義字偽指令DW指令格式:[標號:]DW字數(shù)據(jù)或字數(shù)據(jù)表指令功能:匯編時告訴匯編程序從指定的地址單元開始,定義若干個字存儲單元,并將指定的數(shù)據(jù)或數(shù)據(jù)表賦予作為初值。其中數(shù)據(jù)高八位存入低地址;低八位存入高地址。例如:ORG1000HDATA1:DW7654H,40H、12、‘AB’95(5)、定義字偽指令DW指令格式:[標號:](6)、數(shù)據(jù)地址賦值偽指令DATA指令格式:字符名稱DATA表達式指令功能:將表達式指定的數(shù)據(jù)地址賦予規(guī)定的字符名稱。注意:該指令與EQU指令相似,只是可先使用后定義,放于程序開頭、結(jié)尾均可。96(6)、數(shù)據(jù)地址賦值偽指令DATA指令格式:字符名稱(7)、定義空間偽指令DS指令格式:[標號:]DS數(shù)值指令功能:從標號所指示的地址單元開始,保留指定的若干字節(jié)空間作為備用空間。例如:ORG2000HDS0FHDB55H,11H,0F1H;從100BH開始存放55H、11H、0F1H。注:DB、DW、DS只能用于程序存儲器;而不能用于數(shù)據(jù)存儲器。97(7)、定義空間偽指令DS指令格式:[標號(8)、位地址賦值偽指令BIT指令格式:標識符BIT位地址指令功能:將位地址賦予規(guī)定的標識符。
例如:X1BITP1.0相當于X1EQU90H98(8)、位地址賦值偽指令BIT指令格式:標識符4.3匯編語言程序設(shè)計方法單片機軟件開發(fā)過程是單片機設(shè)計的主要任務之一,它的開發(fā)過程一般包括以下四個階段:(1)編寫匯編語言源程序;(2)匯編;(3)調(diào)試;(4)固化等。994.3匯編語言程序設(shè)計方法單片機軟件開發(fā)過程是單片機設(shè)計的主4.3匯編語言程序設(shè)計方法圖4-1單片機軟件開發(fā)過程匯編固化調(diào)試ROM匯編語言源程序機器代碼文本編輯器編輯1004.3匯編語言程序設(shè)計方法圖4-1單片機軟件開發(fā)過程調(diào)試4.3匯編語言程序設(shè)計方法為了編寫高質(zhì)量的單片機程序,編寫單片機匯編語言程序時需要做到以下幾點:1)程序占用存儲空間盡量少;2)運行時間短;3)程序的編制、調(diào)試及排錯所需時間短;4)結(jié)構(gòu)清晰,可讀性好、易于移植。
1014.3匯編語言程序設(shè)計方法為了編寫高質(zhì)量的單片機程序,編寫單4.3匯編語言程序設(shè)計方法匯編語言程序設(shè)計一般步驟:1)分析問題,明確任務2)建立數(shù)學模型,確定算法3)繪制程序流程圖4)編寫源程序5)匯編、調(diào)試1024.3匯編語言程序設(shè)計方法匯編語言程序設(shè)計一般步驟:102三種基本程序結(jié)構(gòu)三種基本程序結(jié)構(gòu):順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)等如下圖所示:103三種基本程序結(jié)構(gòu)三種基本程序結(jié)構(gòu):103圖(a)順序結(jié)構(gòu)圖(b)分支結(jié)構(gòu)BAC入口出口分支1分支2入口出口YN條件滿足否?104圖(a)順序結(jié)構(gòu)圖(c)循環(huán)結(jié)構(gòu)(1)圖(d)循環(huán)結(jié)構(gòu)(2)修改條件處理條件滿足否?入口出口NY修改條件處理條件滿足否?入口出口NY105圖(c)循環(huán)結(jié)構(gòu)(1)4.3.1順序程序例4-1設(shè)在外RAM的50H單元存有1個字節(jié)數(shù)據(jù),要求將其分解成兩個4位數(shù)據(jù),并將其高4位存入原單元的低4位,其低4位存入51H單元的低4位,而這兩個單元的高4位均為0,試編寫實現(xiàn)此任務的匯編語言程序。解:分析:本題可考慮用ANL指令屏蔽低4位來獲取高4位數(shù)據(jù),然后用SWAPA指令將50H單元的數(shù)據(jù)高低4位互換。這樣就得到了第一個4位數(shù)據(jù)。第二個4位數(shù)據(jù)只需將原數(shù)據(jù)屏蔽掉高4位即可。參考程序如下:1064.3.1順序程序例4-1設(shè)在外RAM的50H單元存有1個ORL1000HMOVR0,#50H;外存地址MOVXA,@R0;讀取原數(shù)據(jù)MOVB,A;保存原數(shù)據(jù)ANLA,#0F0H;屏蔽低4位SWAPA;高低4位互換MOVX@R0,A;保存第一個4位數(shù)ANLB,#0FH;屏蔽高4位,得到第二個4位數(shù)MOVA,BINCR0;修改地址MOVX@R0,A;保存第二個4位數(shù)END107ORL1000H104.3.2分支程序分支結(jié)構(gòu)程序是根據(jù)不同的條件,選擇不同的分支以進行相應的處理。通??捎脳l件轉(zhuǎn)移指令形成簡單分支結(jié)構(gòu)。如:判斷(A)=0(或非0),程序轉(zhuǎn)移判斷(CY)=1(或0),程序轉(zhuǎn)移判斷(bit)=1(或0),程序轉(zhuǎn)移以下是二個分支程序設(shè)計的例子。例4-2、設(shè)a存放在累加器A中,b存放在寄存器B中,要求按下式計算Y值,并將結(jié)果Y存于累加器A 中,試編寫程序。a-b(a≥0)Y=a+b(a<0)1084.3.2分支程序分支結(jié)構(gòu)程序是根據(jù)不同的條件,選擇不同解:本題關(guān)鍵是判a是正數(shù),還是負數(shù);顯然累加器A中的ACC.7為符號為,如果是負數(shù)則該位為1,若該位為0,則為非負數(shù)。顯然條件的判斷變?yōu)闄z測ACC.7是否為1。ORG1000HSTART:JBACC7,KK0;判斷并選擇分支CLRC;清進位標志位SUBBA,B;a-bSJMPDONE;跳過a+b分支KK0:ADDA,B;a+bDONE:SJMP$;原地踏步,等待END109解:本題關(guān)鍵是判a是正數(shù),還是負數(shù);顯然累加器A中的ACC.例4-3、設(shè)有兩個16位無符號數(shù)M,N分別存放在8031單片機內(nèi)部RAM的40H、41H及50H、51H單元中,當M>N時,將內(nèi)部RAM的42H單元清0;否則,將該單元置成全1,試編程。解法I:因為無16位數(shù)的比較指令,所以,只能用8位數(shù)的比較指令
(42)=00H(42)=FFH開始結(jié)束YNM高8位=N高8位?CY=1?M低8位=N低8位?NYNY110例4-3、設(shè)有兩個16位無符號數(shù)M,N分別存放在8031單片ORG2000HCMP:MOVA,50HCJNEA,40H,CMP1MOVA,51HCJNEA,41H,CMP1SJMPNHIGHE;跳過一些其它分支CMP1:JCHIGHENHIGHE:MOV42H,#0FFHSJMPDONEHIGHE:MOV42H,#00HDONE:SJMP$END111ORG2000H111解法II:先假設(shè)M>N,再來判斷是否NA≤NBORG3000HCMP2:MOVR0,#00HMOVA,50HCJNEA,40H,CMP3MOVA,51HCJNEA,41H,CMP3SJMPNHIGHECMP3:JCHIGHENHIGHE:MOVR0,#0FFH;不大于標志HIGHE:MOV42H,R0SJMP$END112解法II:先假設(shè)M>N,再來判斷是否NA≤NB1124.3.3循環(huán)程序循環(huán)程序是指在一定條件下,程序中的一些代碼重復執(zhí)行的情況。典型循環(huán)結(jié)構(gòu)程序一般包括四部分:初始化部分循環(huán)處理部分循環(huán)控制部分循環(huán)結(jié)束部分1134.3.3循環(huán)程序循環(huán)程序是指在一定條件下,程序中的一些代碼例4-4將首址為DATA的100個外部RAM單元清零。解:該例為已知循環(huán)次數(shù)的循環(huán)程序?qū)⒀h(huán)次數(shù)存放在R0中。程序如下:MOVR0,#64H;設(shè)置循環(huán)計數(shù)器MOVDPTR,#DATA;設(shè)置地址指針CLRALOOP:MOVX@DPTR,A;清0INCDPTRDJNZR0,LOOP;判0結(jié)束循114例4-4將首址為DATA的100個外部RAM單元清零。1例4-5設(shè)某以“$”為結(jié)束標志的字符中共不超過256個,存放在內(nèi)部RAM以STA為首址的連續(xù)單元里,設(shè)統(tǒng)計此字符中長度并存放到內(nèi)部RAM的LEN單元中。解法I:程序如下:ORG1000HMOVR2,#STA;設(shè)地址指針MOVB,#00H;設(shè)計數(shù)器LOOP:MOVA,@R2CJNEA,“$”,NEXT;判斷是否結(jié)束MOVLEN,B;存數(shù)據(jù)結(jié)果SJMPDONENEXT:INCB;修改計數(shù)器INCR2;修改地址指針,準備下一次循環(huán)SJMPLOOPDONE:END115例4-5設(shè)某以“$”為結(jié)束標志的字符中共不超過256個,存解法II程序如下:ORG1000HMOVR2,#STA-1;設(shè)地址指針MOVB,#0FFH;設(shè)計數(shù)器LOOP:INCR2;修改地址指針,準備下一次循環(huán)INCB;修改計數(shù)器MOVA,@R2;取數(shù)CJNEA,“$”,LOOP;判斷循環(huán)是否結(jié)束MOVLEN,B;存數(shù)據(jù)END116解法II116例4-6、設(shè)用戶用鍵盤輸入長度不超過100字節(jié)的字符串放在8031單片機外部RAM以20H為首地址的連續(xù)單元,該字符串用回車符CR(‘CR’=0DH)作為結(jié)束標志,要求統(tǒng)計此字符串的長度并存入內(nèi)部RAM的1FH單元中。解:從首單元開始取數(shù),每取一數(shù)判斷其是否為‘CR’,是則結(jié)束。ORG1000HSTADADATA20HSLANGDATA1FHCMCR2:MOVR0,#STADA-1MOVB,#0FFHCRLOP:INCR0INCBMOVXA,@R0CJNEA,#0DH,CRLOPMOVSLANG,BSJMP$END117例4-6、設(shè)用戶用鍵盤輸入長度不超過100字節(jié)的字符串放在8例4-7、單片機片內(nèi)RAM中,DATA1位置起的20H個RAM單元,試統(tǒng)計每個單元1的位數(shù),并存入以DATA2起的20H個單元內(nèi)。解:分析:這是一個兩重循環(huán),循環(huán)次數(shù)都是已知,內(nèi)循環(huán)為求8位數(shù)1的位數(shù),循環(huán)次數(shù)為8,外循環(huán)的次數(shù)為20H。程序如下:ORG2000HMOVR0,DATA1;置地址指針MOVR1,DADA2MOVR7,20H;外循環(huán)計數(shù)器CON:MOVR6,#08H;內(nèi)循環(huán)計數(shù)器MOVA,@R0;取數(shù)MOVR5,#0:從第0位開始判斷CONBIT:RLCA;內(nèi)循環(huán),統(tǒng)計每字節(jié)1的個數(shù)JNCNEXTBINCR5;計數(shù)NEXTB:DJNER6,CONBITMOVA,R5MOV@R1,A;存數(shù)INCR1;修改指針,指向下一單元INCR0DJNER7,CON;外循環(huán)判0END118例4-7、單片機片內(nèi)RAM中,DATA1位置起的20H個RA4.3.4子程序子程序設(shè)計是程序設(shè)計模塊化的重要技術(shù),它可以大大提高程序代碼的可重用性。在使用子程序時,主程序調(diào)用子程序需要用到LCALL或ACALL指令,在子程序中末尾必須用返回指令RET返回到主程序中。注意:在單片機匯編語言程序中,一般允許進行子程序的嵌套調(diào)用,但嵌套調(diào)用時調(diào)用的層數(shù)最好不要太多,以提高程序的效率。1194.3.4子程序子程序設(shè)計是程序設(shè)計模塊化的重要技術(shù),4.3.4子程序在子程序設(shè)計和調(diào)用時,要注意兩個方面的主要問題:(1)在子程序中的現(xiàn)場保護;(2)主程序與子程序間參數(shù)的傳遞方式。1204.3.4子程序在子程序設(shè)計和調(diào)用時,要注意兩個方面的(1)現(xiàn)場保護為了避免子程序調(diào)用時修改了一些寄存器的內(nèi)容導致對主程序的影響,子程序執(zhí)行時首先必須將兩段程序都用到的寄存器或存貯單元保存起來,這種過程稱為現(xiàn)場保護。在子程序返回時,再將保存起來的內(nèi)容恢復到原來狀態(tài),使子程序返回后能繼續(xù)正確執(zhí)行程序,這個過程稱恢復現(xiàn)場。一般來說,現(xiàn)場保護可以在主程序中進行,也可以在子程序中進行。要保護的現(xiàn)場可能是寄存器,也可以能是一段內(nèi)存(對于PC值的現(xiàn)場保護和恢復是由計算機在執(zhí)行LCALL,ACALL和RET時自動完成的),保護的方法通常采用堆棧的方法,即在保護現(xiàn)場時讓被保存的內(nèi)容入棧,恢復時讓被保護的內(nèi)容出棧。通常,為了方便調(diào)用子程序,現(xiàn)場保護一般由程序員在子程序的開頭和結(jié)尾編程實現(xiàn),此時要注意用于傳遞參數(shù)的寄存器對主程序的影響。
121(1)現(xiàn)場保護為了避免子程序調(diào)用時修改了一些寄存器的內(nèi)容導(2)、主程序與子程序的參數(shù)傳遞子程序在使用時,有時需要從主程序獲得某些數(shù)據(jù),也可能需要將處理結(jié)果返回給主程序。這些工作就是通過子程序的參數(shù)來實現(xiàn)。根據(jù)數(shù)據(jù)傳送的方向可將參數(shù)分為人口參數(shù)和出口參數(shù)。如果主程序在調(diào)用子程序時需將具體的數(shù)據(jù)傳遞給子程序中相應的變量(寄存器等),這些數(shù)據(jù)稱為入口參數(shù)。如果子程序執(zhí)行結(jié)束后將運行結(jié)果傳遞給主程序供主程序使用,這些結(jié)果數(shù)據(jù)稱為出口參數(shù)。單片機子程序傳遞參數(shù)的方法主要有以下三種:
1)累加器和通用寄存器傳送2)指針寄存器傳送3)堆棧傳送122(2)、主程序與子程序的參數(shù)傳遞子程序在使用時,有時需要從主例4-8、編寫一段子程序?qū)⑵瑑?nèi)RAM的一組單元清零。設(shè)被清零的地址單元的首地址在R0中,被清零的地址單元個數(shù)在R7中。解:子程序:(通過通用寄存器來傳遞參數(shù))ORG1000HSUB1:MOVA,#00H;清除A內(nèi)容為零LOOP:MOV@R0,A;R0中的內(nèi)容清零INCR0;修改地址DJNZR7,LOOP;R7非零時循環(huán)DONE:RET主程序:MAIN:……MOVR0,#30H;參數(shù)1(首地址)MOVR7,#0AH;參數(shù)2(地址個數(shù))ACALLSUB1;調(diào)用子程序……123例4-8、編寫一段子程序?qū)⑵瑑?nèi)RAM的一組單元清零。設(shè)被清零例4-9(1)編寫子程序,實現(xiàn)以下功能:計算內(nèi)部RAM中N個字節(jié)無符號數(shù)之和。(N小于1000H)。(2)編寫一程序,調(diào)用(1)中子程序?qū)崿F(xiàn)以下功能:求內(nèi)部RAM30H~5FH中存放的字節(jié)無符號數(shù)之和,并存入60H、61H單元中(高位在前),若和大于100H,62H單元0FFH,否則62H單元清零解:分析:該例中需要傳遞的參數(shù)有3類:①參與運算的字節(jié)無符號數(shù)個數(shù)N,用寄存器R2傳遞。②參與運算的數(shù)據(jù),在RAM單元中,以R0為指針寄存器,通過間接尋址傳送。③運算結(jié)果,共兩個,用R1間接尋址傳送124例4-9(1)編寫子程序,實現(xiàn)以下功能:計算內(nèi)部RAM中N個(1)子程序如下:ORG2000HSUB2:PUSHPSW;保護現(xiàn)場MOV@R1,#0;目的單元清零INCR1MOV@R1,#0LOOP:MOVA,@R0;取數(shù)ADDA,@R1;求和MOV@R1,A;存和的低字節(jié)數(shù)DECR1;修改指針,指向和的高位地址CLRAADDCA,@R1;取進位位MOV@R1,A;存和的高字節(jié)數(shù)INCR1;修改指針,指向和的低位地址INCR0;修改指針,指向下一個單元DJNZR2,LOOPPOPPSW;恢復現(xiàn)場RET125(1)子程序如下:125(2)主程序如下:ORG0100HMAIN:MOVR0,#30H;設(shè)置R0為入口指針寄存器MOVR1,#60H;設(shè)置R1為出口指針寄存器MOVR2,#2FH;設(shè)置R2傳遞字節(jié)數(shù)ACALLSUB2MOV62H,#0FFH;預置62H單元為0FFHMOVA,61H;判總和高位是否為0JNETOENDMOV62H,#00H;小于100H,62H改為00HTOEND:END126(2)主程序如下:1264.4匯編語言程序設(shè)計舉例4.4.1算術(shù)運算類程序4.4.2邏輯運算類程序4.4.3代碼轉(zhuǎn)換類程序4.4.4查表程序4.4.5數(shù)據(jù)排序程序4.4.6延時程序4.4.7軟件看門狗程序4.4.8數(shù)字濾波程序
1274.4匯編語言程序設(shè)計舉例4.4.1算術(shù)運算類程序1274.4.1算術(shù)運算類程序MCS-51單片機算術(shù)運算類指令有單字節(jié)的加(ADD)、帶進位加(ADDC)、帶進位減(SUBB)、乘(MUL)、除(DIV)等。例4-10、兩個4字節(jié)無符號數(shù)分別存放在以DATA1和DATA2為首址的連續(xù)單元中(低字節(jié)在前),設(shè)計程序求兩數(shù)的和,結(jié)果放在被加數(shù)單元中。〔解〕ORG2000HSTART:MOV R0,#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中考物理復習主題單元11第28課時焦耳定律課件
- 冀少版八年級生物上冊第五單元第一節(jié)細菌課件
- 冀少版八年級生物上冊第三單元第二節(jié)光合作用的原料課件
- 初三化學第一輪復習教學教案
- 《馬詩》教學設(shè)計
- 住宅小區(qū)監(jiān)理廉潔自律協(xié)議
- 五年級語文下冊第二單元教學設(shè)計教案
- 木材加工廠工人工作證使用辦法
- 船舶制造乳膠漆粉刷施工合同
- 碳基金碳資產(chǎn)管理辦法
- 《平衡計分卡》課件
- 設(shè)計管理策劃書
- 文化與藝術(shù)行業(yè)2024年人力資源管理與制度優(yōu)化
- 《區(qū)塊鏈原理詳解》課件
- 利用質(zhì)量管理工具改進醫(yī)院感染控制標準的執(zhí)行與管理研究
- 掌握動物園營銷技巧
- 第4課+中古時期的亞洲【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 五年級上冊英語期中試卷-閩教版
- 特種設(shè)備的安全使用與維護培訓教材
- 2022電網(wǎng)工程限額設(shè)計控制指標2021年水平
- 初一學生自我介紹
評論
0/150
提交評論