《單片機(jī)原理及應(yīng)用》電子教案.ppt
《《單片機(jī)原理及應(yīng)用》電子教案.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《單片機(jī)原理及應(yīng)用》電子教案.ppt(245頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、MCS-51單片機(jī)原理及應(yīng)用,湖南鐵道職業(yè)技術(shù)學(xué)院,本書主要內(nèi)容,單片機(jī)基礎(chǔ)知識(shí)單片機(jī)的組成與結(jié)構(gòu)分析MCS-51單片機(jī)的指令系統(tǒng)單片機(jī)的程序設(shè)計(jì)MCS-51單片機(jī)的中斷系統(tǒng)定時(shí)/計(jì)數(shù)器單片機(jī)的串行通信及接口MCS-51單片機(jī)的系統(tǒng)擴(kuò)展,第1章單片機(jī)概述,▲單片機(jī)簡介▲單片機(jī)發(fā)展概述▲單片機(jī)應(yīng)用領(lǐng)域▲單片機(jī)的發(fā)展趨勢(shì)▲MCS-51系列單片機(jī)簡介▲學(xué)習(xí)單片機(jī)技術(shù)的方法,1.1單片機(jī)簡介,,,單片機(jī)是單片微型計(jì)算機(jī)的簡稱,單片機(jī)可以認(rèn)為是一種計(jì)算機(jī)集成芯片,采用超大規(guī)模集成技術(shù),將中央處理器(CPU)、存儲(chǔ)器(ROM、RAM)、輸入、輸出接口集成在一塊芯片上,構(gòu)成的計(jì)算機(jī)硬件系統(tǒng)。,1.2單片機(jī)的
2、發(fā)展概況,,第一階段(1971~1976)代表Zilog公司Z80,,,第二階段(1976~1979)Intel公司MCS-48,,第三階段(1979~1982)IntelMCS-51,Motorola6081/2Rokwell6501/2,,,第四階段(1982~1990)MCS-9616位,,第五階段(1990至今)MicrochipPICMotorolaMC68HC等,,,1.3單片機(jī)的應(yīng)用領(lǐng)域,1.在工業(yè)測(cè)控中的應(yīng)用2.在智能產(chǎn)品中的應(yīng)用在計(jì)算機(jī)網(wǎng)絡(luò)與通信技術(shù)中的應(yīng)用在家用電器中的應(yīng)用在醫(yī)用設(shè)備領(lǐng)域中的應(yīng)用,低功耗CMOS化微型單片化主流與多品種共存,1.4單片機(jī)的發(fā)展趨勢(shì),1.5MC
3、S-51系列單片機(jī)簡介,1.內(nèi)部結(jié)構(gòu)2.MCS-51系列單片機(jī)產(chǎn)品,1.6學(xué)習(xí)單片機(jī)技術(shù)的方法,1.學(xué)習(xí)單片機(jī)所需的準(zhǔn)備工作硬件準(zhǔn)備軟件準(zhǔn)備知識(shí)準(zhǔn)備初學(xué)者推薦的軟件硬件準(zhǔn)備2.學(xué)習(xí)過程與考核方法主要課堂學(xué)習(xí)環(huán)節(jié)教學(xué)形式與過程學(xué)習(xí)要求與考核方法,1.7不同計(jì)數(shù)制之間的轉(zhuǎn)換,1.7.1十進(jìn)制數(shù),一個(gè)十進(jìn)制數(shù),它的數(shù)值是由數(shù)碼0,1,2,…,8,9來表示的。數(shù)碼所處的位置不同,代表數(shù)的大小也不同。,例如:53478=5104+3103+4102+7101+8100,對(duì)應(yīng)于:,,1.7.2二進(jìn)制數(shù),二進(jìn)制是按“逢二進(jìn)一”的原則進(jìn)行計(jì)數(shù)的。二進(jìn)制數(shù)的基為“2”,即其使用的數(shù)碼為0、1,共兩個(gè)。二進(jìn)制數(shù)的
4、權(quán)是以2為底的冪。,例如:10110100=127+026+125+124+023+122+021+020,對(duì)應(yīng)于:,其各位的權(quán)為1,2,4,8,…,即以2為底的0次冪、1次冪、2次冪等。(10110100)2=127+026+125+124+023+122+021+020=180,,1.7.3十六進(jìn)制數(shù),十六進(jìn)制數(shù)的基為16,即基數(shù)碼共有l(wèi)6個(gè):0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn)。其中A,B,C,D,E,F(xiàn)分別代表值為十進(jìn)制數(shù)中的10,11,12,13,14,15。十六進(jìn)制的權(quán)為以16為底的冪。,例如:4F8E=4163+F162+8161+E160=20366,
5、對(duì)應(yīng)于:,,常用計(jì)數(shù)制表示數(shù)的方法比較,1.7.4不同進(jìn)制數(shù)之間的轉(zhuǎn)換,1.十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法,就是用2去除該十進(jìn)制數(shù),得商和余數(shù),此余數(shù)為二進(jìn)制代碼的最小有效位(LSB)或最低位的值;再用2除該商數(shù),又可得商數(shù)和余數(shù),則此余數(shù)為LSB左鄰的二進(jìn)制代碼(次低位)。依此類推,從低位到高位逐次進(jìn)行,直到商是0為止,就可得到該十進(jìn)制數(shù)的二進(jìn)制代碼。,,除二取余法,1.7.4不同進(jìn)制數(shù)之間的轉(zhuǎn)換,例如:將(67)10轉(zhuǎn)換成二進(jìn)制數(shù),過程如下:,,即:(67)10=(1000011)2。,1.7.4不同進(jìn)制數(shù)之間的轉(zhuǎn)換,1.十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的方法,將已知十進(jìn)制的小數(shù)乘以2之后,可能有進(jìn)位
6、,使整數(shù)位為1(當(dāng)該小數(shù)大于0.5時(shí)),也可能沒有進(jìn)位,其整數(shù)位仍為零。該整數(shù)位的值為二進(jìn)制小數(shù)的最高位。再將乘積的小數(shù)部分乘以2,所得整數(shù)位的值為二進(jìn)制小數(shù)的次高位。依此類推,直到滿足精度要求或乘2后的小數(shù)部分為0為止。,乘二取整法,例如:將(0.625)10轉(zhuǎn)換成二進(jìn)制數(shù),其過程如下:,,,即:(0.625)10=(0.101)2,1.7.4不同進(jìn)制數(shù)之間的轉(zhuǎn)換,2.二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的方法,將二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)時(shí),只要將二進(jìn)制數(shù)各位的權(quán)乘以各位的數(shù)碼(0或1)再相加即可。例如:將(1101.1001)2制轉(zhuǎn)換成十進(jìn)制數(shù):(1101.1001)2=123+122+021+120+1
7、2-1+02-2+02-3+12-4=8+4+0+1+0.5+0+0+0.0625=(13.5625)10,1.7.4不同進(jìn)制數(shù)之間的轉(zhuǎn)換,3.二進(jìn)制與十六進(jìn)制數(shù)之間的轉(zhuǎn)換方法,二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)例如:把(101101101.1100101)2轉(zhuǎn)換成十六進(jìn)制數(shù)。,,即:(101101101.1100101)2=(16D.CA)16。,1.7.4不同進(jìn)制數(shù)之間的轉(zhuǎn)換,2)十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)將十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)時(shí),只要將每1位十六進(jìn)制數(shù)用4位相應(yīng)的二進(jìn)制數(shù)表示即可完成轉(zhuǎn)換。例如:將(ECA16)16轉(zhuǎn)換成二進(jìn)制數(shù)。,,即:(ECA16)16=(111011001010000101
8、10)2。,1.7.5BCD碼,1.7.6ASCII碼,ASCII碼是一種8位代碼,最高位一般用于奇偶校驗(yàn),用其余的7位代碼來對(duì)128個(gè)字符編碼,其中32個(gè)是控制字符,96個(gè)是圖形字符。,1.8思考練習(xí)題,(1)微型計(jì)算機(jī)由哪幾部分組成?(2)什么是單片機(jī)?它與一般微型計(jì)算機(jī)在結(jié)構(gòu)上有什么區(qū)別?(3)單片機(jī)主要應(yīng)用在哪些方面?(4)將下面的一組十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù):①56②74③23④19⑤89⑥68⑦142⑧76.87⑨0.375⑩9.325?83.625?134.0625(5)將下面的二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)和十六進(jìn)制數(shù):①10110011②10100101③11101001④100111
9、10⑤10000101⑥11000101⑦11101110⑧10001100⑨11011.11⑩101.01101,第2章單片機(jī)的組成與結(jié)構(gòu)分析,▲MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu)▲CPU的結(jié)構(gòu)和功能▲存儲(chǔ)器的組織結(jié)構(gòu)▲MCS-51單片機(jī)的并行輸入輸出端口▲MCS-51單片機(jī)的外部引腳及功能▲單片機(jī)指令時(shí)序▲思考練習(xí)題,2.1MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu),,2.1MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu),,其基本特性如下:8位CPU,含片內(nèi)振蕩器;4KB的程序存儲(chǔ)器ROM;128B的數(shù)據(jù)存儲(chǔ)器RAM;64KB的外部程序存儲(chǔ)器尋址能力;64KB的外部數(shù)據(jù)存儲(chǔ)器尋址能力;32根輸入輸出(I/O)線;2個(gè)16位定時(shí)
10、/計(jì)數(shù)器;1個(gè)全雙工異步串行口;21個(gè)特殊功能寄存器;5個(gè)中斷源,2個(gè)優(yōu)先級(jí);具有位尋址功能。,2.2CPU的結(jié)構(gòu)和功能,2.2.1運(yùn)算器,8051單片機(jī)的運(yùn)算器由算術(shù)/邏輯運(yùn)算單元ALU、累加器A、寄存器B、暫存器1、暫存器2以及程序狀態(tài)字寄存器PSW組成。,,圖2.2PSW寄存器各位的標(biāo)志符號(hào),表2.1寄存器PSW各位的功能、標(biāo)志符號(hào)與相應(yīng)的位地址,2.2.2控制器,2.3存儲(chǔ)器的組織結(jié)構(gòu),存儲(chǔ)器的功能是存儲(chǔ)信息(即程序與數(shù)據(jù))。存儲(chǔ)器是組成計(jì)算機(jī)的主要部件,目前所使用的存儲(chǔ)器以半導(dǎo)體存儲(chǔ)器為主。從功能上來劃分,半導(dǎo)體存儲(chǔ)器可分為兩大類:即只讀存儲(chǔ)器(ROM),和隨機(jī)存儲(chǔ)器(RAM)。,8
11、051單片機(jī)的控制器由指令寄存器、指令譯碼器、堆棧指針SP、程序計(jì)數(shù)器PC、數(shù)據(jù)指針DPTR、RAM地址寄存器以及16位地址緩沖器等組成。,2.3.1MCS-51單片機(jī)的存儲(chǔ)器結(jié)構(gòu),,圖2.38051存儲(chǔ)器配置圖,2.3.2程序存儲(chǔ)器,程序是控制計(jì)算機(jī)運(yùn)行的一系列命令。計(jì)算機(jī)能夠識(shí)別并執(zhí)行的命令是由代碼“0”和“1”組成的一組機(jī)器指令。,2.3.3數(shù)據(jù)存儲(chǔ)器,單片機(jī)的數(shù)據(jù)存儲(chǔ)器由可讀可寫的存儲(chǔ)器RAM組成,最多可擴(kuò)展到64KB,用于存儲(chǔ)數(shù)據(jù)。,2.3.4MCS-51單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器,MCS-51單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器由地址00H~FFH共有256個(gè)字節(jié)的地址空間組成,這256個(gè)字節(jié)的地址
12、空間被分為兩部分,其中內(nèi)部數(shù)據(jù)RAM地址為00H~7FH(即0~127)。,,圖2.4內(nèi)部數(shù)據(jù)存儲(chǔ)器地址空間,1.內(nèi)部數(shù)據(jù)RAM單元,內(nèi)部數(shù)據(jù)RAM分為工作寄存器區(qū)、位尋址區(qū)、通用RAM區(qū)三個(gè)部分。,,圖2.5RAM位地址(低128位在00H~7FH),,(a)系統(tǒng)復(fù)位后,未改變SP初值時(shí)的堆棧操作(設(shè)(A)=0ABH),,,(b)系統(tǒng)復(fù)位后,改變SP初值為60H時(shí)的堆棧操作圖2.6堆棧操作示例,2.特殊功能寄存器,特殊功能寄存器SFR的地址空間是80H~FFH。,表2.3特殊功能寄存器的名稱、符號(hào)與地址,2.特殊功能寄存器,2.特殊功能寄存器,2.特殊功能寄存器,,2.4MCS-51單片機(jī)的
13、并行輸入輸出端口,2.4.1P0口結(jié)構(gòu),1.P0用作通用I/O口,2.P0用作地址/數(shù)據(jù)總線分時(shí)復(fù)用方式,,2.4.2P2口結(jié)構(gòu),1.P2口用作地址總線,2.P2口用作通用I/O口,,,2.4.3P3口結(jié)構(gòu),2.4.4P1口結(jié)構(gòu),,,,2.5MCS-51單片機(jī)的外部引腳及功能,2.5.1電源引腳,,,(b)雙列直插式封裝,(a)方形封裝,2.5.2外接晶振或外部時(shí)鐘信號(hào)輸入端,,,,(a)內(nèi)部振蕩器方式(b)外部振蕩器方式圖2.128051單片機(jī)的振蕩器方式,表2.4按不同工藝制造的單片機(jī)芯片外接振蕩器時(shí)的接法,2.5.3輸入輸出引腳,,P0.0~P0.7:通道0是一個(gè)8位漏極開路的雙向輸入輸
14、出通道。在外接存儲(chǔ)器或者擴(kuò)展I/O接口時(shí),P0口作為復(fù)用的低8位地址總線和雙向數(shù)據(jù)總線。在不擴(kuò)展存儲(chǔ)器或者I/O接口時(shí),作為準(zhǔn)雙向輸入輸出接口。P1.0~P1.7:只有一種功能,即準(zhǔn)雙向I/O口。P2.0~P2.7:可作為準(zhǔn)雙向I/O口使用;但在接有片外存儲(chǔ)器或擴(kuò)展I/O接口范圍超過256B時(shí),則該口一般只能作為高8位地址總線使用。P3.0~P3.7:該口除了作為準(zhǔn)雙向口外,還具有第二功能。,2.5.4控制線,1.ALE/,2.,,3.,,/VPP,4.RST,,,(a)上電復(fù)位(b)電平開關(guān)復(fù)位圖2.13復(fù)位電路,2.6單片機(jī)指令時(shí)序,,,2.7思考練習(xí)題,,,(1)MCS-51單片機(jī)包含哪
15、些主要邏輯功能部件?(2)程序狀態(tài)字寄存器PSW包含哪幾個(gè)標(biāo)志位?各位的含義是什么?各有何作用?(3)什么叫單片機(jī)?(4)MCS-51單片機(jī)的存儲(chǔ)結(jié)構(gòu)有何特點(diǎn)?(5)單片機(jī)的EA端有何作用?在8031組成的單片機(jī)應(yīng)用系統(tǒng)中,其EA端怎樣處理?為什么?(6)單片機(jī)內(nèi)部RAM分為哪幾個(gè)部分?各有何作用?(7)MCS-51單片機(jī)的堆棧SP在操作中遵循什么原則?在開機(jī)復(fù)位時(shí),其初值是多少?是否可以通過程序重新設(shè)置?(8)怎樣確定和改變單片機(jī)當(dāng)前的工作寄存器組?(9)簡要說明單片機(jī)的位地址分配。(10)試畫出常用的單片機(jī)復(fù)位電路,并說明復(fù)位后各個(gè)寄存器的狀態(tài)。,第3章MCS-51單片機(jī)的指令系統(tǒng),匯編語
16、言的指令格式及符號(hào)簡介尋址方式數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令邏輯運(yùn)算類指令位操作類指令控制轉(zhuǎn)移類指令思考練習(xí)題,3.1匯編語言的指令格式及符號(hào)簡介,3.1.1指令格式,[標(biāo)號(hào):]操作碼助記符[第一操作數(shù)][,第二操作數(shù)][,第三操作數(shù)][;注釋],例如:LOOP:MOVA,#50H;(A)←50HDECR0;(R0)←(R0)-1DJNZR0,LOOP;(R0)-1≠0,則程序轉(zhuǎn)移到LOOP地址;否則順序執(zhí)行END;結(jié)束,3.1.2本章中符號(hào)的定義,3.2尋址方式,MCS-51單片機(jī)有7種尋址方式,見表3.1。,表3.17種尋址方式的比較,3.2.1立即尋址,例如:MOVA,#23H;(A)←2
17、3H,即累加器A的內(nèi)容被替換為立即數(shù)23H。,,圖3.1MOVA,#23H的執(zhí)行示意圖,該指令的功能是將8位的立即數(shù)23H傳送到累加器A中。如圖3.1所示。其中,目的操作數(shù)采用寄存器尋址,源操作數(shù)采用立即尋址。,3.2.2直接尋址,直接尋址是指在指令中包含了操作數(shù)的地址,該地址直接給出了參加運(yùn)算或傳送的單元或位。直接尋址方式可訪問三種地址空間:特殊功能寄存器SFR(該空間只能采用直接尋址)。內(nèi)部數(shù)據(jù)RAM的低128個(gè)字節(jié)單元(該空間還可以采用寄存器間接尋址)。221個(gè)位地址空間。,例如:MOVA,40H;把40H單元的內(nèi)容送到累加器中,即(A)←(40H)。,,圖3.2MOVA,40H的執(zhí)行示
18、意圖,3.2.3寄存器尋址,寄存器尋址是指定某一可尋址的寄存器的內(nèi)容為操作數(shù)。,例如:MOVA,R0;(A)←(R0)該指令的功能是將R0中的數(shù)據(jù)傳送到累加器A中。源操作數(shù)與目的操作數(shù)都采用了寄存器尋址。,在MCS-51單片機(jī)中,能夠用來間接尋址的寄存器有:用戶所選定的工作寄存器組的R0、R1,堆棧指針SP和16位的數(shù)據(jù)指針DPTR。內(nèi)部數(shù)據(jù)RAM的寄存器間接尋址采用寄存器R0、R1;外部數(shù)據(jù)RAM的寄存器間接尋址有兩種形式:一是采用R0、R1作間址寄存器,這時(shí)R0或R1提供低8位地址,而高8位地址則由P2端口提供;二是采用16位的DPTR作間址寄存器。,3.2.4寄存器間接尋址,例如:設(shè)R0
19、的內(nèi)容為60H,且(60H)=10H,即60H地址單元中的內(nèi)容為10H,則語句MOVA,@R0的執(zhí)行過程如圖3.3所示。執(zhí)行后,(A)=10H,即累加器A的內(nèi)容成為10H。,,圖3.3MOVA,@R0的執(zhí)行示意圖,又如:MOVXA,@R0;(A)←((R0)),用R0間接尋址的單元中的內(nèi)容替換A的;內(nèi)容。MOVXA,@DPTR;(A)←((DPTR)),用DPTR間接尋址的單元中的內(nèi)容替換;A的內(nèi)容。,3.2.5變址尋址,這種尋址方式是以數(shù)據(jù)指針DPTR或程序計(jì)數(shù)器PC作為基址寄存器,以累加器A作為偏移量寄存器,將一個(gè)基址寄存器的內(nèi)容與偏移量寄存器的內(nèi)容之和作為操作數(shù)地址。,例如:MOVCA,
20、@A+DPTR設(shè)(A)=10H,(DPTR)=1000H,程序存儲(chǔ)器的(1010H)=45H,則上面程序語句的功能是將A的內(nèi)容與DPTR的內(nèi)容相加形成操作數(shù)地址(1010H),把該地址中的數(shù)據(jù)傳送到累加器A。即(A)←((A)+(DPTR))。結(jié)果:(A)=45H。,,圖3.4MOVCA,@A+DPTR的執(zhí)行示意圖,相對(duì)尋址是把指令中給定的地址偏移量rel與程序計(jì)數(shù)器PC的當(dāng)前值(讀出該雙字節(jié)或三字節(jié)的跳轉(zhuǎn)指令后,PC指向的下條指令的地址)相加,得到真正的程序轉(zhuǎn)移地址。,例如:JC80H若C=0,則PC值不變,若C=1,則以當(dāng)前PC值為基地址,加上80H得到新的PC值。設(shè)該轉(zhuǎn)移指令存放在100
21、5H單元,取出操作碼后PC指向1006H單元,取出偏移量后PC指向1007H單元,所以計(jì)算偏移量時(shí)PC當(dāng)前地址為1007H,已經(jīng)為轉(zhuǎn)移指令首地址加2,這里的偏移量以補(bǔ)碼給出,所以80H代表著-80H,補(bǔ)碼運(yùn)算后,就形成跳轉(zhuǎn)地址0F87H。其過程如圖3.5所示。,3.2.6相對(duì)尋址,3.2.6相對(duì)尋址,,圖3.5JC80H的執(zhí)行示意圖,3.2.7位尋址,MCS-51單片機(jī)可對(duì)片內(nèi)RAM的兩個(gè)區(qū)域進(jìn)行位尋址:一個(gè)是20H~2FH單元的128位,另一個(gè)是特殊功能寄存器的93位。在尋址時(shí),同一個(gè)位地址可以有多種標(biāo)識(shí)方式,讀者可參看后面3.6節(jié)“位操作指令”的相關(guān)內(nèi)容。,3.3.1通用傳送指令,格式:M
22、OV目的操作數(shù),源操作數(shù)功能:把第二操作數(shù)指定的字節(jié)內(nèi)容傳送到第一操作數(shù)指定的單元中。不影響源操作數(shù)內(nèi)容,不影響別的寄存器和標(biāo)志。,1.以累加器A為目的操作數(shù)的傳送類指令,3.3數(shù)據(jù)傳送類指令,指令助記符及功能說明如下:,例1若(50H)=10H,則執(zhí)行指令MOVA,50H之后,(A)=10H。例2若(R0)=20H,(20H)=39H,則執(zhí)行指令MOVA,@R0后,(A)=39H。例3若(R5)=55H,則執(zhí)行指令MOVA,R5后,(A)=55H。,,2.以Rn為目的操作數(shù)的傳送類指令,例1若(A)=20H,則執(zhí)行指令MOVR3,A后,(R3)=20H。例2若(30H)=01H,則執(zhí)行指令M
23、OVR7,30H后,(R7)=01H。,指令助記符及功能說明如下:,例1若(30H)=20H,(R0)=30H,則執(zhí)行指令MOV90H,@R0的結(jié)果為(90H)=20H。例2若例1中的條件不變,而執(zhí)行指令MOVP1,@R0,則(P1)=20H。,3.以直接地址directX為目的操作數(shù)的傳送類指令,指令助記符及功能說明如下:,例1若(R0)=50H,(50H)=20H,(A)=10H,則執(zhí)行指令“MOV@R0,A”后,50H單元的內(nèi)容由原來的20H變?yōu)?0H。,4.以寄存器間接地址@Ri為目的操作數(shù)的傳送類指令,指令助記符及功能說明如下:,5.16位目標(biāo)地址傳送指令,這條指令的功能是:把16位
24、立即數(shù)送入DPTR中。而16位的數(shù)據(jù)指針DPTR由DPH與DPL組成,該指令執(zhí)行后,16位立即數(shù)的高8位送入DPH中,低8位送入DPL中。該指令的執(zhí)行,不影響程序狀態(tài)寄存器PSW。,指令助記符及功能說明如下:,3.3.2外部數(shù)據(jù)存儲(chǔ)器(或I/O口)與累加器A傳送指令,例1設(shè)(P2)=20H,現(xiàn)將A中數(shù)據(jù)存儲(chǔ)到20FFH單元中去??捎靡韵鲁绦?qū)崿F(xiàn):MOVR1,#0FFH;(R1)←0FFHMOVX@R1,A;(20FFH)←(A)也可采用下述程序?qū)崿F(xiàn):MOVDPTR,#20FFH;(DPTR)←20FFHMOVX@DPTR,A;((DPTR))←(A),即(20FFH)←(A),指令助記符與功能
25、說明如下:,3.3.2外部數(shù)據(jù)存儲(chǔ)器(或I/O口)與累加器A傳送指令,例2將外部數(shù)據(jù)存儲(chǔ)器7FF0H單元中的數(shù)據(jù)取出,存放到外部數(shù)據(jù)存儲(chǔ)器2000H單元中去。MOVDPTR,#7FF0HMOVXA,@DPTRMOVDPTR,#2000HMOVX@DPTR,A,例1在外部程序存儲(chǔ)器2000H單元開始存放了數(shù)字0~9的共陰極數(shù)碼管的16進(jìn)制數(shù)的字形代碼3FH、06H、…、6FH。要求根據(jù)A中的值(0~9)來查找該數(shù)字所對(duì)應(yīng)的代碼以便顯示。若用PC作基址寄存器,則需要在MOVCA,@A+PC指令前用一加法指令對(duì)地址進(jìn)行調(diào)整:ADDA,#dataMOVCA,@A+PC,3.3.3程序存儲(chǔ)器向累加器A傳
26、送數(shù)據(jù)指令,指令助記符與功能說明如下:,1.字節(jié)交換指令,例1設(shè)(R1)=30H,(30H)=45H,(A)=7FH,則執(zhí)行指令:XCHA,@R1結(jié)果:(A)=45H,而(30H)=7FH,從而實(shí)現(xiàn)了累加器A與內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM中30H單元的數(shù)據(jù)交換。,3.3.4數(shù)據(jù)交換指令,指令助記符與功能說明如下:,2.半字節(jié)交換指令,例1設(shè)(30H)=6FH,(R0)=30H,(A)=0F6H,則執(zhí)行指令:XCHDA,@Ri結(jié)果:(A)=0FFH,(30H)=66H,數(shù)據(jù)交換指令除了影響始終跟蹤A中數(shù)據(jù)奇偶性的P標(biāo)志外,對(duì)PSW中其他標(biāo)志位均無影響。,指令助記符與功能說明如下:,3.累加器A中高四位與
27、低四位交換指令,SWAPA該指令所執(zhí)行的操作是累加器A中的高4位與低4位的內(nèi)容互換,其結(jié)果仍存放在累加器A中。,例1設(shè)(A)=0A5H(10100101B),則執(zhí)行指令:SWAPA結(jié)果:(A)=5AH(01011010B)指令SWAP交換了A中高、低半字節(jié)(3~0和7~4),結(jié)果不影響標(biāo)志寄存器PSW。,3.3.5堆棧操作指令,堆棧操作指令只有2條,即:壓入(PUSH)和彈出(POP)。壓入指令:PUSHdirect;SP←SP+1,((SP))←(direct)彈出指令:POPdirect;((SP))←(direct),SP←SP-1,例1PUSHA;保護(hù)A中數(shù)據(jù)PUSHPSW;保護(hù)標(biāo)志寄
28、存器中數(shù)據(jù)…;執(zhí)行服務(wù)程序POPPSW;恢復(fù)標(biāo)志寄存器中數(shù)據(jù)POPA;恢復(fù)A中數(shù)據(jù),例2PUSHAPUSHPSW…POPAPOPPSW,例3PUSHDPHPUSHDPL…POPDPLPOPDPH,3.4.1加減運(yùn)算指令,1.加法指令,這類指令所完成的操作是把源操作數(shù)(立即數(shù)、直接地址單元內(nèi)容、間接地址單元內(nèi)容、工作寄存器內(nèi)容)與累加器A的內(nèi)容相加,將結(jié)果保存在累加器A中。,3.4算術(shù)運(yùn)算類指令,指令助記符與功能說明如下:,例1執(zhí)行指令:MOVA,#0A9HADDA,#0B8H對(duì)程序狀態(tài)寄存器的影響如圖3.6所示。,,運(yùn)算結(jié)果:(A)=61H,CY=1,AC=1,OV=1,P=1,(PSW)=0
29、C5H,例28位數(shù)加法程序片斷1:MOVA,#23HADDA,#5AH…,,運(yùn)算結(jié)果:(A)=7DH,CY=0,OV=0,AC=0,P=0,(PSW)=00H。,,例38位數(shù)加法程序片斷2:MOVA,#0ABHADDA,#9AH…,,運(yùn)算結(jié)果:(A)=45H,CY=1,OV=1,AC=1,P=1,(PSW)=0C5H。,,,帶進(jìn)位加法指令與前述加法指令的區(qū)別僅為考慮進(jìn)位位,其他與加法指令相同。,2.帶進(jìn)位加法指令,指令助記符與功能說明如下:,,例3利用ADDC指令可以進(jìn)行多字節(jié)的加法運(yùn)算。設(shè)有兩個(gè)16位數(shù)相加,被加數(shù)的高8位放在41H,低8位放在40H,加數(shù)的高8位放在43H,低8位放在42H
30、,和的低8位存放在50H,高8位存放在51H,進(jìn)位位存放在52H??删幊绦蛉缦拢?例1設(shè)(A)=0AAH,(R0)=55H,C=1,則執(zhí)行指令:ADDCA,R0運(yùn)算結(jié)果:(A)=00000000B,AC=1,CY=1,OV=1。,例2設(shè)(A)=35H,(40H)=21H,C=0,則執(zhí)行指令:ADDCA,40H運(yùn)算結(jié)果:(A)=56H,AC=0,CY=0,OV=0。這與執(zhí)行指令“ADDA,40H”的結(jié)果是一樣的。,,SHJ:MOVA,40H;(A)←被加數(shù)低8位ADDA,42H;與加數(shù)低8位相加MOV50H,A;和的低8位存入50HMOVA,41H;(A)←被加數(shù)高8位ADDCA,43H;被加數(shù)
31、高8位與加數(shù)高8位以及低位來的進(jìn)位相加MOV51H,A;和的高8位存入51H單元MOVA,#00H;(A)←00HADDCA,#00H;(A)←(A)+00H+高8位來的進(jìn)位MOV52H,A;進(jìn)位位C內(nèi)容存入52H單元…,,3.帶借位減指令,指令助記符與功能說明如下:,例1設(shè)(40H)=0BAH,(41H)=98H,試編寫40H內(nèi)容減去41H內(nèi)容后,結(jié)果再存入40H單元的程序。MOVA,40H;(A)←(40H)CLRC;進(jìn)位位C清0SUBBA,41H;(A)←(A)-(41H)-(C)MOV40H,A;(40H)←(A)執(zhí)行以上程序后,(40H)=22H,CY=0,OV=0。,如果參與運(yùn)算的
32、兩數(shù)為無符號(hào)數(shù),則其溢出與否與OV狀態(tài)無關(guān),而是靠CY是否有借位來判斷,OV僅僅表示帶符號(hào)數(shù)運(yùn)算時(shí)是否溢出。,例2設(shè)有兩個(gè)16位數(shù)相減,被減數(shù)的高8位放在41H,低8位放在40H,減數(shù)高8位放在43H,低8位放在42H,差的低8位存放在50H,高8位存放在51H,借位位存放在52H。,可編程序如下:SHJIAN:MOVA,40H;(A)←被減數(shù)低8位CLRC;C位清0SUBBA,42H;減去減數(shù)低8位MOV50H,A;差的低8位存入50HMOVA,41H;(A)←被減數(shù)高8位SUBBA,43H;被減數(shù)高8位減去減數(shù)高8位與借位MOV51H,A;差的高8位存入51H單元MOVA,#00H;(A)
33、←00HADDCA,#00H;(A)←高8位的借位位MOV52H,A;借位位C內(nèi)容存入52H單元,1.乘法指令,例1設(shè)(A)=67H(103),(B)=0ADH(173),執(zhí)行指令:MULAB運(yùn)算結(jié)果:乘積為459BH(17819),(A)=9BH,(B)=45H。另外:OV=1,CY=0,3.4.2乘除運(yùn)算指令,MULAB;(A)←乘積低8位,(B)←乘積高8位,例2設(shè)被乘數(shù)為16位無符號(hào)數(shù),低8位存放在地址為K的單元,高8位存放在地址為K+1的單元。乘數(shù)為8位無符號(hào)數(shù),存放在M單元。編程求出二者乘積,并將乘積的0~7位存放在R1,8~15位存放在R2,16~23位存放在R3中。,分析:16
34、位無符號(hào)數(shù)與8位無符號(hào)數(shù)相乘的步驟示意如下:,程序編制如下:MOVR0,#K;設(shè)置被乘數(shù)地址指針MOVA,@R0;被乘數(shù)送A中MOVB,M;乘數(shù)送B中MULAB;(K)(M)MOVR1,A;乘積的0~7位存入R1MOVR2,B;暫存積的8~15位INCR0;指向被乘數(shù)高8位地址MOVA,@R0;取被乘數(shù)高8位MOVB,M;乘數(shù)送B中MULAB;(K+1)(M)ADDA,R2;求得乘積的8~15位MOVR2,A;乘積的8~15位存入R2MOVA,BADDCA,#00H;求得乘積的16~23位MOVR3,A;乘積的16~23位存入R3,,2.除法指令,例1設(shè)(A)=9AH,(B)=23H,執(zhí)行指令
35、:DIVAB則(A)=04H,(B)=0EH,OV=00H,CY=00H,3.4.2乘除運(yùn)算指令,DIVAB;(A)←商,(B)←余數(shù),3.4.3增1減1指令,1.增1指令,INCA;(A)←(A)+1INCdirect;(direct)←(direct)+1INC@Ri;((Ri))←((Ri))+1INCRn;(Rn)←(Rn)+1INCDPTR;(DPTR)←(DPTR)+1,例1設(shè)(A)=40H,(41H)=29H,則執(zhí)行下列指令:INCA;(A)←40H+1HINC41H;(41H)←29H+1H結(jié)果:(A)=41H,(41H)=2AH,例2設(shè)(R0)=56H,片內(nèi)RAM單元(56H
36、)=0FFH,(57H)=50H,則執(zhí)行下列指令:INC@R0;(56H)←00HINCR0;(R0)←57HINC@R0;(57H)←51H結(jié)果:(56H)=00H,(R0)=57H,(57H)=51H,例3執(zhí)行下述指令序列:MOVDPTR,#2FFEH;(DPTR)←2FFEHINCDPTR;(DPTR)←2FFFHINCDPTR;(DPTR)←3000HINCDPTR;(DPTR)←3001H則(DPTR)=3001H,2.減1指令,DECA;(A)←(A)-1DECdirect;(direct)←(direct)-1DEC@Ri;((Ri))←((Ri))-1DECRn;(Rn)←(R
37、n)-1,例1設(shè)(R0)=4FH,片內(nèi)RAM單元(4FH)=40H,(4EH)=00H,執(zhí)行指令:DEC@R0;(4FH)←3FHDECR0;(R0)←4EHDEC@R0;(4EH)←0FFH結(jié)果:(R0)=4EH,(4EH)=0FFH,(4FH)=3FH,3.4.4二/十進(jìn)制調(diào)整指令,DAA該指令的功能是對(duì)累加器A中的“二/十”進(jìn)制(BCD碼)加法結(jié)果進(jìn)行調(diào)整。,例1執(zhí)行下面的指令:MOVA,#86HADDA,#47H結(jié)果:(A)=0CDH,CY=0,AC=0所得結(jié)果并不是BCD碼,若接著執(zhí)行以下指令:DAA則結(jié)果:(A)=33H,CY=1,AC=1,1.累加器A清0指令格式:CLRA功能:
38、將00H送入累加器A中。,3.5邏輯運(yùn)算指令,3.5.1單操作數(shù)指令,2.累加器A取反指令格式:CPLA功能:將累加器A中內(nèi)容取反(將A中內(nèi)容按位取反,即邏輯非運(yùn)算)后再送回累加器A中。,例1設(shè)(A)=98H,執(zhí)行指令CLRA;(A)←0CPLA;(A)←0FFH結(jié)果:(A)=0FFH,3.累加器A內(nèi)容循環(huán)左移一位指令格式:RLA功能:將累加器A中的內(nèi)容循環(huán)左移一位。即,,例1設(shè)(A)=10001000,則執(zhí)行指令“RLA”后,結(jié)果:(A)=00010001,,4.累加器A內(nèi)容帶進(jìn)位位CY循環(huán)左移一位,指令格式:RLCA功能:將累加器A中的內(nèi)容與進(jìn)位標(biāo)志位CY一起循環(huán)左移一位。即:,,例1設(shè)(
39、A)=01010101,(CY)=1。則執(zhí)行指令“RLCA”后,結(jié)果:(A)=10101011,(CY)=0。,,5.累加器A內(nèi)容循環(huán)右移一位,指令格式:RRA功能:將累加器A中的內(nèi)容循環(huán)右移一位。即:,,例1設(shè)(A)=00010001,則執(zhí)行指令“RRA”后,結(jié)果:(A)=10001000,,6.累加器A內(nèi)容帶進(jìn)位位CY循環(huán)右移一位,指令格式:RRCA功能:將累加器A中的內(nèi)容與進(jìn)位標(biāo)志位CY一起循環(huán)右移一位。即:,,例1設(shè)(A)=10101011,(CY)=0。則執(zhí)行指令“RRCA”后,結(jié)果:(A)=01010101,(CY)=1。,,3.5.2雙操作數(shù)指令,1.邏輯與指令,邏輯與的規(guī)則定義
40、為:(其中∧表示邏輯與)0∧0=00∧1=1∧0=01∧1=1,例1設(shè)(A)=0C3H,(R3)=0ADH,執(zhí)行指令“ANLA,R3”。結(jié)果:(A)=81H(10000001B)。指令執(zhí)行過程如下:,,2.邏輯或指令,邏輯或的規(guī)則定義為:(其中∨表示邏輯或)0∨0=00∨0=1∨0=11∨1=1,例1設(shè)(A)=0C3H,(R3)=0ADH,執(zhí)行指令“ORLA,R3”。結(jié)果:(A)=0EFH(11101111B)。指令執(zhí)行過程如下:,,3.邏輯異或指令,邏輯異或的規(guī)則定義為(其中⊕表示邏輯異或):0⊕0=1⊕1=01⊕0=0⊕1=1,例1設(shè)(A)=0C3H,(R3)=0ADH,執(zhí)行指令“XRLA
41、,R3”。結(jié)果:(A)=6EH(01101110B)。指令執(zhí)行過程如下:,,例2試把分別保存在30H、31H單元中用ASCII碼表示的兩位數(shù),轉(zhuǎn)換成兩位BCD碼,并以壓縮BCD碼形式存入30H單元中。,程序如下:ANL30H,#0FH;30H單元的ASCII碼轉(zhuǎn)換成BCD碼MOVA,31H;取31H單元的ASCII碼ANLA,#0FH;31H單元的ASCII碼變成BCD碼RLARLARLARLAORL30H,A;結(jié)果存入30H單元,例1要將20H位的內(nèi)容傳送給23H位,不能直接用“MOV20H,23H”,因?yàn)樵撝噶顖?zhí)行的實(shí)際是字節(jié)傳送,若要將20H位的內(nèi)容傳送給23H位,可用下述程序?qū)崿F(xiàn):MO
42、VC,20H;(C)←(20H)MOV23H,C;(23H)←(C),3.6位操作類指令,3.6.1位數(shù)據(jù)傳送指令,指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明,,MOVC,bit;(C)←(bit)MOVbit,C;(C)←(bit),指令格式如下:CLRC;(C)←(0)CLRbit;(bit)←(0)以上指令可使直接尋址位(bit)或位累加器C清0,不影響其他標(biāo)志。例1片內(nèi)RAM單元26H的內(nèi)容為0FFH,執(zhí)行指令:CLR32H結(jié)果:(26H)=0FBH(11111011B),其中,32H為26H單元第二位的位地址。,3.6.2位狀態(tài)控制指令,1.位清0指令,指令格式如下:CPL
43、C;(C)←(/C)CPLbit;(bit)←(/bit)以上指令把位累加器C或者直接尋址位(bit)內(nèi)容取反,不影響其他標(biāo)志位。例1執(zhí)行下面的指令序列:MOVP1,#2FH;(P1)←(2FH即00101111B)CPLP1.0;P1.0位求反CPLP1.2;P1.2位求反結(jié)果:(P1)=2AH(00101010B)。,2.位求反指令,指令格式如下:SETBC;(C)←1SETBbit;(bit)←1以上指令把進(jìn)位標(biāo)志C或者任何可直接尋址位(bit)置1,不影響其他標(biāo)志位。例1假設(shè)進(jìn)位標(biāo)志C內(nèi)容為0,輸出口P1原來的內(nèi)容為0FH(00001111B),則執(zhí)行下面指令:SETBCSETBP1.
44、7結(jié)果:(C)=1,(P1)=8FH(10001111B)。,3.位置1指令,例1當(dāng)位地址(2AH)=1,(32H)=1,同時(shí)累加器中(ACC.7)=0時(shí),進(jìn)位位C=1,否則C清0,可編程序如下:MOVC,2AH;(C)←(2AH)ANLC,32H;(C)←(C)∧(32H)ANLC,/ACC.7;(C)←(C)∧(/ACC.7),3.6.3位邏輯操作指令,1.位與指令,指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明ANLC,bit;(C)←(C)∧(bit)ANLC,/bit;(C)←(C)∧(/bit),指令助記符與功能說明如下:目的操作數(shù)源操作數(shù)功能說明ORLC,bit;(C)←(
45、C)∨(bit)ORLC,/bit;(C)←(C)∨(/bit)位或指令的功能是將直接尋址位的內(nèi)容或直接尋址位內(nèi)容取反后(不改變?cè)瓉砦坏膬?nèi)容)和位累加器C的內(nèi)容相或,結(jié)果保存在C中。例1寫出位地址(2AH)=1和(32H)=1、累加器(ACC.7)=0相或的程序:MOVC,2AH;(C)←(2AH)ORLC,32H;(C)←(C)∨(32H)ORLC,ACC.7;(C)←(C)∨(ACC.7)結(jié)果:(C)=1。,2.位或指令,圖3.7為判C轉(zhuǎn)移指令的執(zhí)行過程。,3.6.4位條件轉(zhuǎn)移指令,1.判C轉(zhuǎn)移指令,JCrel;若(C)=1,則(PC)←(PC)+2+rel;若(C)=0,則(PC)←(P
46、C)+2JNCrel;若(C)=0,則(PC)←(PC)+rel;若(C)=1,則(PC)←(PC)+2,,,(a)JCrel(b)JNCrel圖3.7判C轉(zhuǎn)移指令的執(zhí)行過程,JBbit,rel;若(bit)=1,則(PC)←(PC)+3+rel;若(bit)=0,則(PC)←(PC)+3JNBbit,rel;若(bit)=0,則(PC)←(PC)+3+rel;若(bit)=1,則(PC)←(PC)+3JBCbit,rel;若(bit)=1,則(PC)←(PC)+3+rel,而且(bit)清0;若(bit)=0,則(PC)←(PC)+3,2.判直接尋址位轉(zhuǎn)移指令,判直接尋址位轉(zhuǎn)移指令的執(zhí)行過程
47、如圖3.8所示。,,,,(a)JBbit,rel(b)JNBbit,rel(c)JBCbit,rel,例1假設(shè)前面的程序段一樣,則分別執(zhí)行下面三段程序。程序1:SETB32H;(32H)←1JB32H,K1;(32H)=1轉(zhuǎn)K1處執(zhí)行K1:…程序2:CLR32H;(32H)←0JNB32H,K1;(32H)=0轉(zhuǎn)K1處執(zhí)行K1:…程序3:SETB32H;(32H)←1JBC32H,K1;(32H)=1轉(zhuǎn)K1處執(zhí)行K1:…,,1.長轉(zhuǎn)移指令指令格式:LJMPaddr16;(PC)←addr0~15,3.7控制轉(zhuǎn)移類指令,3.7.1無條件轉(zhuǎn)移指令,例1執(zhí)行下述程序段:M:LJMPKK:…,2.絕對(duì)
48、轉(zhuǎn)移指令指令格式:,,3.相對(duì)短轉(zhuǎn)移指令指令格式:,,4.間接轉(zhuǎn)移指令JMP@A+DPTR;(PC)←(A)+(DPTR),,無條件轉(zhuǎn)移指令跳轉(zhuǎn)范圍比較,1.累加器A判零轉(zhuǎn)移指令,3.7.2條件轉(zhuǎn)移指令,JZrel;累加器為0轉(zhuǎn)移,否則繼續(xù)執(zhí)行JNZrel;累加器不為0轉(zhuǎn)移,否則繼續(xù)執(zhí)行,例1將內(nèi)部RAM單元中起始地址為20H的數(shù)據(jù)傳送到P1口,當(dāng)RAM單元中內(nèi)容為0時(shí),不傳送,接著傳送下一單元內(nèi)容。,,,(a)JZrel(b)JNZrel圖3.10累加器A判零轉(zhuǎn)移指令的執(zhí)行過程,2.比較轉(zhuǎn)移指令指令格式:CJNE,,rel,,圖3.11CJNE指令的執(zhí)行過程,3.循環(huán)減1轉(zhuǎn)移指令指令格式:D
49、JNZ,rel,圖3.12DJNZ指令的操作過程示意,,例2在程序中,可以利用DJNZ指令實(shí)現(xiàn)軟件延時(shí)。當(dāng)晶振頻率一定時(shí),則延時(shí)的大小可根據(jù)程序的需要從幾個(gè)微秒到幾百微秒,甚至毫秒、秒等不同要求來設(shè)定。下面是一段當(dāng)系統(tǒng)晶振頻率為12MHz時(shí),在P1.0口輸出周期為1毫秒脈沖的延時(shí)程序。K2:MOVR2,#0F8HK1:DJNZR2,K1CPLP1.0AJMPK2,1.長調(diào)用指令指令格式,3.7.3子程序調(diào)用和返回指令,,2.絕對(duì)調(diào)用指令指令格式:,,,3.返回指令指令格式:,,4.中斷返回指令指令格式:RETI該指令用于中斷返回。執(zhí)行過程類似于RET。RET與RETI指令應(yīng)分別放在子程序和中斷
50、服務(wù)程序的最后。,,5.空操作指令指令格式:NOP;(PC)←(PC)+1,(1)MCS-51單片機(jī)有哪幾種尋址方式?各尋址方式所對(duì)應(yīng)的寄存器和存儲(chǔ)空間有何不同?(2)MCS-51的指令系統(tǒng)按功能可分為哪幾類?(3)分別說明以下指令的作用。MOVA,30HMOVA,@R0MOVA,R7MOVA,#45HMOVR3,59HMOVR3,60HMOV40H,AMOV55H,R4MOV50H,30HMOV65H,@R1(4)試說明MOVX指令與MOVC指令有何區(qū)別。,,3.8思考練習(xí)題,(5)若(R1)=45H,(A)=40H,(45H)=06H,(40H)=80H。分析下面的程序段執(zhí)行后,上述各單元
51、內(nèi)容有何變化?MOVA,@R1MOV@R1,40HMOV40H,AMOVR1,#35H(6)將存放在30H單元中的壓縮BCD碼拆分后,分別存放到31H、32H中。(7)試將存放于40H單元的數(shù)據(jù)0FH乘4,并仍然存放在40H單元中(要求分別用兩種方法編程)。(8)若(50H)=40H,寫出執(zhí)行下面程序段后累加器A、寄存器R0、以及內(nèi)部RAM的40H、41H、42H單元中的內(nèi)容。,MOVA,50HMOVR0,AMOVA,#00HMOV@R0,AMOVA,3BHMOV42H,41HMOV42H,A(9)一個(gè)16位數(shù)的高字節(jié)存放在30H單元,低字節(jié)存放在31H單元,另一個(gè)16位數(shù)據(jù)的高字節(jié)存放在32
52、H單元,低字節(jié)存放在33H單元,試編寫程序完成這兩個(gè)16位數(shù)據(jù)的減法運(yùn)算,差的高8位存放入40H,低8位存放到41H單元。(10)編寫一段程序,查找存放在30H~50H單元中是否有數(shù)據(jù)34H,若有則將F0置1,否則將F0清0。(11)若單片機(jī)的晶體振蕩器頻率為12MHz,試編寫一輸出到P1.0口的脈沖,脈沖周期為100s。(12)說明RET與RETI指令的區(qū)別。,課堂練習(xí),1、編程實(shí)現(xiàn)流水燈的開閉幕式功能,開幕式為先中間兩個(gè)燈亮——中間四個(gè)燈亮——中間六個(gè)燈亮——8個(gè)燈全亮,再閉幕式,從8個(gè)燈亮——中間六個(gè)亮——中間四個(gè)亮——再中間兩個(gè)亮——到全滅。重復(fù)整個(gè)過程2、測(cè)試實(shí)驗(yàn)板功能程序:1)編寫
53、程序讓8個(gè)燈全亮1S鐘,再全滅1S鐘,重復(fù)5次。2)8個(gè)數(shù)碼管從0到9以200ms循環(huán)顯示。,ORG0000HSJMPMAINORG0030HMAIN:MOVR6,#9LOOP:MOVA,R6MOVDPTR,#TABLEMOVCA,@A+DPTRMOVP0,AMOVP2,#00HDJNZR6,LOOPSJMPMAINDELAY:MOVR5,#200D2:MOVR4,#200D1:NOPNOPNOPNOPDJNZR4,D1DJNZR5,D2RETTABLE:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,86H,90HEND,第4章單片機(jī)的程序設(shè)計(jì),u偽指令u匯編語
54、言源程序的編輯與匯編u匯編語言程序設(shè)計(jì),有一些指令,如指定目標(biāo)程序或數(shù)據(jù)存放的地址、給一些指定的標(biāo)號(hào)賦值、表示源程序結(jié)束等指令,并不產(chǎn)生目標(biāo)程序(機(jī)器碼),也不影響程序的執(zhí)行,僅僅產(chǎn)生供匯編用的某些命令,用來對(duì)匯編過程進(jìn)行某種控制或操作,這類指令稱為偽指令。,4.1偽指令,4.1.1定義起始地址偽指令,格式:ORGaddr16功能:規(guī)定程序塊或數(shù)據(jù)塊存放的起始地址。addr16表示一個(gè)16位的程序存儲(chǔ)器的空間地址,一般為一個(gè)確定的地址,也可以是事先定義的標(biāo)號(hào)。例如:ORG2000HSTART:MOVA,30H…,4.1.2定義匯編結(jié)束偽指令,格式:END功能:表示匯編結(jié)束,4.1.3標(biāo)號(hào)賦值偽
55、指令,格式:標(biāo)號(hào)EQU[表達(dá)式]功能:將表達(dá)式的值賦給本語句中的標(biāo)號(hào)。又稱為等值指令。,4.1.4定義字節(jié)偽指令,格式:標(biāo)號(hào):DB[字節(jié)表]功能:從標(biāo)號(hào)指定的地址單元開始,在程序存儲(chǔ)器中定義字節(jié)數(shù)據(jù)。,4.1.5定義字偽指令,4.1.6預(yù)留存儲(chǔ)區(qū)偽指令,格式:標(biāo)號(hào):DS表達(dá)式功能:從標(biāo)號(hào)指定的地址單元開始,定義一個(gè)存儲(chǔ)區(qū),以備源程序使用。存儲(chǔ)區(qū)內(nèi)預(yù)留的存儲(chǔ)單元數(shù)由表達(dá)式的值決定。例如:ORG3030HTIMER:DS10H┇,格式:標(biāo)號(hào):DW[字表]功能:從標(biāo)號(hào)指定的地址單元開始,在程序存儲(chǔ)器中存儲(chǔ)字?jǐn)?shù)據(jù)。,4.2匯編語言源程序的編輯與匯編,4.2.1源程序的編輯,編寫完成的源程序應(yīng)以“.AS
56、M”的擴(kuò)展名保存,以備匯編程序調(diào)用。,4.2.2源程序的匯編,4.3匯編語言程序設(shè)計(jì),,,4.3.1順序程序,例1已知X、Y、Z分別為片內(nèi)RAM30H、31H、32H單元的內(nèi)容,設(shè)X>Y,試編程完成下式的算術(shù)運(yùn)算:S=(X-Y)*Z,并將計(jì)算結(jié)果S存入片內(nèi)RAM34H(高字節(jié))、35H(低字節(jié))單元中。由于X>Y,所以X-Y>0,不需要借位;(X-Y)*Z的結(jié)果最多占用兩個(gè)字節(jié)。實(shí)現(xiàn)該要求的程序流程圖如圖4.2所示。,,程序清單如下:ORG0030HSTART:MOVA,30H;(A)←XSUBBA,31H;(A)←(A)-XMOVB,32H;(B)←ZMULABMOV34H,B;(34H)←
57、A*B的高字節(jié)MOV35H,A;(35H)←A*B的低字節(jié)SJMP$,例2編寫雙字節(jié)無符號(hào)數(shù)乘法程序。被乘數(shù)高字節(jié)放在R2中,低字節(jié)存放在R3中,乘數(shù)高字節(jié)放在R6中,低字節(jié)放在R7中。乘積在R2、R3、R4、R5中。,程序段如下:MOVA,R3;R3R7MOVB,R7MULABMOVR4,B;暫存部分積MOVR5,AMOVA,R3MOVB,R6;R3R6MULABADDA,R4;累加部分積MOVR4,ACLRAADDCA,BMOVR3,AMOVA,R2;R2R7MOVB,R7,MULABADDA,R4;累加部分積MOVR4,AMOVA,R3ADDCA,BMOVR3,ACLRARLCAXCHA
58、,R2;R2R6MOVB,R6MULABADDA,R3;累加部分積MOVR3,AMOVA,R2ADDCA,BMOVR2,A,4.3.2分支程序,例1在內(nèi)部RAM單元的30H和31H中各有一無符號(hào)數(shù),試比較其大小,大數(shù)存入40H單元,小數(shù)存入41H單元,若相等則存入42H單元。程序流程框圖如圖4.3所示。,程序如下:MOVA,30HCJNEA,31H,K1MOV42H,AAJMPWAITK1:JNCK2MOV41H,AMOV40H,31HAJMPWAITK2:MOV40H,AMOV41H,31HWAIT:AJMP$,4.3.3循環(huán)程序,循環(huán)程序的流程如圖4.4所示。,,例2在內(nèi)部RAM30H開始
59、的連續(xù)單元中,存放著20個(gè)無符號(hào)數(shù),編寫一段程序,使這20個(gè)數(shù)按照由大到小的順序依次排列。MOVR0,#30HMOVR7,#19;設(shè)置外循環(huán)計(jì)數(shù)器OUTSIDE:MOVR6,00H;設(shè)置內(nèi)循環(huán)計(jì)數(shù)器PUSH00H;0組R0進(jìn)棧MOVA,@R0;取內(nèi)循環(huán)的第一個(gè)數(shù)INSIDE:INCR0;修改內(nèi)循環(huán)間址指針MOVB,@R0CJNEA,B,$+3;比較A與@R0的大小JNCNEXTCH;大于等于不交換XCHA,R0;小于交換NEXTCH:DJNZR6,INSIDE;判內(nèi)循環(huán)是否結(jié)束POP00H;內(nèi)循環(huán)結(jié)束,R0出棧MOV@R0,A;存內(nèi)循環(huán)的最大值INCR0;修改外循環(huán)指針DJNZR7,OUTSI
60、DE;判外循環(huán)是否結(jié)束SJMP$,2.子程序舉例,例1將單字節(jié)16進(jìn)制整數(shù)轉(zhuǎn)換成單字節(jié)BCD碼整數(shù)的子程序。入口條件:待轉(zhuǎn)換的單字節(jié)16進(jìn)制整數(shù)在累加器A中。出口狀態(tài):轉(zhuǎn)換后的BCD碼整數(shù)(十位和個(gè)位)仍在累加器A中,百位在R3中。CHBCD:PUSHPSW;保護(hù)現(xiàn)場PUSHBMOVB,#100DIVAB;(A)←BCD碼的百位MOVR3,A;(R3)←BCD碼的百位MOVA,#10;余數(shù)繼續(xù)分離十位和個(gè)位XCHA,BDIVAB;(A)←BCD碼的十位SWAPAORLA,B;將十位和個(gè)位拼裝成BCD碼POPB;恢復(fù)現(xiàn)場POPPSWRET,4.3.4子程序,例3將4位二進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼。
61、入口條件:待轉(zhuǎn)換的4位二進(jìn)制數(shù)存入R2中。出口狀態(tài):轉(zhuǎn)換后的ASCII碼存R2中。ASCB:PUSHPSW;保護(hù)現(xiàn)場PUSHAMOVA,R2ANLA,#0FH;取出四位二進(jìn)制數(shù)PUSHA;存入堆棧CLRCSUBBA,#0AHPOPA;彈回A中JCLOOP;該數(shù)小于10,則轉(zhuǎn)LOOPADDA,#07H;否則加07HLOOP:ADDA,#30H;加30HMOVR2,A;轉(zhuǎn)換后的ASCII碼存入R2POPA;恢復(fù)現(xiàn)場POPPSWRET,4.4思考練習(xí)題,(1)簡述匯編語言的特點(diǎn)。(2)什么是偽指令?簡述常用偽指令的功能。(3)按照?qǐng)?zhí)行的方式,程序可分為哪幾類?(4)在編寫子程序時(shí),應(yīng)注意哪些問題?(
62、5)編寫一段程序,將外部RAM中2000H~2020H單元的內(nèi)容送入內(nèi)部RAM的30H~50H單元中。(6)編寫程序,求出片內(nèi)40H單元內(nèi)容中所有“0”的個(gè)數(shù),結(jié)果存入50H。(7)在內(nèi)部RAM單元30H開始的5個(gè)單元中,存放著5個(gè)壓縮BCD碼,編寫一段程序,將它們轉(zhuǎn)換成ASCII碼,并存放到40H開始的單元中。(8)編程求出內(nèi)部RAM中從30H開始的連續(xù)20個(gè)單元中的內(nèi)容的平均值,并存入60H單元中。(9)編程完成以下功能:檢測(cè)內(nèi)部RAM單元30H開始的32個(gè)數(shù),若為正數(shù)或0,則值不變;若為負(fù)數(shù),則取補(bǔ)后送回。(10)在內(nèi)部RAM單元中,從30H開始連續(xù)存放著20個(gè)8位無符號(hào)數(shù),編程排列其順
63、序,使它們從20H單元開始,按照從大到小的順序依次存放。,第5章MCS-51單片機(jī)的中斷系統(tǒng),中斷的概念MCS-51的中斷系統(tǒng)及控制中斷處理外部中斷及其擴(kuò)展思考練習(xí)題,5.1中斷的概念,5.1.1微機(jī)的輸入/輸出方式,無條件方式程序查詢方式DMA方式中斷方式,,查詢方式流程圖,5.1.2中斷的概念,當(dāng)CPU正在處理某件事情的時(shí)候,內(nèi)部或外部發(fā)生的某一事件(如一個(gè)電平的變化,一個(gè)脈沖沿的發(fā)生或定時(shí)器計(jì)數(shù)溢出等)請(qǐng)求CPU迅速去處理,于是,CPU暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)去處理所發(fā)生的事件。處理完該事件以后,再回到原來被中止的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。,中斷方式除了可以解決資源共享問題
64、以外,還有以下一些特點(diǎn):,1.高效率地實(shí)現(xiàn)CPU和外設(shè)的速度匹配2.實(shí)現(xiàn)實(shí)時(shí)控制3.實(shí)現(xiàn)故障的及時(shí)發(fā)現(xiàn)4.實(shí)現(xiàn)人機(jī)聯(lián)系,5.2MCS-51的中斷系統(tǒng)及控制,8051單片機(jī)中斷系統(tǒng)的結(jié)構(gòu)如圖5.3所示。,5.2.1中斷源,8051中斷系統(tǒng)的5個(gè)中斷源為:——外部中斷0請(qǐng)求,通過P3.2引腳輸入?!獠恐袛?請(qǐng)求,通過P3.3引腳輸入。T0——定時(shí)器/計(jì)數(shù)器0溢出中斷請(qǐng)求。T1——定時(shí)器/計(jì)數(shù)器1溢出中斷請(qǐng)求。TI/RI——串行口中斷請(qǐng)求。,5.2.2中斷控制,1.定時(shí)器控制寄存器TCON,與中斷有關(guān)的位如圖5.4所示。,,2.串行口控制寄存器SCON,SCON中TI和RI的格式如圖5.5所示。
65、,,3.中斷允許控制IE,IE的格式如圖5.6所示。,,例1假設(shè)允許片內(nèi)定時(shí)器/計(jì)數(shù)器中斷,禁止其他中斷。試根據(jù)假設(shè)條件設(shè)置IE的相應(yīng)值。根據(jù)題目要求,要允許內(nèi)部定時(shí)器中斷,就需要將IE寄存器的EA、ET1、ET0置1,其他位清0,可分別通過字節(jié)尋址或者位尋址進(jìn)行。(1)用字節(jié)操作指令:MOVIE,#8AH或者,MOV`A8H,#8AH(2)用位操作指令:SETBET0;定時(shí)器/計(jì)數(shù)器0允許中斷SETBET1;定時(shí)器/計(jì)數(shù)器1允許中斷SETBEA;CPU開中斷,4.中斷優(yōu)先級(jí)寄存器IP,051片內(nèi)有一個(gè)中斷優(yōu)先級(jí)寄存器IP,其格式如圖5.7所示。,,例1系統(tǒng)要求設(shè)定8051的片外中斷為高優(yōu)先級(jí)
66、中斷,片內(nèi)中斷為低優(yōu)先級(jí)。請(qǐng)寫出相應(yīng)的指令。解:根據(jù)題目要求,需要將8051的外部中斷優(yōu)先級(jí)控制位PX0、PX1設(shè)置為1,而內(nèi)部中斷優(yōu)先級(jí)控制位PT0、PT1、PS清為0。(1)用字節(jié)操作指令:MOVIP,#05H(2)用位操作指令:SETBPX0SETBPX1CLRPSCLRPT0CLRPT1,5.3中斷處理,5.3.1中斷響應(yīng),1.中斷響應(yīng)條件CPU響應(yīng)中斷的條件有:有中斷源發(fā)出中斷請(qǐng)求。中斷總允許位EA=1,即CPU開中斷。申請(qǐng)中斷的中斷源的中斷允許位為1,即中斷沒有被屏蔽。無同級(jí)或更高級(jí)中斷正在被服務(wù)。當(dāng)前的指令周期已經(jīng)結(jié)束。若現(xiàn)行指令為RETI或者是訪問IE或IP指令時(shí),該指令以及緊接著的另一條指令已經(jīng)執(zhí)行完畢。,2.中斷響應(yīng)操作過程,表5.1中斷源及其對(duì)應(yīng)的中斷矢量,5.3.2中斷處理,,圖5.8中斷服務(wù)程序流程,5.4外部中斷及其擴(kuò)展,5.4.1外部中斷的響應(yīng)時(shí)間5.4.2外部中斷方式的選擇1.電平方式2.邊沿方式5.4.3利用外部中斷實(shí)現(xiàn)單步操作所謂單步操作,就是在程序調(diào)試時(shí),每按一次單步執(zhí)
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案