北方工業(yè)大學(xué) 單片機選修課課件

上傳人:仙*** 文檔編號:134560236 上傳時間:2022-08-13 格式:DOC 頁數(shù):29 大?。?67.50KB
收藏 版權(quán)申訴 舉報 下載
北方工業(yè)大學(xué) 單片機選修課課件_第1頁
第1頁 / 共29頁
北方工業(yè)大學(xué) 單片機選修課課件_第2頁
第2頁 / 共29頁
北方工業(yè)大學(xué) 單片機選修課課件_第3頁
第3頁 / 共29頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《北方工業(yè)大學(xué) 單片機選修課課件》由會員分享,可在線閱讀,更多相關(guān)《北方工業(yè)大學(xué) 單片機選修課課件(29頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、3.1 指令和指令程序 指令和助記符: 計算機能直接識別和執(zhí)行的命令稱為指令。一臺計算機所能執(zhí)行的全部指令的集合稱為這臺計算機的指令系統(tǒng)。 MCS-51單片機的指令系統(tǒng)包含了111條指令。 機器語言: 01110100 ;(740AH)把10送累加器A 00001010 00100100 ;(2414H)A加20,結(jié)果仍在A中 00010100 上述指令的匯編形式:(740AH) MOV A, #0AH (2414H) ADD A, #14H 指令的字節(jié)數(shù): 1字節(jié)指令—既含操作碼也含操作數(shù)(49條): ①指令的含義和對象明確eg. 10100011

2、èINC DPTR; ②用一個字節(jié)中的幾位來表示操作數(shù)eg.1101rrrèMOV A,Rn 2字節(jié)指令—一個字節(jié)表示操作碼,另一個字節(jié)表示操作數(shù)(45條): eg. 01110100 操作數(shù); MOV A, #data 3字節(jié)指令—一個字節(jié)表示操作碼,兩個字節(jié)表示操作數(shù) 3.2 尋址方式 MCS-51系統(tǒng)中, 操作數(shù)的尋址方式有7種: ①寄存器尋址 ——直接用寄存器名;寄存器指R0~R7=>用Rn表示; eg. MOV A,R0 ADD A,R5 ②直接尋址——直接給出操作數(shù)地址→內(nèi)部RAM包括21個SFR的地址=>用direct表示;對于特

3、殊功能寄存器,使用其定義名稱和直接地址效果完全相同。 eg. MOV A,3AH MOV A,PCON <=> MOV A,87H ③立即尋址 ——直接給出8位或16位的數(shù)值=>用#data或#data16表示; eg. MOV A,# 3AH; MOV DPTR,# 3A87H→系統(tǒng)僅此一條16位立即數(shù)傳指令; ④寄存器間接尋址——僅R0; R1及DPTR可用作間址寄存器=>用@Ri及@DPTR表示;用此尋址方式可訪問內(nèi)部RAM和外部RAM,但不能訪問SFR; 當被訪問的是內(nèi)部RAM或外部RAM的低256位時, 可用@Ri; 要

4、訪問全部64k外部RAM時,用@DPTR; eg. MOV A,@R0 MOVX A,@R1 MOVX A,@DPTR 3.2 尋址方式 ⑤變址尋址 ——@DPTR+A; @PC+A=>主要用于訪問ROM eg. MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR ⑥相對尋址 (給出偏移量; 只出現(xiàn)在相對轉(zhuǎn)移指令中 =>用rel 表示偏移量→帶符號數(shù):-128~127) eg. JZ 3AH (目的地址 = 源地址 + 轉(zhuǎn)移指令字節(jié)數(shù) +

5、rel) ⑦位尋址——給出位地址=>用bit表示; eg. MOV C,07H 位地址有下列幾種表示方法: 直接用位地址: 07H; (00H~F7H中再剔除CxH, D8~DF;合計224bit) 采用第幾單元 .第幾位: 25H . 5; SFR名.位數(shù): TCON. 3; 用偽指令定義: eg. A1 BIT P1.0 ; A2 BIT 20H 3.3 數(shù)據(jù)傳送指令 MCS-51指令系統(tǒng)中的指令,可分為五大類:

6、①數(shù)據(jù)傳送指令28條 ②算術(shù)運算指令24條 ③邏輯運算及移位指令25條 ④控制轉(zhuǎn)移指令25條 ⑤位操作(布爾操作)指令17條 =>合計111條 一. 內(nèi)部RAM之間的數(shù)據(jù)傳送指令(15條) 1.立即尋址(4條) MOV A, # data; MOV Rn, # data; MOV @Ri, # data; MOV direct, # data 2.直接尋址(5條) MOV A, direct; MOV direct, A MOV Rn, direct MOV

7、 @Ri, direct MOV direct2, direct1; 3.間接尋址(3條) MOV A, @Ri MOV @Ri, A; MOV direct, @Ri 4.寄存器尋址(3條) MOV A, Rn MOV Rn, A MOV direct, Rn 3.3 數(shù)據(jù)傳送指令 MOV指令(15條)圖解 基本規(guī)律: 兩兩互訪, 兩例外: ①立即數(shù)只能作為源操作數(shù); ② @Ri與Rn無聯(lián)系 兩特例: ①direct

8、可自訪;② @Ri不能訪問SFR 3.3 數(shù)據(jù)傳送指令 二. 涉及外部存儲器的數(shù)據(jù)傳送指令 1. 16位地址傳送指令(僅此一條16位數(shù)傳指令) MOV DPTR,# data16 (data16----16位立即數(shù),通常是外部RAM或ROM的地址) 2. 訪問ROM的指令 MOVC A,@A+DPTR ;A← (A+DPTR) MOVC A,@A+PC ;PC ← PC+1, A← (A+PC) 3. 訪問外部RAM的指令 MOVX A,@Ri ;只能尋址外部RAM的00

9、00H~00FFH;比較: MOV A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 三. 堆棧操作指令 PUSH direct ;SP←SP+1, (SP)←(direct) POP direct ;(direct)←(SP), SP←SP-1 四.數(shù)據(jù)交換指令 XCH A,Rn XCH A,direct XCH A,@Ri XCHD A,@Ri ;

10、ACC.0~ACC.3與(Ri)0~3交換, 高位保持不變; ***數(shù)傳指令不影響各標志位,僅P標志受A內(nèi)容的影響; 數(shù)據(jù)傳送類指令課堂練習(xí)1 1.如何用MCS-51指令實現(xiàn)以下的數(shù)據(jù)傳送 1)R1內(nèi)容傳送到R0 2)外部RAM 20H單元內(nèi)容送R0 3)外部RAM 20H單元內(nèi)容送內(nèi)部RAM 20H單元 4)外部RAM 1000H單元內(nèi)容送內(nèi)部RAM 20H單元 5)ROM 2000H單元內(nèi)容送R0 6)ROM 2000H單元內(nèi)容送內(nèi)部RAM 20H單元 7)ROM 2000H單元內(nèi)容送外部RAM 20H單元 數(shù)據(jù)傳送類指令課堂練習(xí)2 2.設(shè)內(nèi)部RAM的30H單

11、元的內(nèi)容為40H, 即(30H)=40H, 還知(40H)=10H, (10H)=00H,端口P1=CAH,問執(zhí)行以下指令后, 各有關(guān)存儲單元、寄存器及端口的內(nèi)容? MOV R0, #30H ;R0=30H MOV A, @R0 ;A=40H MOV R1, A ;R1=40H MOV B, @R1 ;B=10H MOV @R1, P1 ;(40H)=CAH MOV P2, P1 ;P2=CAH MOV 10H, #20H ;(10H)=20H MOV 30H, 10H ;(30H)=20H 3.4 算術(shù)運算指令

12、 此類指令分為6組, 每組4條; 四條指令的目的操作數(shù)是累加器A時, 源操作數(shù)采用‘寄存器’; ‘直接’; ‘間接’和‘立即數(shù)’四種尋址方式 。 1. 加法指令(ADD): ADD A,Rn; ADD A,direct; ADD A,@Ri; ADD A,#data 2. 帶進位加法指令(ADDC): ADDC A,Rn; ADDC A,direct; ADDC A,@Ri; ADDC A,#data 3. 加

13、 1指令(INC): (標志位不受影響; 但P標志受A內(nèi)容的影響) INC A; INC Rn; INC direct; INC @Ri 4.帶借位減法指令(SUBB): SUBB A,Rn; SUBB A,direct; SUBB A,@Ri; SUBB A,#data 5.減 1指令(DEC):(標志位不受影響; 但P標志受A內(nèi)容的影響) D

14、EC A; DEC Rn; DEC direct; DEC @Ri 6.乘除指令和其他運算指令 A. 乘除指令: MUL AB; DIV AB (影響Cy, OV, P標志;執(zhí)行乘除操作后Cy=0;相乘后若B≠0, 則OV=1, 否則OV=0;做除法時若除數(shù)B=0, 則OV=1;否則OV=0) B. 十進制調(diào)整指令: DA A (兩個壓縮的BCD數(shù)相加后應(yīng)進行此調(diào)整;該指令僅影響Cy) C. 數(shù)

15、據(jù)指針加1指令: INC DPTR (唯一的一條16位算術(shù)運算指令) 3.5 邏輯運算及移位指令 1. 邏輯與運算指令: ANL A,Rn; ANL A,direct; ANL A,@Ri; ANL A,#data ANL direct,A; ANL direct,#data; 2. 邏輯或運算指令: ORL A,Rn; ORL A,direct; ORL A,@Ri;

16、 ORL A,#data ORL direct,A; ORL direct,#data; 3. 邏輯異或運算指令: XRL A,Rn; XRL A,direct; XRL A,@Ri; XRL A,#data XRL direct,A; XRL direct,#data; 4.累加器清零及取反指令 CLR A; CPL A; *以上邏輯運算都是按位進行的;對Cy,AC和OV都沒有影響。 5. 移位

17、及半字節(jié)交換指令(只能針對A,移位全部是循環(huán)移位) RL A 循環(huán)左移 RLC A 帶進位循環(huán)左移 RR A 循環(huán)右移 RRC A 帶進位循環(huán)右移 SWAP A 半字節(jié)交換(相當于執(zhí)行4次循環(huán)左移) **循環(huán)指令執(zhí)行一次,移一位;若想多移幾位,則應(yīng)編寫循環(huán)程序 算術(shù)運算/邏輯運算類指令課堂練習(xí)3 3.已知A=7AH,R0=30H,(30H)=A5H,PSW=80H,問執(zhí)行以下各指令的結(jié)果(每條指令都以題中規(guī)定的數(shù)據(jù)參加操作)。 1) XCH A, R0 ;A=30H R0=7AH 2) XCH A, 30H ;A=0A5H 3) XCH A, @R0 ;A=0A5H

18、4) XCHD A, @R0 ;A=75H 5) SWAP A ;A=0A7H 6) ADD A, R0 ;A=0AAH Cy=0 OV=1 7) ADD A, 30H ;A=1FH Cy=1 OV=0 8) ADD A, #30H ;A=0AAH Cy=0 OV=1 9) ADDC A, 30H ;A=20H Cy=1 OV=0 10) SUBB A, 30H ;A=0D4H Cy=1 OV=1 11) SUBB A, #30H ;A=49H Cy=0 OV=0 算術(shù)運算/邏輯運算類指令課堂練習(xí)4 4.設(shè)A=83H, R0=17H, (17H)=3

