微控制器原理部分課後習題解

2022-12-31 06:48:02 字數 5025 閱讀 9698

3.16 8051晶元需要外擴4kb程式儲存器,要求位址範圍為1000~1fffh,以便和內部程式儲存器位址相銜接。所用晶元除了位址線和資料線外,只有乙個片選控制端/cs,畫出擴充套件系統的連線圖。

解:3.17 在圖3.

13中,若因某種原因,p2.2、p2.1、p2.

0誤接為p2.5、p2.4、p2.

3,這時所接的eprom定址區是如何分布的?

解: 誤接後,a10,a9,a8則分別與p2.5,p2.4,p2.3相接,

p2.7 p2.6 p2.5 p2.4 p2.3 p2.2 p2.1 p2.0 p0.7~p0.0

0 0 000000000—11111111

0 0 100000000—11111111

0 1 000000000—11111111

0 1 100000000—11111111

1 0 000000000—11111111

1 0 100000000—11111111

1 1 000000000—11111111

1 1 100000000—11111111

所以位址分布為:

0000h~00ffh, 0800h~08ffh, 1000h~10ffh, 1800h~18ffh, 2000h~20ffh,

2800h~28ffh, 3000h~30ffh, 3800h~38ffh

4.8 編寫程式,進行兩個16位數的減法:6f5dh~13b4h,結果存至內部ram的30h和31h單元。30h單元存差的低8位。

解:mov a, #5dh

clr c

subb a, #0b4h

mov 30h, a

mov a, #6fh

subb a, #13h

mov 31h, a

sjmp $

4.9 編寫程式,若累加器內容分別滿足一下條件,則程式轉至label儲存單元。

(1)a≥10 (2) a>10 (3) a≤10 (4) a<10

