好文档 - 专业文书写作范文服务资料分享网站

单片机第4章习题参考答案.docx

天下 分享 时间: 加入收藏 我要投稿 点赞

第4章部分习题答案

作业:7、8、9、10、11、15、17、19、20

4.7设内部RAM 20H单元有两个非零的BCD数, 编写求两个BCD数的积并把积送入21H单元 的程序。

ORG

1000H

MOV A, 20H

MOV B,

A ;

保存

SWAP A ANL A, #0FH ;取高4位 ANL B, #0FH

;取低4位

MUL AB

MOV B, #0AH

DIV AB

;转换成BCD码的形式

SWAP A

ORL A,

B

MOV 21H, A

SJMP

$

END

4.8已知从内部RAM BLOCK单元开始存放有一 组带

符号数,数的个数存放在LEN单元。编 写可以统计正数和负数个数并分别存入 NUM和

NUM+1单元的程序。

org lOOOh num data 30h len

data 20h

block

data

40h

mov rO, #block mov num, #00h ;保存正数个数 mov b, #00h

;保存负数个数

loop: mov a, @r0

inc rO jb acc.7, neg inc num sjmp next

neg:

inc b next: djnz len, loop

mov num+1, b sjmp $ end

4.9设X为一无符号数,存放在内部RAM的VAX 单

元,Y存放在FUNC单元。编写满足如下 关系的程序:

X X>50

Y =(5X 50> X > 20

2X X<20

org 2000h

vax data 20h func data 30h

mov

a, vax cjne

a, # 32h, compl compl: jc nextl mov func, a sjmp

done

nextl: cjne a, #14h、comp2 comp2: jc

next2 mov

b, #05h mul ab

mov func, a sjmp

done next2: clr

c

rlc a

mov func, a

done: sjmp $

end

4.10在例4.6的128分支程序中,若用LJMP指 令代替

AJMP指令,以便分支程序可以放在 64KB地址

范围的任何位置。修改原程序,修 改后的程序最多可以实现多少分支。

LJMP是三字节指令,最大分支数N应 满

足条件:NX3 < 256 (即不超过A的存储 范围),所以N = 85。 修改后的程序:

ORG 2100H MOV A, R3 RL A

ADD A, R3

MOV

DPTR, #BRTAB

JMP @A + DPTR 1

1

BRTAB: 1 LJMP ROUTOO

LJMP

ROUTOl

LJMP ROUT02

1

1

LJMP 1 ROUT85

ROUTOO:

1 1

1 1

ROUT85:

1

1 1

1

END 4.11从夕卜部RAM的SOURCE (二进制8位)开 始

有一数据块,该数据块以$字符结尾,编 写程序,把它们传送到以内部RAM的DIST 为起始地址的区域($字符也要传送)

org 2000h source data lOh dist

data 20h

mov p2, #00h

mov rO, #source

mov

rl, #dist

next:

movx a, @r0 inc rO

mov @rl,a

inc rl

cjne a, #24h, next done:

sjmp $

end

4.12 将习题4.11中的Source改为16位的,则 将程序

中的rO改成dptr即可。

4.13在外部RAM的低256地址单元区,有起始 地址

为SOUCE且长度在LEN单元的数据块。 编写能对它们进行奇偶校验的程序。凡满足 奇校验(奇数个1)的数据均送到内部RAM 起始地址为D1ST的存储区。

len

org 2000h data 10h

source data 20h dist

data 50h mov rO, # source mov rl, #dist mov

r2, #len mov

p2,

#00h

loop:

movx a, @r0 inc

rO jnb

psw.O, next mov

@rl, a inc

rl next: djnz

r2, loop sjmp $

4.14将习题4.13中的Source改为16位的,则将 原来

程序屮的rO改成dptr即可。

4.15外部RAM从2000H到2100H有一数据块, 编写

程序将它们传送到从3000H到3100H区 域。

ORG 0H

MOV DPTR, #2000H

NEXT:

MOVX A, @DPTR ORL

DPH, #10H

;将DPH从20H变成3()H

MOVX @DPTR, A

ANL

DPH, #0EFH

;将DPH从30H变成20H INC

DPTR

MOV A, DPH

CJNE

A, #21H, NEXT

MOVX A, @DPTR MOV DPH, #31H

MOVX @DPTR, A

;传送2100H单元屮的内容到3100H

SJMP $ END

4.16 片内RAM中有一数据块起始地址为 FIRST+1,长

度存放在FIRST屮且不为0,统 讣数据块中正偶数和负奇数的个数,分别存 放在PAPE单元和

NAOE单元。

ORG

OH

PAPE DATA 、20H NAOE DATA 21H FIRST

DATA

30H

MOV

PAPE, #()0H

MOV

NAOE, #00H

MOV RO, #FIRST

INC RO ;数据块的起始地址 LOOP:

MOV A, @R0 INC RO

JB

ACC.7, NEXT ;负数

JB ACC.O, PP

■ 9

如果是正奇数,则収下一个数

INC

PAPE

SJMP PP

NEXT:

JNB ACC.O, PP

9 如果是负偶数,则収下一个数 INC NAOE PP:

DJNZ FIRST, LOOP SJMP $

END

4.17从内部RAM的BLOCK为起始地址的100 个无符

号数中找出最小值并把它送入MIN单 兀O

ORG OH

BLOCK DATA 20H MIN

DATA 10H

MOV RO, #BLOCK

MOV R2, #64H MOV MIN, #0FFH LOOP:

MOV

A, @R0

CJNEA, MIN, NEXT NEXT:

JNC NEXT1

MOV MIN, A

NEXT1:

INC RO

DJNZ R2, LOOP SJMP $ END

4.18内部RAM区,6组无符号4字节被加数和 加数分

别存放在以FIRST和SECOND为起始 地址的区域(低字节在前,高字节在后),编程 求和(设和也为4字节)并把和存于以SUM 开始的区域。

ORG OH

FIRST DATA 20H SECON D DAT. A 40H

SUM

DAT

L

A

60H

MOV

RO, #FIRST

MOV R1, # SECOND MOV

R2, #06H

LOOP:

MOV R3, #04H

CLR C

LOOP1: MOV

A, @R0

ADDC

A, @R1

MOV

@R0, A

;将和存放在以FIRST开始的区域

INC RO

INC

RI

DJNZ R3, LOOP1 DJNZ

R2, LOOP

MOV RO, #FIRST MOV Rl, #SUM

MOV

R2, #24 LOOP2 :MOV

A, @R0

MOV @R1, A INC RO

INC

Rl

DJNZ

R2, LOOP2

SJMP $

END

4.19

内部RAM

P,数据块以BLOCK为起始

地址, 块长放在LEN单元。用查表指令编写 程序, 先检查它们是否是十六进制中的A-F,

若是,

则把它们变成ASCII码,若不是,则 把它们变为OOHo

ORG OH

LEN DATA 10H BLOCK DATA 20H

MOV RO, # BLOCK

MOV DPTR, # ASCTAB

LOOP:

MOV A, @R0

CJNE A, #0AH, NE1 NE1:

JNC NE2

;若大于等于A,则去与F比较

SJMP

CHZERO

;若小于A,则变成0

NE2:

CJNE A, #0FH, NE3 ;与 F 比较

SJMP

CHASC

? 若等于F,则转成ASCII码

NE3:

JC CHASC

;

若小十尺则转成ASCII巾马

CHZERC): CLR

A ;若大于F,则变成0 SJMP

NEXT

CHASC:

ADD

A, #07H ;查表求ASCII码

CLR C SUBB A, # OAH MOVC

A, @A+PC NEXT: MOV @R0,

A

INC

R0

DJNZ LEN, LOOP

SJMP $

ASCTAB: DB

A, B

C, D, E, F

END 4.20 在片内RAM的20H单元中有一个数,其值 范围

为0-100,要求利用查表法求此值的平方 值并把结果存入片外RAM的20H (低字节) 和 21H。

ORG 00H MOV P2, #00H MOV RO, #21H

LOOP:

MOV A, 20H CLR C RLC A MOV B, A

MOV DPTR, # DTATAB MOVC A, @A+DPTR MOVX @R0, A DEC RO MOV A, B

INC A

MOVC A, @A+DPTR MOVX @R0, A

SJMP$

DTATAB: DW 0, 1,4, 9, 16, 25, 36, 49

DW 64,81, 100, 11*11, 12*12 DW 13*13, 14*14, 15*15, 16*16

DW 100*100 END

4.21内部RAM中,从BLOCK开始的存储区有

10个单字节十进制数(每字节有两个BCD数),编程求BCD数之和(和为3位BCD数),并 把它们存于SUM和SUM+1单元(低字节在

SUM单元)。

ORG OOH

BLOCK DATA 20H SUM DATA 10H

MOV RO, # BLOCK MOV R2, #0AH MOV A, #O0H MOV Rl,

#SUM

INC

R1

;SUM+1单元屮存放累加和的尚位

MOV @Rl,#00H ADD A, @R0

DA A INC

R0 JNC NEXT

INC

@R1 ;将进位送到累加和的高位

NEXT:

DJNZ R2, LOOPMOV SUM, A SJMP $ END

4.22将例4.21中,改为10个双字节十进制求和

(和为4位BCD数),结果仍送到SUM开始的连续单元(低字节先存)

ORG OOH

BLOCK DATA 20H SUM DATA 10H

MOV RO, #BLOCK

MOV R2, #0AH MOV SUM, #00H

MOV

SUM+1, #00H

MOV

B, #00H

;存放累加和的最高位

LOOP: MOV

A, SUM

ADD A, @R() DA A

MOV SUM, A INC RO

MOV A, SUM+1

ADDC A, @R0 DA A

MOV

SUM+1, A

INC RO

JNC NEXT

INC B ;将进位送到累加和的髙位 NEXT:

DJNZ R2, LOOP MOV SUM+2, B SJMP $ END

4.23 己知MDA和MDB内分别存有两个小 于10的整数,用查表子程序实现c = a*a +2ab

+ b*b,并把和存于MDC和MDC+1单元(MDC

中放低字节)

ORG OOH MDA DATA 10H MDB DATA 20H MDC

DATA

30H

MOV MDC+1, #00H MOV

A, MDA

ACALL SQR MOV MDC, A

MOV A, MDA MOV B, MDB

MUL

AB

RL A ;因为 2ab< 255,送到 A

ADD A, MDC MOV MDC, A JNC NEXT INC MDC+1

NEXT:

MOV A, MDB ACALL SQR ADD A, MDC MOV MDC, A JNC NEXT1

INC MDC+1

NEXT1 :SJMP$

SQR:

ADD A, #01H MOVC A, @A+PC RET

SQRTAB: DB 0, 1,4,9, 16

DB 25,36, 49, 64,81

END

4.24己知外部RAM起始地址为STR的数据块中 有一

以回车符CR断尾的十六进制ASCIL编 写程序将它们变为二进制代码,放在起始地 址为

BDATA的内部RAM存储区屮。

ORG OH STR DATA 10H BDATA

DATA 50H

MOV

P2, #00H

MOV RO, # STR MOV

Rl, #BDATA

LOOP:

MOVX A, @R0 INC RO

CJNEA, #0DH, NEXT

SJMP DONE NEXT:

CJNE A, #40H, NEXT1 NEXT1:

JNC NEXT2 ; A ?

ANL F

A, #0FH SJMP DONE NEXT2:

CLR C

SUBB

A, #37H DONE:

MOV @R1,A INC R1

SJMP

LOOP

单片机第4章习题参考答案.docx

第4章部分习题答案作业:7、8、9、10、11、15、17、19、204.7设内部RAM20H单元有两个非零的BCD数,编写求两个BCD数的积并把积送入21H单元的程序。ORG1000HMOVA,20HMOVB,A;保存
推荐度:
点击下载文档文档为doc格式
5ws7y0hbmv6h1tx45d7638ccg96mxg006yi
领取福利

微信扫码领取福利

微信扫码分享