19、4H, 執(zhí)行以下指令后, A=? ANL A, #17H ;A=03H ORL 17H, A ;(17H)=37H XRL A, @R0 ;A=34H CPL A ;答A=0CBH 3.6 控制轉(zhuǎn)移指令 1. 無條件轉(zhuǎn)移指令(4條) ①長轉(zhuǎn)移指令:LJMP addr16 ;PC←addr16;在匯編語言中addr16可以 直接用一個16位的地址,也可以用標號由匯編語言算出其16位的地址。 eg. LJMP 35ECH; LJMP lable ②絕對轉(zhuǎn)移指令:AJMP addr11 ; PC← PC+2; PC

20、.10~0←addr11; 在匯編語言中addr11可以直接用一個16位的地址, 也可以用標號由匯編語言算出其16位的地址;但僅取該16位地址的低11位用于替換PC中的低11位;可獲得2k的轉(zhuǎn)移范圍;但目標地址必須與該條指令地址+2在同一個2k區(qū)域;所以指令“l(fā)ab:AJMP lab”不一定能實現(xiàn)。 eg. AJMP 27BCH; AJMP lable ③短轉(zhuǎn)移指令: SJMP rel ; PC← PC+2+rel; rel→相對尋址, 8位帶符號數(shù)表示地址偏移量; 在匯編語言中通常用標號表示: eg. HERE:

21、SJMP HERE; <=> SJMP $; <=> SJMP FEH ④變址方式的轉(zhuǎn)移指令:JMP @A+DPTR ; PC← A+DPTR; 這條指令的特點是轉(zhuǎn)移的地址可以在程序運行中加以改變。例如,當DPTR為確定的值時,根據(jù)A的不同的值就可以實現(xiàn)多分支的轉(zhuǎn)移,起到一條指令完成多條指令的功能。 3.6 控制轉(zhuǎn)移指令 2. 條件轉(zhuǎn)移類指令 ①累加器判零條件轉(zhuǎn)移指令(2條) JZ rel ;若A=0, 則PC←PC+2+rel; 若A≠0, 則PC←PC+2; eg.

22、 Lable: JZ Lable JNZ rel ;若A≠0, 則PC←PC+2+rel; 若A =0, 則PC←PC+2 ②比較條件轉(zhuǎn)移指令(4條) CJNE A, direct, rel ; CJNE A, #data, rel ; CJNE Rn, #data, rel ; CJNE @Ri, #data, rel ; 在匯編語言中通常用標號表達rel; eg. lable : CJNE

23、 A, #data, lable ③減 1條件轉(zhuǎn)移指令(2條) DJNZ Rn , rel ;Rn←Rn-1;若Rn≠0, 則PC←PC+2+rel; 否則PC←PC+2; DJNZ direct, rel ;(direct)←(direct)-1;若(direct)≠0, 則PC←PC+2+rel; 否則PC←PC+2; *條件轉(zhuǎn)移指令均為相對轉(zhuǎn)移,轉(zhuǎn)移范圍-128~127;若要大范圍轉(zhuǎn)移需與無條件轉(zhuǎn)移配合使用。 3.6 控制轉(zhuǎn)移指令 3. 子程序調(diào)用及返回指令 ①調(diào)

24、用指令 ACALL addr11 ;PC←PC+2; SP←SP+1, (SP)←PC7~0; (絕對調(diào)用指令) ;SP←SP+1, (SP)←PC15~8; (低位低地址,…) ;PC10~0←addr11; (不在同一2k塊,則轉(zhuǎn)不過去) LCALL addr16 ;PC←PC+3; SP←SP+1, (SP)←PC7~0; (長調(diào)用指令) ;SP←SP+1, (SP)←PC15~8; (,…高位高地址) ;PC←addr16; ②返回指令 RET

25、 ;(子程序返回) ;PC15~8← (SP), SP←SP-1; PC7~0← (SP), ;SP←SP-1 (高地址→高位,低地址→低位) RETI ;(中斷返回) ;PC15~8← (SP), SP←SP-1; PC7~0← (SP), ;SP←SP-1 4. 空操作指令 NOP ;PC ← PC+1單字節(jié)單周期指令;僅消耗了一個機器周期。 3.7 布爾變量操作指令 1. 位傳送指令(可位尋址的各位和位累加器C之間可以互相傳送內(nèi)容) MOV C, bit; MOV bit, C 2. 復(fù)位/置位指令(4條)

26、 CLR C; CLR bit; SETB C; SETB bit; 3. 位運算指令(6條) ANL C, bit; ORL C, bit; CPL C; ANL C, /bit; ORL C, /bit; CPL bit; *(ANL C, /bit;表示將bit取反后再與C相與,該指令不會影響原bit的內(nèi)容) 4. 位控制轉(zhuǎn)移指令(5條) ①以Cy內(nèi)容為條件的轉(zhuǎn)移指令: JC rel ;若Cy=

