微機(jī)原理與接口技術(shù)復(fù)習(xí)材料_第1頁(yè)
微機(jī)原理與接口技術(shù)復(fù)習(xí)材料_第2頁(yè)
微機(jī)原理與接口技術(shù)復(fù)習(xí)材料_第3頁(yè)
微機(jī)原理與接口技術(shù)復(fù)習(xí)材料_第4頁(yè)
微機(jī)原理與接口技術(shù)復(fù)習(xí)材料_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【例3-1】

(A)=53H,(R0)=FCH,執(zhí)行指令

ADDA,R0結(jié)果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1注意:運(yùn)算中,由于位6和位7同時(shí)有進(jìn)位,所以標(biāo)志位OV=0。

【例3-2】

(A)=85H,(R0)=20H,(20H)=AFH,執(zhí)行指令:

ADDA,@R0

結(jié)果:(A)=34H,Cy=1,Ac=1,OV=1,P=1注意:由于位7有進(jìn)位,而位6無(wú)進(jìn)位,所以標(biāo)志位OV=1P.38

01010011+11111100

1110000

=01001111

Cy:1

10000101+10101111

0001111

=00110100

Cy:1【例3-3】

(A)=85H,(20H)=FFH,Cy=1,執(zhí)行指令:

ADDCA,20H結(jié)果為:(A)=85H,Cy=1,Ac=1,OV=0,P=1

【例3-4】

(A)=56H,(R5)=67H,把它們看作為兩個(gè)壓縮的BCD數(shù),進(jìn)行BCD數(shù)的加法。執(zhí)行指令:

ADDA,R5;先按二進(jìn)制加,得BDHDAA;緊接著進(jìn)行BCD調(diào)整,得23H且有向上進(jìn)位結(jié)果為:(A)=23H,Cy=1(維持ADD后的Ac=1,OV=1),P=1。

可見(jiàn),56+67=123,結(jié)果是正確的?!纠?-5】(A)=C9H,(R2)=54H,Cy=1,執(zhí)行指令SUBBA,R2

結(jié)果:(A)=74H,Cy=0,Ac=0,OV=1(位6向位7借位而位7無(wú) 向上借位),P=0

P.38~40

10000101+11111111

11111111

=10000101

Cy:1←原Cy

11001001

-01010100

-

1

=01110100

Cy:0←原Cy【例3-6】

