版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
單片機
原理與實用技術(shù)
第1章
單片機入門知識1.1認(rèn)識單片機計算機巨型機大型機中型機小型機微型機PC機單片機:單片微型計算機SCMC1.1.1什么是單片機1.1.2單片機應(yīng)用系統(tǒng)應(yīng)用系統(tǒng)實例1)單片機控制超聲波信號發(fā)射器定時向前發(fā)射超聲波并開始計時。2)超聲波信號接收器接收到前方車輛反射回來的超聲波后向單片機發(fā)送信號。3)單片機根據(jù)超聲波的發(fā)射、返回時間計算出與前方車輛的距離。4)單片機同時根據(jù)車速傳感器的信號計算出汽車行駛速度。5)單片機根據(jù)(3)、(4)的數(shù)據(jù)判斷汽車應(yīng)該加速、減速還是原速行進。6)單片機向汽車電動節(jié)氣門(俗稱油門)發(fā)出控制信號,控制節(jié)氣門開度
增大、減少或者保持不變。
單片機應(yīng)用系統(tǒng)的基本組成
基本組成信號傳感裝置外圍電路及芯片
單片機外圍電路及芯片執(zhí)行機構(gòu)單片機系統(tǒng)輸入信號輸入信號人工控制信號…………圖1-3單片機應(yīng)用系統(tǒng)組成示意圖信號傳感裝置執(zhí)行機構(gòu)單片機系統(tǒng)1.1.3單片機應(yīng)用領(lǐng)域1.生產(chǎn)自動化2.實時測控3.智能化產(chǎn)品4.智能化儀表5.信息通信技術(shù)6.科學(xué)研究7.國防現(xiàn)代化1.1.4單片機應(yīng)用特點1.面向控制
微控制器MCU2.在線應(yīng)用3.嵌入式應(yīng)用
嵌入式微控制器EMCU1.1.5單片機產(chǎn)品1.通用型單片機2.專用型單片機1.2單片機相關(guān)基礎(chǔ)知識計數(shù)制十進制數(shù)例:17D二進制數(shù)例:1011B十六進制數(shù)例:2AH、0B5H1.進位計數(shù)制1001B=(1×23+0×22+0×21+1×20)D=9D
1.2.1數(shù)和編碼十六進制數(shù)十進制數(shù)二進制數(shù)0123456789ABCDEF01234567891011121314150000000100100011010001010110011110001001101010111100110111101111表1-1二、十、十六進制數(shù)對照表二進制數(shù)無符號數(shù)
有符號數(shù)
2.二進制數(shù)真值原碼反碼補碼
〔X正〕補=〔X正〕原如:〔+3CH〕補=〔+3CH〕原=3CH
〔X負(fù)〕補=〔X負(fù)〕反+1
如:〔-3CH〕補=〔-3CH〕反+1=0C3H+1=0C4H
3.編碼十進制數(shù)碼8421碼余3碼格雷碼0123456789000000010010001101000101011001111000100100110100010101100111100010011010101111000000000100110010011001110101010011001000表1-2常見BCD碼
(00010110)8421BCD=16D≠00010110B1.2.2邏輯運算與邏輯門電路1.邏輯與和與門電路F=A·B0·0=00·1=01·0=01·1=1“有0則0,全1則1”
2.邏輯或和或門電路
F=A+B或F=A∨B
0+0=00+1=11+0=11+1=1
“有1則1,全0則0”
3.邏輯非和非門電路“1則0,0則1”
F=A0=11=04.復(fù)合邏輯門復(fù)合邏輯門與非門或非門異或門“有0則1,全1則0”
“有1則0,全0則1”
“同則為0,不同為1”
A∧
B=01100001∧11001011=01000001A⊕B=01100001⊕11001011=10101010〔例1-1〕已知:A=01100001,B=11001011,
求:A∧B,A+B,A⊕B,A解:A+B=01100001+11001011=11101011=00010100
01100001∧1100101101000001
01100001+1100101111101011
01100001⊕11001011
10101010A=10011110=100111101.2.3常用邏輯元件1.三態(tài)輸出門2.編碼器(1)二進制編碼器(2)優(yōu)先編碼器3.譯碼器4.數(shù)據(jù)選擇器5.觸發(fā)器6.寄存器第2章
單片機基本結(jié)構(gòu)組成及工作原理2.1單片機基本組成及工作原理
計算機的智能是人所賦予的,計算機只會按人們所給的命令一步一步地工作,這些命令稱為指令。將指令有效地組合成能夠完成特定任務(wù)的指令序列,稱為程序。程序是計算機工作的命令清單。
2.1.1程序--單片機工作的命令清單┆MOV R0,#RADIMOVX A,@R0MOV
B,#33MUL
ABMOV
R2,AINC
R0
MOVX
A,@R0
MOV
B,AMOV
A,R2DIV
ABCLR
CSUBB
A,DATA0
JC
DOWNSUBB A,DATA1JC
KEEP
AJMP
UP
┆;讀取超聲波發(fā)射到回收的時間t;計算與前輛車的距離(33為聲速的十分之一)d;d=t×33;讀取車速v;計算以該車速行駛完距離d的時間T;T=d/v;與設(shè)定時間范圍t0~t0+t1(考慮到人的反應(yīng)制動時間等)比較;T<t0時降低車速;t0<T<t0+t1時原速行進;T>t0+t1時增加車速
2.1.2存貯器--信息存放及程序運行場所
存儲器
存貯器的主要功能是存放程序和數(shù)據(jù),程序是單片機操作的依據(jù),數(shù)據(jù)是單片機操作的對象。
單片機向存貯單元存放信息稱為“寫”,取出信息稱為“讀”,“讀”、“寫”操作都稱為訪問存貯器。單片機訪問存貯器是根據(jù)存貯單元的地址進行的。根據(jù)地址訪問存貯單元又稱尋址。
RAMROM掩膜ROMPROMEPROMEEPROMflashROM
2.1.3
CPU--程序執(zhí)行者1.運算器用于實現(xiàn)算術(shù)和邏輯運算2.控制器指揮控制元件CPU是計算機的核心,由運算器控制器組成。
2.1.4
I/0接口--單片機內(nèi)外交流通道
單片機控制系統(tǒng)在工作時,單片機要不斷從外部獲取信息,并向外部發(fā)出動作控制信號,信息的輸入輸出電路稱I/O接口(Input/Output),接口是計算機與外部設(shè)備之間的交接界面和交流通道。
2.1.5
單片機的基本組成
2.2
MCS-51單片機存貯器2.2.1
MCS-51單片機存貯器配置程序存儲器片內(nèi)數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器
2.2.2
程序存貯器
程序存貯器用來存放程序和重要的數(shù)據(jù)。
程序運行時,CPU首先從程序存貯器的0000H單元開始讀取指令。而程序存貯器的0003H~002AH單元被系統(tǒng)留作特殊用途,用戶程序必須寫在系統(tǒng)留用之后的單元。所以000H~0002H三個單元一定要存放一個絕對跳轉(zhuǎn)指令(JMP指令),跳轉(zhuǎn)到用戶程序的首址。
從0000H開始部分的程序存貯單元是指片內(nèi)還是片外由每單片機的31引腳EA決定,當(dāng)EA=1即接高電平時,選擇片內(nèi),反之則選片外。而對于高出4KB部分的程序存貯單元,不論EA為何值,一定是指片外程序存貯器。
CPU在訪問片外ROM時,從PSEN輸出低電平信號,選通片外ROM,而不是RAM。ROM只有讀出,沒有寫入,無須讀、寫信號RD、WR控制。
2.2.3
數(shù)據(jù)存貯器
數(shù)據(jù)存貯器是用于運行程序、存放數(shù)據(jù)。數(shù)據(jù)存貯器分為內(nèi)部RAM和外部RAM,各自獨立編址。
常用MOV指令讀/寫片內(nèi)RAM,MOVX指令讀/寫片外RAM。當(dāng)讀、寫片外RAM時,單片機分別發(fā)出RD、WR有效信號,控制讀、寫片外RAM,而不是片外ROM。片內(nèi)RAM高128單元:SFR(80H ~FFH)低128單元(00H~7FH)堆棧和數(shù)據(jù)緩沖區(qū)(30H~7FH)位尋址區(qū)(20H~2FH)通用寄存器區(qū)(00H~1FH)RS1RS0寄存器組R0~R7地址00BANK000~07H01BANK108~0FH10BANK210~17H11BANK318~1FH表2-1工作寄存器區(qū)的選擇
1.片內(nèi)RAM低128單元
表2-2位尋址區(qū)位地址
單元地址位地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7FH
7EH7DH
7CH
7BH7AH
79H
78H77H
76H
75H
74H
73H
72H
71H
70H6FH6EH
6DH
6CH
6BH
6AH
69H68H67H66H
65H
64H
63H
62H61H
60H5FH5EH5DH
5CH
5BH
5AH
59H
58H57H56H55H
54H
53H
52H51H50H4FH4EH4DH
4CH
4BH
4AH
49H
48H47H46H
45H44H43H
42H
41H
40H3FH3EH3DH3CH3BH
3AH39H38H37H36H35H34H
33H
32H31H
30H2FH2EH
2DH2CH2BH2AH
29H
28H27H26H25H
24H23H22H
21H20H1FH1EH
1DH1CH1BH1AH
19H
18H17H
16H
15H14H
13H
12H11H
10H0FH0EH
0DH0CH0BH
0AH09H08H07H06H05H04H
03H
02H01H
00H2.專用寄存器區(qū)(1)累加器A(2)B寄存器(3)程序計數(shù)器PC
PC是一個16位計數(shù)器,其內(nèi)容為將要執(zhí)行指令的存放地址。
PC具有自動加1功能,CPU每進行一次ROM的讀數(shù)操作,PC內(nèi)容自動加1,指向下一個ROM單元。
PC沒有地址,用戶不可以對它進行讀寫,但可以通過轉(zhuǎn)移、調(diào)用、返回等指令改變其內(nèi)容,以改變程序的執(zhí)行順序。
當(dāng)系統(tǒng)復(fù)位時,PC為0000H,CPU從0000H單元運行程序。
(4)程序狀態(tài)字PSWCY或C(PSW.7)進位標(biāo)志位
AC(PSW.6)輔助進位標(biāo)志位
F0(PSW.5)用戶標(biāo)志位
RS1,RS0(PSW.4,PSW.3)當(dāng)前寄存器區(qū)選擇位OV(PSW.2)溢出標(biāo)志位P(PSW.0)奇偶標(biāo)志位
(5)數(shù)據(jù)指針DPTR
16位專用寄存器位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位名稱CYACFORS1RS0OV-P2.3
單片機外圍附加電路2.3.1
時鐘電路
2.3.2
復(fù)位電路表2-4MCS-51單片機各寄存器的復(fù)位狀態(tài)
00HTCON0000HPC
00HTMOD0×××0000BPCON0×000000BIE不定SBUF
××000000BIP00HSCON0FFHP0~P300HTH10000HDPTR00HTL107HSP00HTH000HPSW00HTL000HACC復(fù)位狀態(tài)寄存器復(fù)位狀態(tài)寄存器第3章
MCS-51指令系統(tǒng)
3.1單片機指令系統(tǒng)概述
指令是指揮計算機工作的命令,一種計算機所能執(zhí)行的指令集合稱之為該種計算機的指令系統(tǒng)。
指令機器指令
0010010000001010B(二進制數(shù)表示)
240A(十六進制數(shù)表示)匯編指令
ADDA,#0AH
3.1.1指令
3.1.2指令格式
指令的表示形式稱指令格式。編寫程序時必須嚴(yán)格按指令格式書寫。
MCS-51指令由操作碼和操作數(shù)組成。匯編語言指令格式如下:操作碼助記符〔操作數(shù)1〕〔,操作數(shù)2〕〔,操作數(shù)3〕
1.操作碼助記符2.操作數(shù)3.2尋址方式
指令中,操作數(shù)可能是具體的數(shù)據(jù),也可能是具體的存放數(shù)據(jù)的地址或符號,無論何種情況,都可由操作數(shù)取得參與指令運行的二進制數(shù)據(jù)。這個過程叫作尋址。尋指方式立即尋址方式直接尋址方式寄存器尋址方式寄存器間接尋址方式基址加變尋址方式位尋址方式相對尋址方式3.2.1立即尋址方式
所謂立即尋址就是操作數(shù)在指令中直接給出。立即尋址方式的操作數(shù)稱立即數(shù),立即數(shù)只能是源操作數(shù),不能作為目的操作數(shù)。立即數(shù)有8位立即數(shù)和16位立即數(shù)。使用時在立即數(shù)前加“#”標(biāo)志。
例:MOV
A,#20H
MOV
DPTR,#20D8H
3.2.2
直接尋址方式
直接尋址就是操作數(shù)直接以單元地址的形式給出。直接地址以存貯單元形式出現(xiàn)。
例如指令:MOVA,20H
3.2.3
寄存器尋址方式
寄存器尋址就是操作數(shù)在寄存器中。
例如指令:MOVA,R23.2.4
寄存器間接尋址方式
寄存器間接尋址使用的寄存器為Ri和DPTR,使用時寄存器前面加“@“標(biāo)志。即以下形式:MOV A,@Ri
MOVXA,@DPTR例如:(R1)=80H、(80H)=33H,則執(zhí)行指令MOVA,@Ri后,累加器A的內(nèi)容為33H而不是80H。
寄存器間接尋址是以寄存器中的內(nèi)容為地址取得操作數(shù)的方法。和寄存器尋址相比,寄存器尋址時,寄存器中存放的是操作數(shù),而寄存器間接尋址中時,寄存器中存放的是操作數(shù)的地址。3.2.5
基址加變址尋址方式
基址加變址尋址就是以DPTR或PC為基址寄存器,以A為變址寄存器,以兩者內(nèi)容相加形成16位地址作為操作數(shù)地址。例如指令:
MOVCA,@A+DPTR3.2.6
位尋址方式
位尋址方式就是以位為操作數(shù)。MCS-51單片機有相當(dāng)強的位處理功能,可以對位進行直接操作。例如指令:
MOVC,4AH
位尋址范圍1)內(nèi)部RAM的位尋址區(qū)2)可供位尋址的11個專用寄存器
3.2.7
相對尋址方式
相對尋址是在相對轉(zhuǎn)移指令中,根據(jù)地址相對當(dāng)前PC的偏移量得到操作數(shù)的方式。如:
JZrel
偏移量rel是一帶符號8位二進數(shù)的補碼數(shù),范圍為-128~+127。實際書寫程序時往往先用地址標(biāo)號代替,在匯編為機器指令時再計算出來。
〔例3-1〕指出下列每一條指令的尋址方式。①MOV2FH,#40H②MOVA,@R0③MOVDPTR,#2020H④MOV45H,P0⑤MOVA,R1⑥MOVCA,@A+PC⑦JCLOOP①中的源操作數(shù)為立即尋址,目的操作數(shù)為直接尋址。②中的源操作數(shù)為寄存器間接尋址,目的操作數(shù)為寄存器尋址。③中的源操作數(shù)為16位立即尋址,目的操作數(shù)為寄存器尋址。④中的源操作數(shù)和目的操作數(shù)都是直接尋址。⑤中的源操作數(shù)和目的操作數(shù)都為寄存器尋址。⑥中的源操作數(shù)為基址加變址尋址,目的操作數(shù)為寄存器尋址。⑦中的操作數(shù)為相對尋址。
〔例3-2〕判斷下列指令是否正確,若不正確請指出錯誤:
①MOVA,DPTR②MOVDPTR,#03H③MOV#80H,R7④MOVB,C
〔解〕①不正確。A是8位寄存器,DPTR為16位寄存器,不匹配。
②正確。
③不正確。#80H為立即數(shù),不能作為目的地址。
④不正確。B為8位字節(jié)寄存器,C為1位位累加器,不匹配。3.3數(shù)據(jù)傳送指令
1.通用傳送指令MOV
指令格式:MOV<目的操作數(shù)>,<源操作數(shù)>
功能:把源操作數(shù)所表示的數(shù)據(jù)傳送到目的地址指定的存貯單元之中,而不改變源操作數(shù)。即該指令是“復(fù)制”,不是“搬家”。
3.3.1內(nèi)部RAM數(shù)據(jù)傳送指令通用指令2)以Rn為目的地址的指令MOVRn,A ;Rn←(A)MOVRn,direct ;Rn←(direct)MOVRn,#data ;Rn←data1)以累加器A為目的地址的指令MOVA,Rn
;A←(Rn)MOVA,direct
;A←(direct)MOVA,@Ri
;A←((Ri))MOVA,#data
;A←data4)以寄存器間接地址為目的的地址的指令MOV@Ri,A ;(Ri)←(A)MOV@Ri,direct
;(Ri)←(direct)MOV@Ri,#data
;(Ri)←data3)以直接地址為目的地址的指令MOVdirect,A
;direct←(A)MOVdirect,Rn
;direct←(Rn)MOVdirect,direct
;direct←(direct)MOVdirect,@Ri
;direct←((Ri))MOVdirect,#data
;direct←data
5)16位數(shù)據(jù)傳送指令MOVDPTR,#data16;DPTR←data16
;DPL←data7~0
;DPH←data15~8〔例3-3〕設(shè)RAM40H單元的內(nèi)容為80H,80H單元內(nèi)容為47H,P1口的輸入狀態(tài)為0FFH,試判斷下列程序執(zhí)行結(jié)果。MOVR0,#40HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1
〔解〕執(zhí)行結(jié)果為:(A)=80H,(B)=47H,(R0)=40H,(R1)=80H,(P1)=0FFH,(P2)=0FFH,(80H)=0FFH。
;R0←40H;A←
(
40H)=80H;R1←80H;B←
(
80H)=47H
;(
80H)
←0FFH;P2←0FFH1)字節(jié)交換指令XCH
XCHA,Rn
;(A)←→(Rn)XCHA,direct
;(A)←→(direct)XCHA,@Ri
;(A)←→((Ri))2.數(shù)據(jù)交換指令例:設(shè)(A)=08H,(R7)=0DCH,執(zhí)行指令
XCHA,R7結(jié)果為:(A)=0DCH,(R7)=08H功能:將累加器A中內(nèi)容與源操作數(shù)互換。
例:(A)=80H,(R0)=30H,(30H)=0FH,執(zhí)行指令
XCHDA,@R結(jié)果為:(A)=8FH,(30H)=00H2)半字節(jié)交換XCHDXCHDA,@Ri
;(A)低4位←→((Ri))低4位功能:累加器A中內(nèi)容與源操作數(shù)低4位交換,高4位不變。3)累加器高低數(shù)字節(jié)交換指令SWAPA
SWAPA
;(A)低4位←→(A)高4位功能:A中高4位與低4位互換。例:(A)=80H,執(zhí)行SWAPA結(jié)果為:(A)=08H.〔解〕XCHA,20HSWAPAMOVR1,21HXCHDA,@R1SWAPAXCHA,20H〔例3-4〕試用交換指令使片內(nèi)20H單元的高4位與21H單元的低4位交換。
數(shù)據(jù)寫入堆棧稱入棧,數(shù)據(jù)從堆棧中讀出稱出棧。
3.棧操作指令
PUSHdirect;SP←(SP)+1,(SP)←(direct)
功能:將堆棧指針加1后,片內(nèi)RAM單元內(nèi)容送進棧頂單元,原RAM單元內(nèi)容不變。說明:
①PUSH指令常用于保護CPU現(xiàn)場。
②棧操作是字節(jié)指令,每次只能壓入或彈出1個字節(jié)的內(nèi)容。如PUSHDPTR是錯誤的,但可以用以下兩條指令完成DPTR的入棧。
PUSHDPH
PUSHDPL1)入棧指令PUSH例:設(shè)(A)=30H,(B)=80H,(SP)=50H.則執(zhí)行指令:
PUSHA
PUSHB結(jié)果為:(51H)=30H,(52H)=80H,(SP)=52HPOP
direct;direct←((SP)),SP←(SP)-1功能:將(SP)內(nèi)容傳送給片內(nèi)RAM單元,SP內(nèi)容減1。說明:①棧操作要注意先入后出的原則。②POP指令常用于恢復(fù)CPU現(xiàn)場2)出棧指令POP〔例3-5〕試用棧操作指令完成P0和P1內(nèi)容的互換。〔解〕PUSHP0
PUSHP1POPP0
POPP13.3.2片外數(shù)據(jù)存貯器與累加器A
之間的傳送指令
MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri
;A←((Ri))MOVX@DPTR,A;(DPTR)←(A)MOVX@Ri
,A
;(Ri)←(A)說明:①片外數(shù)據(jù)存貯單元與片內(nèi)RAM之間的數(shù)據(jù)傳送以及片外數(shù)據(jù)存貯單元之間的數(shù)據(jù)傳送不能直接進行,必須通過累加器A中轉(zhuǎn)。MOVX20H,2000H及MOVX3000H,2000H等都是錯誤的。②尋址方式只能是寄存器間接尋址。參與間接尋址的寄存器只有Ri和DPTR兩種(3個)。DPTR為16位寄數(shù)器,尋址范圍為000H~0FFFFH共64KB空間。而Ri是8位寄數(shù)器,只能尋址00~0FFH低256單元?!步狻尝?/p>
MOV
DPTR,#2000HMOVXA,@DPTRMOV20H,A
②
MOVDPTR,#2000H
MOVXA,@DPTRMOVR0,#0FAH
MOVX@R0,A〔例3-6〕①將片外數(shù)據(jù)存貯器2000H單元的內(nèi)容傳送到片內(nèi)的20H單元中;②將片外數(shù)據(jù)存貯器2000H單元的內(nèi)容傳送到片外0FAH單元。3.3.3程序存貯器向累加器A傳送指令
MOVCA,@A+PC;A←((A)+(PC))MOVCA,@A+DPTR;A←((A)+(DPTR))
說明:①程序存貯器只能讀出,不能寫入,所以其數(shù)據(jù)傳送都是單向的,即從程序存貯器讀出數(shù)據(jù),并且只能向累加器A傳送。②ROM片內(nèi)、片外是統(tǒng)一編址,該指令既可訪問片內(nèi),又可訪問片外程序存貯器。③該類指令主要用于查表,又稱查表指令。應(yīng)用時,一般以PC或DPTR確定表格的首址,查表時,根據(jù)A中不同的內(nèi)容查找到表格中的相應(yīng)項,故此時稱PC或DPTR為基址寄存器,A為變址寄存器,尋址方式為基址加變址尋址。④使用DPTR作基址寄存器比較靈活,且不易出錯。建議盡可能使用MOVC
A,@DPTR指令。〔解法一〕以DPTR為基址寄存器,平方表首址可靈活安排在適當(dāng)?shù)奈恢萌?000H,即平方表的內(nèi)容從2000H單元放起。程序如下:
ORG1800H
MOVDPTR,#2000HMOVA,20H
MOVCA,@A+DPTR
MOV21H,A
ORG2000HDB
00H,01H,04H,10H,19H,24H
DB
31H,40H,51H,64H,……〔例3-7〕以查表方式求出片內(nèi)RAM中20H單元數(shù)的平方值,存入片內(nèi)21H單元中。
ORG1000H1000
MOV
A,20H
1001ADD
A,#03H
1003MOVCA,@A+PC
1004MOV
21H,A
1006RET
1007DB 00H,01H,04H……
〔解法二〕以PC為基址寄存器,此時表格須緊跟程序之后,且要計算好表格首址位置。
⑤XCHA,20H
XCHA,30H
XCHA,20H〔例3-8〕改正下列指令中的錯誤,完成其功能:①MOVA,2000H;片外RAM2000H單元內(nèi)容送入A。②MOVX20H,2000H;片外RAM2000H單元內(nèi)容送入片內(nèi)20H單元。③MOVCA,2000H;將ROM2000H單元內(nèi)容送入A。④MOVXA,@A+DPTR;以查表方式將片外RAM單元的內(nèi)容送入A。⑤XCH40H,30H;交換片內(nèi)RAM30H和40H單元的內(nèi)容。⑥PUSHAB;將寄存器對AB的內(nèi)容壓入堆棧?!步狻?/p>
①MOVDPTR,#2000HMOVXA,@DPTR
②MOVDPTR,#2000HMOVXA,@DPTRMOV20H,A
③MOVDPTR,#2000HMOVA,#0MOVCA,@A+DPTR④無法以查表方式將片外RAM
存貯單元的內(nèi)容送入A。⑥PUSHA
PUSHB
3.4
算術(shù)運算類指令1.不帶進位加法指令A(yù)DDADDA,Rn
;A←(A)+(Rn)ADDA,direct
;A←(A)+(direct)ADDA,#data
;A←(A)+dataADDA,@Ri
;A←(A)+((Ri))3.4.1加法指令功能:ADD指令把源操作數(shù)與累加器A內(nèi)容相加,結(jié)果存在累加器中。該操作不改變源操作數(shù),影響PSW中的C、AC、OV和P位。說明:①ADD指令的目的操作數(shù)只能是累加器A,且只有以上4種形式。如ADD
B,40H或ADDA,203AH等都是不存在的,非法的。②指令中,參加運算的兩個8位二進制數(shù),即可看作是8位無符號數(shù)(0~255),也可以看作是7位帶符號數(shù)的補碼數(shù)(-128~+127)。
10110011
+011110011←00101100〔例3-9〕試編程計算40H和41H兩單元字節(jié)數(shù)的和,并存放在42H單元。若(40H)=0B3H,(41H)=79H,給出計算結(jié)果并判斷PSW受影響的位?!步狻吵绦蛉缦拢?/p>
MOVA,40H ADDA,41HMOV42H,A若(40H)=0B3H,(41H)=79H則運算結(jié)果:若是無符號數(shù),和為12CH;若是有符號數(shù),和為+2CH。(42H)=2CH,(C)=1,(AC)=0,(OV)=0,(P)=1。2.帶進位加法指令A(yù)DCCADDCA,Rn;A←(A)+(Rn)+(C)ADDCA,direct;A←(A)+(direct)+(C)ADDCA,#data;A←(A)+data+(C)ADDCA,@Ri
;A←(A)+((Ri))+(C)
功能:該操作與ADD類似,只是PSW中的進位位C參與運算。帶進位加法指令通常用于多字節(jié)或多個數(shù)加法運算。
〔解〕當(dāng)(C)=0時,兩指令運行結(jié)果一樣,為(A)=0A4H。當(dāng)(C)=1時,兩指令運行的結(jié)果不同,相差1。即ADDA,30H的結(jié)果為(A)=0A4H,而ADDCA,30H的結(jié)果是(A)=0A5H。顯然,ADD指令與C值無關(guān),而ADDC的運行結(jié)果與C值有關(guān)。
〔例3-10〕已知(A)=26H,(30H)=7EH,比較在(C)=0、(C)=1兩種情況下執(zhí)行ADDA,30H和ADDCA,30H指令的結(jié)果?!步狻矼OVA,30HADDA,40H;低字節(jié)相加
MOV50H,AMOVA,31HADDCA,41H;高字節(jié)相加
MOV51H,A ADDCA,#00H;取高相加產(chǎn)生的進位
MOV52H,A說明:①多字節(jié)數(shù)求和,從低字節(jié)開始,最低字節(jié)相加用ADD指令,高字節(jié)相加用ADDC指令。②N字節(jié)數(shù)相加,結(jié)果可能為N+1字節(jié)數(shù)。③為單獨取得進位的值,可參考例3-11。
〔例3-11〕兩字節(jié)無符號數(shù)相加,被加數(shù)放在內(nèi)部RAM30H,31H單元(低位放在前),加數(shù)放在內(nèi)部RAM40H、41H單元。計算兩數(shù)的和,放在50H~52H單元中。3.增量指令I(lǐng)NC
INCA;A←(A)+1INCRn
;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri
;(R)i←((Ri))+1INCDPTR;DPTR←(DPTR)+1
功能:對A,Rn,內(nèi)部RAM單元及數(shù)據(jù)指針DPTR進行加1操作,除INCA影響P外,不影響任何標(biāo)志位。
說明:若原為0FFH,執(zhí)行該指令后,將變?yōu)?0H,但不影響進位位C。
其結(jié)果為:(A)=00H,(R2)=10H,(R0)=40H,(40H)=01H,(DPTR)=1B00H,PSW中,(P)=0,C及其它位不變。〔例3-12〕(A)=0FFH,(R2)=0FH,(R0)=40H,(40H)=00H,(DPTR)=1AFFH執(zhí)行下列指令:
INCA
INCR2
INC@R0
INCDPTR4.十進制調(diào)整指令DAADAA功能:對累加器中由上一條加法指令(加數(shù)和被加數(shù)均為壓縮的BCD碼)所獲得的結(jié)果進行調(diào)整。說明:
①在指令系統(tǒng)中,沒有專門的十進制(BCD碼)的加法運算指令,只能使用ADD,ADDC命令,但有時會產(chǎn)生錯誤。例如:(a)5+3=8
(b)7+6=13(c)8+9=17
01010111
1000+)0011+)0110+)1001
1000
1101
10001其中(a)的運算結(jié)果是正確的,(b)(c)的運算結(jié)果是錯誤的。
②為了消除錯誤,要對運算結(jié)果進行DAA調(diào)整,調(diào)整為正確的壓縮BCD碼形式。注意,DAA指令必須緊跟ADD或ADDC指令使用。
〔例3-13〕在20H、21H中分別存放壓縮BCD碼55和72,試將兩數(shù)相加,并計算出結(jié)果?!步狻矼OVA,20H
ADDA,21H
DAA,結(jié)果(A)=27,C=1如果不使用DA
A指令,則結(jié)果為0C7H,是錯誤的。
〔例3-14〕設(shè)兩個4位BCD碼分別存放在30H(十位、個位)和31H(百位、千位)、40H(十位、個位)和41H(百位、千位)。試編程求這兩個數(shù)的和,結(jié)果存放在30H、31H、32H中。
〔解〕程序如下:
MOVR0,#30H MOVR1,#40H MOVA,@R0;取十位、個位
ADDA,@R1
;兩數(shù)十位、個位相加
DAA
;調(diào)整為BCD碼
MOV@R0,A
;存十位、個位
INCR0
INCR1 MOVA,@R0
;取千位、百位
ADDCA,@R1
;兩數(shù)千位、百位和進位位相加
DAA
;調(diào)整為BCD碼
MOV@R0,A;存千位、百位
MOVA,#0 ADDCA,#0 INCR0 MOV@R0,A;存萬位
3.4.2減法指令
1.帶進位減法指令SUBBSUBBA,Rn
;A←(A)–(Rn)–(C)SUBBA,direct
;A←(A)–(direct)–(C)SUBBA,@Ri
;A←(A)–((Ri))–(C)SUBBA,#data
;A←(A)–data–
(C)
功能:指令功能是以A中數(shù)為被減數(shù),減去操作數(shù),再減去進位,差存在A中。影響PSW中的C,AC,OV,和P位。說明:①MCS-51指令系統(tǒng)中,無不帶進位(實為借位)的減法指令。若進行不帶借的減法運算,要在運算前使用ADDA,#00H或CLRC等指令將進位標(biāo)志清0。②減法指令中,無BCD碼調(diào)整?!怖?-15〕兩個雙字節(jié)數(shù)相減,被減數(shù)放在30H,31H,減數(shù)放在40H,41H中,差放入50H、51H?!步狻矨DDA,#00H
;將進位位清0
MOVA,30HSUBBA,40H;低字節(jié)相減
MOV50H,AMOVA,31H
SUBBA,41H;高字節(jié)相減
MOV51H,A說明:多字節(jié)相減,從低字節(jié)開始,最低字節(jié)相減時,應(yīng)先將進位位清0。2.減1指令DECDECA
;A←(A)-1DECRn
;Rn←(Rn)-1DECdirect;direct←(direct)-1DEC@Ri
;(Ri)←((Ri))-1
功能:減1運算說明:①與INC命令類似,但無DPTR減1指令。
②若原為00H,執(zhí)行該指令后,將變?yōu)?FFH。例如(A)=10H,(R5)=00H,(30H)=2FH,(R0)=40H,(40H)=0FFH。則執(zhí)行以下指令:DECA,DECR5,DEC30H,DEC@R0結(jié)果為:(A)=0FH,(R5)=0FFH,(30H)=2EH,(40H)=0FEH,(P)=0
3.4.3乘法指令MUL
MULAB功能:累加器A和寄存器B中的兩個無符號8位數(shù)相乘,所得16位乘積的低8位放在A中,高8位入在B中。說明:乘法指令影響PSW的狀態(tài)。執(zhí)行MUL指令后,C被清0,OV與結(jié)果有關(guān),若OV=0,表示乘積小于255(0FFH),只在A中,(B)=0;若OV=1,則乘積大于255,(B)≠0。例如:(A)=20H,(B)=0A0H,執(zhí)行指令
MULAB結(jié)果:(A)=00H,(B)=14H,即積為1400H,(C)=0,(OV)=1
3.4.4除法指令DIV
DIVAB
功能:兩8位無符號數(shù)相除,被除數(shù)置于累加器A中,除數(shù)置于寄存器B中。指令執(zhí)行后,商存于A中,余數(shù)存于B中。說明:該指令執(zhí)行后,C清0,若除數(shù)為0(即寄存器B內(nèi)數(shù)據(jù)為0),(OV)=1,表明除0沒有意義;若除數(shù)不為0,則(OV)=0。例:(A)=0FBH,(B)=12H,則DIVAB結(jié)果:(A)=0DH,(B)=11H,(C)=0,(OV)=0〔例3-16〕編程實現(xiàn)下列運算:F=D1×D2+D3/D4,其中D1、D2、D3、D4都為非0的8位二進制無符號數(shù)。〔解〕MOVA,#D1
MOV B,#D2 MUL AB
;計算D1×D2 MOV R2,A;暫存D1×D2的結(jié)果
MOV R3,B MOV A,#D3 MOV B,#D4 DIV AB;計算D3/D4 ADD A,R2
;乘積的低位與商相加
MOV R2,A;存F低位
MOV A,R3 ADDCA,#0;乘積的高位與低位和的進位相加
MOV R3,A
;存F高位在R3中3.5
邏輯運算及移位指令
1.邏輯與指令A(yù)NL
ANLA,Rn
;A←(A)∧(Rn)ANLA,direct
;A←(A)∧(direct)ANLA,@Ri
;A←(A)∧((Ri))
ANLA,#data
;A←(A)∧dataANLdirect,A
;direct←(A)∧(direct)ANLdirect,#data;direct←(direct)∧data
3.5.1邏輯運算指令說明:①邏輯運算是按位進行的,對進位標(biāo)志位C不產(chǎn)生影響。②該指令用于屏蔽某些位。
[例3-17〕將R1中的低4位清0,高4位不變。〔解〕MOVA,#11110000B
ANLA,R1
MOVR1,A01111010
∧)11100110
01100010結(jié)果為:(A)=62H例:設(shè)(A)=7AH,(20H)=0E6H,執(zhí)行指令
ANLA,20H2.邏輯或指令ORLORLA,Rn
;A←(A)∨(Rn)ORLA,direct;A←(A)∨(direct)ORLA,@Ri;A←(A)∨((Ri))ORLA,#data;A←(A)∨dataORLdirect,A;direct←(A)∨(direct)ORLdirect,#data;direct←(direct)∨data
〔例3-18〕將片外RAM2000H單元的0、1位置1,2、3位清0,其它位不變?!步狻矼OVDPTR,#2000HMOVXA,@DPTRORLA,#00000011BANLA,#11110011BMOV@DPTR,A3.邏輯異或指令XRLXRLA,Rn
;A←(A)⊕(Rn)XRLA,direct;A←(A)⊕(direct)XRLA,@Ri
;A←(A)⊕((Ri))XRLA,#data;A←(A)⊕dataXRLdirect,A,;direct←(direct)⊕(A)XRLdirect,#data;direct←(direct)⊕data說明:①若與0進行異或運算,結(jié)果保持不變;②若與1進行異或運算,結(jié)果取反;③自身異或等效于清0。例XRLA,A結(jié)果為:(A)=0
11110110⊕
0101010110100011〔例3-19〕將20H單元內(nèi)容1、3、5、7位保持不變,0、2、4、6位取反。
〔解〕XRL20H,#01010101B
若
(20H)=11110110
則執(zhí)行指令:結(jié)果為(20H)=10100011B4.累加器清0指令CLRCLRA
CPLA
5.累加器取反指令CPL
例如(A)=0E6H執(zhí)行CPLA,結(jié)果為:(A)=19H說明:1)取反即為邏輯非運算。2)MCS-51單片機沒有求補指令,若對累加器A中數(shù)求補,則程序如下:
CPLA
INCA3.5.2移位指令
循環(huán)左移
RLA;An+1←An,A0←A7循環(huán)右移
RRA;An←An+1,A7←A0進位循環(huán)左移
RLCA;An+1←An
,A0←C,C←A7帶進位循環(huán)右移
RRCA;An←An+1,A7←C,C←A0
移位指令〔例3-21〕分析下列程序段實現(xiàn)的功能:
MOVA,directRLAMOVR1,ARLARLAADDA,R1MOVdirect,A〔解〕各指令實現(xiàn)的功能依次如程序右邊注譯,可知該程序?qū)崿F(xiàn)的功能是將存貯單元的數(shù)乘以10。;取數(shù)設(shè)為D0;D0×2;(R1)=2D0;2D0×2;4D0×2;8D0+2D0;存數(shù)10D0〔例3-20〕將20H單元存放的無符號數(shù)除2?!步狻矨DDA,#0;C清零
MOVA,20HRRCAMOV20H,A3.6
位操作指令
MOV C,bit;C←(bit)MOVbit,C;bit←(C)
〔例3-22〕將20H位的內(nèi)容送至50H位,并要求不改變C的狀態(tài)?!步狻矼OV10H,C;保護C內(nèi)容
MOVC,20HMOV50H,CMOVC,10H;恢復(fù)C內(nèi)容
3.6.1位傳送指令MOV
說明:①多數(shù)位操作指令由C參與,C稱位累加器。②位操作指令尋址方式為位尋址。
3.6.2位置位/復(fù)位指令
(修改位內(nèi)容命令)
1.位置位(置1)命令SETB
SETBC
;C←1SETBbit;bit←12.位復(fù)位(清0)命令
CLRC
;C←0
CLRbit;bit←0說明:①位置位/復(fù)位命令可以方便改變位空間的單個位的內(nèi)容,十分靈活。②例如許多運算要先將C清零,我們用以用ADDA,#0來清零,也可以直接用CLRC指令。
3.6.3位運算指令
1.邏輯與指令A(yù)NL
ANLC,bit
;C←(C)∧(bit)ANLC,/bit;C←(C)∧(/bit)2.邏輯或指令ORL
ORLC,bit;C←(C)∨(bit)ORLC,/bit;C←(C)∨(/bit)3.邏輯非(求反)指令CPL
CPLbit
;bit←(/bit)
〔解〕MOVC,bit1
ANLC,/bit2
;C←(bit1).(/bit2)
MOVbit0,C
MOVC,bit2
ANLC,/bit1;C←(/bit1).(bit2)
ORLC,bit0
MOVbit0,C〔例3-23〕設(shè)bit0,bit1,bit2為三個位地址,試編程實現(xiàn)異或運算
bit0=bit1⊕bit2=(bit1)∧(/bit2)+(/bit1)∧(bit2)程序如下:
MOVC,P0.1ANL
C,/P0.0ORLC,/P0.2MOVP1.7,C〔例3-24〕編程實現(xiàn)圖3-9的邏輯功能。化簡可得:
P1.7=P0.0?P0.1?P0.2〔解〕根據(jù)邏輯圖得出邏輯關(guān)系:
P1.7=P0.0?P0.1?P0.1?P0.23.7
控制轉(zhuǎn)移類指令
程序的順序執(zhí)行是由PC自動加1實現(xiàn)的,要改變程序的執(zhí)行順序,實現(xiàn)分支轉(zhuǎn)向,必須通過強迫改變PC值的方法來實現(xiàn),這就是控制轉(zhuǎn)移類指令的基本功能。控制轉(zhuǎn)移類指令可以控制程序根據(jù)不同情況執(zhí)行不同的程序段,令單片機應(yīng)用系統(tǒng)做出相應(yīng)的動作??刂妻D(zhuǎn)移類指令使單片機具有“智能化”功能??刂祁愔噶畹恼莆帐褂幂^復(fù)雜,包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令及子程序調(diào)用返回指令。
3.7.1無條件轉(zhuǎn)移指今
1.長轉(zhuǎn)移指令LJMP
LJMPaddr16;PC←addr16功能:指令執(zhí)行后將16位地址(addr16)傳送給PC,從而實現(xiàn)程序轉(zhuǎn)移到新的地址開始運行。
說明:該指令可實現(xiàn)64KB范圍的任意轉(zhuǎn)移。
SJMPrel;PC←(PC)+2+rel功能:執(zhí)行指令后,程序從當(dāng)前位置向前或向后跳轉(zhuǎn)rel個單元運行。說明:①該指令中尋址方式稱相對尋址。②rel為8位帶符號補碼數(shù),因此所能實現(xiàn)的程序轉(zhuǎn)移是雙向的,若rel為正數(shù),則向前轉(zhuǎn)移,若rel為負(fù)數(shù)向后轉(zhuǎn)移。轉(zhuǎn)移相對范圍圖是-128~+127H共256個單元;③注譯中的“PC←(PC)+2+rel”是這樣得來的:注譯中“(PC)”是該指令執(zhí)行前的值,前面的“PC”是指指令執(zhí)行后的值。因“SJMPrel”指令存放在ROM中占用2個字節(jié)單元(為雙字節(jié)指令),故程序從指令執(zhí)行后“當(dāng)前位置”向前或向后跳轉(zhuǎn)rel個單元,也就是從指令執(zhí)行前的位置向前或向后跳轉(zhuǎn)2+rel個單元。2.短轉(zhuǎn)移指令SJMP
AJMPaddr11;PC←(PC)+2,PC10~0←addr11
功能:addr11的11位數(shù)取代該指令執(zhí)行后程序指針PC的低11位PC10~0,程序根據(jù)PC值轉(zhuǎn)移運行。說明:①addr11為11位無符號數(shù),程序轉(zhuǎn)移最大范圍為2KB。②LJMP,STMP,AJMP功能相同,只是轉(zhuǎn)移范圍不同。3.絕對轉(zhuǎn)移指令A(yù)JMP
JMP@A+DPTR
;PC←(A)+(DPTR)
功能:由A及DPTR的內(nèi)容決定程序轉(zhuǎn)移的目的地址。說明:
①DPTR為基址寄存器,A為變址寄存器,為基址加變址尋址方式。
②把DPTR值固定,賦與A不同的值,則可實現(xiàn)程序的多分支轉(zhuǎn)移。4.變址轉(zhuǎn)移指令JMP
3.7.2條件轉(zhuǎn)移指令
1.測試轉(zhuǎn)移指令
1)累加器A判0轉(zhuǎn)移指令JZrel
;若(A)=0,轉(zhuǎn)移,PC←(PC)+2+rel
;若(A)≠0,順序執(zhí)行。JNZrel
;若(A)≠0,轉(zhuǎn)移,PC←(PC)+2+rel
2)進位位測試轉(zhuǎn)移指令JCrel
;若(C)=1,轉(zhuǎn)移,PC←(PC)+2+relJNCrel
;若(C)=0,轉(zhuǎn)移,PC←(PC)+2+rel
所謂條件轉(zhuǎn)移就是程序的轉(zhuǎn)移是有條件的,當(dāng)指令中規(guī)定的條則滿足時,程序轉(zhuǎn)移,否則程序不轉(zhuǎn)移,仍順序執(zhí)行。
3)位單元測試轉(zhuǎn)移指令JBbit,rel;若(bit)=1,轉(zhuǎn)移,PC←(PC)+3+relJNBbit,rel
;若(bit)=0,轉(zhuǎn)移,PC←(PC)+3+relJBCbit,rel
;若(bit)=1,轉(zhuǎn)移,PC←(PC)+3+rel
;同時將bit位清零。
功能:根據(jù)測試條件決定程序是否轉(zhuǎn)移執(zhí)行。說明:①若條件滿足程序轉(zhuǎn)移執(zhí)行;若條件不滿足,順序執(zhí)行。②位單元測試轉(zhuǎn)移指令為三字節(jié)指令,故執(zhí)行該類指令,若條件滿足轉(zhuǎn)移時,PC=(PC)+3+ rel。其它測試轉(zhuǎn)移指令為雙字節(jié)指令,條件滿足轉(zhuǎn)移時,PC=(PC)+2+rel。
〔解〕MOV
R0,#DATA2
;賦首址
MOVDPTR,#DATA1LOOP1:MOVXA,@DPTR;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026廣東廣州市醫(yī)藥職業(yè)學(xué)校招聘臨時代課教師3人參考考試題庫附答案解析
- 2026年遼寧省文物考古研究院面向社會公開招聘工作人員招聘參考考試試題附答案解析
- 超市全員安全生產(chǎn)制度
- 生產(chǎn)車間勞保管理制度
- 中空玻璃生產(chǎn)制度
- 2026天津大學(xué)出版社有限責(zé)任公司招聘4人參考考試題庫附答案解析
- 無人機生產(chǎn)安全管理制度
- 生產(chǎn)職業(yè)安全管理制度
- 管道工安全生產(chǎn)責(zé)任制度
- 鑄造業(yè)安全生產(chǎn)檢查制度
- 江蘇省連云港市2024-2025學(xué)年第一學(xué)期期末調(diào)研考試高二歷史試題
- 文化館安全生產(chǎn)制度
- (2025年)保安員(初級)證考試題庫及答案
- 2026年浙江省軍士轉(zhuǎn)業(yè)崗位履職能力考點練習(xí)題及答案
- 安全設(shè)備設(shè)施安裝、使用、檢驗、維修、改造、驗收、報廢管理制度
- 2026屆四川省成都市2023級高三一診英語試題(附答案和音頻)
- 《煤礦安全規(guī)程(2025)》防治水部分解讀課件
- 2025至2030中國新癸酸縮水甘油酯行業(yè)項目調(diào)研及市場前景預(yù)測評估報告
- JJF 2333-2025恒溫金屬浴校準(zhǔn)規(guī)范
- 員工自互檢培訓(xùn)
- (2025年)司法考試法理學(xué)歷年真題及答案
評論
0/150
提交評論