27、1,PC←PC+2+rel;否則,PC←PC+2 JNC rel ;若Cy≠1,PC←PC+2+rel;否則,PC←PC+2 ②以位地址內(nèi)容為條件的轉(zhuǎn)移指令 JB bit,rel ;若(bit)=1,PC←PC+3+rel;否則,PC←PC+3 JNB bit,rel ;若(bit)≠1,PC←PC+3+rel;否則,PC←PC+3 JBC bit,rel ;若(bit)=1,PC←PC+3+rel,且使(bit=0); 否則,PC←PC+3 控制轉(zhuǎn)移類指令課堂練習(xí)5 5.已知SP=25H, PC=2345H, (24H)=12H, (25H)=34H, (2

28、6H)=56H, 問在這種條件下執(zhí)行RET指令以后, SP=? PC=? 答:SP=23H;PC=3412H 6.若SP=25H, PC=2345H, 標號LABEL所在的地址為3456H, 問執(zhí)行長調(diào)用指令”LCALL LABEL” 之后, 堆棧指針和堆 棧內(nèi)容發(fā)生什么變化?PC=? 答:SP=27H; (26H)=48H; (27H)=23H; PC=3456H 7.在上題中的LCALL指令能否直接換成ACALL指令? 為什么? 答:不能;因為不在同一個2k區(qū)域 實例: 例4.1若在外部ROM中2000H單元開始存放0~9的平方值,要求根據(jù)累加器A中的值(0~9)

29、來查找所對應(yīng)的平方值。 解1: ┊ MOV A, #8 MOV DPTR, #2000H MOVC A, @A+DPTR ┊ ORG 2000H TAB: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 解2: ┊ MOV A, #8 ADD A, #0FH (1ff0h) MOVC A, @A+PC ┊ ORG 2000H TAB: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 實例: 例4.3有2個無符號16位數(shù), 分別存放在從M1和M

30、2開始的數(shù)據(jù)區(qū)中, 低8位先存, 高8位在后, 和存于R3(高8位); R4(低8位), 設(shè)和不超過16位。 MOV R0, #M1 MOV R1, #M2 MOV A, @R0 ADD A, @R1 MOV R4, A INC R0 INC R1 MOV A, @R0 ADDC A, @R1 MOV R3, A 4.1 匯編語言源程序的格式 匯編語言源程序的一般形式: [標號:] 操作碼 [操作數(shù)] [;注釋] 1. 標號: 標號由8個或8個以下的字母、數(shù)字、下劃線組成,標號的第一個字符必須是字母;此外,系統(tǒng)中保留使用的字符或字符串不能用作

31、標號。以下標號非法: 2A; S+N; EQU…. 2. 操作數(shù) A. 對于#data: #10010010B; #10; #9BH; #0ABH→注意不能丟掉前面的0; 否則按符號地址ABH處理。eg. MOV A,#0ABH <=> MOV A,#ABH B. 對于直接地址direct可以用: ①10010011B;98;0F9H;eg. MOV A,98 ②標號地址:eg. MOV A,SUM ③帶 +、-號的表達式 => 直接地址:eg. MOV A,SUM+3 ④SFR名:eg. MOV A,P2 C. 對于相對尋址的 rel:

32、除可以采用上面提到的① ② ③外,還允許采用一個專門的符號“$”,它表示相對轉(zhuǎn)移指令所在的地址。eg. JNB TF0,$ *源程序中除“注釋”外,不能出現(xiàn)全角符號;即必須全為西文字符。 4.2 偽指令 每種匯編語言都會定義若干條偽指令,用來對匯編過程進行某種控制,或者對符號、標號賦值。 1. ORG(匯編起始命令)——用于規(guī)定下面的目標程序的起始地址,在源程序中可以多次使用,但所規(guī)定的地址必須從小到大,且不能造成地址重疊。 格式: OGR 16位地址 eg. ORG 2000H START: MOV A,#64H 2. END(匯

33、編結(jié)束)——在END以后所寫的指令,匯編程序都不予處理。源程序中只能有一條END,放在所有指令的最后。 格式:END 3. EQU(等值命令)——將一個數(shù)或特定的匯編符號賦予規(guī)定的字符名稱。用EQU定義的字符名稱,必須先定義后使用,且通常不能用于表達式中。 格式:字符名稱 EQU 數(shù)或匯編符號 4. DATA(數(shù)據(jù)地址賦值命令)——將數(shù)據(jù)地址或代碼地址賦予規(guī)定的字符名稱; 用DATA定義的字符名稱,允許先使用后定義,且可用在表達式中。 格式:字符名稱 DATA 表達式 4.2 偽指令 5. BIT(位地址符號命令)——將位地址賦予所規(guī)定的字符名稱。 格式:字符名稱 B

34、IT 位地址;eg. A1 BIT P1.0 ; A2 BIT 20H 6. DB/DW(定義字節(jié)/字命令)——從指定地址單元開始, 定義若干個8/16位內(nèi)存單元內(nèi)容 格式: [標號:] DB 8位二進制數(shù)表 ; [標號:] DW 16位二進制數(shù)表 ;(*高8位在前,低8位在后) eg. lab: DB 45H, 73, “5”, “A” DW 45H, 73, “5”, “A” *注意2者的區(qū)別 7. DS(定義空間命令)——從指定地址單元開始,保留由表達式所指定的個數(shù)存儲單元作為內(nèi)存?zhèn)溆每臻g。 格式: [標號:] DS 表

35、達式 ; ORG 3000H BUF: DS 50 … … ;從地址3000H開始保留50個存儲單元作為備用單元; **以上6、7兩條偽指令均只能作用于ROM 4.3 MCS-51程序設(shè)計舉例 1. 分支程序設(shè)計 例5.6_設(shè)變量X存放在VAR單元, 函數(shù)值Y存放在FUNC單元。按下式給Y賦值: -1 X < 10 Y= 0 10≤X≤20 1 20 < X VAR DATA 30H FUNC DATA 31H MOV A, VAR CJNE A, #10, NEXT1 NEXT1