(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,執(zhí)行指令

DEC A ;(A)-1→A=0EH DEC R7 ;(R7)-1→R7=18H DEC 30H ;(30H)-1→30H=FFH DEC @R1 ;((R1))-1→(R1)=FEH

結(jié)果為

(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1,不影響其他標(biāo)志

【例3-7】(A)=FBH,(B)=12H,執(zhí)行指令

DIV AB

結(jié)果為

(A)=0DH,(B)=11H,Cy=0,OV=0。P.41【例B3-7】編程序?qū)崿F(xiàn)R1、R2中的雙字節(jié)BCD數(shù)加上R3、R4中的雙字節(jié)BCD數(shù),三字節(jié)和值存放于R5、R6、R7中。

ORG11A0H11A0EAMOVA,R2;取被加數(shù)低字節(jié)11A12CADDA,R4;加上加數(shù)低字節(jié)11A2D4DAA

;十進(jìn)制調(diào)整11A3FFMOVR7,A;存和值的低字節(jié)11A4E9MOVA,R1;取被加數(shù)高字節(jié)11A53BADDCA,R3;加上加數(shù)高字節(jié)及低字節(jié)的進(jìn)位11A6D4DAA

;十進(jìn)制調(diào)整

11A7FEMOVR6,A;存和值的高字節(jié)11A87400MOVA,#00H;被加數(shù)與加數(shù)無(wú)第三字節(jié),設(shè)其為011AA3400ADDCA,#00H;加上高字節(jié)向第三字節(jié)的進(jìn)位

;無(wú)需進(jìn)行十進(jìn)制調(diào)整(其結(jié)果為00H或01H)

11ACFDMOVR5,A;存和值的第三字節(jié)11AD80FESJMP$;自循環(huán)暫停11AF【練習(xí)】如果是雙字節(jié)數(shù)相加結(jié)果只需雙字節(jié)呢?如果是雙字節(jié)二進(jìn)制數(shù)相加(不是BCD數(shù))呢?如果是雙字節(jié)二進(jìn)制數(shù)相減結(jié)果為雙字節(jié)二進(jìn)制數(shù)呢?如果是單字節(jié)二進(jìn)制數(shù)相加結(jié)果為雙字節(jié)呢?如果是(31H)、(30H)的雙字節(jié)數(shù)加上(41H)、(40H)中的雙字節(jié)數(shù),三字節(jié)結(jié)果存放于(52H)、(51H)、(50H)中,前者為高字節(jié),如何編程。移位指令操作示意圖

D7D0D7D7D7D0D0D0【例B3-11】8位二進(jìn)制碼算術(shù)左移(無(wú)符號(hào)數(shù)乘2):

CLRC ;Cy清0RLCA

;左移1位,低位補(bǔ)0,原最高位進(jìn)到Cy中

【例B3-12】8位二進(jìn)制碼邏輯右移(無(wú)符號(hào)數(shù)除2):

CLRC ;Cy清0RRCA

;右移1位,高位補(bǔ)0,原最低位移到Cy中

【思考】DPTR(DPH、DPL)中的16位二進(jìn)制碼算術(shù)左移(乘2)【思考】DPTR(DPH、DPL)中的16位二進(jìn)制碼邏輯右移(除2)請(qǐng)分析下列程序段執(zhí)行后有關(guān)單元的內(nèi)容。 MOVA,#68H MOVR0,#40H PUSHACC ADDA,#50H MOV@R0,A MOVA,R0 INCR0 MOV@R0,A POPB ORLA,40H答:A=,R0=,B=,(40H)=,(41H)=

;單字節(jié)BCD碼加法運(yùn)算0000 ORG0000H0000802E SJMPMAIN00020030 ORG0030H00307456MAIN:MOVA,#56H00322467 ADDA,#67H0034D4 DAA0035F530 MOV30H,A003780FE SJMP$ ;0039END【例】單字節(jié)BCD碼加法運(yùn)算(BCD.ASM)

目標(biāo)地址0030

減下一址

-0002

獲rel字節(jié)

002E

[+46]補(bǔ)PC→執(zhí)行相對(duì)轉(zhuǎn)移:PC←PC+rel

;∴rel=[目標(biāo)地址-下一指令址]低8位

目標(biāo)地址下一指令址+偏移量0030H←0002H+0046H+48+2例4-12(改)

如果xi均為單字節(jié)數(shù),并按i順序存放在51單片機(jī)內(nèi)部RAM從50H開(kāi)始的單元中,數(shù)據(jù)個(gè)數(shù)n放在R2中,求這批數(shù)據(jù)的和(雙字節(jié))放在R3、R4中,程序如下:(求數(shù)組和程序)ORG0000HADD1:MOV R2,#0AH;加法次數(shù)n送R2,n為具體的數(shù)據(jù)個(gè)數(shù),如10MOVR3,#0;部分和高字節(jié)單元清0MOVR4,#0;部分和低字節(jié)單元清0

MOVR0,#50H;R0指向第一個(gè)數(shù)LOOP:MOVA,R4;取部分和低字節(jié)原有的值 ADDA,@R0;加上當(dāng)前數(shù)低字節(jié)(本例原始數(shù)據(jù)只有低字節(jié)) MOVR4,A;回存新的部分和低字節(jié)結(jié)果

MOVA,R3 ;取部分和高字節(jié)原有的值

ADDCA,#00H;加上當(dāng)前數(shù)高字節(jié)(00H)及低字節(jié)的進(jìn)位 MOVR3,A;回存新的部分和高字節(jié)結(jié)果 INCR0

;R0指向下一個(gè)數(shù) DJNZR2,LOOP;未加完,轉(zhuǎn)回繼續(xù)進(jìn)行下一個(gè)數(shù)的累加

SJMP$

ENDP.68補(bǔ)充1:請(qǐng)編程序使40H、41H單元所存儲(chǔ)的二個(gè)數(shù)中的大數(shù)減去小數(shù),差值存58H單元(即求兩數(shù)差的絕對(duì)值)。補(bǔ)充2:有8個(gè)雙字節(jié)BCD數(shù)存放在片內(nèi)RAM的40H開(kāi)始的單元中,請(qǐng)編程求它們的和(雙字節(jié))放在60H、61H單元中。(設(shè)雙字節(jié)數(shù)的高字節(jié)存放在兩字節(jié)的高地址單元)

補(bǔ)充3:完成下列程序的人工匯編工作:

ORG2036H

D2

SETBP1.6

12

LOOP:LCALLDELY

B2

CPLP1.6

80

SJMPLOOP

7D

DELY:MOVR5,#0F5H

00

DELY2:NOP

00

NOP

DD

DJNZR5,DELY2

22

RET

20361ORG2036H2036D2962SETBP1.6203812203F3LOOP:LCALLDELY203BB2964CPLP1.6203D80F95SJMPLOOP203F7DF56DELY:MOVR5,#0F5H2041007DELY2:NOP2042008NOP2043DDFC9DJNZR5,DELY220452210RET外部中斷應(yīng)用例:【例B5-1】外部中斷INT0每中斷一次令P1.0求反。(INT0-1.ASM)實(shí)驗(yàn)板INT0按鍵電路【例B5-2】外部中斷INT0每中斷五次令P1.0求反一次

(INT0-2.ASM)(要緊接著DJNZ后重置)DJNZ4AH,LR

MOV4AH,#200DJNZ49H,LR

MOV49H,#100MOV4AH,#200MOV49H,#100軟件計(jì)數(shù)改為5×100×200=100000次【例B5-3】主程序運(yùn)用軟件延時(shí)控制P1.7秒閃的同時(shí)實(shí)現(xiàn)外部中斷INT0每中斷五次令P1.0求反一次

(INT0-3.ASM)【例B5-4】上例基礎(chǔ)上中斷服務(wù)子程序具體代碼后移的方法

(INT0-4.ASM)【例B5-2】INT0每中斷1次令50H單元內(nèi)容加1并且輸出到P1口

(INT0-5.ASM)MOVA,50HADDA,#1DAAMOV50H,A按BCD碼加1【例B4-3】將3AH單元中的壓縮BCD碼轉(zhuǎn)換為非壓縮BCD碼分別存放到30H、31H單元中去,其中高位(十位)存放在31H單元。

CZ1:MOVA,3AH;取壓縮BCD碼

ANLA,#0FH;保留低4位(個(gè)位)

MOV30H,A;送非壓縮BCD碼個(gè)位單元

MOVA,3AH;再取原壓縮BCD碼

ANLA,#0F0H;保留高4位(十位)

SWAPA;交換到低4位

MOV31H,A;送非壓縮BCD碼十位單元

編寫(xiě)非壓縮BCD碼轉(zhuǎn)換為壓縮BCD碼的程序編寫(xiě)壓縮BCD碼轉(zhuǎn)換為對(duì)應(yīng)的兩個(gè)ASCII碼的程序編寫(xiě)兩個(gè)0~9的ASCII碼轉(zhuǎn)換為對(duì)應(yīng)的壓縮BCD碼的程序【拆字拼字典型程序例】【拼字程序】【拼字程序】【拆字程序】【拆字程序】屏蔽高四位屏蔽低四位【例B4-3】將3AH單元中的壓縮BCD碼轉(zhuǎn)換為非壓縮BCD碼分別存放到30H、31H單元中去,其中高位(十位)存放在31H單元。

CZ:MOVR0,#3AH;拆字程序。R0指向壓縮BCD碼單元 MOVR1,#30H;R1指向非壓縮BCD碼第一單元CZ1:MOVA,@R0;取壓縮BCD碼

ANLA,#0FH;保留低4位(個(gè)位)

MOV@R1,A;送非壓縮BCD碼個(gè)位單元

INCR1;R1指向高位單元(十位)

MOVA,@R0;再取原壓縮BCD碼

ANLA,#0F0H;保留高4位(十位)

SWAPA;交換到低4位

MOV@R1,A;送非壓縮BCD碼十位單元

【拆字拼字典型程序例】【例B4-1】請(qǐng)編程序使48H、49H單元所存儲(chǔ)的二個(gè)數(shù)中較大者在前。

ORG0000HBIG:MOVA,48H;取甲 CLRC ;清Cy SUBBA,49H ;減去乙數(shù)

JNCLP1 ;無(wú)借位則甲≥乙,轉(zhuǎn)LP1 MOVA,48H;乙數(shù)大:兩數(shù)交換 MOV48,49H MOV49H,A

LP1:SJMP$

;自循環(huán)【練習(xí)】請(qǐng)編程序使48H、49H單元所存儲(chǔ)的二個(gè)數(shù)中較小者送28H單元。請(qǐng)編程序判斷若34H、35H單元所存儲(chǔ)的二個(gè)數(shù)相等則置F0位為0,否則置1。

CJNEA,49H,LP SJMPLP1;相等LP:JNCLP1;甲>乙例4-14

50ms延時(shí)程序。使用12MHz晶振時(shí),一個(gè)機(jī)器周期為TM=1μs,執(zhí)行一條DJNZ指令的時(shí)間為2μs。這時(shí),可用雙重循環(huán)方法寫(xiě)出延時(shí)50ms的程序:

DEL:MOVR7,#200

① DEL1:MOVR6,#125② DEL2:DJNZR6,DEL2

;估算:2*125*200*1μs≈50ms DJNZR7,DEL1④

RET

⑤以上計(jì)算沒(méi)有考慮到除“DJNZR6,DEL2”指令外的其它指令的執(zhí)行時(shí)間,如細(xì)致計(jì)算,它的延時(shí)時(shí)間為:

[1+(1+2*125+2)*200+2]×1μs=50603μs=50.603ms多重循環(huán)程序:最常見(jiàn)的多重循環(huán)是軟件延時(shí)程序。P.69①②③④⑤;實(shí)現(xiàn)P1口輸出驅(qū)動(dòng)8只LED巡回點(diǎn)亮的控制程序

ORG0000HMAIN:MOVSP,#6FH ;設(shè)定棧底指針

SETBC;Cy置'1' MOVP1,#0FEH;置控制碼初始值并輸出P1口,(P1.0='0',其他為'1')LOOP:LCALLD1S ;延時(shí)1S MOVA,P1 ;讀入P1口原控制碼

RLA ;調(diào)整控制碼(循環(huán)左移一位)

MOVP1,A ;輸出新控制碼到P1口

SJMPLOOP

D1S:MOVR7,#8① ;軟件延時(shí)1S子程序

D1S2:MOVR6,#200②D1S1:MOVR5,#200③D1S0:NOP④;估算3×200×200×8×1.085uS≈1.0416S DJNZR5,D1S0⑤ DJNZR6,D1S1⑥ DJNZR7,D1S2⑦ RET⑧ END<2+1+{1+[1+(1+2)×200+2]×200+2}×8+2>TM=964829TM=964829×12/11.0592=1,046,897uS

CALL

①②③④⑤⑥⑦⑧【計(jì)算程序運(yùn)行時(shí)間例】作業(yè)四:

P.83—1.2.補(bǔ)充5-1:編寫(xiě)完整的應(yīng)用程序,運(yùn)用外部中斷功能,實(shí)現(xiàn)從INT1引腳每輸入2個(gè)下降沿信號(hào)令3FH單元內(nèi)容按BCD碼加1并且輸出到P1口。

補(bǔ)充5-2:請(qǐng)列式準(zhǔn)確計(jì)算出運(yùn)行下列軟件延時(shí)子程序需要花費(fèi)的機(jī)器周期數(shù),設(shè)單片機(jī)時(shí)鐘頻率為11.0592MHZ,該子程序運(yùn)行時(shí)間是多少的?

DELAY:MOVR7,#3CH

NOPDL:MOVR6,#0F8H

NOP

DJNZR6,$

DECR7 DJNZR7,DL RET

【例8-1】

編寫(xiě)程序?qū)⑵鈹?shù)據(jù)存儲(chǔ)器中5000H~50FFH單元全部清零方法1:用DPTR作數(shù)據(jù)地址指針,同時(shí)使用字節(jié)計(jì)數(shù)器。(計(jì)數(shù)控制循環(huán))

MOVDPTR,#5000H ;設(shè)置數(shù)據(jù)塊指針的初值 MOVR7,#00H ;設(shè)置塊長(zhǎng)度計(jì)數(shù)器初值

CLRA

;A置寫(xiě)數(shù)據(jù)00H

LOOP:MOVX@DPTR,A ;把當(dāng)前單元清零 INCDPTR ;地址指針加1

DJNZR7,LOOP ;減1,若不為0則繼續(xù)清零HERE:SJMPHERE ;執(zhí)行完畢,原地踏步P.134如果改為對(duì)4FA0H~508AH單元寫(xiě)數(shù)據(jù)D6H,如上更改。4FA0HEBHMOVA,#0D6H例8-1

編寫(xiě)程序?qū)⑵鈹?shù)據(jù)存儲(chǔ)器中5000H~50FFH單元全部清零方法2:用DPTR作為數(shù)據(jù)區(qū)地址指針,但不使用字節(jié)計(jì)數(shù)器,而是比較特征地址。(條件控制循環(huán))

MOVDPTR,#5000H

;設(shè)置數(shù)據(jù)塊指針的初值

CLRA

;A置寫(xiě)數(shù)據(jù)00H

LOOP:MOVX@DPTR,A

;把當(dāng)前單元清零

INCDPTR

