换成bcd码,并压缩放于片内30H,31H两个单元,其中31H中放bcd码的十位/个位,30H中放bcd码的千位/百位。 MOV A, #00H ;这一句不是必须 MOV R0, #20H MOV R1, #21H
XCHD A, @R0 ;A←(20H)
SWAP A ;A高4位←(20H)的BCD码数字 XCHD A, @R1 ;A低4位←(21H)的BCD码数字 MOV 30H,A
MOV A, #00H ;这一句不是必须 MOV R0, #22H MOV R1, #23H
XCHD A, @R0 ;A←(22H)
SWAP A ;A高4位←(22H)的BCD码数字 XCHD A, @R1 ;A低4位←(21H)的BCD码数字 MOV 31H,A
3-7:片内RAM的30H~32H单元中连续存放了6个压缩BCD码,编制程序将它们转换为ASCII码,存入片外3000H开始的连续存储区中
MOV R0,#30H MOV DPTR,3000H
LOOP: MOV A,@R0 SWAP A ANL A,#0FH
ADD A,#30H ;30H= '0' MOVX @DPTR,A INC DPTR
MOV A,@R0 ANL A,#0FH ADD A,#30H
MOVX @DPTR,A INC DPTR
INC R0 CJNE R0,#33H, LOOP
3-9: 从外部RAM 2000H 单元开始存放着100个无符号数,编写程序统计出:(1)最大数;(2)最小数;(6)大于50,小于50,等于50的个数。 (1)
MOV DPTR, #2000H
MOV 30H, #0 ;先用0当做最大数 (求最小数时,用255) MOV R2, #100
LOOP: MOVX A, @DPTR CJNE A, 20H, TTT ;(A)-(20H)
5
TTT: JNC NEXT ;不够减转移 (求最小数时,用JNC NEXT) MOV 30H, A ;够减,这个数是大数,给(20H) NEXT: INC DPTR DJNZ R2, LOOP SJMP $ END (6)
ORG 0600H
MOV DPTR, #2000H MOV R2, #100 ;总数
MOV R3, #0 ; 小于50的数的个数 MOV R4, #0 ; 等于50的数的个数 MOV R5, #0 ; 大于50的数的个数 LOOP:
MOVX A, @DPTR CLR C
SUBB A, #50 JZ EQU_50 JNC BIG
INC R3 ;小于50的个数 JMP NEXT EQU_50:
INC R4 JMP NEXT BIG:
INC R5 NEXT:
INC DPTR
DJNZ R2, LOOP
MOV 30H,R3 ; 小于50的数的个数 MOV 31H,R4 ; 等于50的数的个数 MOV 32H,R5 ; 大于50的数的个数
SJMP $
3-10 MCS-51片外RAM区1000H~1007H单元中存有8个无符号数,编程求其平均值,将结果存于1008H中。%先加,加的结果可能超出8位,所以存储结果于(30H)和(40H)单元中。
MOV DPTR, #1000H MOV R7, #08H
MOV 30H, #00H MOV 40H, #00H SS1:MOVX A, @DPTR
6
ADD A, 30H MOV 30H, A CLR A ADDC A, 40H MOV 40H, A INC DPTR DJNZ R7, SS1 MOV R7, #03H ;移位3次,等于除以8 SS2:CLR C MOV A, 40H RRC A MOV 40H, A MOV A, 30H RRC A MOV 30H, A DJNZ R7, SS2 MOVX @DPTR, A
3-11下面是以数学公式,X值存于片内20H,Y值存于21H单元中。Y=X2(X>0) 0(X=0) 2X(X<0)
MAIN:MOV A,20H
JZ SUL
JB ACC.7,NEG MOV B,A MUL AB SJMP SUL NEG:CLR C
RLC A
SUL:MOV 21H ,A
3-12试编写程序,将外部 RAM 2000H~20FFH数据块,传送到3000H~30FFH区域。
MOV R6,#0FFH MOV R2,#00H
MOV R3,#20H;暂存2000H地址 MOV R4,#00H
MOV R5,#30H;暂存3000H地址 NEXT:MOV DPL,R2 MOV DPH,R3 MOVX A,@DPTR MOV DPL,R4 MOV DPH,R5 MOVX @DPTR,A INC R2 INC R4
7
DJNZ R6,NEXT
3-13:振荡频率:6MHz(机器周期:2us),
(1)1ms延时 ORG 2000H
MOV R7,#125 LOP1: NOP NOP
DJNZ R7,LOP1 RET (2) 100ms延时 ORG 2000H
MOV R6,#100 LOP2: MOV R7,#125 LOP1: NOP NOP DJNZ R7,LOP1 DJNZ R6,LOP2 RET (3)1s延时 ORG 2000H
MOV R5,#10 LOP3: MOV R6,#100 LOP2: MOV R7,#125 LOP1: NOP NOP
DJNZ R7,LOP1 DJNZ R6,LOP2 DJNZ R5,LOP3 RET
3-14:片内RAM30H有一数(0~15),查表求平方值,存入31H中。ORG 1000H
MAIN: MOV DPTR,#TAB
MOV 30H, #13 ;NUMB=0~15 MOV A, 30H MOVC A,@A+DPTR MOV 31H,A SJMP $
TAB: DB 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,255
第4章
8
相关推荐: