版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機原理與應(yīng)用課程目標掌握:了解單片機的基本結(jié)構(gòu)及工作原理;掌握單片機指令系統(tǒng)及使用;掌握匯編語言及編程;了解和掌握單片機的中斷系統(tǒng);《單片機原理與應(yīng)用》
《單片機原理與應(yīng)用》第一章MCS-51單片機的硬件結(jié)構(gòu)與工作原理
第二章指令系統(tǒng)與程序設(shè)計
第三章匯編語言
第四章單片機的中斷系統(tǒng)總目錄本章目錄第一節(jié)MCS-51單片機的基本組成第二節(jié)并行輸入/輸出接口第三節(jié)存儲器組織第四節(jié)特殊寄存器2.1MCS-51單片機的硬件結(jié)構(gòu)1.五大部分:微處理器(CPU)、存貯器、I/O端口、定時/計數(shù)器和中斷系統(tǒng)。2.八大部件:
微處理器、數(shù)據(jù)存儲器、程序存儲器、I/O接口、串行口、定時/計數(shù)器、中斷系統(tǒng)、特殊寄存器2.1MCS-51單片機的硬件結(jié)構(gòu)CPU運算部件控制部件BRAMP0口P2口ROM(EPROM)串行口
C/T中斷系統(tǒng)SFRP1口8P3口888XTAL1XTAL2PSENALEEARESETVccVss按功能可分成8個部件,通過片內(nèi)單一總線連接起來1.微處理器2.數(shù)據(jù)存儲器3.程序存儲器4.I/O口5.串行口6.定時/計數(shù)器7.中斷系統(tǒng)8.特殊功能寄存器控制方式:SFR對各功能部件集中控制內(nèi)部總線輸入/輸出引腳說明:(1)P0口(39~32腳):P0.0~P0.7統(tǒng)稱為P0口。在不接片外存儲器與不擴展I/O口時,可作為準雙向輸入/輸出口。在接有片外存儲器或擴展I/O口時,P0口分時復(fù)用為低8位地址總線和雙向數(shù)據(jù)總線。
1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一節(jié)(2)P1口(1~8腳):P1.0~P1.7統(tǒng)稱為P1口,可作為準雙向I/O口使用。對于52子系列,P1.0與P1.1還有第二功能:P1.0可用作定時器/計數(shù)器2的計數(shù)脈沖輸入端T2,P1.1可用作定時器/計數(shù)器2的外部控制端T2EX。1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一節(jié)(3)P2口(21~28腳):P2.0~P2.7統(tǒng)稱為P2口,一般可作為準雙向I/O口使用;在接有片外存儲器或擴展I/O口且尋址范圍超過256字節(jié)時,P2口用作高8位地址總線。1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一節(jié)
(4)P3口(10~17腳):P3.0~P3.7統(tǒng)稱為P3口。除作為準雙向I/O口使用外,還可以將每一位用于第二功能,而且P3口的每一條引腳均可獨立定義為第一功能的輸入輸出或第二功能。P3口的第二功能如表2.1所示。1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222180318051875189C51VCCVSSXTAL2
XTAL1RSTP0.0
P0.1
P0.2P0.3P0.4P0.5P0.6P0.7P1.0
P1.1
P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0
P3.1
P3.2P3.3P3.4P3.5P3.6P3.7EA第一節(jié)表2.1P3口第二功能表引腳第二功能P3.0串行口輸入端P3.1串行口輸出端P3.2外部中斷0請求輸入端,低電平有效P3.3外部中斷1請求輸入端,低電平有效P3.4定時器/計數(shù)器0計數(shù)脈沖輸入端P3.5定時器/計數(shù)器1計數(shù)脈沖輸入端P3.6外部數(shù)據(jù)存儲器寫選通信號輸出端,低電平有效P3.7RXDTXDINT0INT1T0T1WRRD外部數(shù)據(jù)存儲器讀選通信號輸出端,低電平有效第一節(jié)1
2
3
4
5
6
7
8
9
10111213141516171819
2040
39
38
37
36
35
34
33
32
313029282726252424222189C51片內(nèi)RAM片內(nèi)PLASH256字節(jié)4K第四節(jié)00HFFH20H1FH30H2FH80H7FH工作寄存器組區(qū)位尋址區(qū)用戶RAM區(qū)SFR片內(nèi)RAM●
00H~1FH共32個單元為工作寄存器區(qū),分為4組,每組8個字節(jié),用R0~R7表示,用PSW的RS1RS0設(shè)置●
20H~2FH共16個單元為位尋址區(qū),128個位(00H~1FH),也可字節(jié)尋址,作一般RAM用●
30H~7FH共80個單元為用戶區(qū),作數(shù)據(jù)緩沖和堆棧區(qū)用●
80H~FFH為特殊功能寄存器SFR區(qū),離散分布著21個專用寄存器RS1RS0寄存器組RAM地址
00第0組00H~07H
10第2組10H~17H
11第3組18H~1FH
01第1組08H~0FH第四節(jié)字節(jié)地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F077E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D057C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800D7D6D5D4D3D2D1D0位地址注意:一個字節(jié)地址對應(yīng)有8個位地址位尋址區(qū)位地址第四節(jié)特殊功能寄存器1、累加器ACC(0E0H)
Accumulator,是一8位特殊功能寄存器,很多運算都要用A,結(jié)果一般放在A中。A是51單片機中使用最頻繁的寄存器。2、寄存器B(0F0H)
8位R,與A配合,用于乘、除法指令中。3、程序狀態(tài)字PSW(0D0H)
ProgramStatusWord,是一8位寄存器,用來存放程序執(zhí)行后的狀態(tài)信息,供程序查詢或判斷。
CYACF0RS1RS0OV---P
D7
D6D5D4D3D2D1D0
PSW(D0H)第四節(jié)
CYACF0RS1RS0OV---P
D7
D6D5D4D3D2D1D0
PSW(D0H)●
CY——進位標志位,有進/借位CY=1,否則CY=0●AC——半進位標志位,低半字節(jié)向高半字節(jié)有進/借位,
AC=1,否則AC=0,可用于BCD碼運算判斷位●
F0——用戶標志位,用戶自己定義用●
RS1、RS0——工作寄存器組選擇位RS1RS0選擇工作寄存器組000組(00H~07H)011組(08H~0FH)102組(10H~17H)113組(18H~1FH)●
OV——溢出標志位,補碼運算有溢出,結(jié)果超過-128~127,
OV=1,無溢出,OV=0。OV=D7CD6C●P——奇偶標志位,指令執(zhí)行后A中1的個數(shù)為奇數(shù),P=1,為偶數(shù),P=0第四節(jié)特殊功能寄存器4、堆棧指針SP(81H)是一8位專用寄存器,8位指針。堆棧是一個特殊的存儲區(qū),設(shè)在片內(nèi)RAM中。5、數(shù)據(jù)指針DPTR(82H、83H)
16位寄存器,存放16位地址,可分為DPH和DPL兩個8位寄存器使用。DPTR主要用于操作片外RAM。6、I/O口P0~P3
專用寄存器P0~P3是輸入輸出端口P0~P3的鎖存器。I/O口的操作沒有專用指令,用操作RAM的指令。7、程序計數(shù)器PC
ProgramCounter,是一個16位的指針,存放將要執(zhí)行指令的地址。用戶不可讀寫它,復(fù)位時PC=0000H。第四節(jié)wyx講授內(nèi)容:MCS-51單片機的尋址方式MCS-51單片機指令分類應(yīng)用舉例第三章
MCS-51單片機的指令系統(tǒng)本章重點:1.指令的尋址方式2.指令功能及使用方法本章目錄第一節(jié)MCS51單片機的尋址方式
第二節(jié)MCS51單片機的指令分類第三節(jié)應(yīng)用舉例一、立即尋址
第一節(jié)MCS51單片機的尋址方式MOVA,#30H;把立即數(shù)30H送給A
操作數(shù)就在指令中,稱為立即數(shù),用#號標識。有7種尋址方式第一節(jié)二、直接尋址
指令中直接給出操作數(shù)所在的地址,用于訪問片內(nèi)RAM
MOVA,30H;將片內(nèi)RAM中30H單元的內(nèi)容給A
用直接尋址可以訪問片內(nèi)RAM的低128字節(jié)單元、位地址空間及SFR,且位地址空間和SFR只能用直接尋址。
三、寄存器尋址
操作數(shù)在寄存器中,指令中給出存放操作數(shù)的寄存器A、B、DPTR、R0~R7MOVA,R2;將R2中的內(nèi)容給A
設(shè)30H單元中為05H
(A)=?MOVA,#30HMOVR2,#0A5HMOVA,R2
程序執(zhí)行后A=?第一節(jié)●指令中通過寄存器給出操作數(shù)所在的地址,即寄存器中存放的是操作數(shù)的地址,還不是要找的操作數(shù),稱為指針方式
●間接尋址用于訪問RAM,包括片內(nèi)RAM和片外RAM
●能用于寄存器間接尋址的寄存器有:四、寄存器間接尋址
MOV30H,#0FFHMOVR0,#30HMOVA,@R0R0,R1——8位指針,主要用于訪問片內(nèi)RAMDPTR——16位指針,主要用于訪問片外RAM
程序執(zhí)行后A=?30H31H32H片內(nèi)RAMFFHXXHXXH(R0)AFFHR030H例第一節(jié)五、變址尋址(基址加變址尋址)
以DPTR或PC為基址寄存器,A為變址寄存器,兩者相加后的地址作為有效地址的尋址方式。MOVCA,@A+DPTR
(查表)MOVCA,@A+PC(查表)
JMP@A+DPTR(散轉(zhuǎn))第一節(jié)MOVA,#04HMOVDPTR,#2000HMOVCA,@A+DPTR
程序執(zhí)行后A=?ROM(DPTR)A55H變址尋址用于訪問程序存儲器,只讀,不能寫。有效地址的計算:(DPTR+A)(PC+A)55H5CH4BH6DH3AH2000H2001H2002H2003H2004H2004H(DPTR+A)A、DPTR可以賦值,但PC不能賦值,由程序執(zhí)行后PC當(dāng)前值決定PC值,自動產(chǎn)生。55H第一節(jié)注意●相對跳轉(zhuǎn)指令都是相對尋址●以PC當(dāng)前值為基礎(chǔ),加上指令中給出的偏移量作為轉(zhuǎn)移地址
六、相對尋址
相對尋址用于修改PC值,實現(xiàn)程序的分支轉(zhuǎn)移例如:SJMP08H;PC←PC+2+08H偏移量為一個8位帶符號補碼,范圍為+127~-128轉(zhuǎn)移的目的地址=PC當(dāng)前值+偏移量LP:CPLP1.0LCALL
DELAY
SJMPLP
一般用符號地址表示PC當(dāng)前值=指令地址+指令字節(jié)數(shù)第一節(jié)七、位尋址
指對能位尋址的片內(nèi)RAM區(qū)(20H~2FH)、可位尋址的SFR進行位操作的尋址方式。位地址表示MOVC,20H;將20H位內(nèi)容給CYSETBP1.7;置1,P1.7=1CLRP1.7;清0,P1.7=0MOV20H,C;CY的內(nèi)容給20H位1)直接位地址——20H2)位名稱——C、F0、OV3)專用寄存器+位序號——P1.04)單元地址加序號——80H.6●位地址與字節(jié)地址完全一樣,由指令區(qū)分●指令中有多個操作數(shù),可能有多種尋址方式●內(nèi)部RAM與內(nèi)部I/O口統(tǒng)一編址,外部RAM與外部I/O口統(tǒng)一編址,用相同的操作指令。第一節(jié)注意一、指令格式
操作碼——指出CPU要做的操作代碼操作數(shù)——指出要操作的對象例如:
ADDA,#05H
操作碼操作數(shù)★單字節(jié)指令——操作碼和操作數(shù)在同一個字節(jié)中★雙字節(jié)指令——操作碼一個字節(jié),操作數(shù)一個字節(jié)★三字節(jié)指令——操作碼、操作數(shù)、操作數(shù)指令組成:第二節(jié)MCS51單片機的指令分類二、指令分類數(shù)據(jù)傳送類指令算術(shù)運算類指令邏輯運算類指令控制轉(zhuǎn)移類指令位操作類指令一、一般傳送類指令MOV
數(shù)據(jù)傳送類指令用于片內(nèi)RAM數(shù)據(jù)傳送1、以A為目的操作數(shù)MOVA,Rn
;A←(Rn)MOVA,direct ;A←(direct)MOVA,@Ri
;A←((Ri))MOVA,#data ;A←#dataMOVA,R2;將R2中的內(nèi)容給A
目的操作數(shù)源操作數(shù)
返回2、以Rn為目的操作數(shù)MOVR0,30H;30H單元內(nèi)容給R0
MOVRn,A ;Rn←AMOVRn,direct ;Rn←(direct)MOVRn,#data ;Rn←#data傳送類指令MOV3、以direct為目的操作數(shù)MOVdirect,A MOVdirect,
Rn
MOVdirect,
direct MOVdirect,
@RiMOVdirect,#data4、以間接地址為目的操作數(shù)MOV@Ri,A ;((Ri))←AMOV@Ri,direct ;((Ri))←(direct)MOV@Ri,#data ;((Ri))←#data傳送類指令MOVMOV30H,A ;(30H)←AMOV30H,#30H ;(30H)←30HMOV40H,50H;(40H)←(50H)例如:5、16位數(shù)據(jù)傳送指令MOVDPTR,#data16 二、片外RAM傳送指令MOVX
用于片外RAM中數(shù)據(jù)的存取MOVXA,@DPTR ;A←(DPTR)MOVXA,@Ri
;A←(P2Ri)MOVX@DPTR,A ;(DPTR)←AMOVX@Ri,A ;(P2Ri)←A●片外RAM的操作,只有4條指令,而且必須通過A進行●A與外部RAM之間傳送數(shù)據(jù),屬間接尋址●@Ri,尋址范圍只有256單元,@DPTR尋址范圍為64K讀片外RAM寫片外RAM一輸入設(shè)備,口地址為A000H,口上數(shù)據(jù)為90H,欲將其存入片內(nèi)30H單元例MOVDPTR,#0A000H
;設(shè)指針MOVXA,@DPTR;取外設(shè)的數(shù)MOV30H,A
;存到片內(nèi)三、程序存儲器傳送指令MOVC
用于程序存儲器ROM中數(shù)據(jù)的讀取MOVCA,@A+DPTR ;A←(A+DPTR)MOVCA,@A+PC ;A←(A+PC)●取程序存儲器中的數(shù)據(jù),只有2條指令,變址尋址●單方向只讀操作,叫查表指令●表地址=表首地址(TAB)+序號(A)設(shè)在ROM1000H開始存放有5個字節(jié)數(shù),編程將第二個字節(jié)數(shù)取出存入片內(nèi)RAM30H單元。例MOVDPTR,#1000H;設(shè)指針MOVA,#01H;序號MOVCA,@A+DPTR;取1001H單元的數(shù)MOV30H,A;存到片內(nèi)10H04H01H09H00H1000H1001H1002H1003H1004H四、數(shù)據(jù)交換指令
目的操作數(shù)為A1、整字節(jié)交換XCHA,Rn
;A<=>(Rn)XCHA,direct;A<=>(direct)XCHA,@Ri
;A<=>((Ri))XCHDA,@Ri
;低四位交換,高四位不變SWAPA ;A的高四位與低四位交換2、半字節(jié)交換MOVA,#45HSWAPA
程序執(zhí)行后A=?例A=54H五、堆棧操作指令
1、堆棧的概念1)堆棧指針SP的初值叫棧底,可由指令設(shè)置
MOVSP,#60H;棧底為60H2)數(shù)據(jù)由低地址向高地址存放3)SP總是指向棧頂棧頂是棧區(qū)已存放數(shù)據(jù)的最高地址4)堆棧采用“先進后出”的原則棧底封死(固定),棧頂開放(活動)5)數(shù)據(jù)的入棧出棧由指針SP統(tǒng)一管理2、堆棧操作指令堆棧是開辟在片內(nèi)RAM區(qū)的一個專用的存儲區(qū)PUSHdirect
;SP←(SP+1),((SP))←(direct)POP direct
;(direct)←((SP)),SP←SP-104H09H62H61H60H棧底棧頂(SP)MOVSP,#60HMOV30H,#15HPUSH30H
例堆棧操作15H62H61H60H棧底棧頂(SP)MOVSP,#60HMOV30H,#15HPUSH30HPOP40H
15H62H61H60H(SP)結(jié)果:(40H)=15H
(SP)=60H壓棧操作:出棧操作:利用堆棧如何實現(xiàn)數(shù)據(jù)交換
返回一、加法指令(Addition)
算術(shù)運算類指令指加、減、乘、除等運算,共24條,都要用A,結(jié)果存放在A中
有ADD,ADDCADDA,Rn
;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri
;A←A+((Ri))ADDA,#data ;A←A+#data上述指令影響CY、AC、OV、P四個標志位1、不帶進位的加法指令
返回例:執(zhí)行下列指令后A=?PSW=?
101101101B
6DH
————————————————————
11000011BC3H+)10101010BAAH
MOVA,#0C3HMOVR0,#0AAHADDA,R0
進位結(jié)果:A=6DH,CY=1、AC=0、OV=1、P=1
CYACF0RS1RS0OV---P
PSW
10000101
PSW==85H溢出標志位OV=D7CD6C=10=1ADD用法多了加進位標志位CY,主要用于多字節(jié)的加運算2、帶進位的加法指令加法指令A(yù)DDCA,Rn
;A←A+Rn+CADDCA,direct;A←A+(direct)+CADDCA,@Ri
;A←A+((Ri))+CADDCA,#data;A←A+#data+C兩個雙字節(jié)數(shù)存放在內(nèi)部RAM30H、31H單元及40H、41H單元,設(shè)低位在前,高位在后,求和。
MOVA,30H;取低8位ADDA,40H
;低8位相加MOV30H,A;存結(jié)果MOVA,31H;取高8位ADDCA,41H
;高8位帶進位加MOV31H,A;存結(jié)果例:多字節(jié)加4條帶借位減法指令A(yù)=0C9H,R2=54H,CY=1,執(zhí)行SUBBA,R2后A=?PSW=?例:二、減法指令(Subtraction)
SUBBA,Rn
;A←A-Rn-CSUBBA,direct ;A←A-(direct)-CSUBBA,@Ri
;A←A–((Ri))-CSUBBA,#data ;A←A-#data–C結(jié)果:A=74H,CY=0、AC=0、OV=1、P=0多字節(jié)減設(shè)被減數(shù)5678H在30H、31H中,減數(shù)4496H在40H、41H中,低位在前,高位在后,求差值。CLRCMOVA,30H;取低8位SUBBA,40H;低8位相減MOV30H,A;存結(jié)果MOVA,31H;取高8位SUBBA,41H;高8位減MOV31H,A;存結(jié)果例:●低字節(jié)減時,要注意對借位位清0,●高字節(jié)減時,SUBB會將低字節(jié)減時的借位減去注意例:三、乘法指令(Multiply)
MULAB ;BA←A×B
A和B中各存放一個8位無符號數(shù),指令執(zhí)行后,16位乘積的低8位在A中,高8位在B中。A=30H,B=60H,執(zhí)行MULAB后:
例:四、除法指令(Divide)
A=30H,B=07H,執(zhí)行DIVAB后:DIVAB ;A÷B→商在A中,余數(shù)在B中●
8位無符號數(shù)相除,A放被除數(shù),B放除數(shù)?!?/p>
指令執(zhí)行后,A中存放商,B中存放余數(shù)。A=06H,B=06H
A=00H,B=12H五、加1減1指令
1、加1指令(Increment)
INCA ;A←A+1INCRn
;Rn←Rn+1INCdirect ;(direct)←(direct)+1INC@Ri
;((Ri))←((Ri))+1INCDPTR ;DPTR←DPTR+1DECA ;A←A-1DECRn
;Rn←Rn-1DECdirect ;direct←(direct)-1DEC@Ri
;((Ri))←((Ri))-12、減1指令(Decrement)
無DPTR減1指令MOVR7,#0FFHINCR7結(jié)果:R7=?MOV30H,#00HDEC30H結(jié)果(30H)=?把A中按二進制相加的結(jié)果調(diào)整成按BCD碼相加的結(jié)果
1
00100001B21H
————————————————————
————————————————————
六、十進制調(diào)整指令
DAA
10111011B
BBH
01101000B68H+)
01010011B53H例:BCD碼運算:68+53=121
+)
01100110B66H
MOVA,#68HADDA,#53H;A=BBHDAA;A=21H寫出指令結(jié)果:CY=1,A=21H進位調(diào)整
返回一、邏輯與
邏輯運算類指令20條邏輯運算指令加上4條移位指令=24條目的操作數(shù)大多要用A,有幾條用directANLA,#data ;A←A∧dataANLA,direct ;A←A∧(direct)
ANLA,Rn
;A←A∧RnANLA,@Ri
;A←A∧((Ri))ANLdirect,#data;(direct)←(direct)∧dataANLdirect,A ;(direct)←(direct)∧A用途:用來對某些位清0,將要清0的位和“0”相“與”
例:MOVA,#56HANLA,#0FH結(jié)果:A=06H
返回二、邏輯或
ORLA,#data;A←A∨dataORLA,direct ;A←A∨(direct)ORLA,Rn
;A←A∨RnORLA,@Ri
;A←A∨((Ri))ORLdirect,#data;(direct)←(direct)∨dataORLdirect,A;(direct)←(direct)∨A用途:用來對某些位置1,將要置1的位和“1”相“或”
例:MOVA,#06HORLA,#30H結(jié)果:A=36H
00110110B
36H
————————————————
00000110B06H∨00110000B30H三、邏輯異或
用途:對某些位取反,將要取反的位和“1”相“異或”
例:MOVA,#0FHXRLA,#0FFH結(jié)果:A=F0H
11110000B
F0H
————————————————
00001111B
0FH
11111111BFFHXRLA,#data ;A←A
dataXRLA,direct ;A←A
(direct)XRLA,Rn
;A←A
RnXRLA,@Ri
;A←A
((Ri))XRLdirect,#data ;(direct)←(direct)
dataXRLdirect,A ;(direct)←(direct)
A四、累加器清0取反指令
有4條,只對A操作CLRA;A←0CPLA;A←/AMOVA,#0;A=0MOVA,#0AAH;A=AAHCPLA
;A=?五、循環(huán)移位指令(Rotation)
RLA;A的內(nèi)容循環(huán)左移RRA;A的內(nèi)容循環(huán)右移RLCA;帶進位循環(huán)左移RRCA;帶進位循環(huán)右移A的內(nèi)容循環(huán)左、右移位A帶進位循環(huán)左、右移位
=CLRA10101010B求反01010101BA=55HA.0A.7A.0A.7A.0A.7CYA.0A.7CYRLARRARLCARRCA循環(huán)移位<128的數(shù),左移相當(dāng)于×了2D0=0時,右移相當(dāng)于÷了2用途
返回一、無條件轉(zhuǎn)移指令
控制轉(zhuǎn)移類指令1、LJMP后跟16位地址,可實現(xiàn)64K范圍的轉(zhuǎn)移有17條無條件轉(zhuǎn)移條件轉(zhuǎn)移LJMPaddr16;長轉(zhuǎn)移,指令3字節(jié)AJMPaddr11;絕對轉(zhuǎn)移,指令2字節(jié)SJMPrel
;相對轉(zhuǎn)移,2字節(jié)JMP@A+DPTR;間接轉(zhuǎn)移指令(PC)←
addr16,16位地址值給PC
返回2、AJMP后跟11位地址,可實現(xiàn)2K范圍的轉(zhuǎn)移(PC)←(PC)+2,PC當(dāng)前值(PC)←
addr11,11位地址值給PC低11位3、SJMPrel(PC)←(PC)+2,PC當(dāng)前值(PC)←
PC+rel
,加上8位的偏移量rel為8位帶符號數(shù)補碼,轉(zhuǎn)移范圍為+127~-128rel一般用符號地址,用標號表示目的地址,如:
SJMPNEXTSJMP$=WAIT:SJMPWAIT$表示當(dāng)前指令的首地址無條件轉(zhuǎn)移4、JMP@A+DPTR
變址尋址,實現(xiàn)長轉(zhuǎn)移,范圍達64K,多分支散轉(zhuǎn)(PC)←
DPTR+A目的地址=DPTR+A轉(zhuǎn)移地一般放一個散轉(zhuǎn)表,散轉(zhuǎn)表處放一些跳轉(zhuǎn)指令無條件轉(zhuǎn)移例根據(jù)A中內(nèi)容轉(zhuǎn)移,A中只能是偶數(shù)MOVA,#data
MOVDPTR,#TABLE
JMP@A+DPTRTABLE:AJMPPROG1AJMPPROG2AJMPPROG3A=0,轉(zhuǎn)到PROG1A=2,轉(zhuǎn)到PROG2二、條件轉(zhuǎn)移指令
1、A判0轉(zhuǎn)移指令JZrel
;A=0,轉(zhuǎn)移JNZrel
;A0,轉(zhuǎn)移2、比較轉(zhuǎn)移指令CJNEA,#data,rel
CJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel比較兩個操作數(shù),不相等則轉(zhuǎn)移,相等順序執(zhí)行作減法,影響標志位CY,左右,CY=0,無借位左<
右,CY=1,有借位此指令與位(CY)判跳指令結(jié)合,可以產(chǎn)生三分支相等,順序執(zhí)行=
等于不相等,轉(zhuǎn)移條件轉(zhuǎn)移
,CY=0,大于
<
,CY=1,小于CJNE指令3、循環(huán)轉(zhuǎn)移指令DJNZRn,rel
DJNZdirect,rel減1非零轉(zhuǎn)移指令,操作數(shù)減1后,若不為0,則轉(zhuǎn)移MOVR2,#30LOOP:CPLP1.0DJNZR2,LOOP例從P1.0輸出15個方波P1.0三、子程序調(diào)用及返回指令
1、LCALLaddr16LCALLaddr16;長調(diào)用指令,3字節(jié)ACALLaddr11;絕對調(diào)用指令,2字節(jié)RET;字程序返回,1字節(jié)RETI;中斷返回給出16位地址,可以轉(zhuǎn)到64K任何地方執(zhí)行子程序1)PCPC+3,得PC當(dāng)前值(即斷點地址)
2)將斷點地址壓入堆棧保護,即將PC當(dāng)前值入棧:
SPSP+1,(SP)
PC低8位
SPSP+1,(SP)
PC高8位3)將子程序的入口地址給PC,實現(xiàn)轉(zhuǎn)移
PCaddr16CPU要自動完成以下操作
PC低62H61H60H(SP)
PC高2、ACALLaddr11給出11位地址,可以轉(zhuǎn)到2K范圍執(zhí)行子程序1)PCPC+2,得PC當(dāng)前值(即斷點地址)
2)保護斷點,PC當(dāng)前值入棧保護3)將子程序的入口地址給PC,實現(xiàn)轉(zhuǎn)移
PCaddr11(PC高5位不變,低11位替換)CPU要自動完成以下操作
PC低62H61H60H(SP)
PC高MOVSP,#60H2000HLCALLDELAY2003HMOV30H,#05H
┇3000HDELAY:MOVR7,#15●斷點值PC=2000H+3=2003H,入棧保護●SP=62H,轉(zhuǎn)移到PC=3000H處執(zhí)行子程序
03H62H61H60H(SP)
20H例3、返回指令RET子程序的最后必須是RET指令1)把存放在堆棧中的斷點值彈出給PCPC高8位(SP),SPSP-1PC低8位(SP),SPSP-12)從斷點處繼續(xù)執(zhí)行子程序CPU要自動完成以下操作
03H62H61H60H(SP)
20H例上例中,PC高20H,SP=61HPC低03H,SP=60H最后:PC=2003H,SP=60H返回到調(diào)用指令的下一條指令執(zhí)行4、中斷返回指令RETI與RET相似,自動彈出斷點值給PC,返回中斷處執(zhí)行
MOVSP,#60H2000HLCALLDELAY2003HMOV30H,#05H
┇3000HDELAY:MOVR7,#15┇
RET
03H62H61H60H(SP)
20H
返回一、位傳送指令
位操作類指令有17條,操作片內(nèi)低128字節(jié)的位尋址區(qū)20H~2FH片內(nèi)21個SFR中的11個可位尋址的SFRMOVC,bit;C←bitMOVbit,C;bit←C位操作只有兩個操作數(shù),C和bit(/bit)
MOVC,P1.0MOV20H,C如何實現(xiàn):20H位→30H位例:bit——位單元,直接位地址C——位累加器
返回二、位修改指令
CLRbit;bit←0SETBRS1CLRRS0例:SETBbit;bit←1CPLC;C←/C位清0位置1位取反CLRC;C←0SETBC;C←1CPLbit;bit←/bit設(shè)置用第二組工作寄存器RS1=1RS0=0三、位邏輯運算指令
ANLC,/bit;C←C∧(/bit)將07H位內(nèi)容給67H位
07H與67H位交換?例:ORLC,/bit;C←C∨(/bit)位邏輯與位邏輯或ANLC,bit;C←C∧(bit)ORLC,bit;C←C∨(bit)/bit——位地址內(nèi)容取反(不改變原來的內(nèi)容)
這4條指令必須用C作目的操作數(shù)MOVC,07HMOV67H,C如何實現(xiàn)四、位條件轉(zhuǎn)移指令
JNC rel
;C=0轉(zhuǎn)移從P1口輸入一個數(shù),若為正則存入30H單元,若為負則將其取反后存入30H單元。例:JNB bit,rel
;(bit)=0轉(zhuǎn)移JC rel
;C=1轉(zhuǎn)移JB bit,rel
;(bit)=1轉(zhuǎn)移都是相對尋址,目的地址=PC當(dāng)前值+rel(偏移量)MOVA,P1
JNBACC.7,ST;為正轉(zhuǎn)移
CPLA;求反ST:MOV30H,A
;存數(shù)
JBC bit,rel
;(bit)=1轉(zhuǎn)移,并清0該位
返回第五節(jié)中斷及中斷源一、中斷(Interrupt)
1、CPU在執(zhí)行程序時,CPU以外的設(shè)備請求停止現(xiàn)程序的執(zhí)行,轉(zhuǎn)去處理外設(shè)事件,處理后再回到原地執(zhí)行,這一過程叫中斷。主程序轉(zhuǎn)移中斷程序返回斷點
2、中斷流程
繼續(xù)與子程序調(diào)用相似但有本質(zhì)的區(qū)別第五節(jié)中斷源3、定時器0溢出中斷--T0
是內(nèi)部中斷,無外部輸入。定時器T0溢出,使標志位TF0置1,向CPU申請中斷。4、定時器1溢出中斷—T1
與T0類似,T1溢出,TF1置1,向CPU申請中斷。5、串行口中斷—S
當(dāng)串行口接收完一幀數(shù)據(jù),中斷標志位RI置1
當(dāng)串行口發(fā)送完一幀數(shù)據(jù),中斷標志位TI置1第五節(jié)二、中斷源
●向CPU提出中斷請求的設(shè)備或部件叫中斷源MCS-51有5種類型的中斷源:外部中斷2個——INT0、INT1內(nèi)部中斷3個——定時器溢出中斷,串行口中斷1、外部中斷0--INT0(P3.2)
由P3.2引腳輸入,一旦輸入有效中斷信號,便使標志位IE0置1,并向CPU申請中斷。2、外部中斷1—INT1(P3.3)
與INT0類似,P3.3有中斷信號,IE1置1,申請中斷。第五節(jié)每個中斷源都有一個對應(yīng)的中斷標志位,中斷標志位在兩個特殊功能寄存器中
三、中斷標志位
TCON——定時器控制寄存器,存放有4個標志位SCON——串行口控制寄存器,存放有2個標志位1、TCON中的中斷標志位
TimerControl,為8位特殊功能寄存器,地址88H
●用4位放定時器T0、T1,外部中斷INT0、INT1的中斷標志位。
●TCON用來控制定時器的啟/停和外部中斷管理。
●TCON可讀可寫,可位操作。第五節(jié)定時器Timer外部中斷Interrupt
高四位用于定時器,低四位用于外部中斷1)TF1—TimerFlowing,定時器T1溢出中斷標志位
T1溢出,硬件自動置標志位TF1=1,CPU響應(yīng)中斷,硬件自動清TF1=0。2)TF0—定時器T0溢出中斷標志位3)IE1—InterruptExternal,外部中斷1中斷標志位若P3.3上有有效的中斷信號,硬件置位IE1=14)IE0—外部中斷0(P3.2)中斷標志位另外4位中,TR0、TR1用于定時器T0和T1的啟/??刂艻T0、IT1用于設(shè)置外部中斷的觸發(fā)方式
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
D7
D6D5D4D3D2D1D0TCON(88H)第五節(jié)
1)TI—串行口發(fā)送中斷標志位,TransferInterruptCPU發(fā)送完一幀數(shù)據(jù),硬件置位TI=1,響應(yīng)中斷,不能硬件自動清TF1=0,必須用軟件清0。2)RI—串行口接收中斷標志位,ReceiveInterruptCPU接收完一幀數(shù)據(jù),硬件置位RI=1,必須用軟件清02、SCON中的中斷標志位
TI
RID7
D6
D5
D4D3D2D1
D0SCON(98H)SerialControl,為8位特殊功能寄存器,地址為98H與中斷有關(guān)的為低兩位第五節(jié)四、中斷控制
中斷是可控的,由軟件設(shè)置實現(xiàn)對中斷功能的控制IE——中斷允許寄存器,用于中斷的開放或禁止IP——中斷優(yōu)先級寄存器,用于中斷響應(yīng)優(yōu)先管理1、中斷允許寄存器IEInterruptEnable,為一8位寄存器,地址為A8H
EA
ESET1EX1ET0EX0
D7
D6D5D4D3D2D1D0IE(A8H)INT0
T0INT1
T1
S總控位第五節(jié)EA---EnableAmount,中斷總允許位
EA=1,CPU開中斷;EA=0,關(guān)中斷,禁止所有中斷ES---EnableSerial,串行口中斷允許位
ES=1,允許串行口中斷;ES=0,禁止串行口中斷ET1---EnableTimer1,定時器T1溢出中斷允許位
ET1=1,允許T1中斷;ET1=0,禁止T1中斷EX1---EnableeXternal,外部中斷1中斷允許位
EX1=1,允許外部中斷1中斷;EX1=0,禁止ET0---EnableTimer0,定時器T0中斷允許位,類似ET1EX0---EnableeXternal0,外部中斷0允許位,類似EX1EA
ESET1EX1ET0EX0
D7
D6D5D4D3D2D1D0IE(A8H)第五節(jié)舉例例:設(shè)允許T0中斷和外部中斷0中斷,禁止其它中斷★用位操作指令編程如下:
SETB ET0 ;允許T0中斷
SETB EX0 ;允許INT0中斷
SETB EA ;開總開關(guān)★用字節(jié)操作指令編程如下:EA
ESET1EX1ET0EX010000011=83HMOV IE,#83H或MOV IE,#10000011B用字節(jié)操作指令或用位操作指令對IE進行初始化設(shè)置的方法
第五節(jié)2、中斷優(yōu)先級寄存器IP
PSPT1PX1PT0PX0
D7
D6D5D4D3D2D1D0IP(B8H)INT0
T0INT1
T1
S
IP為一8位特殊功能寄存器,地址為B8H每個中斷源均可設(shè)置為高優(yōu)先級或低優(yōu)先級:
設(shè)置為1時,該中斷源為高優(yōu)先級設(shè)置為0時,該中斷源為低優(yōu)先級InterruptPreference
★高優(yōu)先級中斷源可中斷正在執(zhí)行的低優(yōu)先級中斷★同級或低優(yōu)先級中斷不能中斷正在執(zhí)行的中斷管理原則第五節(jié)主程序轉(zhuǎn)移返回斷點繼續(xù)轉(zhuǎn)移高級中斷程序返回中斷嵌套★
51單片機有兩級中斷優(yōu)先級,可實現(xiàn)兩級中斷嵌套?!镏挥性趫?zhí)行低級中斷程序時,出現(xiàn)高級中斷申請,才會有兩級中斷嵌套?!袢绻瑫r出現(xiàn)多個同一優(yōu)先級中斷,CPU內(nèi)部硬件邏輯按自然優(yōu)先級排隊依此響應(yīng)。第五節(jié)自然優(yōu)先級
中斷源
同級自然優(yōu)先級外部中斷0最高級最低級定時器T0溢出中斷外部中斷1定時器T1溢出中斷串行口中斷第五節(jié)
TF1TR1TF0TR0
IE1
IT1
IE0
IT0
D7
D6D5D4D3D2D1D0TCON(88H)外部中斷觸發(fā)方式ITX---InterruptTrigger,外部中斷觸發(fā)方式控制位外部中斷有兩種觸發(fā)方式,通過設(shè)置IT0、IT1實現(xiàn)。設(shè)置IT0=0時——電平觸發(fā)方式,低電平有效。設(shè)置IT0=1時——為邊沿觸發(fā)方式,下降沿有效?!?/p>
IT0=1時,下降沿觸發(fā),CPU響應(yīng)中斷,硬件自動清IE0=0★IT0=0時,低電平觸發(fā),CPU響應(yīng)中斷不會自動清除IE0標志位,必須撤消INT0引腳上的低電平信號,即使INT0=1,才能使IE0=0。
相當(dāng)于有硬件連接的:
1IE0INT0INT0INT1第五節(jié)wyx
用匯編語言編寫程序,一般可分為以下幾個步驟1)分析題意,確定算法;2)設(shè)計程序流程圖;3)確定數(shù)據(jù)結(jié)構(gòu):合理地選擇和分配內(nèi)存單元以及工作寄存器4)編寫源程序。5)上機調(diào)試程序。第三節(jié)匯編語言及程序設(shè)計方法
MCS-51單片機匯編語言,包含兩類不同性質(zhì)的指令。(1)基本指令:即指令系統(tǒng)中的指令。它們都是機器能夠執(zhí)行的指令,每一條指令都有對應(yīng)的機器碼。(2)偽指令:匯編時用于控制匯編的指令。它們都是機器不執(zhí)行的指令,無機器碼匯編語言的語句格式匯編語言一般由四部分組成。
標號: 操作碼操作數(shù)1,操作數(shù)2 ;注釋
START: MOV A,30H ;A←(30H)可以為1項、2項、空一、程序設(shè)計語言
機器語言——用二進制碼編寫程序,目標程序匯編語言——用助記符編寫程序,低級語言高級語言——用接近人的自然語言編寫程序二、源程序的匯編
用匯編語言或高級語言編寫的程序叫源程序,計算機只能識別機器語言,所以必須經(jīng)過編譯/匯編程序?qū)⒃闯绦蚍g成目標程序(機器語言),這稱為匯編/編譯。目標程序源程序匯編第三節(jié)程序設(shè)計方法START:MOVA,#05H;把05H給A
標號操作碼操作數(shù)注釋1)標號
符號地址,字母開頭,由1~6個字母組成,以冒號結(jié)束2)操作碼
指令助記符,后跟空格作分隔符3)操作數(shù)
有多個操作數(shù)時,先目的操作數(shù),后源操作數(shù),用逗號分開4)注釋
說明解釋作用,以分號開頭包括4個域(或稱為字段),用分隔符隔開三、偽指令
●偽指令——●基本指令——機器能夠執(zhí)行的指令,每一條指令都有對應(yīng)的機器碼。偽指令是在匯編時起輔助說明作用的指示性指令,匯編后不生成機器碼1、ORG(origin)
指定程序存放的起始地址。
如:ORG0000H2、END(Endofassembly)匯編結(jié)束3、EQU(Equate)賦值,賦值后字符可作地址或立即數(shù)
如:DATAEQU40HMOVA,#DATAMOVR2,DATA當(dāng)立即數(shù)當(dāng)?shù)刂范x字節(jié),字節(jié)數(shù)據(jù)依次存放形成一字節(jié)數(shù)據(jù)表。
如:ORG2000HTAB:DB30H,31H,32H,33H,34H,35HDB36H,37H,38H,39H;0-9的ASCII碼表
標號TAB為符號地址=2000H
字節(jié)數(shù)據(jù)從2000H單元開始存放4、DB(Definebyte)
ROMTAB┇32H31H33H30H2000H2001H2002H2003H
┇定義字,字數(shù)據(jù)(16位)依次存放形成一字數(shù)據(jù)表
如:ORG1000HTABW:DW1234H,56H,10
標號TABW為符號地址=1000H
字數(shù)據(jù)從1000H單元開始存放ROMTABW┇00H34H56H12H1000H1001H1002H1003H
┇使用時按字數(shù)據(jù)取用,一般按字節(jié)取用無意義。5、DW(Defineword)
6、DS(Definestorage)
保留指定數(shù)量的存儲單元備用。
ORG3000HTABS:DS10
;保留連續(xù)10個單元
7、BIT
位定義:
INPUTBITP1.0OUTPUTBITP1.1一、程序設(shè)計步驟
四、順序程序設(shè)計1.分析問題2.確定算法3.設(shè)計程序流程圖4.編寫源程序5.調(diào)試程序6.反復(fù)修改二、程序的基本結(jié)構(gòu)
順序結(jié)構(gòu)——簡單程序分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)拆字程序例1將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,存入片內(nèi)31H和32H單元。解:
1、確定算法1)BCD碼有兩種存儲格式:2)ASCII碼:用8位二進制碼表示數(shù)字或字符34H30H31H32H
46H36H3)將30H單元的BCD碼取出,拆出低四位,加30H存入32H單元;拆出高四位,加30H存入31H單元。BCD碼ASCII碼解題思路●一個字節(jié)存
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度一次性技術(shù)咨詢服務(wù)采購合同12篇
- 2025年度速錄服務(wù)與智能語音助手融合合同3篇
- 2025年度企業(yè)安全生產(chǎn)責(zé)任協(xié)議書范本6篇
- 2025年度高空作業(yè)安全生產(chǎn)責(zé)任與保障協(xié)議3篇
- 2025年豬圈建造與新能源利用合同模板3篇
- 二零二四年專業(yè)債務(wù)清收公司委托合同3篇
- 2025版螺旋鋼管智能制造與自動化升級合同4篇
- 二零二五年度跨境電商園區(qū)場地租賃及物流服務(wù)合同2篇
- 2024租養(yǎng)雞場的合同范本
- 二零二四事業(yè)單位項目合作合同示范文本2篇
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(全真題庫)
- 護理安全用氧培訓(xùn)課件
- 《三國演義》中人物性格探析研究性課題報告
- 注冊電氣工程師公共基礎(chǔ)高數(shù)輔導(dǎo)課件
- 土方勞務(wù)分包合同中鐵十一局
- 乳腺導(dǎo)管原位癌
- 冷庫管道應(yīng)急預(yù)案
- 司法考試必背大全(涵蓋所有法律考點)
- 公共部分裝修工程 施工組織設(shè)計
- 《學(xué)習(xí)教育重要論述》考試復(fù)習(xí)題庫(共250余題)
- 裝飾裝修施工及擔(dān)保合同
評論
0/150
提交評論