test1:
编写程序,查找在基本 RAM 20H~4FH 单元中出现 00H 的次数,并将查找结果存入 50H 单元
;编写程序,查找在基本 RAM 20H~4FH 单元中出现 00H 的次数,并将查找结果存入 50H 单元
ORG 0000H
LJMP START
ORG 0100H ;避开启动单元
START:
MOV A,#00H ;A代表0的个数,初始值为0
MOV R0,#20H ;起始查找地址为20H
MOV R1,#2FH ;设定循环次数
LOOP1:
CJNE @R0,#00H,LOOP2 ;判断R0指示地址的内容与00H是否相等,不等,则转入LOOP2
INC A ;相等,A+1
LOOP2:
INC R0 ;地址+1
DJNZ R1,LOOP1 ;判断查找是否结束,不结束,转入LOOP1
MOV 50H,A
SJMP $
END
test2:
编写程序,将扩展 RAM 0200H~02FFH 中的数据块传送到扩展 RAM0300H~03FFH 单元中
ORG 0000H
LJMP START
ORG 0100H ;避开启动单元
START:
MOV DPTR,#0200H ;将16位地址0200H赋予DPTR
MOV R0,#00H ;将地址00H赋予R0
MOV 80H,#0FFH ;循环次数
LOOP1:
MOVX A,@DPTR ;将DPTR指示地址的内容送给A
MOV @R0,A ;将A的内容送给R1指示地址
INC DPTR
INC R0
DJNZ 80H,LOOP1 ;判断循环是否结束,不结束,转入LOOP1
MOV DPTR,#0300H
MOV R0,#00H
MOV 80H,#0FFH
LOOP2:
MOV A,@R0 ;将R0指示地址的内容送给A
MOVX @DPTR,A ;将A的内容送给DPTR指示地址
INC DPTR
INC R0
DJNZ 80H,LOOP2 ;判断循环是否结束,不结束,转入LOOP2
SJMP $
END
test3:
在片内RAM区30H和31H单元中存放了一个16位数,该16位数高8位存放在31H中,低8位存在30H中。编程分别统计16位中0和1的个数,将1的个数存放在片内RAM 区32H单元中,0的个数存放在33H单元中 。
;在片内RAM区30H和31H单元中存放了一个16位数,该16位数高8位存放在31H中,低8位存在30H中
;编程分别统计16位中0和1的个数,将1的个数存放在片内RAM 区32H单元中,0的个数存放在33H单元中
ORG 0000H
LJMP START
ORG 0100H ;避开启动单元
START:
MOV 30H,#34H ;输入数据,验证编码的正确性
MOV 31H,#12H
MOV R0,#00H ; 设定R0的初始值为00H
MOV R1,#00H ; R1的初始值为00H
MOV 80H,#08H ; 设定循环次数
MOV A,31H ; 31H中的数据存放在A中
CLR C ;
LOOP1:
RLC A ;
JC NUM1 ;CY=1
JNC NUM2 ;CY=0
NUM1:
INC R1
DJNZ 80H,LOOP1 ;不为0,循环不结束,跳转到loop1继续判别
SJMP LOOP2 ;循环结束,跳转到LOOP2
NUM2:
INC R0
DJNZ 80H,LOOP1 ;不为0,循环不结束,跳转到loop1继续判别
SJMP LOOP2 ;循环结束,跳转到LOOP2
LOOP2:
MOV A,30H ; 30H中的数据存放在A中
MOV 80H,#08H ;设定循环次数
CLR C ;
LOOP3:
RLC A
JC NUM3
JNC NUM4
NUM3:
INC R1
DJNZ 80H,LOOP3 ;不为0,循环不结束,跳转到loop3继续判别
SJMP LOOP4 ;循环结束,跳转到LOOP4
NUM4:
INC R0
DJNZ 80H,LOOP3 ;不为0,循环不结束,跳转到LOOP3继续判别
SJMP LOOP4 ;循环结束,跳转到LOOP4
LOOP4:
MOV 32H,R1
MOV 33H,R0
SJMP $
END
test4:
编程将内部数据存储器20H-24H中的5个单字节压缩BCD码转换成对应的ASCII码,结果存放在30H开始的单元中。
1.单字节压缩BCD码:压缩BCD码指一个字节8位存储2位BCD码。
eg:32用8421BCD码表示如下:
非压缩BCD码表示:00000011 00000010
压缩BCD码表示:0011 0010
而BCD码是用4位二进制数(各个位的权重分别为:8421,所以叫8421码)来表示一位十进制数。并且,一位十进制数只能是 0~9之间的一个数值。
2.ASCII码:ASCII 码使用指定的7 位或8位二进制数组合来表示128 或256 种可能的字符。
例如,十进制数27,用压缩BCD码表示为0010 0111,其中,十位数字2用ASCII码表示为011 0010,个位数字7用ASCII码表示为011 0111。
因此,要想将压缩BCD码转为ASCII码,首先要将高四位和低四位分开,再分别加上30H
;编程将内部数据存储器20H-24H中的5个单字节压缩BCD码转换成对应的ASCII码,结果存放在30H开始的单元中
ORG 0000
LJMP START
ORG 0100H
START:
MOV R0,#20H ;
MOV R1,#30H ;
MOV R2,#05H ; 设定循环次数
CLR C
LOOP1:
MOV A,@R0 ;将R0指示地址的内容送给A
ANL A,#0FH ;将A的高四位清零,低四位不变
ADDC A,#30H ;将A+30H的结果送到A中
MOV @R1,A ;结果存放在R1指示地址中
INC R1 ;地址+1
MOV A,@R0
SWAP A
ANL A,#0FH
ADDC A,#30H
MOV @R1,A ;结果存放在R1指示地址中
INC R1 ;地址+1
INC R0 ;操作对象地址+1
DJNZ R2,LOOP1 ;判断循环是否结束,不结束,转到LOOP1,结束,继续运行
SJMP $
END
运行后