解:(1clr c

cjne a, #10, loop

sjmp label

loop: jnc label

sjmp $

(2cjne a, #10, loop

sjmp $

loop: jnc label

sjmp $

(3cjne a, #10, loop

sjmp label

loop: jc label

sjmp $

(4cjne a, #10, loop

sjmp $

loop: jc label

sjmp $

4.10 已知sp=25h,pc=2345h,(24h)=12h,(25h)=34h,(26h)=56h,問在這種條件下執行ret指令以後,sp,pc分別是多少?

解: 在執行ret指令後說明是乙個子函式執行結束,則進行pop操作,於是sp在執行ret指令後變為23h,因為(25h)=34h, (24h)=12h,所以pc=3412h,因為在進入堆疊的時候是先壓入低8位,然後進入堆疊的是高8位,出堆疊的時候正好相反。所以最後結果是:

sp=23h,pc=3412h

4.11 若sp=25h,pc=2345h,標號label所在的位址為3456h,問首席執行官呼叫指令 lcall label 之後,堆疊指標和堆疊內容發生什麼變化?pc是多少?

解: 在進行長呼叫指令 lcall label,則要進行堆疊保護,而lcall指令是三位元組的指令,所以pc在進入堆疊之前變為2348h,在執行完長指令lcall之後,pc進入子函式程式,則進入之前的位址要首先保護起來,所以sp=27h,堆疊的內容(26h)=48h,(27h)=23h,此時pc將要指向子函式label的入口位址,即pc=3456h。

4.12 在4.11中的lcall指令能否直接換成「acall label」指令?為什麼?

解:不能,因為acall是短呼叫指令,子程式呼叫的範圍為圍繞呼叫指令的2kb內,即它們的位址高5位應該是相同的。或者說,在執行acall指令時,子程式入口位址的高5位是不能任意定的,只能由acall指令所在的位置來確定,例如4.

11在呼叫子函式之前的位址為2345h,即高5位是00100,所以acall呼叫的位址範圍為:2000h——27ffh,而label所在的位址為3456h已經超出呼叫範圍,所以不能替換。

4.13 試編寫程式,查詢在內部ram的20h~50h單元中是否有0aah這一資料,若有這一資料,則將51h單元置為01h,若未找到,則使51h單元置0。

解:參考程式如下:

m0v r0,#31h

m0v r1,#20h

loop: mov a,@r1

clr c

cjne a,#0aah,loop1

sjmp l00p2

loop1: inc r1

djnz r0,loop

m0v a,#00h

sjmp loop3

loop2: mov a,#01h

loop3: mov 51h,a

sjmp $

4.14 試編寫程式,查詢在內部ram的20h~50h單元內部出現00h的次數,並將查詢的結果存入51h單元。

解:參考程式如下:

mov r0,#31h

mov r1,#20h

mov r2,#00h

loop: mov a,@r1

cjne a,#00h,loop1

inc r2

loop1: inc r1

djnz r0,loop

m0v 51h,r2

sjmp $

5.6 從20h單元開始存放一組帶符號數,其數目已經存在1fh單元。要求統計出其中大於0,等於0和小於0的數的個數,並把統計結果分別存入one,two,three三個單元。

解:參考程式如下:

one data #1ch

two data #1dh

three data #1eh

mov one,#00h

mov two,#00h

mov three,#00h

mov r0,#20h

mov r1,1fh

mov a,r1判斷是否存有數*/

jz finishi

loop: mov a,@r0

clr c

cjne a,#00h,loop1

inc two

sjmp loop3

loop1: jnc loop2 /*a>0時*/

inc three /*a<0時*/

sjmp loop3

loop2: inc one

loop3: djnz r1,loop

finishi: sjmp $

5.14 外部資料ram從2000h開始有100個資料,現要將它們移到從2030h開始的區域,試編寫有關程式。

解:參考程式如下(1):

mov dptr,#2000h

mov a,#63h

mov r0,#100

add a,dpl

mov dpl,a

loop: movx a,@dptr /*取出最後乙個數*/

push dpl

push a

mov a,dpl

add a,#30h

mov dpl,a

pop a

movx @dptr,a

pop dpl

dec dpl

djnz r0,loop

sjmp $

參考程式如下(2):

mov r0,#100

mov dptr,#2063h

loop: movx a,@dptr

mov r1,a

mov a,dpl

add a,#30h

mov dpl,a

mov a,r1

movx @dptr,a

mov a,dpl

subb a,#30h

mov dpl,a

dec dpl

djnz r0,loop

sjmp $

5.15 從內部資料ram的block開始有乙個無符號數資料塊,長度存於len單元,求出資料塊中的最小元素,並將其存入mini單元。要求使用比較條件轉移指令cjne。

解: 參考程式如下:

len data 20h

mini data 21h

block data 22h

mov r0,len

mov r1,#block

mov a,r0檢查資料長度是否0*/

jz finish

mov mini,@r1

loop: mov a,@r1

inc r1

clr c

cjne a,mini,loop1

sjmp loop2

loop1: jnc,loop2

mov mini,a

loop2: djnz r0,loop

finish: sjmp $

5.20 若累加器a中存放的是乙個十六進製制數,則將它轉換為相應的ascii碼,並將結果存入20h ram單元,若a中存放的不是十六進製制數,則將20h單元置為ffh,試編寫有關程式。

微控制器課後習題

一 填空 1.除了微控制器這一名稱外,微控制器還可稱為 微控制器 和 嵌入式控制器 2.微控制器與普通微型計算機的不同之處在於其將 cpu 儲存器 i o口 三部分,通過內部 匯流排 連線在一起,整合於一塊晶元上3.外部中斷1的中斷入口位址為 0013h 定時器1的中斷入口位址為 001bh 4.若...

微控制器原理

第一章緒論 計算機中的資訊包括 指令 資料,他們是以一定的編碼形式表示 指令 計算機中執行某種操作的命令 指令格式 指令的編碼規則,包含操作碼 運算元 多運算元指令格式 操作碼第一運算元第二運算元 減法被減數減數 指令型別 1 資料傳輸類2 算術類,如 加 減 乘 除 3 邏輯指令,如 邏輯與 或 ...

微控制器習題

七 一 填空題 每空1分,共20分 1 完成不同數制間的轉換 10100101 210 11000011 216 01010111 bcd10 58 10bcd 符號5的ascii碼是 2 mcs 51微控制器的乙個機器週期包含個狀態週期,每個狀態週期又分為 2 拍,即乙個機器週期等於個振盪週期,當...