您的当前位置:首页正文

南邮51单片机软件实验程序2----加减法运算

2024-06-14 来源:客趣旅游网
二、 加减法运算

1. 实验目的

(1)正确使用单片机的加减运算指令

(2)掌握不同指令对于程序状态字的影响及程序状态字的意义、用处 (3)掌握ADD,ADDC,SUBB和DA A等指令的用法 (4)学习模块化程序设计方案

2. 实验内容

(1)编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。

程序入口为:加 数:22H,21H,20H三字节,22H为最高位

被加数:32H,31H,30H三字节,32H为最高位

程序出口为:23H,22H,21H,20H四字节,23H为最高位

ORG 0000H LJMP MAIN ORG 0030H

MAIN: MOV 20H,#0f0H

MOV 21H,#0F0H MOV 22H,#0FFH MOV 30H,#02 MOV 31H,#09 MOV 32H,#05 ACALL JIAFA SJMP $

JIAFA:

MOV R0, #20H ;加数1地址、和的地址

MOV R1, #30H ;加数2地址 CLR C

MOV R2, #3 ;循环3次 A_LOOP:

MOV A, @R0 ;取 ADDC A, @R1 ;加 MOV @R0, A ;存 INC R0 INC R1

DJNZ R2, A_LOOP CLR A

ADDC A, #0 ;得到进位

MOV 23H, A ;保存 RET END

(2)编写3字节二进制减法子程序,用主程序调用多组数据来调试,需考虑无借位和有借位两种情况。

入口:被减数:52H,51H,50H,50H为最低位 减数:42H,41H,40H,40H为最低位

出口:差:外部数据存贮器2003H~2000H(2003H为最高位)

ORG 0000H LJMP MAIN ORG 0030H

MAIN:

MOV 50H,#02 MOV 51H,#09 MOV 52H,#05

MOV 40H,#30H MOV 41H,#30H MOV 42H,#30H

ACALL JIANFA SJMP $ JIANFA:

MOV DPTR,#2000H

MOV R0, #50H ;被减数地址 MOV R1, #40H ;减数地址 CLR C

MOV R2, #3 ;循环3次 A_LOOP:

MOV A, @R0 ;取 SUBB A, @R1 ;减 MOVX @DPTR, A ;存

INC R0 INC R1 INC DPTR

DJNZ R2, A_LOOP CLR A

SUBB A, #0 ;得到借位

MOV DPTR,#2003H

MOVX @DPTR, A ;保存 RET END

(3)编写10位十进制加法子程序(十进制数采用压缩BCD码存放)

入口:加数: 24H-20H,低地址放低字节

被加数: 29H-25H,低地址放低字节

要求调用多组数据调试,注意观察PSW的变化,理解DA A指令的含义。

ORG 0000H

LJMP MAIN ORG 0030H

MAIN:

MOV 20H,#99H MOV 21H,#78H MOV 22H,#56H MOV 23H,#34H MOV 24H,#12H

MOV 25H,#88H MOV 26H,#88H MOV 27H,#88H MOV 28H,#88H MOV 29H,#88H

ACALL BCD5 SJMP $ BCD5:

MOV DPTR ,#2000H ;5 MOV R0,#20H MOV R1,#25H MOV R7,#5

CLR C LOOP:

MOV A,@R0 ADDC A,@R1 DA A

MOVX @DPTR, A ; INC R0 INC R1 INC DPTR

DJNZ R7 , LOOP ;5 RET END 存 字节加完 字节BCD 加法子程序

因篇幅问题不能全部显示,请点此查看更多更全内容