51单片机中如何用汇编语言编写流水灯

51单片机中如何用汇编语言编写流水灯,第1张

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:

ORG 0000H 复位启动

AJMP START

ORG 001BH T1中断

AJMP T1INT

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

YSJS EQU 30H延时计数器

LED EQU 31HLED控制缓冲器

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

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 50mS*2=100mS

MOV P1,LED

MOV A,LED

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

MOV LED,A

MOV YSJS,#0

QT1: POP ACC 恢复现场

POP PSW

RETI 返回主程序

END 汇编程序结束

扩展资料:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二键嫌种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左消铅移函数进行。

#include<槐隐搜reg51.h>携丛

#include<intrins.h>

#define uchar unsigned char

void delay(void)

{

uchar i,j

for(i=0i<150i++)

for(j=0j<240j++)

}

main()

{

uchar led,i,j

while(1)

{

for(i=0i<8i++)

{

led=0xfe<<i

for(j=0j<铅历8-ij++)

{

P0=led

led=_crol_(led,1)

delay()

}

}

}

}

1、清启带51单片机C语言实现循环8个流水灯左移三次,后右移三次。

例程:

#include<reg51.h>  //51单片机头文件

#include <intrins.h> //包含有左右循环移位子函数的库

#define uint unsigned int    //宏定义

#define uchar unsigned char  //宏定义

sbit beep=P2^3

void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200)大约延时200ms.

{                    //delay(500)大约延时500ms.

    uint x,y

    for(x=zx>0x--)

        for(y=110y>0y--)    

}

void main()            //主函数

{

    uchar a,i,j

    while(1)        //大循环

    {

        a=0xfe     //赋初值

        for(j=0j<3j++) for(i=0i<8i++)   //左移三次

        {

            P1=a       //点亮小灯

            beep=0     //开启蜂鸣器

            delay(50) //延时50毫秒

            beep=1     //关闭蜂鸣器

       旁洞     delay(50)  //再延时50毫秒

            a=_crol_(a,1) //将a变量循环左移一位

        }

        a=0x7f

       for(j=0j<3j++) for(i=0i<8i++) 答芦 //右移三次

        {

            P1=a       //点亮小灯

            beep=0     //开启蜂鸣器

            delay(50) //延时50毫秒

            beep=1     //关闭蜂鸣器

            delay(50)   //再延时50毫秒

            a=_cror_(a,1) //将a变量循环右移一位

        }        

    }

}

2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。


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

原文地址: http://outofmemory.cn/yw/12328582.html

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

发表评论

登录后才能评论

评论列表(0条)

保存