;地址指針加1

MOVR7,DPL

;取新地址值低字節(jié)

CJNER7,#0,LOOP

;與末地址+1的低字節(jié)比較,未完繼續(xù)HERE:SJMPHEREP.1344FA0HMOVA,#0D6H8BH如果改為對(duì)4FA0H~508AH單元寫(xiě)數(shù)據(jù)D6H,如上更改?!纠鼴4-2】

有一組數(shù)據(jù),存放在30H為首地址的內(nèi)存單元,數(shù)據(jù)長(zhǎng)度為12個(gè)。試將每一個(gè)數(shù)取出加1,依序存放到以50H為首地址的單元中。

ORG 0000H00000200

30 LJMP START00030030 ORG 0030H00307830 START:MOV R0,#30H;R0指向源數(shù)據(jù)區(qū)首地址00327950 MOV R1,#50H;R1指向目標(biāo)數(shù)據(jù)區(qū)首地址00347F0C MOV R7,#12;置循環(huán)計(jì)數(shù)初值120036E6 LOOP:MOV A,@R0;取當(dāng)前源數(shù)據(jù)003704 INC A;加10038F7 MOV @R1,A;送目標(biāo)數(shù)據(jù)區(qū)當(dāng)前單元003908 INC R0;R0指向下一個(gè)源數(shù)據(jù)003A09 INC R1;R1指向下一個(gè)目標(biāo)單元003BDFF9 DJNZ R7,LOOP;循環(huán)計(jì)數(shù)減1,未完繼續(xù)003D80FE SJMP $ END【數(shù)據(jù)塊傳送程序例】若題中說(shuō)明數(shù)據(jù)個(gè)數(shù)n存放在2FH單元中?若要求的是個(gè)數(shù)據(jù)取出按BCD碼加1后傳送?若要求的是數(shù)據(jù)原樣傳送?若要求的是依序傳送到58H之前的內(nèi)存單元中?若要求的是與片外數(shù)據(jù)存儲(chǔ)器之間進(jìn)行數(shù)據(jù)塊傳送?作業(yè)五:

