就是要求重复地点亮LED1~LED8么?没有其他花样要求么?
ORG 0000H ;上电复位
AJMP START
ORG 0030H
START:
MOV A,#0FFH ;初始化
CLR C ;进位位清0
MOV R2,#08H ;循环八次初始值
LOOP:
RLC A ;左移
MOV P1,A ;赋值给P1
CALL DELAY ;调用延时
DJNZ R2,LOOP ;判断是否移完,未完继续
AJMP STAR ;移完跳转
DELAY: ;每次延时0.5秒((2x249+3)x200+2)x5=501010us
MOV R6,#5 ;将21送R5寄存器
LOOP1:
MOV R7,#200 ;将200送R7寄存器
LOOP2:
MOV R5,#249 ;将249送R7寄存器
DJNZ R5,$ ;循环执行本指令,每次R5-1
DJNZ R7,LOOP2 ;R7-1, 如果R7不等于0, 则转至LOOP2
DJNZ R6,LOOP1 ;R6-1, 如果R6不等于0, 则转至LOOP1
RET ;子程序返回
END ;程序结束
很简单呀,最普通的流水灯控制。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV A,#0FEH
MOV P0,A
MOV R2,#0
SJMP $
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
INC R2
CJNE R2,#10,T0E
MOV R2,#0
RL A
MOV P0,A
T0E:
RETI
END