求帮修改8051汇编跑马灯程序:

求帮修改8051汇编跑马灯程序:,第1张

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汇编跑马灯程序:、单片机跑马灯程序实现四种模式(汇编)、谁能帮我翻译下这个单片机跑马灯的汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9327648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存