36、: JC NEXT2 MOV R0, #1 CJNE A, #21, NEXT3 NEXT3: JNC NEXT4 MOV R0, #0 SJMP NEXT4 NEXT2: MOV R0, #0FFH NEXT4: MOV FUNC, R0 4.3 MCS-51程序設(shè)計舉例 1. 分支程序設(shè)計 例5.8 設(shè)有4分支, 對應(yīng)R3的值為0~3; 每分支用于分別從內(nèi)部RAM, 外部RAM256B, 外部64kB, 或外部RAM4kB緩沖區(qū)讀取數(shù)據(jù), 設(shè)低8位地址=>R0,高8位地址=>R1。

37、MOV A, R3 MOV DPTR, #BRTAB MOVC A, @A+DPTR JMP @A+DPTR BRTAB:DB BR0 -BRTAB DB BR1 -BRTAB DB BR2 -BRTAB DB BR3 -BRTAB 4.3 MCS-51程序設(shè)計舉例 2. 循環(huán)程序設(shè)計 例5.11 從BLOCK單元開始有一個無符號數(shù)據(jù)塊,其長度存于LEN單元,試求出數(shù)據(jù)塊中最大的數(shù),并存入MAX單元。 LEN DATA 20H MAX DATA 21H BLOCK DATA 22H

38、 CLR A MOV R2, LEN MOV R1, #BLOCK LOOP: CLR C SUBB A, @R1 JNC NEXT MOV A, @R1 SJMP NEXT1 NEXT: ADD A, @R1 NEXT1: INC R1 DJNZ R2, LOOP MOV MAX, A 4.3 MCS-51程序設(shè)計舉例 例5.13 有10組3字節(jié)的被加數(shù)和加數(shù), 分別存在兩個數(shù)據(jù)塊中, 首地址 分別存于R0和R1

39、中, 求這10組數(shù)的10組和, 各組的和仍送回以R0為指針的單元。 MOV TEMP, R0 MOV TEMP+1, R1 MOV R3, #10 LOOP: MOV R2, #3 CLR C LOOP1:MOV A, @R0 ADDC A, @R1 MOV @R0, A INC R0 INC R1 DJNZ R2, LOOP1 DJNZ R3, LOOP MOV R0, TEMP MOV R1, TEMP+1 TEMP DATA 20H 4.3 MC

40、S-51程序設(shè)計舉例 3. 查表程序 例5.16若A中存放的是某一位十進制數(shù)的7段碼, 通過查表程序, 將其轉(zhuǎn) 換為相應(yīng)的BCD碼, 仍存于A中。 MOV R1, #00H MOV B, A MOV DPTR, #KTAB LOOP: MOV A, R1 MOVC A, @A+DPTR CJNE A, B, NEXT SJMP RESU NEXT: INC R1 SJMP LOOP RESU: MOV A, R1 RET KTAB: DB 40H, 79H, 24H DB 0H, 19H, 12H DB 02H, 78H, 0

41、0H, 18H 4.3 MCS-51程序設(shè)計舉例 3. 查表程序 例5.15 將一組16進制數(shù)轉(zhuǎn)換為ASCII碼。每個字節(jié)內(nèi)存放兩個16進制數(shù)。16進制數(shù)據(jù)塊首地址存于R0,存放ASCII碼區(qū)域的首地址存于R1,數(shù)據(jù)塊長度存于R2。 MOV TEMP, R0 MOV TEMP+1,R1 LOOP: MOV A, @R0 ANL A, #0FH ADD A, #18 MOVC A, @A+PC MOV @R1, A INC R1 MOV A, @R0 4.3 MCS-51程序設(shè)計舉例 4. 子程序 ①通過R0~R7或A來傳送數(shù)據(jù) 例5.17 用程

42、序?qū)崿F(xiàn)c=a2+b2。設(shè)a,b,c存于內(nèi)部RAM的D1,D2,D3。 MOV A, D1 ACALL SQR MOV R1, A MOV A, D2 ACALL SQR ADD A, R1 MOV D3, A SJMP $ SQR: INC A MOVC A, @A+PC RET TAB: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END 4.3 MCS-51程序設(shè)計舉例 TEM DATA 20H MOV R1, #BLOCK1 ACALL FMAX MOV TEM

43、, A MOV R1, #BLOCK2 ACALL FMAX CJNE A, TEM, NEX NEX: JNC NEX1 MOV A, TEM NEX1: MOV MAX, A SJMP $ 4.3 MCS-51程序設(shè)計舉例 4. 子程序 ③通過堆棧傳遞參數(shù) 例5.19 在HEX單元有2個16進制數(shù), 試將它們分別轉(zhuǎn)換成ASCII碼, 存入ASC和ASC+1單元。 HEX DATA 30H ASC DATA 31H PUSH HEX ACALL HASC POP ASC MOV A, HEX SWAP

44、A PUSH ACC ACALL HASC POP ASC+1 SJMP $ 4.3 MCS-51程序設(shè)計舉例 MOV R0, #BLOCK MOV R1, #SUM SUB: MOV R2, #0 MOV R3, #0 MOV A, @R0 JNB ACC.7, N1 MOV R2, #0FFH N1: INC R0 MOV B, @R0 JNB B.7, N2 MOV R3, #0FFH 4.3 MCS-51程序設(shè)計舉例 例5.21 2個16位無符號數(shù)乘法程序;設(shè)R7R6存放乘數(shù), R5R4存乘數(shù),乘積存入以R0開始

45、的單元(低位積先存)。 MOV A, R6 MOV B, R4 MUL AB MOV @R0 A MOV R3, B MOV A, R7 MOV B, R4 MUL AB ADD A, R3 MOV R3, A MOV A, B ADDC A, #0 MOV R2, A MOV A, R6 MOV B, R5 MUL AB ADD A, R3 INC R0 MOV @R0, A MOV R1, #0 MOV A, R2 4.3 MCS-51程序設(shè)計舉例 例5.22 兩個8位帶符號數(shù)乘法程序 ;設(shè)兩個數(shù)已存在R

