單片機總知識點_第1頁
單片機總知識點_第2頁
單片機總知識點_第3頁
單片機總知識點_第4頁
單片機總知識點_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論