单片微型计算机原理与接口技术 髙锋版 课后答案第4章(6)

2021-09-24 13:39

MOV PI,A ;从PI口输出

INC DPTR

DJNZ R0,LOOP ;循环

AJMP $

END

【4-23】 编写将1 O位十六进制数转换为ASCII码的程序。假定十六进制数存放在内部RAM的20 H单元开始的区域中,转换得到的ASCII码存放在内存3O H单元开始的区域中。加上必要的伪指令,并对源程序加以注释。

【答】查表法:

ORG 0000H

SJMP BEGIN

ORG 0030H

BEGIN: MOV R2,#5 ;10位十六进制数

MOV R0,#20H ;读指针

MOV RI,#30H ;写指针

MOV DPTR,#ASCTB ~ASCII码表首址

LOOP: MOV A,@R0 ‘

ANL A,#0FOH ;取高半字节

SWAP A

ACALL TRANS ;调用十六进制到ASCII码转换子程序

MOV A,@R0

ANL A,#0FH ;取低半字节

ACALL TRANS ;调用十六进制到ASCII码转换子程序

INC R0

很难找到

DJNZ R2,LOOP

SJMP $ ;查表法子程序 .

TRANS:

MOVC A,@A+DPTR ;取得ASCII码

MOV @R1,A

INC R1

RET

ASCTB: ;ASCII码表

DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

DB 41H,42H,43H,44H,45H,46H

END

注意:十六进制数0~9所对应的ASCII码为30 H~39 H,十六进制数A~F所对应的ASCII码为41 H~46 H。 ,

例如:在20 H开始输入5个十六进制数:11 H,F4 H,F1 H,12 H,34 H。

执行程序后:内存3 0 H单元开始的区域中依次为31 H,31 H,46 H,34 H,46 H,31 H,31 H,32 H,33 H,34 H。 、

【4-24]80C51单片机的P1.7、P1.6和P 1.5输出的6拍波形如图4-3所示,后面输出波形重复,输出波形9O拍后停止。请编写源程序,并加以注释,并加上必要的伪指令。

【答】由图4-3分析,可以得到一个周期为6拍的波形表。

ORG 0000H

0000 802E SJMP BEGIN

ORG 003 0H

0030 7860 BEGIN: MOV R0,#90 ;90拍波形计数器

0032 7906 LOOP2: MOV R1,#6 ;6拍波形计数器

0034 9 00047 MOV DPTR,#TAB

0037 E4 LOOPI: CLR A

0038 93 MOVC A,@A+DPTR ;查表得到输出波形值

0039 F59 0 MOV PI,A

003B E8 MOV A,R0 、;判断90拍波形输出结束?

003C 14 DEC A

003D F8 MOV R0,A

003E 6005 JZ STOP ;90拍波形输出完,则转停止输出

0040 A3 INC DPTR

0041 D9F4 DJNZ R1,LOOP1 ;6拍波形循环

很难找到

0043 80ED SJMP L00P2

0045 80FE STOP:SJMP STOP

0047 E040A0 TAB:DB 0E0H,40H,0A0H,60H,0C0H,60H;6拍波形表

004A 60C060

END

【4-25】编写求无符号数最大值的子程序。入口条件:采样值存放在外部RAM的1000 H~100F H单元中。出口结果:求得的最大值存入内部RAM区的20 H单元中。对源程序加以注释和加上必要的伪指令。

【答】程序如下:

;求无符号数最大值的子程序CMP

ORG 1000H

CMP: MOV R0,#10H ;采样值数据区长度

MOV DPTR,#1000H ;采样值存放首址

MOV 20H,#00H ;最大值单元初始值设为最小数

LP: MOVX A,@DPTR ;取采样值

CJNE A,20H,CHK ;数值比较

CHK: JC LPI ;A值小,转移

MOV 20H,A ;A值大,则送20H

LPI: DJNZ R0,LP ;继续

RET ;结束

注意:20 H中始终存放两个数比较后的较大值,比较结束后存放的即是最大值。

【4-26】编写求无符号数最小值的子程序。

入口条件:20 H和21 H中存放数据块起始地址的低位和高位,22 H中存数据 块的长度。出口结果:求得的最小值存入3O H单元中。对源程序加以注释和加上必要的伪指令。

【答】程序如下: .

;求无符号数最小值的子程序CMPI

ORG 2000H

CMPI: MOV DPL,20H

MOV DPH,21H

MOV 30H,#0FFH ;最小值单元初始值设为最大值

LOOP: MOVX A,@DPTR

MOVX A,@DPTR ’

CJNE A,3 0H,CHK ;比较两个数大小

SJMP LOOP1 ;两个数相等,不交换

CHK: JNC LOOP1 ;A较大,不交换

MOV 30H,A ;A较小,交换

LOOP1: INC DPTR

DJNZ 22H.LOOP

RET

注意:30 H中始终存放两个数比较后的较小值,比较结束后存放的即是最小值。 例如:(20 H)=00 H,(21 H)=80 H.(22 H)=0 5 H。从8000 H开始存放下列数:02 H, 04 H,01 H,FFH,03 H。

调用子程序CMPl后的结果:(30 H)=01 H

【4-27】数据组为X1,X2, ,X1 0共10个。采用冒泡法对10个数据进行排序。最小值

很难找到

存入低位地址单元。编写源程序并加以注释,加上必要的伪指令。

【答】程序如下:

ORG 0000H

0000 755021 MOV 50H,#21H ;置准备排序的数据1 0个

0003 755132 MOV 51H,#32H

0006 755223 MOV 52H,#23H

0009 755322 MOV 53H,#22H

000C 755489 MOV 54H,#89H

000F 75559A MOV 55H,#9AH

0012 755635 MOV 56H,#35H

0015 7557F6 MOV 57H,#0F6H

0018 755865 MOV 58H,#65H

001B 755983 MOV 59H,#083H

001E C200 PX: CLR 00H ;设交换过标志

002 0 7809 MOV R3,#09H ;第一次比较二个数,比较次数为(n-1) 0022 785 0 MOV R0,#5 0H ;1 0个无符号数存放单元首地址 0024 E6 MOV A,@R0

0025 08 PX3: INC R0

0026 F9 MOV R1,A ‘

0027 9 6 SUBB A,@R0 ;DX- (DX+1)

0028 E9 MOV A,R1

0029 4006 JC PX2 ;DX<(DX+1)则转PX2,不交换

002B D200 SETB 00H ;DX>(DX+1)量交换标志位,20H.0=1

单片微型计算机原理与接口技术 髙锋版 课后答案第4章(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:解读Autorun.inf文件病毒

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: