内容发布更新时间 : 2024/12/25 9:59:02星期一 下面是文章的全部内容请认真阅读。
MOV R7,A POP ACC INC A
MOVC A,@A+DPTR MOV R6,A
SJMP $
TAB:DB 00,00,00,01,OO,04,OO,09,OO,16H,? DB? 04H,00
3.4设内部RAM的20H和21H单元中有两个带符号数,将其中的大数存放在22H单元中,编出程序。
3.4 先用异或指令判两数是否同号,在同号中判大小,异号中正数为大。 ORG 0 MOV A,20H XRL A.21H ANL A,#80H JZ CMP
JB 20H.7,BG AG:MOV 22H,20H SJMP $
BG:MOV 22H,21H
SJMP $
CMP:MOV A,20H CJNE A,21H,GR GR:JNC AG MOV 22H,21H
SJMP $
3.5若单片机的晶振频率为6MHz,求下列延时子程序的延时时间。 DELAY: MOV R1,#0F8H LOOP: MOV R3,#0FBH DJNZ R3,$ DJNZ R1,LOOP RET
3.5 fosc=6MHz,MC=2us
机器周期数 DELAY:MOV R1,#OF8H 1 LOOP: MOV R3,#0FBH 1 DJNZ R3,$ 2 DJNZ R1,LOOP 2
RET 2 (1+2+(1+2×251+2)×248)×2us=250.48ms
3.6 编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCII码存放在25H开始的单元内。
3.6 将待转换的数分离出高半字节并移到低4位加30H;再将待转换的数分离出低半字节并加30H,安排好源地址和转换后数的地址指针,置好循环次数。 ORG 0000H
9
MOV R7,#05H MOV RO,#20H
MOV R1,#25H NET:MOV A,@RO ANL A,#OFOH SWAP
ADD A,#30H MOV @R1,A INC R1
MOV A,@RO ANL A,#OFH ADD A,#30H MOV @R1,A INC R0 INC R1
DJNZ R7,NE SJMP $ END
3.7 从内部存储器30H单元开始,有16个数据,试编一个程序,把其中的正数、负数分别送40H和50H开始的存储单元,并分别将正数、负数和零的个数送R4,R5,R6。 3.7 片内RAM间址寄存器只有Ro和R1,而正数、负数和零共需3个寄存器指示地址,这时可用堆栈指针指示第3个地址,POP和PUSH指令可自动修改地址。RO指正数存放地址,Rl指负数存放地址,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。 ORG 0000H MOV R7,#10H MOV A,#0 MOV R4,A MOV R5,A MOV R6,A MOV R0,#40H MOV R1,#50H
MOV SP,#2FH NEXT:POP ACC JZ ZER0 JB ACC.7,NE INC R4 MOV @RO,A INC R0 AJMP DJ NE:INC R5 MOV @R1,A INC R1
AJMP DJ ZER0:INC R6
DJ:DJNZ R7,NEXT
10
SJMP $ END
3.8 内部存储单元40H中有一个ASCII字符,试编一个程序给该数的最高位加上奇校验。 3.8 可直接用P标志判断(JB P,ret) ORG 0000H MOV A。40H
JB P,EN ;奇数个1转移
0RL A,#80H ;偶数个1最高位加“1” EN:SJMP$
3.9 编写一段程序,将存放在自DATA单元开始的一个四字节数(高位在高地址)取补后送回原单元。
3.9 取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、负数均有相对于模的补数。可用取反加l求补,也可用模(00H)减该数的方法求补。
ORG 0000H MOV R7,#03H MOV R0,#DATA MOV A,@RO CPL A ADD A,#01 MOV @RO,A AB:INC RO MOV A,@RO CPL A ADDC A,#O DJNZ R7,AB SJMP $
3.10 以BUFl为起始地址的外存储区中,存放有16个单字节无符号二进制数,试编一个程序,求其平均值并送BUF2单元,余数存在BUF2—1单元。 3.10 16个单字节累加应用ADD指令而不能用ADDC指令,和的低位存A,当和超过一个字节时,和的高字节存于B,并要加低位相加时产生的进位,16个单字节加完后,采用右移4次进行除16求平均值的运算,商在 BUF2单元,余数在BuF2-1单元。 0RG 0000H MoV R7,#0FH MOV R0,#BUFl MOV B,#0 MOV A,@R0
MOV R2,A
NEXT:MOV A,R2 INC R0 ADD A,@R0 MOV R2,A MOV A,B ADDC A,#0 MOV B,A
11
DJNZ R7,NEXT ;以上完成求和 MOV R6,#04H MOV BUF2,A
MOV BUF2-1,#O NEX:CLR C MOV A,B RRC A MOV B,A MOV A,BUF2 RRC A
MOV BUF2,A MOV A,BUF2-1 RRC A
MOV BUF2-l,A DJNZ R6,NEX SJMP $
;以上完成除16运算
3.11 将内部RAM的20H单元中的十六进制数变换成ASCII存入22H,21H单元,高位存入22H单元,要求用子程序编写转换部分。
3.11 将20H单元的内容分解为高4位和低4位,根据是否大于9分别进行加37H和30H处理。
0RG 0000H MOV A,20H ANL A,#0F0H SWAP A
ACALL ASCII MOV 22H,A MOV A.20H ANL A,#0FH ACALL ASCII MOV 21H,A SJMP $ END
ASCII:CJNE A,#0AH,NE NE:JC A30 ADD A,#37H RET
A30:ADD A,30H RET
3.12 编写一段程序,以实现图中硬件的逻辑运算功能。
12