P.140—4.6.7.8.11.13.(對(duì)每個(gè)答案仔細(xì)思考為什么)補(bǔ)充4-4:編寫(xiě)完整的應(yīng)用程序,將片外數(shù)據(jù)存儲(chǔ)器2A01H開(kāi)始的24個(gè)單字節(jié)數(shù)據(jù)依次傳送到片內(nèi)32H開(kāi)始的單元中。補(bǔ)充8-1:請(qǐng)列出詳細(xì)的地址分析過(guò)程,求出下列存儲(chǔ)器片選譯碼電路各輸出端所對(duì)應(yīng)的地址區(qū)域。

6.2.2方式1——16位計(jì)數(shù)方式圖6-5溢出中斷標(biāo)志+1計(jì)數(shù)溢出16位可預(yù)置加1計(jì)數(shù)器‘1’接通P.87-88P.86計(jì)數(shù)初值可計(jì)數(shù)可定時(shí)0000H65536次65536TM0001H65535次65535TM

············

FFFFH1次1TMTMTOSC6.4.1方式1應(yīng)用

【例6-1】

假設(shè)系統(tǒng)時(shí)鐘頻率采用6MHz,要在P1.0上輸出一個(gè)周期為2ms的方波,即500Hz方波,如圖6-13所示。圖6-13(12MHZ)(1uS)500×2uS12MHZ時(shí)最長(zhǎng)可定時(shí)65536uS11.0592MHZ時(shí)最長(zhǎng)可定時(shí)約71111uS每1mS令P1.0求反一次即可

ORG0000HRESET:AJMPMAIN;轉(zhuǎn)主程序

ORG000BH;T0的中斷入口 AJMPIT0P ;轉(zhuǎn)T0中斷處理程序IT0P

ORG0100HMAIN:MOVSP,#60H;設(shè)堆棧指針

MOVTMOD,#01H ;設(shè)置T0為定時(shí)方式1,00000001BPT0M0:MOVTL0,#0CH ;置T0計(jì)數(shù)初值FE0CH,500=01F4H

MOVTH0,#0FEH;0000H-FE0CH=500,500×2uS=1mSSETBET0 ;允許T0中斷

SETBEA;CPU開(kāi)中斷 SETBTR0 ;啟動(dòng)T0HERE:AJMPHERE ;自身跳轉(zhuǎn)ITOP:MOVTL0,#0CH;T0中斷服務(wù)子程序,T0重新置初值

MOVTH0,#0FEH;重置初值會(huì)導(dǎo)致有若干個(gè)TM誤差

CPLP1.0;P1.0的狀態(tài)取反

RETI ;中斷返回P.91【例6-1】若改TMOD賦值05H,則實(shí)現(xiàn):對(duì)T0引腳每計(jì)滿500個(gè)脈沖令P1.0求反一次若改計(jì)數(shù)初值為65536-250=65286=FF06H則實(shí)現(xiàn):P1.0輸出1000HZ方波[題意:Fosc=6MHz]6.2.3方式2

——8位計(jì)數(shù)自動(dòng)重裝工作方式圖6-6P.88計(jì)數(shù)初值可計(jì)數(shù)可定時(shí)00H256次256TM01H255次255TM

·········

FFH1次1TM【例B6-1】改例6-1為T0定時(shí)方式2實(shí)現(xiàn)P1.0輸出1000HZ方波(1)選擇工作方式

控制字為TMOD=00000010B=02H。(2)計(jì)算T0的計(jì)數(shù)初值

X=28-250=6=06H

因此,TL1的初值為06H,重裝初值寄存器TH1=06H(3)程序設(shè)計(jì)

借上例程序框架改造如下頁(yè):自動(dòng)重裝初值寄存器8位可預(yù)置加1計(jì)數(shù)器+1TMTOSC(12MHZ)(1uS)溢出中斷標(biāo)志計(jì)數(shù)溢出‘1’接通12MHZ時(shí)最長(zhǎng)可定時(shí)256uS11.0592MHZ時(shí)最長(zhǎng)可定時(shí)約277.7uS自動(dòng)【例B6-1】改例6-1為T0定時(shí)方式2實(shí)現(xiàn)P1.0輸出1000HZ方波 ORG0000HRESET:AJMPMAIN;轉(zhuǎn)主程序

ORG000BH;T0的中斷入口 AJMPIT0P ;轉(zhuǎn)T0中斷處理程序IT0P

ORG0100HMAIN:MOVSP,#60H;設(shè)堆棧指針

MOVTMOD,#02H ;設(shè)置T0為定時(shí)方式2,00000010BPT0M0:MOVTL0,#06H

;置T0計(jì)數(shù)初值06H,定時(shí)250×2=500uS

MOVTH0,#06H

;置自動(dòng)重裝初值06H

SETBET0 ;允許T0中斷

SETBEA;CPU開(kāi)中斷 SETBTR0 ;啟動(dòng)T0HERE:AJMPHERE ;自身跳轉(zhuǎn)ITOP: ;T0中斷服務(wù)子程序。CPLP1.0 ;P1.0的狀態(tài)取反

RETI ;中斷返回[題意:Fosc=6MHz]【例B6-2】擴(kuò)展例B6-1的定時(shí)時(shí)間為P1.0輸出1HZ方波

ORG0000HRESET:AJMPMAIN;轉(zhuǎn)主程序

ORG000BH;T0的中斷入口 AJMPIT0P ;轉(zhuǎn)T0中斷處理程序IT0P

ORG0100HMAIN:MOVSP,#60H;設(shè)堆棧指針

MOVTMOD,#02H ;設(shè)置T0為定時(shí)方式2,00000010BPT0M0:MOVTL0,#06H

;置T0計(jì)數(shù)初值06H,定時(shí)250×2=500uS

MOVTH0,#06H

;置自動(dòng)重裝初值06H

SETBET0 ;允許T0中斷

SETBEA;CPU開(kāi)中斷 SETBTR0 ;啟動(dòng)T0

MOV58H,#10 MOV59H,#100HERE:AJMPHERE ITOP:DJNZ58H,LR;遞減計(jì)數(shù)

MOV58H,#10

DJNZ59H,LR

MOV59H,#100

CPLP1.0 ;P1.0的狀態(tài)取反

LR:RETI ;中斷返回[Fosc=6MHz]MOV58H,#00HMOV59H,#00HINC58H;二進(jìn)制加1MOVA,58HCJNEA,#0AH,LRMOV58H,#00HMOVA,59HADDA,#01H;BCD加1DAAMOV59H,ACJNEA,#00H,LRMOV59H,#00H以遞增計(jì)數(shù)方式實(shí)現(xiàn)中斷次數(shù)的計(jì)數(shù)擴(kuò)展【例6-4】

利用T1的方式2對(duì)外部信號(hào)計(jì)數(shù),要求每計(jì)滿100個(gè)數(shù),將P1.0取反。(本例是方式2計(jì)數(shù)模式的應(yīng)用)(1)選擇工作方式

T1計(jì)數(shù)方式2的控制字為TMOD=60H。(2)計(jì)算T1的初值

X=28-100=156=9CH,∴TH1=TL1=9CH(3)程序設(shè)計(jì)

ORG0000H LJMPMAIN

ORG001BH ;T1中斷服務(wù)程序入口 CPLP1.0 ;P1.0位取反 RETI

ORG0100HMAIN:MOVTMOD,#60H ;設(shè)T1為計(jì)數(shù)方式2,01100000B MOVTL1,#9CH;T0置初值 MOVTH1,#9CH

SETBET1 ;允許T1中斷

SETBEA;CPU開(kāi)中斷

SETBTR1 ;啟動(dòng)T1HERE:AJMPHEREP.944.3.4數(shù)據(jù)極值查找程序設(shè)計(jì)在指定的無(wú)序數(shù)據(jù)區(qū)中找出最大值(或最小值)。逐個(gè)進(jìn)行數(shù)值大小的比較,記存下暫時(shí)較大(小)的數(shù),最終從這批數(shù)據(jù)中找出最大值(或最小值)并存于某一單元中。不帶符號(hào)數(shù)比較大小根據(jù)相減后Cy標(biāo)志位判定補(bǔ)碼表示的帶符號(hào)數(shù)比較大小根據(jù)相減后差的符號(hào)位及OV標(biāo)志位判定