46、0和R1, 16位乘積送R3, R2保存。 SBIT BIT 20.0 SBIT1 BIT 20.1 SBIT2 BIT 20.2 MOV A, R0 RLC A MOV SBIT1, C MOV A, R1 RLC A MOV SBIT2, C ANL C, /SBIT1 MOV BIT, C MOV C, SBIT1 ANL C, /SBIT2 ORL C, SBIT MOV SBIT, C MOV A, R1 4.3 MCS-51程序設(shè)計舉例 例5.23 16位被除數(shù)已存于R7R6, 16位除數(shù)存于R5R4; 除數(shù)若為0, 則

47、置單元OVER為 0FFH, 以表示溢出; 若被除數(shù)為0, 則置單元OVER為 0(商:R7R6; 余數(shù):R3R2)。 SUB: MOV A, R5 JNZ START MOV A, R4 JZ OVERF START: MOV A, R7 JNZ START1 MOV A, R6 JNZ START1 MOV OVER, #0 RET START1: CLR A MOV R2, A MOV R3, A MOV R1, #16 DIV: CLR C MOV A, R6 RLC A MOV R6, A 5.1 中斷概述 中

48、斷——是cpu與外部設(shè)備交換信息的一種方式;它解決了CPU和 外設(shè)之間的速度配合問題,提高了CPU的效率,使計算機可實時處理 控制現(xiàn)場瞬息變化的信息、參數(shù),提高了計算機處理故障的能力。因此,計算機中斷系統(tǒng)的功能也是鑒別計算機性能好壞的重要標志之一。 1.中斷源——引起中斷的原因或發(fā)出中斷申請的來源;一般可分為軟件中斷和硬件中斷,MCS-51不支持軟件中斷,僅有5個硬件中斷源。 2.硬件中斷的分類: A.屏蔽中斷可直接稱中斷; B.非屏蔽中斷,MCS-51不支持此類中斷; 3.中斷的開放與關(guān)閉 4.中斷源的判別和中斷優(yōu)先級 判別: 單線中斷,軟件查詢 多線中斷 矢量

49、中斷 中斷優(yōu)先級: A.若干個中斷源同時發(fā)出申請 B.中斷嵌套 5.2 中斷處理過程 1.中斷請求——是中斷源向CPU發(fā)出的信號,可以是電平信號,也可以是脈沖信號,視CPU而定,MCS-51兩種方式都支持。 2.中斷響應(yīng) A.響應(yīng)的條件 中斷開放(IEèEA;ES/ET1/EX1/ET0/EX0); 執(zhí)行完當前指令(正執(zhí)行RETI;訪問IE/IP的指令時,需再執(zhí)行一條指令); 無同級或更高優(yōu)先級中斷正在響應(yīng)(IPèPS/PT1/PX1/PT0/PX0) ; B.中斷響應(yīng)基本操作: 中止正在執(zhí)行的程序;并保護斷點(即將斷點地址壓入堆棧); 確定中

50、斷服務(wù)程序的入口地址;并將入口地址送入PC; **中斷入口地址的獲得:固定入口地址;中斷向量表; 3.中斷處理 A.保護現(xiàn)場; B.處理開/關(guān)中斷; C.執(zhí)行中斷服務(wù)程序; D.恢復(fù)現(xiàn)場; E.結(jié)束中斷 4.中斷返回 RETI:èCPU將斷點地址彈回PC 5.3 80C51 的中斷系統(tǒng)及其控制 MCS-51單片機和外設(shè)交換數(shù)據(jù)通常采用兩種方式: 查詢方式和中斷方式 1.中斷系統(tǒng)的一般功能 中斷系統(tǒng)負責(zé)對多個中斷源進行管理, 涉及4個SFR: TCON;SCON;IE;IP; 主要任務(wù): ①對于中斷申請的屏蔽或開放的管理 采用兩級管理:

51、 總開關(guān)EA和5個中斷源自己的開關(guān)EX0,ET0,EX1,ET1,ES ②中斷的排隊 對IP編程將中斷分兩級,同級時按系統(tǒng)規(guī)定的優(yōu)先順序執(zhí)行;在未被屏蔽的前提下高級中斷可中斷低級中斷。 5.3 80C51 的中斷系統(tǒng)及其控制 ③中斷的響應(yīng) 當中斷源產(chǎn)生中斷申請時,MCS-51系統(tǒng)先把這些申請登記在各 自的中斷標志位中,然后在下一個周期按照內(nèi)部優(yōu)先順序和規(guī)定的級別來查詢這些中斷標志,并在一個機器周期內(nèi)完成檢測和優(yōu)先級排隊,此時若系統(tǒng)滿足下面的3個條件,則在下一個機器周期的S1狀態(tài)開始響應(yīng)其中優(yōu)先級最高的中斷。 A.沒有同級或更高級的中斷正在響應(yīng); B.當前指令執(zhí)

52、行完畢; C.若正在執(zhí)行的指令是RETI或任何訪問IE、IP的指令,則必須在另外執(zhí)行一條指令之后才可以響應(yīng)中斷; 中斷響應(yīng)需要兩個機器周期,完成兩件事: 將PC推入堆棧(低地址放PC低8位,高地址放PC高8位)—保護斷點 將入口地址裝入PC;=>相當于內(nèi)部調(diào)用LCALL。 ④中斷的撤除 串行口發(fā)送/接受中斷標志,需通過軟件清除;外中斷采用電平觸發(fā)時,中斷服務(wù)程序應(yīng)使該I/O設(shè)備撤消中斷申請;其余的中斷標志,一旦被響應(yīng)將會被自動清除。 5.3 80C51的中斷系統(tǒng)及其控制 *電平觸發(fā)時只要在S5P2時刻為低電平即可將IE0/1置位;而邊沿觸發(fā)時 需兩個S5P2才能檢測到

