版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2023/10/291單片機(jī)基礎(chǔ)教案2023/10/2921、數(shù)據(jù)單位二進(jìn)制位:在計(jì)算機(jī)中,二進(jìn)制中的每個(gè)0或1。它是表示信息的最小單位。位(Bit):二進(jìn)制代碼只有“0”和“1”,在CPU中占1位。字節(jié)(Byte):通常把8位二進(jìn)制數(shù)定義為一個(gè)字節(jié)(Byte),它是數(shù)據(jù)處理的基本單位。字(Word):1個(gè)字為2個(gè)字節(jié)。字長:計(jì)算機(jī)一次可處理的二進(jìn)制數(shù)的位數(shù)。第一章計(jì)算機(jī)基礎(chǔ)知識(shí)1.1二進(jìn)制數(shù)在計(jì)算機(jī)中的使用▼
十進(jìn)制(D)Decimalsystem(scale)▼
二進(jìn)制(B)Binarysystem▼
十六進(jìn)制(H)Hexadecimalsystem2023/10/2931.1.1采用二進(jìn)制編碼的好處(1)物理上容易實(shí)現(xiàn)(狀態(tài)分明),可靠性強(qiáng);(2)運(yùn)算簡單,通用性強(qiáng);(3)二進(jìn)制的0、1數(shù)碼與邏輯量“真”和“假”的0、1吻合。2023/10/294
方法:除2取余
余數(shù)
操作:
2251最低位
2120260231
211最高位
0
結(jié)果:(25)D=(11001)B1.1.2十進(jìn)制向二進(jìn)制的轉(zhuǎn)換(除法)
:2023/10/295計(jì)算機(jī)中使用的編碼BCD碼十進(jìn)制編碼又稱為BCD碼。常用的壓縮BCD碼又稱為8421碼,它是用四位二進(jìn)制編碼來表示一位十進(jìn)制符號(hào)。例如:十進(jìn)制數(shù)124的壓縮BCD碼為0001
0010
0100。十進(jìn)制數(shù)4.56的壓縮BCD碼為0100.0101
0110。ASCII碼現(xiàn)在的計(jì)算機(jī)中字符數(shù)據(jù)的編碼通常采用的是美國信息交換標(biāo)準(zhǔn)代碼ASCII碼?;続SCII碼標(biāo)準(zhǔn)定義了128個(gè)字符,用七位二進(jìn)制來編碼,包括英文大小寫字母、數(shù)字符號(hào)0~9,還有一些專用符號(hào),如“:”、“!”、“%”及如換行、回車等。由于在計(jì)算機(jī)中常用一個(gè)字節(jié)(8位)來表示數(shù)據(jù),因此,為湊成一個(gè)字節(jié),應(yīng)在ASCII碼的最高位補(bǔ)一個(gè)0。通常,為了方便,常用十進(jìn)制數(shù)或十六進(jìn)制數(shù)來表示ASCII碼。例如:字符A的ASCII碼用十進(jìn)制表示為65,用十六進(jìn)制表示為41H。2023/10/296第二章單片機(jī)的硬件結(jié)構(gòu)2.1單片機(jī)的基本概念2.1.1單片機(jī)的定義:
在一塊硅片上集成了中央處理器(CPU),存儲(chǔ)器(RAM,ROM或EPROM)和各種輸入、輸出接口(定時(shí)器,計(jì)數(shù)器,并行I/O口,串行口,A/D轉(zhuǎn)換器以及脈沖調(diào)制器PWM等),這樣一塊芯片具有一臺(tái)計(jì)算機(jī)的屬性,因而被稱為單片微型計(jì)算機(jī)。單片微機(jī)是早期SingleChipMicrocomputer的直譯,它忠實(shí)地反映了早期單片微機(jī)的形態(tài)和本質(zhì)。單片機(jī)屬于微型計(jì)算機(jī)的一種,是把微型計(jì)算機(jī)中的微處理器、存儲(chǔ)器、I/O接口、定時(shí)器/計(jì)數(shù)器、串行接口、中斷系統(tǒng)等電路集成在一塊集成電路芯片上形成的微型計(jì)算機(jī)。因而被稱為單片微型計(jì)算機(jī),簡稱為單片機(jī)。2023/10/297單片機(jī)技術(shù)的應(yīng)用遍布國民經(jīng)濟(jì)與人民生活的各個(gè)領(lǐng)域2023/10/2982.2
MCS-51單片機(jī)具有如下一些特點(diǎn):集成度高:MCS-51單片機(jī)的典型代表產(chǎn)品為8031,8031芯片內(nèi)部包含了128個(gè)字節(jié)的RAM,4個(gè)8位并行I/O口,1個(gè)全雙工的串行口,2個(gè)16位的定時(shí)器/計(jì)數(shù)器,以及一個(gè)處理能力很強(qiáng)的中央處理器。系統(tǒng)結(jié)構(gòu)簡單:MCS-51芯片內(nèi)部采用模塊式結(jié)構(gòu),增加或更換一個(gè)模塊,就能得到指令系統(tǒng)和引腳兼容的新產(chǎn)品。系統(tǒng)擴(kuò)展方便:MCS-51具有外擴(kuò)至64K字節(jié)程序存儲(chǔ)器和64k字節(jié)的外部RAM和I/O口的能力??煽啃愿?MCS-51單片機(jī)的總線大多在芯片內(nèi)部不易受干擾,容易采取屏蔽等措施,適應(yīng)范圍寬,在各種惡劣的環(huán)境下都能可靠的工作。處理功能強(qiáng)、速度高:MCS-51單片機(jī)指令系統(tǒng)中有加、減、乘除及各種邏輯運(yùn)算和轉(zhuǎn)移指令,還具有位操作功能。CPU時(shí)鐘頻率為12MHz,指令系統(tǒng)中近50%的指令為單字節(jié)指令,指令執(zhí)行速度快。容易產(chǎn)品化:MCS-51由于單片機(jī)應(yīng)用系統(tǒng)具有體積小、可靠性高、功能強(qiáng)、價(jià)格低等特點(diǎn),因此容易形成產(chǎn)品,可以把它裝入各種儀器、儀表及控制設(shè)備中。2023/10/2992.380C51邏輯結(jié)構(gòu)圖PSENALERESETXLAT1P0.0~P0.7P2.0~P2.7RAM地址寄存器RAMP0鎖存器P2鎖存器EPROM或ROM程序地址寄存器緩沖器B寄存器ACC暫存器2暫存器1ALUPSW堆棧指針SPPC增量器PC數(shù)據(jù)指針DPTRP0驅(qū)動(dòng)器P2驅(qū)動(dòng)器特殊功能寄存器指令寄存器定時(shí)及控制P1鎖存器P3鎖存器P1驅(qū)動(dòng)器P3驅(qū)動(dòng)器振蕩器VssP1.0~P1.7P3.0~P3.7EAXLAT2Vcc2023/10/29102023/10/29112.380C51單片機(jī)的硬件組成
80C51單片機(jī)的組成部件:微處理器(CPU)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM/EPROM)、I/O口(P0口、P1口、P2口、P3口)、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存(SFR)2023/10/29122.4MCS-51的引腳
制造工藝為HMOS的MCS-51的單片機(jī)都采用40只引腳的雙列直插封裝(DIP)方式,目前大多數(shù)為此類封裝方式。制造工藝為CHMOS的80C51/80C31除采用DIP封裝外,還采用方形封裝方式,為44只引腳。2023/10/291340只引腳按其功能來分,可分為三部分:1.電源及時(shí)鐘引腳:
Vcc,Vss;XTAL1,XTAL22.控制引腳:PSEN、ALE、EA、RESET(即RST)。3.I/O口引腳:
P0、P1、P2、P3,為4個(gè)8位I/O口的外部引腳。2.4.1芯片引腳介紹2023/10/29142023/10/2915
EA接高電平,PC的值在低4K字節(jié)(0000H—0FFFH)內(nèi),執(zhí)行片內(nèi)ROM,PC>0FFFH,CPU自動(dòng)訪問片外。EA接低電平,只執(zhí)行片外程序存儲(chǔ)器中的程序。
程序存儲(chǔ)器可分為片內(nèi)和片外。由于邏輯上還是屬于同一空間,所以訪問用的是相同的指令。訪問片內(nèi)還是片外取決于EA引腳上所接電平。2023/10/29162023/10/2917
2.4.2程序計(jì)數(shù)器PCPC中存放的內(nèi)容:下一條將要執(zhí)行的指令在程序存儲(chǔ)器中的地址。PC的位數(shù)決定了單片機(jī)對(duì)程序存儲(chǔ)器可以直接尋址的范圍。程序計(jì)數(shù)器的基本工作方式:(1)順序執(zhí)行時(shí),PC自動(dòng)加1。(2)執(zhí)行轉(zhuǎn)移指令時(shí),PC被置入新值,從而使程序流向改變。(3)執(zhí)行子程序調(diào)用或響應(yīng)中斷時(shí),單片機(jī)自動(dòng)完成下列操作:①PC的現(xiàn)行值(斷點(diǎn)值),自動(dòng)壓入堆棧。②將子程序入口地址或中斷向量的地址送入PC,程序改變流向,轉(zhuǎn)向執(zhí)行子程序或ISR(中斷服務(wù)程序)
。執(zhí)行完畢后,遇到RET或RETI時(shí),將堆棧中保存的斷點(diǎn)值彈到PC中,程序又返回到斷點(diǎn)處繼續(xù)執(zhí)行未完成的部分。2023/10/2918
2.4.3堆棧指針SPSP是一個(gè)8位的SFR,堆棧的實(shí)質(zhì)是一個(gè)特殊的RAM區(qū),主要功能是暫放數(shù)據(jù)和地址。堆棧的具體功能為:(1)
保護(hù)斷點(diǎn):子程序調(diào)用以及中斷時(shí),最終都要返回主程序。為了保證程序能正確返回,應(yīng)該在堆棧中預(yù)先將主程序的斷點(diǎn)保護(hù)起來。(2)
現(xiàn)場保護(hù):單片機(jī)執(zhí)行子程序或ISR(中斷服務(wù)程序)之后,很可能要用到單片機(jī)中的一些寄存器,為了不破壞寄存器中的原有內(nèi)容,可以把有關(guān)寄存器的內(nèi)容保存起來,送入堆棧。2023/10/2919
堆棧的特點(diǎn):先進(jìn)后出。堆棧的操作:進(jìn)棧(PUSH),出棧(POP)。第一個(gè)進(jìn)棧的數(shù)據(jù)所在的單元稱為棧底,然后逐次進(jìn)棧,最后進(jìn)棧的數(shù)據(jù)所在的存儲(chǔ)單元稱為棧頂。入棧時(shí):SP指針的內(nèi)容先自動(dòng)加1,然后再把數(shù)據(jù)存入到SP指針指向的單元;——先加后壓出棧時(shí):先把SP指針指向的單元的數(shù)據(jù)取出,然后再把SP指針的內(nèi)容自動(dòng)減1。復(fù)位時(shí),SP的初值為07H,因此堆棧實(shí)際上從08H開始存放數(shù)據(jù)。——先彈后減2023/10/2920堆棧的操作有兩種方式:(1)指令方式,使用堆棧操作指令進(jìn)行進(jìn)棧/出棧操作。(2)自動(dòng)方式,在調(diào)用子程序或產(chǎn)生中斷時(shí),返回地址(斷點(diǎn))自動(dòng)進(jìn)棧。程序返回時(shí),斷點(diǎn)地址再自動(dòng)彈回PC。這種堆棧操作不需要干預(yù),是通過硬件自動(dòng)實(shí)現(xiàn)的。2023/10/2921基本門電路
基本門電路的符號(hào)與真值表如下圖所示。
2023/10/2922
基本門電路2023/10/2923觸發(fā)器
1.基本RS觸發(fā)器
基本RS觸發(fā)器的符號(hào)及用法如圖所示。
2.鐘控RS觸發(fā)器
鐘控型RS觸發(fā)器的符號(hào)及用法如圖1-12(見下頁)所示。
邊沿觸發(fā)RS觸發(fā)器(主從型RS觸發(fā)器)的符號(hào)及用法如圖1-
13(見下頁)所示。2023/10/2924
圖時(shí)鐘控制RS觸發(fā)器
圖主從型RS觸發(fā)器2023/10/29253.D觸發(fā)器
D觸發(fā)器的符號(hào)及用法如圖1-14所示。
圖1-14時(shí)鐘控制D觸發(fā)器
74LS273是常用的D觸發(fā)器之一,它內(nèi)部由8個(gè)D觸發(fā)器構(gòu)成,其引腳及真值表如圖(見下頁)所示。
74LS273用S低電來復(fù)位,用CP脈沖上升沿將8個(gè)輸入端D7~D0的狀態(tài)鎖存在7個(gè)輸出端Q7~Q0。
74LS273不能呈高阻態(tài),而74LS374則具有三態(tài)輸出功能。74LS374引腳及真值表如圖(見下頁)所示。2023/10/2926
圖1-1574LS273引腳與真值表
圖1-1674LS374引腳與真值表2023/10/2927JK觸發(fā)器
JK觸發(fā)器的符號(hào)及用法如圖1-17所示。
圖1-17主從型JK觸發(fā)器
譯碼器
二進(jìn)制譯碼器常用的有2-4譯碼器和3-8譯碼器。以2-4譯碼器為例,其符號(hào)及真值表如圖1-18(見下頁)所示。
譯碼器中最常用的產(chǎn)品是3-8譯碼器74LS138,它有三個(gè)片選控制端,這三個(gè)片選控制端內(nèi)部是"與"的關(guān)系,只有同時(shí)2023/10/2928有效時(shí),譯碼器才能工作。74LS138引腳及真值表如圖1-18所示(見課本)。
圖1-182-4譯碼器及其真值表
2023/10/2929三態(tài)門,三態(tài)電路是一種重要的總線接口電路。這里的三態(tài),是指它的輸出既可以是一般二值邏輯電路的正常的“0”狀態(tài)和“1”狀態(tài),又可以保持特有的高阻抗?fàn)顟B(tài),(相當(dāng)于隔斷狀態(tài))。處于高阻抗?fàn)顟B(tài)時(shí),其輸出相當(dāng)于斷開狀態(tài),沒有任何邏輯控制功能。三態(tài)電路的輸出邏輯狀態(tài)的控制,是通過一個(gè)輸入引腳實(shí)現(xiàn)的。當(dāng)EN為低電平輸入時(shí),三態(tài)電路呈現(xiàn)正常的“0”或“1”的輸出;當(dāng)EN為高電平輸入時(shí),三態(tài)電路給出高阻態(tài)輸出。用EN控制使能端,來控制門電路的通斷??梢跃邆溥@三種狀態(tài)的器件就叫做三態(tài)門。2023/10/29302.5并行I/O端口P0口:雙向8位三態(tài)I/O口,此口為地址總線(低8位)及數(shù)據(jù)總線復(fù)用口,只有該口能直接用于對(duì)外部存儲(chǔ)器的讀/寫數(shù)據(jù)操作。P1口:準(zhǔn)雙向口,專門供用戶使用的I/O口。P2口:準(zhǔn)雙向口,供系統(tǒng)擴(kuò)展時(shí)輸出高8位地址,也可作為一般I/O口。P3口:準(zhǔn)雙向口,雙功能口。MCS-51系列單片機(jī)有4個(gè)8位的并行I/O接口:P0、P1、P2和P3口。它們是特殊功能寄存器中的4個(gè)。這4個(gè)口,既可以作輸入,也可以作輸出,既可按8位處理(字節(jié)),也可按位方式使用。輸出時(shí)具有鎖存能力,輸入時(shí)具有緩沖功能。2023/10/2931一、P0口P0口是一個(gè)三態(tài)雙向口,可作為地址/數(shù)據(jù)分時(shí)復(fù)用口,也可作為通用的I/O接口。它包括一個(gè)輸出鎖存器、兩個(gè)三態(tài)緩沖器、輸出驅(qū)動(dòng)電路和輸出控制電路組成,它的一位結(jié)構(gòu)如圖:2023/10/2932①當(dāng)控制信號(hào)為高電平“1”:P0口作為地址/數(shù)據(jù)分時(shí)復(fù)用總線用。這時(shí)可分為兩種情況:(1)一種是從P0口輸出地址或數(shù)據(jù)。控制信號(hào)為高電平“1”,使轉(zhuǎn)換開關(guān)MUX把反相器4的輸出端與V1接通,同時(shí)把與門打開。如果從P0口輸出地址或數(shù)據(jù)信號(hào),當(dāng)?shù)刂坊驍?shù)據(jù)為“1”時(shí),經(jīng)反相器4使V1截止,而經(jīng)與門3使V2導(dǎo)通,P0.x引腳上出現(xiàn)相應(yīng)的高電平“1”;當(dāng)?shù)刂坊驍?shù)據(jù)為“0”時(shí),經(jīng)反相器4使V1導(dǎo)通而V2截止,引腳上出現(xiàn)相應(yīng)的低電平“0”,這樣就將地址/數(shù)據(jù)的信號(hào)輸出。(2)另一種是從P0口輸入數(shù)據(jù)。包括讀引腳和讀緩沖器。如果從P0口輸入數(shù)據(jù),輸入數(shù)據(jù)從引腳下方的三態(tài)輸入緩沖器進(jìn)入內(nèi)部總線。②當(dāng)控制信號(hào)應(yīng)為低電平“0”:P0口作為通用I/O口使用。控制信號(hào)為“0”,轉(zhuǎn)換開關(guān)MUX把輸出級(jí)與鎖存器Q端接通,在CPU向端口輸出數(shù)據(jù)時(shí),因與門3輸出為“0”,使V2截止,此時(shí),輸出級(jí)是漏極開路電路。當(dāng)寫入脈沖加在鎖存器時(shí)鐘端CLK上時(shí),與內(nèi)部總線相連的D端數(shù)據(jù)取反后出現(xiàn)在Q端,又經(jīng)輸出T1反相,在P0引腳上出現(xiàn)的數(shù)據(jù)正好是內(nèi)部總線的數(shù)據(jù)。當(dāng)要從P0口輸入數(shù)據(jù)時(shí),引腳信號(hào)仍經(jīng)輸入緩沖器進(jìn)入內(nèi)部總線。2023/10/2933二、P1口P1口是準(zhǔn)雙向口,它只能作通用I/O接口使用。P1口的結(jié)構(gòu)與P0口不同,它的輸出只由一個(gè)場效應(yīng)管V1與內(nèi)部上拉電阻組成,如圖:
輸入輸出原理特性與P0口作為通用I/O接口使用時(shí)一樣,當(dāng)其輸出時(shí),可以提供電流負(fù)載,不必像P0口那樣需要外接上拉電阻。P1口具有驅(qū)動(dòng)4個(gè)LSTTL負(fù)載的能力。2023/10/2934三、P2口P2口也是準(zhǔn)雙向口,它有兩種用途:通用I/O接口和高8位地址線。它的1位的結(jié)構(gòu)如圖2.8,與P1口相比,它只在輸出驅(qū)動(dòng)電路上比P1口多了一個(gè)模擬轉(zhuǎn)換開關(guān)MUX和反相器3。2023/10/2935①當(dāng)控制信號(hào)為為高電平“1”:轉(zhuǎn)換開關(guān)接右側(cè),P2口用作高8位地址總線使用時(shí),訪問片外存儲(chǔ)器的高8位地址A8~A15由P2口輸出。如系統(tǒng)擴(kuò)展了ROM,由于單片機(jī)工作時(shí)一直不斷地取指令,因而P2口將不斷地送出高8位地址,P2口將不能作通用I/O口用。如系統(tǒng)僅僅擴(kuò)展RAM,這時(shí)分幾種情況:(1)當(dāng)片外RAM容量不超過256字節(jié),在訪問RAM時(shí),只須P0口送低8位地址即可,P2口仍可作為通用I/O口使用;(2)當(dāng)片外RAM容量大于256字節(jié)時(shí),需要P2口提供高8位地址,這時(shí)P2口就不能作通用I/O接口使用。②當(dāng)控制信號(hào)為為高電平“0”:轉(zhuǎn)換開關(guān)接左側(cè),P2口用作當(dāng)作為準(zhǔn)雙向通用I/O接口??刂菩盘?hào)使轉(zhuǎn)換開關(guān)接左側(cè),其工作原理與P1相同,只是P1口輸出端由鎖存器ō接V1,而P2口是由鎖存器Q端經(jīng)反相器3接V1,也具有輸入、輸出、端口操作三種工作方式,負(fù)載能力也與P1相同。2023/10/2936四、P3口P3口1位的結(jié)構(gòu)如圖2.9。它的輸出驅(qū)動(dòng)由與非門3、V1組成,輸入比P0、P1、P2口多了一個(gè)緩沖器4。2023/10/2937P3口除了作為準(zhǔn)雙向通用I/O口使用外,它的每一根線還具有第二種功能??诰€替代的第二功能P3.0RXD(串行口輸入)P3.1TXD(串行口輸出)P3.2INT0(外部中斷0輸入)P3.3INT1(外部中斷1輸入)P3.4T0(定時(shí)器/記數(shù)器0的外部輸入)P3.5T1(定時(shí)器/記數(shù)器1的外部輸入)P3.6WR(片外數(shù)據(jù)存儲(chǔ)器“寫選通控制”輸出P3.7RD(片外數(shù)據(jù)存儲(chǔ)器“讀選通控制”輸出2023/10/2938②當(dāng)P3口作為第二功能時(shí):鎖存器的Q輸出端必須為高電平,否則V1管導(dǎo)通,引腳將被箝位在低電平,無法實(shí)現(xiàn)第二功能。當(dāng)鎖存器Q端為高電平,P3口的狀態(tài)取決于第二功能輸出線的狀態(tài)。
單片機(jī)復(fù)位時(shí),鎖存器的輸出端為高電平。P3口第二功能中輸入信號(hào)RXD、INT0、INT1、T0、T1經(jīng)緩沖器4輸入,可直接進(jìn)入芯片內(nèi)部。①當(dāng)P3口作為通用I/O接口時(shí):第二功能輸出線為高電平,與非門3的輸出取決于鎖存器的狀態(tài)。這時(shí),P3是一個(gè)準(zhǔn)雙向口,它的工作原理、負(fù)載能力與P1、P2口相同。2023/10/2939端口小結(jié):(1)系統(tǒng)總線: 地址總線(16位):P0(地址低8位)、P2口(地址高8位)數(shù)據(jù)總線(8位):P0口(地址/數(shù)據(jù)分時(shí)復(fù)用,借助ALE);控制總線(6根):P3口的第二功能和9、29、30、31腳;(2)供用戶使用的端口:P1口、部分未作第二功能的P3口;(3)P0口作地址/數(shù)據(jù)時(shí),是真正的雙向口,三態(tài),負(fù)載能力 為8個(gè)LSTTL電路;P1~P3是準(zhǔn)雙向口,負(fù)載能力為4個(gè)
LSTTL電路。(4)P0~P3在用作輸入之前必須先寫“1”,即:(P0)=FFH~(P3)=FFH。2023/10/29402.6MCS-51系列單片機(jī)的時(shí)序2.6.1機(jī)器周期和指令周期
機(jī)器周期:機(jī)器周期是單片機(jī)的基本操作周期,每個(gè)機(jī)器周期包含S1、S2、
、S6個(gè)狀態(tài),每個(gè)狀態(tài)包含2拍P1和P2,每一拍為一個(gè)時(shí)鐘周期(振蕩周期)。因此,一個(gè)機(jī)器周期包含12個(gè)時(shí)鐘周期。依次可表示為S1P1、S1P2、S2P1、S2P2、…、S6P1、S6P2。指令周期:計(jì)算機(jī)工作時(shí)不斷的取指令和執(zhí)行指令。計(jì)算機(jī)取一條指令至執(zhí)行完該指令需要的時(shí)間稱為指令周期,不同的指令,指令周期不同。單片機(jī)的指令周期以機(jī)器周期為單位。MCS-51系列單片機(jī)中,大多數(shù)指令的指令周期由一個(gè)機(jī)器周期或兩個(gè)機(jī)器周期組成,只有乘法、除法指令須要4機(jī)器周期指令。S1P1P2S2P1P2S3P1P2S4P1P2S5P1P2S6P1P2時(shí)鐘信號(hào)2023/10/2941振蕩脈沖并不直接使用,由XTAL2或XTAL1端送往內(nèi)部時(shí)鐘電路(fosc):經(jīng)過2分頻,向CPU提供2相時(shí)鐘信號(hào)P1和P2(f拍節(jié)=1/2fosc);再經(jīng)3分頻,產(chǎn)生ALE時(shí)序(fALE=1/6fosc);經(jīng)過12分頻,成為機(jī)器周期信號(hào)(MC=12/fosc),如下圖所示。需要指出的是,CPU的運(yùn)算操作在P1期間,數(shù)據(jù)傳送在P2期間。2023/10/2942時(shí)鐘周期:振蕩器輸出的時(shí)鐘脈沖頻率的倒數(shù)。為單片機(jī)中最小、最基本的時(shí)間單位。狀態(tài)周期:振蕩信號(hào)經(jīng)2分頻后獲得的信號(hào)周期,稱S,顯然,S為時(shí)鐘周期的2倍。機(jī)器周期:12個(gè)時(shí)鐘周期為一個(gè)機(jī)器周期,對(duì)應(yīng)計(jì)算機(jī)執(zhí)行一個(gè)基本操作所需的時(shí)間。指令周期:執(zhí)行一條指令所需的時(shí)間,至少包含一個(gè)機(jī)器周期。當(dāng)時(shí)鐘頻率為12MHz和6MHz時(shí),時(shí)鐘周期分別為1/12us和1/6us,機(jī)器周期分別為1us和2us。2023/10/29432.7MCS-51系列單片機(jī)的工作方式2.7.1復(fù)位方式
在時(shí)鐘電路工作以后,當(dāng)外部電路使得RST端出現(xiàn)2個(gè)機(jī)器周期(24個(gè)時(shí)鐘周期)以上的高電平時(shí),系統(tǒng)內(nèi)部復(fù)位。
復(fù)位有兩種方式:上電復(fù)位和按鈕復(fù)位。VccRSTVssMCS-51VccRSTVssMCS-511k1k200
(a)上電復(fù)位電路(b)按鈕復(fù)位電路例:若使用頻率為6MHz的晶振,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過
____才能完成復(fù)位操作。fosc=6MHzMC=12/fosc=12/6MHz=2μst=4μs2023/10/2944特殊功能寄存器初始內(nèi)容特殊功能寄存器初始內(nèi)容A00HTCON00HPC0000HTL000HB00HTH000HPSW00HTL100HSP07HTH100HDPTR0000HSCON00HP0~P3FFHSBUFXXXXXXXXBIPXX000000BPCON0XXX0000BIE0X000000BTMOD00H復(fù)位后狀態(tài):2023/10/2945第3章單片機(jī)匯編程序設(shè)計(jì)3.1MCS-51系列單片機(jī)匯編指令格式及標(biāo)識(shí)
指令是使計(jì)算機(jī)完成基本操作的命令。一種計(jì)算機(jī)能夠執(zhí)行的全部指令的集合,稱為這種計(jì)算機(jī)的指令系統(tǒng)。單片機(jī)的指令系統(tǒng)與微型計(jì)算機(jī)的指令系統(tǒng)不同,MCS-51系列單片機(jī)指令系統(tǒng)共有:
111條指令;42種指令助記符。2023/10/2946MCS-51系列單片機(jī)指令系統(tǒng)功能強(qiáng)、指令短、執(zhí)行快。從功能上可分成五大類:1、數(shù)據(jù)傳送指令;
2、算術(shù)運(yùn)算指令;
3、邏輯操作指令;
4、控制轉(zhuǎn)移指令;
5、位操作指令。2023/10/29473.1.1指令格式[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋](1)操作碼助記符表明指令的功能,不同的指令有不同的指令助記符,它一般用說明其功能的英文單詞的縮寫形式表示。(2)操作數(shù)用于給指令的操作提供數(shù)據(jù)、數(shù)據(jù)的地址或指令的地址,操作數(shù)往往用相應(yīng)的尋址方式指明。MCS-51單片機(jī)指令系統(tǒng)的指令按操作數(shù)的多少可分為無操作數(shù)、單操作數(shù)、雙操作數(shù)和三操作數(shù)四種情況。(3)標(biāo)號(hào)是該指令的符號(hào)地址,后面須帶冒號(hào)。它主要為轉(zhuǎn)移指令提供轉(zhuǎn)移的目的地址。(4)注釋是對(duì)該指令的解釋,前面須帶分號(hào)。它們是編程者根據(jù)需要加上去的,用于對(duì)指令進(jìn)行說明,對(duì)于指令本身功能而言是可以不要的。2023/10/2948(1)Ri和Rn:表示當(dāng)前工作寄存器區(qū)中的工作寄存器。
i取0或1,表示R0或R1。n取0~7,表示R0~R7。(2)#data:表示包含在指令中的8位立即數(shù)。(3)#data16:表示包含在指令中的16位立即數(shù)。(4)rel:以補(bǔ)碼形式表示的8位相對(duì)偏移量,范圍為-128~+127,主要用在相對(duì)尋址的指令中。用于SJMP或所有的條件轉(zhuǎn)移指令中。(5)addr16和addr11:分別表示16位直接地址和11位直接地址。(6)direct:表示直接尋址的地址。(7)bit:表示可位尋址的直接位地址。(8)(X):表示X單元中的內(nèi)容。3.1.2指令中用到的標(biāo)識(shí)符
為便于后面的學(xué)習(xí),在這里先對(duì)指令中用到的一些符號(hào)的約定意義作以下說明:2023/10/2949(9)((X)):表示以X單元的內(nèi)容為地址的存儲(chǔ)器單元內(nèi)容,即(X)作地址,該地址單元的內(nèi)容用((X))表示。(10)/和→符號(hào):“/”表示對(duì)該位操作數(shù)取反,但不影響該位的原值?!啊北硎静僮髁鞒?,將箭尾一方的內(nèi)容送入箭頭所指一方的單元中去。(11)Cy:進(jìn)位標(biāo)志或進(jìn)位位,也可作為位處理機(jī)中的1位累加器。
(12)
@:間址寄存器或基址寄存器的前綴。如@Ri,@A+DPTR2023/10/29503.2MCS-51指令系統(tǒng)的尋址方式
所謂尋址就是尋找確定參與操作的數(shù)的真正地址。一般來說,尋址方式越多則計(jì)算機(jī)的功能就越強(qiáng),靈活性亦越大,指令系統(tǒng)也就越復(fù)雜。
MCS-51單片機(jī)的指令系統(tǒng)共有7種尋址方式。1、立即尋址
2、直接尋址3、寄存器尋址4、寄存器間接尋址5、變址尋址
6、相對(duì)尋址
7、位尋址2023/10/29513.2.1常數(shù)尋址(立即尋址)
操作數(shù)是常數(shù),使用時(shí)直接出現(xiàn)在指令中,緊跟在操作碼的后面,作為指令的一部分。與操作碼一起存放在程序存儲(chǔ)器中,可以立即得到并執(zhí)行,不需要經(jīng)過別的途徑去尋找。常數(shù)又稱為立即數(shù),故又稱為立即尋址。在匯編指令中,立即數(shù)前面以“#”符號(hào)作前綴。在程序中通常用于給寄存器或存儲(chǔ)器單元賦初值,例如:
MOVA,#20H
其功能是把立即數(shù)20H送給累加器A,其中源操作數(shù)20H就是立即數(shù)。指令執(zhí)行后累加器A中的內(nèi)容為20H。2023/10/29523.2.2直接尋址
指令直接給出操作數(shù)地址。占一個(gè)字節(jié)。可訪問兩種地址空間:特殊功能寄存器地址空間是唯一能訪問該空間的尋址方式。片內(nèi)內(nèi)部RAM(128個(gè)字節(jié):00H~7FH)2023/10/29533.2.2直接尋址
直接尋址是指數(shù)據(jù)在存儲(chǔ)器單元中,在指令中直接提供存儲(chǔ)器單元的地址。在MCS-51系統(tǒng)中,這種尋址方式針對(duì)的是片內(nèi)數(shù)據(jù)存儲(chǔ)器和特殊功能寄存器。在匯編指令中,指令中直接以地址數(shù)的形式提供存儲(chǔ)器單元的地址。例如:
MOVA,20H
其功能是把片內(nèi)數(shù)據(jù)存儲(chǔ)器20H單元的內(nèi)容送給累加器A。如指令執(zhí)行前片內(nèi)數(shù)據(jù)存儲(chǔ)器20H單元的內(nèi)容為30H,則指令執(zhí)行后累加器A的內(nèi)容為30H。指令中20H是地址數(shù),它是片內(nèi)數(shù)據(jù)存儲(chǔ)單元的地址。在MCS-51中,數(shù)據(jù)前面不加“#”是存儲(chǔ)單元地址而不是常數(shù),常數(shù)前面要加符號(hào)“#”。
對(duì)于特殊功能寄存器,在指令中使用時(shí)往往通過特殊功能寄存器的名稱使用,而特殊功能寄存器名稱實(shí)際上是特殊功能寄存器單元的符號(hào)地址,因此它們是直接尋址。例如:
MOVA,P0
其功能是把P0口的內(nèi)容送給累加器A。P0是特殊功能寄存器P0口的符號(hào)地址,該指令在翻譯成機(jī)器碼時(shí),P0就轉(zhuǎn)換成直接地址80H。2023/10/29543.2.3寄存器數(shù)尋址(寄存器尋址)
操作數(shù)在寄存器中,使用時(shí)在指令中直接提供寄存器的名稱,這種尋址方式稱為寄存器尋址。在MCS-51系統(tǒng)中,這種尋址方式針對(duì)的寄存器只能是R0~R78個(gè)通用寄存器和部分特殊功能寄存器(如累加器A、寄存器B、數(shù)據(jù)指針DPTR等)中的數(shù)據(jù),對(duì)于其它的特殊功能寄存器中的內(nèi)容的尋址方式不屬于它。在匯編指令中,寄存器尋址在指令中直接提供寄存器的名稱,如R0、R1、A、DPTR等。例如:
MOVA,R0
其功能是把R0寄存器中的數(shù)送給累加器A,在指令中,源操作數(shù)R0為寄存器尋址,傳送的對(duì)象為R0中的數(shù)據(jù)。如指令執(zhí)行前R0中的內(nèi)容為20H,則指令執(zhí)行后累加器A中的內(nèi)容為20H。2023/10/29553.2.4寄存器間接尋址
寄存器間接尋址是指數(shù)據(jù)存放在存儲(chǔ)單元中,而存儲(chǔ)單元地址存放在寄存器中,在指令中通過提供存放存儲(chǔ)單元地址的寄存器來使用對(duì)應(yīng)的存儲(chǔ)單元。形式為:@寄存器名。例如:MOVA,@R1
該指令的功能是將以工作寄存器R1中的內(nèi)容為地址的片內(nèi)RAM單元的數(shù)據(jù)傳送到累加器A中去。指令的源操作數(shù)是寄存器間接尋址。80H20H20HA80HR1
在MCS-51單片機(jī)中,寄存器間接尋址用到的寄存器只能是通用寄存器R0、R1和數(shù)據(jù)指針寄存器DPTR和SP
,它能訪問的數(shù)據(jù)是片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器。其中,片內(nèi)數(shù)據(jù)存儲(chǔ)器只能用R0和R1作指針間接訪問;片外數(shù)據(jù)存儲(chǔ)器,低端的256字節(jié)單元,既可以用兩位十六進(jìn)制地址以R0或R1作指針間接訪問,也可用DPTR作指針間接訪問,而高端的字節(jié)單元?jiǎng)t只能以DPTR作指針間接訪問。對(duì)于片內(nèi)RAM和片外RAM的低端256字節(jié)都可以用R0和R1作指針訪問,它們之間用指令來區(qū)別。片內(nèi)RAM訪問用MOV指令,片外RAM訪問用MOVX指令。
若R1中的內(nèi)容為80H,片內(nèi)RAM地址為80H的單元中的內(nèi)容為20H,則執(zhí)行該指令后,累加器A的內(nèi)容為20H。2023/10/2956例如:MOVCA,@A+DPTR
其功能是將數(shù)據(jù)指針寄存器DPTR的內(nèi)容和累加器A中的內(nèi)容相加作為程序存儲(chǔ)器的地址,從對(duì)應(yīng)的單元中取出內(nèi)容送累加器A中。指令中,源操作數(shù)的尋址方式為變址尋址,設(shè)指令執(zhí)行前數(shù)據(jù)指針寄存器DPTR的值為2000H,累加器A的值為05H,程序存儲(chǔ)器2005H單元的內(nèi)容為30H,則指令執(zhí)行后,累加器A中的內(nèi)容為30H。示意圖如左圖所示。2000H30H30HDPTRA2005H05HA+3.2.5變址尋址
變址尋址是指操作數(shù)的地址由基址寄存器的地址加上變址寄存器的地址得到。在MCS-51系統(tǒng)中,它是以數(shù)據(jù)指針寄存器DPTR或程序計(jì)數(shù)器PC為基址,累加器A為變址,兩者相加得存儲(chǔ)單元的地址,所訪問的存儲(chǔ)器為程序存儲(chǔ)器。2023/10/2957程序存儲(chǔ)器2000HDPTR64H(10H)A2010H64H10H2000H變址尋址的指令只有三條:MOVCA,@A+DPTR、MOVCA,@A+PC和JMP@A+DPTR
例:(DPTR)=2000H,(A)=10H,
MOVCA,@A+DPTR指令操作示意圖如下圖所示。2023/10/29583.2.4位尋址
位尋址是指操作數(shù)是二進(jìn)制位的尋址方式。在MCS-51單片機(jī)中有一個(gè)獨(dú)立的位處理器,有多條位處理指令,能夠進(jìn)行各種位運(yùn)算。在MCS-51系統(tǒng)中,位處理的操作對(duì)象是各種可位尋址位。對(duì)于它們的訪問是通過提供相應(yīng)的位地址來處理。
指令給出位地址。一位數(shù)據(jù)在存儲(chǔ)器位尋址區(qū)。
(1)內(nèi)部RAM低128單元中的位尋址區(qū):位地址為00H~07FH共128位(字節(jié)地址為20H~2FH);
(2)內(nèi)部RAM高128單元中的專用寄存器的可尋址位:
SFR中11個(gè)有位地址寄存器中的83位。2023/10/2959
在MCS-51系統(tǒng)中,位地址的表示可以用以下幾種方式:1.直接使用位地址(00H~7FH)。 例如:PSW的位6可表示為0D6H(位地址)。2.字節(jié)地址帶位號(hào)。 例如:PSW的位6可表示為0D0H.6;
20H.3表示20H單元的3位。3.特殊功能寄存器名帶位號(hào)。 例如:PSW的位6可表示為PSW.6;
P0.1表示P0口的1位。4.位符號(hào)地址,即位名稱的表示方法 例如:PSW的位6可表示為AC;
TR0是定時(shí)/計(jì)數(shù)器T0的啟動(dòng)位。
F0標(biāo)志位2023/10/2960例:
MOVC,40H ;CY?(位地址40H)
設(shè)指令執(zhí)行前CY=1,位地址40H存儲(chǔ)器單元如圖,執(zhí)行指令后,CY=?29H0110001028H11010110位尋址區(qū)02023/10/29613.2.5相對(duì)尋址(只用于轉(zhuǎn)移指令)
相對(duì)尋址是以當(dāng)前程序計(jì)數(shù)器PC值加上指令中給出的偏移量rel得到目的位置的地址。在MCS-51系統(tǒng)中,相對(duì)轉(zhuǎn)移指令的操作數(shù)屬于相對(duì)尋址。在使用相對(duì)尋址時(shí)要注意以下兩點(diǎn):(1)當(dāng)前PC值是指轉(zhuǎn)移指令執(zhí)行時(shí)的PC值,它等于轉(zhuǎn)移指令的地址加上轉(zhuǎn)移指令的字節(jié)數(shù)。實(shí)際上是轉(zhuǎn)移指令的下一條指令的地址。例如:若轉(zhuǎn)移指令的地址為2010H,轉(zhuǎn)移指令的長度為2字節(jié),則轉(zhuǎn)移指令執(zhí)行時(shí)的PC值為2012H。(2)偏移量rel是8位有符號(hào)數(shù),以補(bǔ)碼表示,它的取值范圍為-128~+127。當(dāng)為負(fù)值時(shí),向前轉(zhuǎn)移,當(dāng)為正數(shù)時(shí)向后轉(zhuǎn)移。相對(duì)尋址的目的地址為:目的地址=轉(zhuǎn)移指令的地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel=當(dāng)前PC+relPC--(前)+(后)2023/10/2962例如:SJMP08H;PC←PC+2+08H(PC)=2000H指令操作示意圖如下圖所示。程序存儲(chǔ)器(2000H)200AHSJMP200AH08H2000H+208HPC2000H2023/10/29633.3MCS-51系列單片機(jī)指令系統(tǒng)3.3.1數(shù)據(jù)傳送指令
數(shù)據(jù)傳送類指令共28條,是將源操作數(shù)送到目的操作數(shù)。指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)取代。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP
8種。這類指令可分為三組:
普通傳送指令;數(shù)據(jù)交換指令;堆棧操作指令。2023/10/2964一、普通傳送指令普通傳送指令以助記符MOV為基礎(chǔ)。分成片內(nèi)數(shù)據(jù)存儲(chǔ)器傳送指令、片外數(shù)據(jù)存儲(chǔ)器傳送指令和程序存儲(chǔ)器傳送指令。1.片內(nèi)數(shù)據(jù)存儲(chǔ)器傳送指令MOV指令格式:MOV目的操作數(shù),源操作數(shù)其中:源操作數(shù)可以為A、Rn、@Ri、direct、#data,目的操作數(shù)可以為A、Rn、@Ri、direct,組合起來總共16條。2023/10/2965(1)以A為目的操作數(shù)
MOVA,Rn ;A←Rn MOVA,direct ;A←(direct)
MOVA,@Ri ;A←(Ri)
MOVA,#data ;A←#data(2)以Rn為目的操作數(shù)
MOVRn,A ;Rn←A MOVRn,direct ;Rn←(direct)
MOVRn,#data ;Rn←#data(3)以直接地址direct為目的操作數(shù)
MOVdirect,A ;(direct)←A MOVdirect,Rn ;(direct)←Rn MOVdirect,direct ;(direct)←(direct)
MOVdirect,@Ri ;(direct)←(Ri)
MOVdirect,#data ;(direct)←#data按目的操作數(shù)的尋址方式劃分為五組:2023/10/2966(4)以間接地址@Ri為目的操作數(shù)
MOV@Ri,A ;(Ri)←A MOV@Ri,direct ;(Ri)←(direct)
MOV@Ri,#data ;(Ri)←#data(5)以DPTR為目的操作數(shù)
MOVDPTR,#data16;DPTR←#data16注意:
源操作數(shù)和目的操作數(shù)中的Rn和@Ri不能相互配對(duì)。如不允許有“MOVRn,Rn”,“MOV@Ri,Rn”這樣的指令,在MOV指令中,不允許在一條指令中同時(shí)出現(xiàn)工作寄存器,無論它是寄存器尋址還是寄存器間接尋址。
2023/10/2967MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H練習(xí)題:用兩種尋址方式實(shí)現(xiàn),將片內(nèi)RAM60H單元的數(shù)據(jù)傳送給累加器A。解:MOVA,#60H(×)MOVR0,#60H(√)
MOVA,@R0;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30HMOVR0,60HMOVA,@R0
(×)
解:MOVA,60H
(√)
結(jié)果A=32H例:順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。地址內(nèi)容…32H58H…60H32H2023/10/2968
說明:1、一條指令中不能同時(shí)出現(xiàn)兩個(gè)工作寄存器。
非法指令: MOVR1,R2
MOVR2,@R02、間址寄存器只能使用R0、R1。
非法指令:MOVA,@R23、
SFR區(qū)只能直接尋址,不能用寄存器間接尋址。
非法指令:MOVR0,#80H
MOVA,@R04、指令表:注意表中指令字節(jié)數(shù)和機(jī)器周期數(shù)2023/10/29692.片外數(shù)據(jù)存儲(chǔ)器傳送指令MOVX
在MCS-51系統(tǒng)中只能通過累加器A與片外數(shù)據(jù)存儲(chǔ)器進(jìn)行數(shù)據(jù)傳送,訪問時(shí),只能通過@Ri和@DPTR以間接尋址方式進(jìn)行。MOVX指令共有四條:①DPTR作16位數(shù)據(jù)指針,尋址64KB片外RAM空間:
MOVXA,@DPTR
;A←(DPTR)
(讀)
MOVX@DPTR,A
;(DPTR)←A
(寫)②Ri作8位數(shù)據(jù)指針,尋址256B片外RAM空間:
MOVX A,@Ri
;A←(P2Ri)
(讀)
MOVX @Ri,A
;(P2Ri)←A
(寫)
其中前兩條指令通過DPTR間接尋址,可以對(duì)整個(gè)64KB片外數(shù)據(jù)存儲(chǔ)器訪問。后兩條指令通過@Ri間接尋址,只能對(duì)片外數(shù)據(jù)存儲(chǔ)器的低端的256字節(jié)訪問,訪問時(shí)將低8位地址放于Ri中。2023/10/2970例:實(shí)現(xiàn)片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送(2000H)→(2100H)。
MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A ;DPTR=2000H
;A=X
;DPTR=2100H
;(2100H)=X習(xí)題:將片外RAM0000H單元的數(shù)據(jù)傳送到片內(nèi)RAM的60H單元。片外數(shù)據(jù)存儲(chǔ)器不能直接尋址。下列為非法指令:
MOVXA,2000HMOVX2100H,2000H思考題:為什么對(duì)DPTR的數(shù)據(jù)傳送使用內(nèi)部傳送指令?2023/10/29713.程序存儲(chǔ)器傳送指令MOVC
程序存儲(chǔ)器傳送指令只有兩條,一條用DPTR基址變址尋址。一條用PC基址變址尋址。這兩條指令通常用于訪問表格數(shù)據(jù),因此以稱為查表指令。①DPTR為基址寄存器:
MOVC A,@A+DPTR;A?(A+DPTR)(讀) 查表范圍為64KB程序存儲(chǔ)器任意空間,稱為遠(yuǎn)程查表指令。②PC為基址寄存器:
MOVC A,@A+PC ;A?(A+PC)(讀) 常數(shù)表只能在查表指令后256B范圍內(nèi),稱為近程查表指令。特點(diǎn):
MOVCA,@A+DPTR指令可訪問整個(gè)ROM的64KB空間,表格可放在ROM
的任何位置,與MOVC指令無必然的關(guān)系。
MOVCA,@A+PC指令優(yōu)點(diǎn):不改變PC的狀態(tài),根據(jù)A的內(nèi)容取表格常數(shù)。缺點(diǎn):(1)表格只能存放在查表指令以下的256個(gè)單元內(nèi)。(2)當(dāng)表格首地址與本指令間有其它指令時(shí),須用調(diào)整偏移量,調(diào)整量為下一條指令的起始地址到表格首址之間的字節(jié)數(shù)。2023/10/2972例如:查表指令MOVCA,@A+PC所在的地址為2000H,表格的起始單元地址為2035H,表格的第4個(gè)元素(位移量為03H)的內(nèi)容為45H,則查表指令的處理過程如下:MOVA,#03H;表格元素相對(duì)于表首的位移量送累加器AADDA,#34H;當(dāng)前程序計(jì)數(shù)器PC相對(duì)于表首的差值加到累加器A中MOVCA,@A+PC;查表,查得第4個(gè)元素內(nèi)容45H送累加器A
注意:查表指令的長度為1個(gè)字節(jié),當(dāng)前程序計(jì)數(shù)器PC的值應(yīng)為查表指令的地址加1。地址內(nèi)容2000HMOVC2001H………2035H表格2036H…2037H45HPC→2023/10/2973【例3-1】寫出完成下列功能的程序段。(1)將R0的內(nèi)容送R6中程序?yàn)椋?/p>
MOVA,R0 MOVR6,A(2)將片內(nèi)RAM30H單元的內(nèi)容送片外60H單元中程序?yàn)椋? MOVA,30H MOVR0,#60H MOVX@R0,A(3)將片處RAM1000H單元的內(nèi)容送片內(nèi)20H單元中程序?yàn)椋? MOVDPTR,#1000H MOVA,@DPTR MOV20H,A(4)將ROM2000H單元的內(nèi)容送片內(nèi)RAM的30H單元中程序?yàn)椋? MOVA,#0 MOVDPTR,#2000H MOVCA,@A+DPTR MOV30H,A2023/10/2974二、數(shù)據(jù)交換指令普通傳送指令實(shí)現(xiàn)將源操作數(shù)的數(shù)據(jù)傳送到目的操作數(shù),指令執(zhí)行后源操作數(shù)不變,數(shù)據(jù)傳送是單向的。數(shù)據(jù)交換指令數(shù)據(jù)作雙向傳送,傳送后,前一個(gè)操作數(shù)原來的內(nèi)容傳送到后一個(gè)操作數(shù)中,后一個(gè)操作數(shù)原來的內(nèi)容傳送到前一個(gè)操作數(shù)中。數(shù)據(jù)交換指令要求第一個(gè)操作數(shù)須為累加器A,共有5條。
XCHA,Rn ;A←→Rn XCHA,direct ;A←→(direct) XCHA,@Ri ;A←→(Ri) XCHDA,@Ri ;A0~3←→(Ri)0~3 SWAPA ;A0~3←→A4~72023/10/2975【例3-2】若R0的內(nèi)容為30H,片內(nèi)RAM30H單元的內(nèi)容為23H,累加器A的內(nèi)容為45H,則執(zhí)行
XCHA,@R0
指令后片內(nèi)RAM30H單元的內(nèi)容為45H,累加器A中的內(nèi)容為23H。若執(zhí)行SWAPA指令,則累加器A的內(nèi)容為54H。習(xí)題:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。例:設(shè)A=29H,執(zhí)行指令XCHA,2AH后,
A=?,(2AH)=?38H29HXCH60H,61H;
←對(duì)嗎?不對(duì)??!29H2023/10/2976三、堆棧操作指令堆棧是在片內(nèi)RAM中按“先進(jìn)后出,后進(jìn)先出”原則設(shè)置的專用存儲(chǔ)區(qū)。數(shù)據(jù)的進(jìn)棧和出棧由指針SP統(tǒng)一管理。在MCS-51系統(tǒng)中,堆棧操作指令有兩條:
PUSHdirect ;SP←(SP+1),(SP)←(direct) POPdirect ;(direct)←(SP),(SP)←(SP-1)
其中PUSH指令入棧,POP指令出棧。操作時(shí)以字節(jié)為單位。入棧時(shí)SP指針先加1,再入棧。出棧時(shí)內(nèi)容先出棧,SP指針再減1。用堆棧保存數(shù)據(jù)時(shí),先入棧的內(nèi)容后出棧;后入棧的內(nèi)容先出棧。
【例3-3】若入棧保存時(shí)入棧的順序?yàn)椋?/p>
PUSHA PUSHB
則出棧的順序?yàn)椋?/p>
POPB POPA2023/10/2977
30H
61H
70H
62H
10H
60H
SP
PUSHA
(SP)+1=61H
SP(A)
61H例如:當(dāng)(SP)=60H,(A)=30H,(B)=70H時(shí)執(zhí)行下列指令PUSHB
(SP)+1=62H
SP(B)
62H
結(jié)果:(61H)=30H(62H)=70H(SP)=62H
棧底棧頂2023/10/297812H
60H
70H
62HSP例如:當(dāng)(SP)=62H,(62H)=70H,(61H)=30H時(shí),執(zhí)行下列指令POPDPH
((SP))
DPH(SP)-1
SPPOPDPL
((SP))
DPL(SP)-1
SP
結(jié)果:(DPTR)=7030H(SP)=60H
30H
61HSPDPHDPLSP2023/10/2979習(xí)題:找出指令錯(cuò)誤并改正:1.MOVA,#1000H;A←1000H(A裝1個(gè)字節(jié)數(shù))2.MOVXA,1000H;A←(1000H)片外RAM(DPTR、Ri)3.MOVCA,1000H;A←(1000H)片外ROM(DPTR、PC)4.MOVX60H,A ;片外RAM(60H)←A(應(yīng)為MOV)5.MOVR0,60H;片內(nèi)RAM:(61H)←(60H)
MOV61H,@R0(片內(nèi)RAM可直接尋址)
6.XCHR1,R2 ;R1?R2(必須有A參加)7.MOVXDPTR,#2000H;DPTR←2000H(應(yīng)為MOV)8.MOVX60H,@DPTR ;片內(nèi)RAM←片外RAM(必須有A參加)2023/10/29803.3.2算術(shù)運(yùn)算指令一.加法指令1.一般的加法指令A(yù)DDADDA,Rn ;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri ;A←A+(Ri)ADDA,#data ;A←A+#data2.帶進(jìn)位加指令A(yù)DDCADDCA,Rn ;A←A+Rn+CADDCA,direct ;A←A+(direct)+CADDCA,@Ri ;A←A+(Ri)+CADDCA,#data ;A←A+#data+C3.加1指令I(lǐng)NCA ;A←A+1INCRn ;Rn←Rn+1INCdirect ;(direct)←(direct)+1INC@Ri ;(Ri)←(Ri)+1INCDPTR ;DPTR←DPTR+1
其中,ADD和ADDC指令在執(zhí)行時(shí)要影響CY、AC、OV和P標(biāo)志位。而INC指令除了INCA要影響P標(biāo)志位外,對(duì)其它標(biāo)志位都沒有影響。在MCS-51單片機(jī)中,常用ADD和ADDC配合使用實(shí)現(xiàn)多字節(jié)加法運(yùn)算。2023/10/2981【例3-4】試把存放在R1R2和R3R4中的兩個(gè)16位數(shù)相加,結(jié)果存于R5R6中。處理時(shí),R2和R4用一般的加法指令A(yù)DD,結(jié)果放于R6中,R1和R3用帶進(jìn)位的加法指令A(yù)DDC,結(jié)果放于R5中,程序如下:
MOV A,R2 ADD A,R4 MOV R6,A MOV A,R1 ADDCA,R3 MOV R5,AR1R2R3R4R5R6C+ADDADDCC2023/10/2982二.減法指令1.帶借位減法指令SUBBSUBBA,Rn ;A←A-Rn-CSUBBA,direct ;A←A-(direct)-CSUBBA,@Ri ;A←A-(Ri)-CSUBBA,#data ;A←A-#data-
C2.減1指令DECDECA ;A←A-1DECRn ;Rn←Rn-1DECdirect ;direct←(direct)-1DEC@Ri ;(Ri)←(Ri)-12023/10/29833.乘法指令MUL
在MCS-51單片機(jī)中,乘法指令只有一條:
MULAB
該指令執(zhí)行時(shí)將對(duì)存放于累加器A中的無符號(hào)被乘數(shù)和放于B寄存器中的無符號(hào)乘數(shù)相乘,積的高字節(jié)存于B寄存器中,低字節(jié)存于累加器A中。指令執(zhí)行后將影響CY和OV標(biāo)志,CY復(fù)位,對(duì)于OV:當(dāng)積大于255時(shí)(即B中不為0),OV為1;否則,OV為0。2023/10/29844.除法指令DIV
在MCS-51單片機(jī)中,除法指令也只有一條:
DIVAB
該指令執(zhí)行時(shí)將用存放在累加器A中的無符號(hào)被除數(shù)與存放在B寄存器中的無符號(hào)除數(shù)相除,除得的結(jié)果,商的存于累加器A中,余數(shù)存于B寄存器中。指令執(zhí)行后將影響CY和OV標(biāo)志,一般情況CY和OV都清0,只有當(dāng)B寄存器中的除數(shù)為0時(shí),CY和OV才被置1。2023/10/29855.十進(jìn)制調(diào)整指令在MCS-51單片機(jī)中,十進(jìn)制調(diào)整指令只有一條:
DAA
它只能用在ADD或ADDC指令后面,用來對(duì)兩個(gè)二位的壓縮的BCD碼數(shù)通過用ADD或ADDC指令相加后存于累加器A中的結(jié)果進(jìn)行調(diào)整,使得它得到正確的十進(jìn)制結(jié)果。通過該指令可實(shí)現(xiàn)兩位十進(jìn)制BCD碼數(shù)的加法運(yùn)算。它的調(diào)整過程為:(1)若累加器A的低四位為十六進(jìn)制的A~F或輔助進(jìn)位標(biāo)志AC為1,則累加器A中的內(nèi)容作加06H調(diào)整。(2)若累加器A的高四位為十六進(jìn)制的A~F或進(jìn)位標(biāo)志CY為1,則累加器A中的內(nèi)容作加60H調(diào)整。2023/10/29862023/10/29873.3.3邏輯操作指令一.邏輯與指令A(yù)NLANLA,Rn ;A←A
RnANLA,direct ;A←A
(direct)ANLA,@Ri ;A←A((Ri))ANLA,#data ;A←AdataANLdirect,A ;(direct)←(direct)AANLdirect,#data;(direct)←(direct)data二.邏輯或指令ORLORLA,Rn ;A←ARnORLA,direct ;A←A(direct)ORLA,@Ri ;A←A((Ri))ORLA,#data ;A←AdataORLdirect,A ;(direct)←(direct)AORLdirect,#data;(direct)←(direct)data2023/10/2988三.邏輯異或指令XRLXRLA,Rn ;A←A
RnXRLA,direct ;A←A
(direct)XRLA,@Ri ;A←A((Ri))XRLA,#data ;A←AdataXRLdirect,A ;(direct)←(direct)
AXRLdirect,#data;(direct)←(direct)
data
在使用中,邏輯與用于實(shí)現(xiàn)對(duì)指定位清0,其余位不變;邏輯或用于實(shí)現(xiàn)對(duì)指定位置1,其余位不變;邏輯異或用于實(shí)現(xiàn)指定位取反,其余位不變?!纠?-7】寫出完成下列功能的指令段。1.對(duì)累加器A中的1、3、5位清0,其余位不變
ANLA,#11010101B2.對(duì)累加器A中的2、4、6位置1,其余位不變
ORLA,#01010100B3.對(duì)累加器A中的0、1位取反,其余位不變
XRLA,#00000011B2023/10/2989四.清零和求反指令1.清零指令:CLRA ;A←02.求反指令:CPLA ;A←ā
在MCS-51系統(tǒng)中,只能對(duì)累加器A中的內(nèi)容進(jìn)行清零和求反,如要對(duì)其它的寄存器或存儲(chǔ)單元進(jìn)行清零和求反,則須放在累加器A進(jìn)行,運(yùn)算后再放回原位置?!纠?-8】寫出對(duì)R0寄存器內(nèi)容求反的程序段。程序?yàn)椋?/p>
MOVA,R0 CPLA MOVR0,A2023/10/2990五.循環(huán)移位指令
MCS-51系統(tǒng)有四條對(duì)累加器A的循環(huán)移位指令,前兩條只在累加器A中進(jìn)行循環(huán)移位,后兩條還要帶進(jìn)位標(biāo)志CY進(jìn)行循環(huán)移位。每一次移一位。分別如下:
1)8位循環(huán)指令:
RLA
;A循環(huán)左移一位
RRA
;A循環(huán)右移一位2)9位循環(huán)指令:
RLCA;帶CY循環(huán)左移一位
RRCA;帶CY循環(huán)右移一位AAACAC2023/10/2991CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A01CYR6R5CY;CY=0;R6=01010101B,R5=10101010B,CY=0;R6=01010101B,R5=01010100B,CY=1;R6=10101011B,R5=01010100B,CY=0用9位循環(huán)指令實(shí)現(xiàn)多字節(jié)移位:例:設(shè)R6=55H,R5=0AAH編程將寄存器R6R5中的雙字節(jié)數(shù)X左移一位?!纠?-9】若累加器A中的內(nèi)容為10001011B,CY=0,則執(zhí)行RLCA指令后累加器A中的內(nèi)容為00010110,CY=1。;R5=01010100B,CY=12023/10/29923.3.4控制轉(zhuǎn)移指令共有17條,包括:無條件轉(zhuǎn)移指令;條件轉(zhuǎn)移指令;子程序調(diào)用及返回指令。一、無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令是指當(dāng)執(zhí)行該指令后,程序?qū)o條件地轉(zhuǎn)移到指令指定的地方去。無條件轉(zhuǎn)移指令包括長轉(zhuǎn)移指令、絕對(duì)轉(zhuǎn)移指令、相對(duì)轉(zhuǎn)移指令和間接轉(zhuǎn)移指令。2023/10/2993一、無條件轉(zhuǎn)移指令指令:LJMP,AJMP,SJMP,JMP——4條LJMPaddr16長跳轉(zhuǎn)指令
——可在64KB范圍內(nèi)跳轉(zhuǎn)AJMPaddr11絕對(duì)跳轉(zhuǎn)指令
——可在指令所在的2KB范圍內(nèi)跳轉(zhuǎn)SJMPrel相對(duì)跳轉(zhuǎn)指令
——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn)JMP@A+DPTR間接長跳轉(zhuǎn)指令
——可在以DPTR為基址+A為偏移量之和所指向的64KB程序范圍內(nèi)跳轉(zhuǎn)2023/10/29941.長轉(zhuǎn)移指令LJMP
指令格式:LJMPaddr16
;PC←addr16
指令后面帶目的位置的16位地址,執(zhí)行時(shí)直接將該16位地址送給程序指針PC,程序無條件地轉(zhuǎn)到16位目標(biāo)地址指明的位置去。指令中提供的是16位目標(biāo)地址,所以可以轉(zhuǎn)移到64KB程序存儲(chǔ)器的任意位置,故得名為“長轉(zhuǎn)移”。該指令不影響標(biāo)志位,使用方便。缺點(diǎn)是:執(zhí)行時(shí)間長,字節(jié)數(shù)多。2023/10/29952.絕對(duì)轉(zhuǎn)移指令指令格式:AJMPaddr11
;PC10~0←addr11
AJMP指令后帶的是目的位置的低11位直接地址,執(zhí)行時(shí),先將程序指針PC的值加2(該指令長度為2字節(jié)),然后把指令中的11位地址addr11送給程序指針PC的低11位,而程序指針的高5位不變,執(zhí)行后轉(zhuǎn)移到PC指針指向的新位置。由于11位地址addr11的范圍是00000000000~111
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度設(shè)施農(nóng)業(yè)種植與銷售合同3篇
- 2025農(nóng)村自建房綠色建材采購與應(yīng)用合同
- 二零二五年度兼職業(yè)務(wù)員客戶滿意度調(diào)查合同3篇
- 2025年度公司解除與因自然災(zāi)害影響員工勞動(dòng)合同證明3篇
- 二零二五年度環(huán)保材料研發(fā)與應(yīng)用股東合伙人協(xié)議3篇
- 2025技術(shù)培訓(xùn)合同范本
- 2025年度創(chuàng)意產(chǎn)業(yè)園區(qū)商鋪?zhàn)赓U管理協(xié)議3篇
- 2025年度礦山礦產(chǎn)資源勘查與開發(fā)利用合作協(xié)議3篇
- 二零二五年度地質(zhì)勘探駕駛員聘用合同協(xié)議書3篇
- 二零二五年度市政工程機(jī)械租賃與施工合同3篇
- 物流公司安全生產(chǎn)監(jiān)督檢查管理制度
- DB22T 277-2011 建筑電氣防火檢驗(yàn)規(guī)程
- 2024年基本公共衛(wèi)生服務(wù)工作計(jì)劃(三篇)
- 2024-2030年中國錸行業(yè)供需趨勢及發(fā)展規(guī)模分析報(bào)告
- 2025屆上海市復(fù)旦附中浦東分校物理高二上期末教學(xué)質(zhì)量檢測試題含解析
- 2023-2024學(xué)年《軟件設(shè)計(jì)與體系結(jié)構(gòu)》模擬試卷及答案解析
- 2024年中國氦氣市場調(diào)查研究報(bào)告
- GB/T 22723-2024天然氣能量的測定
- 航空與航天學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 第四單元圖形的變化(單元測試)-2024-2025學(xué)年二年級(jí)上冊數(shù)學(xué)北師大版
- 2023-2024年福建高中物理會(huì)考試卷(福建會(huì)考卷)
評(píng)論
0/150
提交評(píng)論