org
0000h
;程序从0000开始运行
Ljmp
main
org
0030h
main:
;主程序循环点亮
mov
p1,#0FFh
lcall
delay
;延时一段时间
loop1:
mov
a,#0feh
;每次只亮一个灯。
loop:
mov
p1,a
;输出到p1
lcall
delay
;
延时调DELAY时间延时
RL
A
;此3句用来点亮P12
mov
p1,a
;输出到p1
lcall
DELAY1
;延时一段时间
RL
A
;此四句用来点亮P14因为左移两个
mov
p1,a
;输出到p1
lcall
DELAY1
;延时一段时间调DELAY1时间延时
LJMP
loop1
;加这个就循环啦
DELAY1:MOV
R4,#25
;延时子程序,12M晶振延时1001秒此7句为1S延时子程序供主程序调用
L3:
MOV
R2
,#200
L1:
MOV
R3
,#248
L2:
DJNZ
R3
,L2
DJNZ
R2
,L1
DJNZ
R4
,L3
RET
delay:
mov
r5,#20
;延时子程序1闪烁灯调用此7句为延时子程序供主程序调用
d1:mov
r6,#20
d2:
mov
r7,#250
djnz
r7,$
djnz
r6,d2
djnz
r5,d1
ret
end
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP KEYINT
ORG 0030H
MAIN:
MOV R7,#0
LOOP:
MOV A,R7
JNZ ,LOOP1
MOV DPTR,#TAB1
SJMP START
LOOP1:
DEC A
JNZ LOOP2
MOV DPTR,#TAB2
SJMP START
LOOP2:
DEC A
JNZ LOOP3
MOV DPTR,#TAB3
SJMP START
LOOP3:
MOV DPTR,#TAB4
START:
MOV A,R6
INC R6
CJNE R6,#16,STA1
MOV R6,#0
STA1:
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
LJMP LOOP
DELAY:
MOV R2,#100
DLY:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY
RET
KEYINT:
INC R7
CJNE R7,#4,KINTR
MOV R7,#0
KINTR:
RETI
TAB1:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
TAB2:
DB 0F0H,0FH,0F0H,0FH,0F0H,0FH,0F0H,0FH
DB 0F0H,0FH,0F0H,0FH,0F0H,0FH,0F0H,0FH
TAB3:
DB 0E7H,0DBH,0BDH,07EH,0E7H,0DBH,0BDH,07EH
DB 0E7H,0DBH,0BDH,07EH,0E7H,0DBH,0BDH,07EH
TAB4:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
END
ORG 0000H ; 程序起始地址,从0开始存放
LJMP START ; 跳转到 START(100H)
ORG 0100H ; 下面的程序从100H开始存放
START: MOV SP,#60H ; 堆栈指针,指向60H
MOV A,#0FFH ; 累加器A为全 1 (11111111)
CLR C ; 清除CF标志
START1: RLC A ;累加器A连同CF标志左移一位(A=11111110),CF=1
MOV P1,A ;A的值送P1口,P10=0,P11-P17均为1,此时,若接在P1口的LED就有一个亮了。
ACALL Delay ;调用延时函数,让LED灯能亮一会。
SJMP START1 ;跳转到 START1,下一次再左移一位,A=11111101,CF=1,(即点亮另一个LED,如此周而复始,就看到灯像流水一样)
Delay: MOV R5,#2 ;延时, 最外层循环2次,实际循环 256 256 2次,
Delay1: MOV R6,#0 ;这一层循环256次,实际循环 256 256 次,
Delay2: MOV R7,#0 ;这一层循环256次
DJNZ R7,$ ;在本条指令上循环(R7-1,若不为0循环)
DJNZ R6,Delay2;
DJNZ R5,Delay1
RET ;延时子程序返回
END ;汇编语言源程序结果
ORG 0000H
SJMP START
ORG 0030H
START: MOV A, #0FEH ; 先让第一个发光二极管点亮
LOOP: MOV P1, A ; 从P1口输出到发光二极管
MOV R1, #100 ; 延时05秒
DEL1: MOV R2, #200
DEL2: MOV R3, #7
DEL3: DJNZ R3, DEL3
DJNZ R2, DEL2
DJNZ R1, DEL1
RL A ; 左移一位,点亮下一个发光二极管
LJMP LOOP
END
这个是我写的跑马灯程序,没有左右振荡,自己参考参考加上去吧
试验成功的程序:
ORG 0000H
MOV 30H, #0
MOV 31H, #0
M_LOOP:
MOV R2, #8
DISP1:
CALL DL
CALL SHIFT2
DJNZ R2, DISP1
MOV R2, #8
DISP2:
CALL DL
CALL SHIFT1
DJNZ R2, DISP2
SJMP M_LOOP
;-----------------------
SHIFT1:
CLR C
MOV A, 30H
RLC A
MOV 30H, A
CLR C
MOV A, 31H
RRC A
MOV 31H, A
RET
;-----------------------
SHIFT2:
SETB C
MOV A, 31H
RLC A
MOV 31H, A
SETB C
MOV A, 30H
RRC A
MOV 30H, A
RET
;-----------------------
DL:
CLR TI
MOV SBUF, 30H
JNB TI, $
CLR TI
MOV SBUF, 31H
DJNZ R7, $
DJNZ R7, $
DJNZ R6, $ - 4
RET
;-----------------------
END
电路:
参考:
>
以上就是关于求帮修改8051汇编跑马灯程序:全部的内容,包括:求帮修改8051汇编跑马灯程序:、单片机跑马灯程序实现四种模式(汇编)、谁能帮我翻译下这个单片机跑马灯的汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)