53、下降沿。 5.3 80C51的中斷系統(tǒng)及其控制 2.中斷方式應(yīng)用舉例 (80C51和打印機的接口) 例: 將內(nèi)部RAM從20H開 始的50個8位數(shù)據(jù)通過打印 機打印出來。 5.3 80C51的中斷系統(tǒng)及其控制 ORG 0000H ;主程序入口 LJMP MAIN ORG 0003H ;中服程序入口 LJMP ROUT …… ORG 100H ;主程序 MAIN: SETB IT0 SETB EA SETB EX0 SETB PX0 MOV R0, #20H MOV R1, #0F0H MOV R2, #49 M

54、OV A, @R0 MOVX @R1, A LOOP: SJMP $ 5.4 80C51外部中斷源的擴展 1.借用定時/計數(shù)器溢出中斷作為外部中斷 MOV TMOD, #06H MOV TL0, #0FFH MOV TH0, #0FFH SETB EA SETB ET0 SETB TR0 2.用查詢方式擴展中斷源 3.用8259可編程中斷控制器擴展中斷源(略) 5.5 80C51內(nèi)部定時/計數(shù)器及其應(yīng)用 51系列內(nèi)部帶有2個16位的定時/計數(shù)器; 它們本質(zhì)上 都是“加法”計數(shù)器, 當計數(shù)器被加至“全1”后,

55、 再計一個脈沖就會“溢出”—使TF0/1被置1, 標識它已完成計數(shù)工作;可以通過將一個數(shù)寫入TH0/1和TL0/1, 改變計數(shù)器的初值, 即使計數(shù)器在此初值的基礎(chǔ)上開始計數(shù)。 1. MCS-51內(nèi)部定時/計數(shù)器的工作方式 5.5 80C51內(nèi)部定時/計數(shù)器及其應(yīng)用 方式0:13位計數(shù)方式 初值=>TH0/1+TL0/1的低5位; eg. 欲計數(shù)1000 213-1000 =7192=>1110000011000B 將初值11100000B(E0H) =>TH0/1; 11000B(18H) =>TL0/1 方式1:16位計數(shù)方式 初值=>TH0/1+TL0/1 eg. 欲計數(shù)

56、 58344 216-58344=7192=>1110000011000B; 將初值11100B(1CH) =>TH0/1; 00011000B(18H) =>TL0/1 方式2:8位自動重裝計數(shù)方式 TL0/1=>8位計數(shù)器;TH0/1=>寄存器;當TL0/1計滿溢出后能將TH0/1的內(nèi)容自動裝入; 方式3:T0拆為2個獨立的8位計數(shù)器TL0和TH0;但2者的工作方式略有不同,TL0可用于定時/計數(shù)器;TH0只能用于計時器;但將占用T1的TR1,TF1;此時T1將不能使用中斷;T1在方式3下相當于TR1=0,停止計數(shù)(內(nèi)容保持不變) 5.5 80C51內(nèi)部定時/計數(shù)器及其應(yīng)用

57、2. MCS-51內(nèi)部定時/計數(shù)器的控制 A.定時/計數(shù)器工作方式控制寄存器——TMOD(89H) M1M0—確定計數(shù)器工作方式; C/-T—T1/0是用作計數(shù)器(1) 還是用作定時器(0); GATE—起輔助控制作用; 右上圖為定時/計數(shù)器工作于 方式0/方式1時的邏輯結(jié)構(gòu)圖。 方式0時的計數(shù)器由TH0和 TL0的低5位構(gòu)成13位的計數(shù) 器; 方式1時的計數(shù)器由TH0 和TL0構(gòu)成16位計數(shù)器。 定時/計數(shù)器工作于方式2時 的邏輯結(jié)構(gòu)如右下圖所示: TL0溢出, 使TF0置1的同時 將TH0的內(nèi)容重裝入TL0, 并重新開始計數(shù); 5.5 80C51內(nèi)部定時/

58、計數(shù)器及其應(yīng)用應(yīng)用 定時/計數(shù)器0工作于 方式3及定時/計數(shù)器1 與之相應(yīng)的工作方式: 注意:與定時/計數(shù)器1”GATE” 配合使用的是INT1!! 5.5 80C51內(nèi)部定時/計數(shù)器及其應(yīng)用 B.定時/計數(shù)器的啟動和中斷控制 相關(guān)的SFR: C.定時計數(shù)器的初始化 ①對TMOD賦值,以確定其工作方式; ②對TH0/1, TL0/1賦初值; ③確定優(yōu)先級、開放中斷; ④對TCON中的TR0或TR1置位,啟動計數(shù); 5.5 80C51內(nèi)部定時/計數(shù)器及其應(yīng)用 3. 應(yīng)用舉

59、例 eg.1 利用定時器輸出周期2ms的方波,設(shè)單片機時鐘頻率為12MHz。 答: 用T0; 方式0; 定時1ms; èTMOD = 0000 0000B 用P1.0輸出方波; 計算定時器初值X=213-1*10-3(1ms)/1*10-6(1us) =7192=11100000 11000B=>0E0 18H ORG 0BH BRT0: MOV TH0, #0E0H AJMP BRT0 MOV TL0, #20H; ** main: MOV TMOD, #00H CPL P1.0 MOV TH0, #0E0H RETI MOV TL

