单片微型计算机原理与接口技术 髙锋版 课后答案第4章 下载本文

内容发布更新时间 : 2024/12/24 3:20:15星期一 下面是文章的全部内容请认真阅读。

.专业整理.

SUBB A,B JC HIGH ;测量的温度值<设定温度值-2℃,转HIGH子程序,使P1.0引脚上输出高电平

SJMP $ ;都不是,则P1.0引脚上输出不变 LOWER: CLR P1.0 SJMP $

HIGH: SETB P1.0 ’ SJMP $ END

【4—1 6】80C51单片机从内部RAM的31H单元开始存放一组8位带符号数,字节个数存放在30H中。请编写程序统计出其中正数、0和负数的数目,并把统计结果分别存入20H、21H和22H三个单元中。加上必要的伪指令,并对源程序加以注释。 【答】程序如下:

LENGTH EQU 30H ;数据长度 DATA_ADR EQU 31H ;数据首地址 POS_NUM EQU 20H ;正数个数 ZERO_NUM EQU 21H ;0个数 NEG_NUM EQU 22H ;负数个数 ORG 0000H

AJMP MAIN , ORG 0030H

MAIN: MOV POS_NUM,#0 ;计数单元初始化为0 MOV ZERO_NUM,#0 MOV NEG_NUM,#0

MOV R1,#LENGTH ;数据长度 MOV R0,#DATA_ADR ;数据首地址 LOOP: MOV A,@R0 .

JB ACC.7,INC_NEG ;符号位为1,该数为负数,跳转加1 CJNE A,#0,INC_POS

INC ZERO_NUM ;该数为0,0个数加1 AJMP L00P1

INC NEG:INC NE~_NUM ;负数个数加1 AJMP LOOPl .

INC_POS:INC POS_NUM ;该数为正数,正数个数加1 LOOPl: INC R0 ;判断统计是否结束 DJNZ R1,LOOP END

例如:已知(30H)=08H,31H单元起存放数据为00H,80H,7EH,6DH,2FH,34H, EDH,FFH。

执行结果:(20 H)=04 H,(21 H)=01H,(22H)=03 H。

【4-17]两个10位的无符号二一十进制数,分别从内部RAM的40 H单元和50H单元开始存放。请编程计算该两个数的和,并从内部RAM的60 H单元开始存放。加上必要的伪指令,并对源程序加以注释。

【答】10位的无符号二~十进制数,占5字节,每个字节存放一个压缩BCD码(2位)。

.学习帮手.

.专业整理.

ORG 0000H AJMP MAIN 0Re 0030H

MAIN: MOV R7,#05H ;十位(5字节)计数 MOV R0,#40H ;被加数首址 MOV R1,#50H ;加数首址 MOV R2,#60H ;和数首址 CLR C ;清C标志位 ADDB: MOV A,@R0 ADDC A,@R1

DA A ;二一十进制调整

MOV B,R0 ;保护被加数地址

MOV 20H, R2 MOV R0,20H

MOV @R0,A ;存和

MOV R2,20H ;恢复和数地址 MOV R0,B ;恢复被加数地址 INC R0 ;三个地址指针均加1 INC R1 INC R2

DJNZ R7,ADDB ;多字节加未结束,则循环 HERE: SJMP HERE END

注意:寄存器间接寻址只针对R0和R1,所以存和时不能使用指令“MOV@R2,A”。 例如:

40 H~44 H内容为78 H,10 H,10 H,10 H,10 H 5O H~54 H内容为42 H,10 H,10 H,10 H,10 H 1 0 1 0 1 0 1 0 7 8 即BCD数 +1 0 1 0 1 0 1 0 4 2 2 0 2 0 2 0 2 1 2 0

运行结果:6O H~64 H单元中的数为20 H,21 H,20 H,20 H,20 H。

【4-18】编写子程序,实现4位非压缩BCD码数转换为二进制数,加上必要的伪指令,并对源程序加以注释。 【答】程序如下: ORG OOH

0000 0130 AJMP MAIN 0RG 30H

0030 752006 MAIN: MOV 20H,#06H ;4位BCD数为6553 0033 7521 05 MOV 21H,#05H 0036 752205 MOV 22H,#05H 0039 752303 MOV 23H,#03H

003C 7820 MOV R0,#20H ;高位地址指针

003E 7A03 MOV R2,#3 ;循环(n一1)次,n为BCD码位数 0040 1144 ACALL BCDB

.学习帮手.

.专业整理.

0042 0142 AJMP $ ………………..

32 10

;转换原理:假设4位BCD码为a3 a2 a1 a0,即a3×10+a2×10+ al X 10+a0×10 ;二进制值:((a3 X 1 0+a2)X 10+a1)X 10+a0

