在单片机中,如果用汇编语言编程,内存的规划都需要程序员自己来组织,数组变量的定义可以通过定义首地址的方式来实现,举例说明如下:
LEDDIS EQU 30H ;显示内容放在30H开始的内存中,相当于数组的首地址
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
SETB TR0
SETB ET0
SETB EA
MOV R2,#0
LOOP:
MOV A,TL0 ;以下程序随机读取定时器的值,转换为BCD码供显示
MOV B,#10
DIV AB
SWAB A,B
MOV 30H,A
SWAP A,B
MOV B,#10
DIV AB
SWAB A,B
MOV 31H,A
MOV A,B
MOV 32H,A
MOV A,TH0
MOV B,#10
DIV AB
SWAB A,B
MOV 33H,A
SWAP A,B
MOV B,#10
DIV AB
SWAB A,B
MOV 34H,A
MOV A,B
MOV 35H,A
LCALL DELAY ;延时约100毫秒变化一次数据
LJMP LOOP
DELAY:
MOV R3,#200
DLY1:
MOV R4,#250
DJNZ R4,$
DJNZ R3,DLY1
RET
T0ISR: ;中断扫描显示
CLR TR0
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
SETB TR0
MOV R0,#30H
MOV A,R2 ;根据数组下标取显示数据
ADD A,@R0
MOV R0,A
MOV A,R2 ;以下程序根据数组下表确定显示位置
JNZ T001
MOV P2,#01H
SJMP DIS
T001:
DEC A
JNZ T002
MOV P2,#02H
SJMP DIS
T002:
DEC A
JNZ T003
MOV P2,#04H
SJMP DIS
T003:
DEC A
JNZ T004
MOV P2,#08H
SJMP DIS
T004:
DEC A
JNZ T005
MOV P2,#10H
SJMP DIS
T005:
MOV P2,#20H
DIS:
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P0,A
INC R2
CJNE R2,#6,T0E
MOV R2,#0
T0E:
RETI
TAB:
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
END
NUMA EQU 40H
NUMB EQU 60H
MOV R0,#40H
MOV A,@R0;取NUMA数组第0个元素倒A
你的意思就是先设置一个变量,在采用基址加变值寻址吗
只能这样啊,隐含的也相当于数组。