60、0, #18H SETB EA SETB ET0 SETB TR0 SJMP $ 5.5 80C51內(nèi)部定時/計數(shù)器及其應(yīng)用 **在定時器溢出發(fā)出中斷申請,到重裝完定時器初值并在此基礎(chǔ)上繼續(xù)計數(shù)定時,總會有一定的時間間隔,若要求定時/計數(shù)比較精確,就需對重裝的初值作一些調(diào)整。一般考慮兩個因素:一是中斷響應(yīng)所需的時間;二是重裝指令及中斷服務(wù)程序中在重裝指令前的其它指令所用時間;修正量通常取7~8個機器周期,即少計7~8個數(shù)=>重裝初值+7~8。 eg. 上題采用查詢方式產(chǎn)生2ms的方波。 MOV TMOD, #00H SETB TR0

61、 LOOP: MOV TH0, #0E0H MOV TL0, #18H JNB TF0, $ CPL P1.0 CLR TF0 SJMP LOOP 5.5 80C51內(nèi)部定時/計數(shù)器及其應(yīng)用 ORG 0BH AJMP BRT5 …… START:ORG 2000H MOV TMOD, #01H MOV TH0, #0B1H MOV TL0, #0E0H MOV IE, #82H SETB TR0 MOV R0, #50 LOOP: SJMP $ 6.1 計算機串行通信基礎(chǔ) 計算機與外部的信息交換稱為通信; 基本的通信方式

62、: 并行通信; 串行通信。 并行通信——數(shù)據(jù)各位同時傳送=>并行接口;速度快,但使用的通信線多(數(shù)據(jù)線+控制信號線),且隨著傳輸距離的增加,傳輸可靠性下降。串行通信——在單根線上,按一位接一位從低位到高位的先后順序進行傳送/接收。 串行通信中,按數(shù)據(jù)傳送方向可分為: 單工(Simplex) 半雙工(Half Duplex) 全雙工(Full Duplex) 串行通信中,按照通信的收發(fā)雙方是否有統(tǒng)一的時鐘,可分為兩種基本的傳送方式: 異步方式(Asynchronous); 同步方式(Synchronous); 6.1 計算機串行通信基礎(chǔ) 異步傳送方式: 1

63、.如何同步? A.必須約定串行數(shù)據(jù)傳送速率——波特率(Baud Rate)=>每秒鐘所傳送數(shù)據(jù)的位數(shù),單位為Bd。 常用國際標準波特率為: 110、300、600、1200、2400、4800、9600和19200Bd B.高于波特率的時鐘頻率:一般16倍或64倍 C. 加1位起始位—0; D. 加1/1.5/2位停止位—1) 2.異步傳送從哪一位開始傳?……(從低位到高位) 3.可以傳送多少位數(shù)據(jù)? 數(shù)據(jù)在線路上的傳送不是連續(xù)的,數(shù)據(jù)是以一個字(或稱字符)為單位來傳送的,它可以是5/6/7/8位; 4.如何糾錯和區(qū)分數(shù)據(jù)/控制信息? 可加1位奇偶校驗位或>=1位的控制位

64、; 例如用來確定這個字符所代表的性質(zhì):地址還是數(shù)據(jù) 6.1 計算機串行通信基礎(chǔ) 同步傳送方式: 同步傳送是一種連續(xù)傳送數(shù)據(jù)的方式,即字符與字符間沒有間隙(不用起始位和停止位);僅在數(shù)據(jù)塊開始時用同步字符SYNC來指示; 同步字符的插入可以是單同步字符方式或雙同步字符方式;同步字符可以有用戶約定,也可以采用ASCII碼中規(guī)定的SYN代碼,即16H;因此,一般在硬件設(shè)備上需要有插入同步字符或相應(yīng)的監(jiān)測手段。 在同步傳送時,無論接收或發(fā)送,都要求x1時鐘,即時鐘頻率和波特率一致。發(fā)送方除了傳送數(shù)據(jù)外,還要把時鐘信號同時傳送。 串行接口芯片UART和U

65、SART UART——通用異步收發(fā)器(Universal Asynchronous Receiver-Transmitter) USART—通用同步異步收發(fā)器(Universal Synchronous-Asynchronous Receiver-Transmitter) 6.2 80c51串行口 51單片機的串口為:可編程/全雙工/異步串行口=>”SBUF” 管腳:Rxd=>P3.0;Txd=>P3.1 串口控制:SCON(98H);PCON(87H)—不可位尋址!! 6.2 80c51串行口 串口工作方式: SM2:多機通信控制位主要用于方式2

66、/3,若允許多機通信,則為1,然后依據(jù)接收到的第九位數(shù)據(jù)的值來決定從機是否接收主機的信號。 串口數(shù)據(jù)寄存器:SBUF 串口的波特率: 方式2:波特率(方式2)=(2MOD/64)×fosc 方式1和方式3的波特率都由定時器1的溢出率來決定: 波特率(方式1/3)=(2MOD/32)×T1溢出率 T1溢出率=(fosc/12)/(2k-初值) T1為方式0:k=13; T1為方式1:k=16; T1為方式2/3:k=8; 6.2 80c51串行口 方式0——移位寄存器輸入/輸出方式: 是用同步的方式串行輸出或串行輸入數(shù)據(jù),但是和同步通信不是一回事,因為它不能插入或檢出同步字符,此時的串口相當于一個并入串出(發(fā)送)或串入并出的移位寄存器。 串行數(shù)據(jù)通過RXD線輸入或輸出,也就是接到外部移位寄存器的串行輸入或串行輸出;而TXD專用于輸出時鐘脈沖給外部移位寄存器; 方式0可用來同步輸出或接收8位數(shù)據(jù),波特率固定為fosc/12;此時SM2/RB8/TB8都不起作用; 方式0的發(fā)送操作是

展開閱讀全文
溫馨提示:
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)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!