求个51单片机 汇编语言设计的LED跑马灯的程序

求个51单片机 汇编语言设计的LED跑马灯的程序,第1张

给个你参考

/ 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。

实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。

/

/ 程序详细功能介绍:

做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P00-P07接口上,

输出“0”时,发光二极管亮,开始时P00→P01→P02→P03→┅→P07→P06→┅→P00亮,重复循环。

/

ORG 0000H

LJMP START

ORG 0030H

START:

MOV R2,#8 ;左移次数

MOV A,#0FEH ;A的初始值,即 P00的L0 点亮

SETB C

LOOP: MOV P0,A

LCALL DELAY

RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动

DJNZ R2,LOOP

MOV R2,#8 ;右移次数

LOOP1: RRC A ;右移流水灯

MOV P0,A

LCALL DELAY

DJNZ R2,LOOP1

LJMP START

DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度

D1: MOV R6,#20

D2: MOV R7,#248

DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

RET

END

这么简单的要求,不用大动干戈。

看看下面的程序,是不是最简单:

ORG 0000H

SETB TR0 ;启动T0

MOV R2, #250 ;定时计数初值

LOOP:

MOV TH0, #(8192 - 8000) / 32 ;定时8ms

MOV TL0, #(8192 - 8000) MOD 32

JNB TF0, $ ;等待8ms

CLR TF0

DJNZ R2, LOOP ;每隔8ms,R2减一次一

CPL P10 ;R2为0则LED亮灭转换

LJMP 0000H

END

本程序,已经实验成功。

ORG 0000H

AJMP MAIN

ORG 000BH ;TO Time interrupt

lJMP T0INT

ORG 001BH ;T1 Count interrupt

LJMP T1CNT

ORG 030H

MAIN: MOV TMOD,#61H ;T1 count at MOD 2,T0 time int at MOD 1

MOV TL0,#0B0H ;66536-50000=3CB0H 50000us=50ms=005s

MOV TH0,#3CH

SETB ET0 ;T0 interrupt enable

SETB TR0 ;T0 work

;MOV TL1,#0FDH ;count num = 2

;MOV TH1,#0FDH ;auto load 0FDH

;SETB ET1

;SETB TR1

SETB EA ;Enable all interrupt

MOV A,#28H ;005s40=2s

MOV P0,#0FEH

JMP $

ORG 060H

T0INT: CLR ET0 ;Disable T0 interrupt

CLR TF0 ;clr tf0

;CPL P17

DEC A ;A--

JNZ T0RET ;A!=0 jmp

;;;;;;;;;;;;;;;;;;更改这里改灯闪烁

MOV A,P1

RR A

MOV P1,A

;;;;;;;;;;;;;;;;;;

MOV A,#28H ;A==0;A=40,

T0RET: SETB ET0 ;Enable interrupt

RETI

ORG 080H

MOV R7, #1000

D1:MOV R6, #1000 要加逗号,错误是说语法错误

还有这是8位的寄存器,赋值最高只到 255,赋值1000是不行的。

指明地址 在前面 加个起始地址

ORG 0000H ;程序复位起始地址

LJMP LOOP

ORG 0030H ;正式的程序最好跳过前面中断矢量地址区,具体多少看芯片介绍

LOOP: CLR LED

LCALL DELAY

SETB LED

LCALL DELAY

LJMP LOOP

51单片机用汇编语言编写流水灯程序,就是控制多个LED

,使其在特定时间间隔内,只有一个LED

发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:

;假设晶振12MHZ,P1控制8个LED低电平亮

;启动入口========================

ORG

0000H

;复位启动

AJMP

START

;

ORG

001BH

;T1中断

AJMP

T1INT

;

;定义变量========================

YSJS

EQU

30H;延时计数器

LED

EQU

31H;LED控制缓冲器

;主程序==========================

START:

MOV

LED,#0FEH

;初始化数据

MOV

YSJS,#0

;

;

MOV

TMOD,#10H

;定时器1工作于方式1,16位定时器

MOV

TL1,#0B0H

;设置定时初值

MOV

TH1,#3CH

;定时时间=50mS

SETB

ET1

;使能定时器1中断

SETB

TR1

;启动定时器1

SETB

EA

;开总中断

MOV

P1,LED

;初始化流水灯

;

LOOP:

JMP

LOOP

;循环等待中断

;

;

T1INT:

PUSH

PSW

;定时器1中断程序

PUSH

ACC

;保护现场

;

MOV

TH1,#3CH

;定时时间=50mS

MOV

TL1,#0B0H

;

INC

YSJS

;

PUSH

ACC

;保护ACC

MOV

A,YSJI

;

CJNE

A,#2,QT1

;50mS2=100mS

MOV

P1,LED

;

MOV

A,LED

;

RL

A

;累加器A的值循环左移1位

MOV

LED,A

;

MOV

YSJS,#0

;

;

QT1:

POP

ACC

;恢复现场

POP

PSW

;

RETI

;返回主程序

END

;汇编程序结束

以上就是关于求个51单片机 汇编语言设计的LED跑马灯的程序全部的内容,包括:求个51单片机 汇编语言设计的LED跑马灯的程序、51单片机定时器的汇编语言程序编程,、汇编51单片机三个LED交替闪烁等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存