;4位非压缩BCD码数转换为二进制数子程序 0044 CODO BCDB:PUSH I:'SW ;现场保护 0046 COEO PUSH ACC

0048 COFO PUSH B

004A 7BOO MOT R3,#00H ;设R3中的初始值为b1 004C E6 MOT A,@RO

004D FC MOV R4,A ;BCD码千位a3送R4

004E EC LOOP: MOT A,R4 ;以下()H表示高8位,()L表示低8位 004F 7 5FOOA MOT B,#1 0

0052 A4 MUL AB ;R4 X 10,设(R4×l0)L=b2,(R4 X 10)H=b3 0053 FC MOV R4,A ;将R4×10后的低8位送到R4中 0054 CSFO XCH A,B ;(A)=b3,(B)=b2 0056 CB XCH A,R3 ;(A)=R3(b1),(R3)=b3 0057 75F00A MOV B,#10

005 A4 MUL AB ;(A)=(bl X l0)L,(B)=(bl X l0)H 005B 2B ADD A,R3 ;A=[(bl X 1O)L+b3]

005C FB MOT R3,A ;此时R3×10,R4×10已经完成 005D 08 INC R0 ;取下一位BCD码

005E EC MOV A,R4 ;(R4+下一位BCD码数值)送B4 005F 26 ADD A,@RO 0060 FC MOV R4, A

0061 EB MOV A,R3 ;进位加到高8位 0062 3400 ADDC A,#0 0064 FB MOV R3.A

0065 DAE7 DJNZ R2,LOOP ;循环(n-1)次 0067 D0F0 POP B ;恢复现场 0069 D0E0 POP ACC 006B D0D0 POP PSW 006D 22 RET ;返回

例如:4位.BCD数为6553,依次存入内存单元20 H、21 H、22 H和23 H中。转换结果为19 9H,依次存人R3和R4中。

【4-19】将外部RAM的40 H单元中的一个字节拆成2个ASCII码,分别存入内部数据存储器40 H和41 H单元中。试编写以子程序形式给出的转换程序,说明调用该子程序的入口条件和出口功能。加上必要的伪指令,并对源程序加以注释。 【答】子程序的入口条件、出口功能及源代码如下:

子程序人口条件:准备拆为2个ASCII码的数存入外部RAM的40 H单元中。 子程序出口功能:完成外部RAM单元一个字节拆成2个ASCII码,分别存入内部数据存储器40 H和41 H单元中。 ORG 1 000H

B_TO_A:MOV DPTR,#40H ;外部RAM40H单元

.学习帮手.

.专业整理.

MOV R0,#40H

MOVX A,@DPTR ;取数 PUSH A

ANL A,#0FH ;低4位转换为ASCII码 LCALL. CHANGE MOV @RO,A INC R0

POP A ’ SWAP A

ANL A,#0FH ;高4位转换为ASCII码 LCALL CHANGE MOV @R0,A RET

CHANGE:CJNE A,#0AH,NEXT ;转换子程序 NEXT: JNC NEXT2 ;≥0AH,转移

ADD A,#3 0H ;≤9,数字0-9转化为ASCII码 RET

NEXT2: ADD A,#37H ;字母A~F转化为ASCII码 RET END

设外部(40 H)=12 H。

执行程序B_TO_A后:内部(40 H)=31 H,(41 H)=32 H。 设外部RAM(40 H)=ABH。

执行程序B_TO_A后,内部(40 H)=41 H,(41 H)=42 H。

【4-20】请编写中值数字滤波子程序FILLE,加上必要的伪指令,并对源程序加以注释。 入口条件:3次采集数据分别存储在内部存储器的20 H、21 H和22 H中。出口结果:中值在R0寄存器中。 【答】程序如下: ORG 00H

0000 0130 AJMP LIZI ORG 30H

0030 752056 LIZI:MOV 20H,#56H ;3次采集数据 0033 752184 MOV 21H,#84H 0036 752212 MOV 22H,#12H 0039 113D ACALL FILLE

003B 013B AJMP $ ;中值数字滤波子程序FILLV. 003D COD0 FILLE:PUSH PSW ;PSW及ACC保护入栈 003F COE0 PUSH ACC

.0041 E520 MOV A,20H ;取第一个数 0043 C3 CLR C

0044 9521 SUBB A,21H ;与第二个数比较

0046 5006 JNC LOB1 ;第一个数比第二个大,转LOBl

0048 E520 MOV A,20H ;第一个数比第二个小,交换位置 004A C521 XCH A,21H

.学习帮手.