P.62A-B,Cy=0(JNC)則A≥BCy=1(JC)則A<BA-B→E,Es=0(正)且OV=0或Es=1(負(fù))且OV=1則A≥BEs=1(負(fù))且OV=0或Es=0(正)且OV=1則A<B0100 ORG 0100H0100902041 MOV DPTR,#2041H 0103E0 MOVX A,@DPTR 0104FF MOV R7,A ;取數(shù)據(jù)個(gè)數(shù)為循環(huán)次數(shù)0105A3 INC DPTR ;DPTR指向第一個(gè)數(shù)據(jù)0106753000 MOV 30H,#00H ;向暫存單元預(yù)置極小值0109E0 L1:MOVX A,@DPIR ;取當(dāng)前數(shù)據(jù)010AB53002 CJNE A,30H,L2 ;比較,不等則進(jìn)一步判大小010D8004 SJMP L3 ;相等則跳轉(zhuǎn)(本例可略去)010F4002 L2:JC L3 ;Cy=1說(shuō)明當(dāng)前數(shù)小則跳轉(zhuǎn)0111F530 MOV 30H,A;Cy=0:當(dāng)前數(shù)大則取代原暫存單元值0113A3 L3:INC DPTR ;DPTR指向下一個(gè)數(shù)據(jù)0114DFF3 DJNZR7,L1 ;未完繼續(xù)比較0116902040 MOV DPTR,#2040H0119E530 MOV

A,30H011BF0 MOVX @DPTR,A

;存最大值結(jié)果011C80FE SJMP $010E ENDP.70—9習(xí)題分析(改求最小數(shù)存6AH單元)【例B4-4】以2042H為首地址的存儲(chǔ)單元中,連續(xù)存放一組單字節(jié)無(wú)符號(hào)數(shù),數(shù)據(jù)個(gè)數(shù)存于2041H單元,從中找出最大數(shù)并存于2040H。循環(huán)次數(shù)地址指針→

數(shù)據(jù)初值→循環(huán)體循環(huán)控制→結(jié)果處理為下循環(huán)準(zhǔn)備→找最小值?對(duì)片內(nèi)單元數(shù)據(jù)?【求極值典型程序例】循環(huán)準(zhǔn)備相等的處理小于→大于→4.3.3關(guān)鍵字查找程序設(shè)計(jì)順序檢索和對(duì)分檢索1.順序檢索

從第1項(xiàng)開(kāi)始逐項(xiàng)順序查找,判斷所取數(shù)據(jù)是否與關(guān)鍵字相等。

找到與關(guān)鍵字相等的數(shù)據(jù)則進(jìn)行……處理,繼續(xù)或結(jié)束檢索;全部數(shù)據(jù)掃描完從未發(fā)現(xiàn)與關(guān)鍵字相等的數(shù)據(jù)則進(jìn)行……處理。P.61【例B4-5】從30H開(kāi)始的20個(gè)字節(jié)的無(wú)序表中查找一個(gè)關(guān)鍵字如4AH,若有則將其所在單元地址存R3,若不存在則R3置0。

ORG 0200H JS:MOV R0,#30H ;R0指向數(shù)據(jù)區(qū)首地址 MOV R5,#14H ;取數(shù)據(jù)長(zhǎng)度于R5作為循環(huán)次數(shù) MOV 2FH,#4AH ;關(guān)鍵字4AH存至2FH單元LOOP:MOV A,@R0 ;取當(dāng)前數(shù)據(jù) CJNE A,2FH,LP1 ;與關(guān)鍵字比較,不相等轉(zhuǎn)查下一個(gè)

MOV A,R0 ;找到關(guān)鍵字:取該數(shù)據(jù)所在地址 MOV R3,A ;存到R3中 SJMP LP2 ;結(jié)束查找LP1:INC R0 ;R0指向新一個(gè)數(shù)據(jù) DJNZ R5,LOOP ;未找完,繼續(xù)

MOV R3,#00H ;全部查找結(jié)束:說(shuō)明不存在,R3置00HLP2:SJMP $

P.70—7、8習(xí)題分析這是初次找到的關(guān)鍵字?jǐn)?shù)據(jù)的地址若查找的關(guān)鍵字是字符‘a(chǎn)’?若是數(shù)50?若是BCD數(shù)50?若找到關(guān)鍵字?jǐn)?shù)據(jù)則51H單元存01H,若不存在則51H單元存00H?若要求統(tǒng)計(jì)關(guān)鍵字?jǐn)?shù)據(jù)的個(gè)數(shù)值存放到54H單元,若都不存在54H單元存00H?【數(shù)據(jù)檢索典型程序例】相等(x+TAB)(x+TAB-NEXTPC+PC)=(x+TAB)【數(shù)據(jù)表可在64K內(nèi)任一處】【省用DPTR,數(shù)據(jù)表應(yīng)隨后】作業(yè)七

編寫(xiě)程序請(qǐng)加詳細(xì)注釋P.70-8.試編寫(xiě)程序,查找在內(nèi)部RAM的20H~40H單元中出現(xiàn)“00H”這一數(shù)據(jù)的次數(shù),并將查找到的結(jié)果存入41H單元。

P.70-9改在內(nèi)部RAM的21H單元開(kāi)始存有一組單字節(jié)無(wú)符號(hào)數(shù),數(shù)據(jù)長(zhǎng)度為20H,編寫(xiě)程序,要求找出最小數(shù)存入6AH單元?!狙a(bǔ)充4-5】編寫(xiě)程序?qū)?0H、41H單元中的兩位十進(jìn)制數(shù)的ASCII碼轉(zhuǎn)換為對(duì)應(yīng)的壓縮BCD碼存放到4AH單元中去,其中高位(十位數(shù))的ASCII碼存放在40H單元。

圖11-4【例B11-1】分析如下8位D/A驅(qū)動(dòng)程序,請(qǐng)繪出D/A輸出波形,標(biāo)明幅度參數(shù),列式精確計(jì)算輸出波形的周期。設(shè)晶體振蕩器的頻率為6MHz。

機(jī)器周期數(shù)START:MOVDPTR,#0DFFFH(2)

LP0:MOVA,#2AH(1)

LP1:ADDA,#01H(1) MOVX@DPTR,A(2)

CJNEA,#0C8H,LP1(2)

SJMPLP0(2)

計(jì)算所產(chǎn)生的鋸齒波周期?(6MHz)T=[1+(1+2+2)×(C8H-2BH+1)+2]×2uS=[5×158+3]×2uS=793×2uS=1586uSTC8H2BH作業(yè)八:

編寫(xiě)程序請(qǐng)加注釋【補(bǔ)充11-1】分析如下8位D/A驅(qū)動(dòng)程序,請(qǐng)繪出D/A輸出波形,標(biāo)明幅度參數(shù),列式精確計(jì)算輸出波形的周期。(設(shè)fOSC=6MHZ)

START:MOVDPTR,#7FFFH

LP0:MOVA,#0C0H

LP1:DECA MOVX@DPTR,A

CJNEA,#17H,LP1

SJMPLP0

圖11-17MOV A,00H;A值與本次操作無(wú)關(guān)MOV DPTR,#07FF8HMOVX@DPTR,A;寫(xiě)操作實(shí)現(xiàn)選擇IN0(~IN7)且啟動(dòng)轉(zhuǎn)換選擇通道0(~通道7)且啟動(dòng)轉(zhuǎn)換:;置啟動(dòng)相應(yīng)輸入通道的地址值7FF8H(~7FFFH)AT89C51與ADC0809的接口A/D結(jié)束后讀取結(jié)果數(shù)據(jù):

MOVXA,@DPTR①③②0

10~10

10無(wú)關(guān)!③③(用地址總線低3位選擇通道)③①P.210設(shè)fosc=6MHZ≈1MHZ≈500kHZ128uS一次地址分析:0111111111111000--7FF8H選IN0且啟動(dòng)·················

011111111111

1111—7FFFH選IN7且啟動(dòng)MOVX寫(xiě):①DPTR送A15~A0②A送D7~D0③發(fā)WR“”

【例】對(duì)8路模擬信號(hào)輪流采樣一次,采用軟件延時(shí)的方式,并依次把結(jié)果轉(zhuǎn)儲(chǔ)到數(shù)據(jù)存儲(chǔ)區(qū)40H起的單元。MAIN:MOVR1,#40H;置數(shù)據(jù)區(qū)首地址MOVR7,#08H;置轉(zhuǎn)換的通道個(gè)數(shù)

MOVDPTR,#7FF8H;端口地址初值,指向模擬量輸入通道IN0

LOOP:MOVX@DPTR,A;啟動(dòng)當(dāng)前通道A/D轉(zhuǎn)換(A的值無(wú)關(guān)) MOVR6,#0FH;軟件延時(shí),等待轉(zhuǎn)換結(jié)束(64×2=128uS)DELAY:NOP NOP NOP DJNZ R6,DELAY;延時(shí)約5×15×2uS=150uS MOVX A,@DPTR ;讀取轉(zhuǎn)換結(jié)果 MOV@R1,A ;存儲(chǔ)轉(zhuǎn)換結(jié)果 INCDPTR ;指向下一個(gè)模擬量通道(地址低三位決定通道i) INCR1 ;修改數(shù)據(jù)區(qū)指針 DJNZ R7,LOOP ;8個(gè)通道全采樣完否?未完則繼續(xù) ……P.211設(shè)fosc=6MHZ選擇通道0(~通道7)且啟動(dòng)轉(zhuǎn)換:MOV A,00HMOV DPTR,#07FFFHMOVX@DPTR,A

;寫(xiě)操作實(shí)現(xiàn)選擇IN0(~IN7)且啟動(dòng)轉(zhuǎn)換

AT89C51與ADC0809的接口A/D結(jié)束后讀取結(jié)果數(shù)據(jù):

MOVX

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論