MOV AL 'E'
MOV BX,OFFSET TABLE
07FFH+1-0300H = 500H
500H = 1280B
4KB = 4096 = 1000H
00300H+1000H-1 = 12FFH
共阴显示 = -共阳显示
外部中断程序
外部中断0采用下降沿的中断触发方式
ORG 0000H
LJMP ST
ORG 0030H
LJMP FT
ORG 0100H
ST:STEB EX0
SETB IT0
SETB EA
SJMP $
FT:CPL P1.0
RETI
END
简单数据传送
将RAM从30H开始的连续32个单元的内容传递给片内RAM从60H 开始的连续32个单元。
ORG 1000H
MOV R7,#20H
MOV R0,#30H
MOV R1,#60H
LOOP:MOV A,@R0
MOV @R1,A
INC RO
INC R1
DJNZ R7,LOOP
SJMP$
END
求绝对值
试使用51单片机汇编从30H单元开始,连续存放30个带符号数, 求出各个数的绝对值,将结果存入原单元。
START:MOV R7,#1EH
MOV R0,#30H
LOOP: MOV A,@R0
JNB ACC.7,NEXT
CPL A
INC A
MOV @R0,A
NEXT: INC R0
DJNZ R7,LOOP
SJMP $
X DATA 30H
END
内存统计
试使用51单片机汇编实现从内部RAM的30H单元开始存放一组用 补码表示的带符号数,其数目已存放在20H单元。编写程序统计 出其中的正数、0和负数的数目,并将结果分别存入21H、22H、 23H单元
MOV R0,#30H
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV A,@R0
JZ NEXT1
JNB ACC.7,NEXT2
INC 23H
SJMP NEXT3
NEXT2:INC 21H
SJMP NEXT3
NEXT1:INC 22H
NEXT3:INC R0
DJNZ 20H,LOOP
SJMP $
内存数据运算
编程序将片内30H-37H单元内容的高4位清零,保持低4位不变
ORG 1000H
MOV R7,#08H
MOV R0,#30H
LOOP:MOV A,@R0
ANL A,#0FH
MOV @R0,A
INC R0
DJNZ R7,LOOP
SJMP $
END
延时程序
DELAY: MOV R1,#50
DL1:
MOV R2,#100
DL2:
DJNZ R2,DL2
DJNZ R1,DL1
SJMP $
END
流水灯
ORG 0000H
LJMP START
ORG 0030H
START:MOV RO,#8
MOV A,#0FEH
LOOP: MOV P1,A
LCALL DELAY
RL A
DJNZ R0,LOOP
LJMP START
DELAY:MOV R5,#2
L1: MOV R6,#0
L2: MOV R7,#0
DJNZ R7,$
DJNZ R6,L2
DJNZ R5,L1
RET
END
中断计数
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT
ORG 0030H
MAIN:
MOV P2,#00H
MOV A,#00H
SETB EA
SETB EX0
MOV TCON,#01H
JMP $
INT:
CJNE A,#09H,L1
MOV A,#00H
AJMP L2
L1:
INC A
AJMP L2
L2:
MOV P2,A
RET 1
END