【51单片机】用汇编语言实现点灯、闪烁

434 阅读4分钟

89C51汇编Proteus仿真教程——新建51汇编Proteus工程

简介: 详细介绍如何新建一个51汇编的Proteus仿真工程。此教程只做操作过程,不具体解释每一步具体含义,以极简的方式,通过操作让你实现新建项目工程。 前提条件:

安装好Proteus软件1. 具有一定单片机知识,如果没有也不要紧,本教程只讲操作,不讲原理,具体可以去看看书籍 1、双击已经安装好的Proteus8,我的版本是8.9。不同版本可能有差异,差别不会很大。 在这里插入图片描述 2、打开后界面如下图所示。 在这里插入图片描述 3、选择“新建工程”。 在这里插入图片描述 4、新建一个命名为“51汇编”工程,可根据自己想法命名”。 在这里插入图片描述 5、点击浏览更改保存路径,这里选择默认的保存路径。 在这里插入图片描述 6、勾选“新工程”。 在这里插入图片描述 7、点击“下一步”。 在这里插入图片描述 8、选择“从选中的模板中创建原理图”。 在这里插入图片描述 9、选择"Landscape A0"大小的,可以根据自己的需要选择不同寸尺大小。 在这里插入图片描述 10、点击“下一步”。 在这里插入图片描述 11、选择“不创建PCB布版设计”。** 在这里插入图片描述 12、点击“下一步”。 在这里插入图片描述 13、选择“创建固件项目”。 在这里插入图片描述 14、芯片系列选择“8051”系列。 在这里插入图片描述 15、芯片选择“AT89C52”芯片。 在这里插入图片描述 16、编译器选择“ASEM-51(Proteus)”。 在这里插入图片描述 17、勾选“创建快速启动文件”。 在这里插入图片描述 18、点击“下一步”。 在这里插入图片描述 19、确认信息无误,点击完成,项目就新建好了。 在这里插入图片描述 20、项目新建好后,弹出一个界面,这是编写汇编代码的窗口。 在这里插入图片描述 21、点击原理图绘制,切换到原理图,默认会有一块AT89C52的芯片。 在这里插入图片描述

【51单片机】用汇编语言实现点灯、闪烁

今天刚学了用c语言点灯,那么我就在想可不可试一下用汇编语言来进行点灯(来自点灯攻城狮的手动狗头)

最简单的是点灯,当单片机引脚P2口连接的是LED时

CLR P2.0  ;这里的意思时将P2.0引脚置为低电平(LEDL连接方式为共阳极时点亮P2.0上的LED)

这样就可以点亮 P2.0接口上的LED了~~ (当然 这样一句汇编代码是不完整的,会有警告,但是编译输入后时可以点灯的)

茴香豆的茴 ,有几种写法,那么点灯也是如此,我们都知道在汇编语言中MOV的意思可以理解为赋值,即将源操作数赋值给目标操作数(将后面的东西赋值给前面的寄存器)

MOV P2,#0FH     ;#的作用是将0FH标记为立即数,将0FH 换成 0000 1111B 也没毛病

十六进制的0F 转化成二进制是 0000 1111

这样就可以将P2.4、P2.5、P2.6、P2.7 上的LED进行点亮了~~

如此,通过修改#后面的十六进制数就可以随意的点亮某个灯了~~

细心的朋友可能会发现,不是引脚为低电平的时候亮吗? 那么进制转换后不是第前面四位为0,后面四位为1吗,不应该是前四个灯亮,后四个灯灭吗?这是我的理解是他是从高位开始赋值的,具体怎么解释我也不明白,嘤嘤~

要实现闪烁还得加延时函数空耗CPU的时间实现延时,代码如下

DELAY:  MOV R7,#255     ;11.0592MHz晶振   ,让下面的D1执行255次  也就是延时255毫秒
D1:                     ;D1这里到最后可以延时1毫秒,R7最多只能装255,超过就会溢出,多写无用
    NOP                 ;想增加延时的时长,只能多加R6之类的寄存器装数字嵌套在DELAY里面,或者用软   
    PUSH 30H            ;件生成一个新的延时函数  
    PUSH 31H
    MOV 30H,#2
    MOV 31H,#194
NEXT:
    DJNZ 31H,NEXT
    DJNZ 30H,NEXT
    POP 31H
    POP 30H
    DJNZ R7,D1          
    RET

增加延时的时长可以更改R7#后面的数值,但最大仅为255,在想延时更久,可以多加一个寄存器进行循环嵌套或者用软件生成一个新的延时函数,这样就可以自定义延时的时间了。

完整的代码是这样的

MAIN:
MOV P2, #0FFH
LCALL DELAY
MOV P2, #00H
LCALL DELAY
LJMP MAIN
​
DELAY:  MOV R7,#255     
D1:
    NOP
    PUSH 30H
    PUSH 31H
    MOV 30H,#2
    MOV 31H,#194
NEXT:
    DJNZ 31H,NEXT
    DJNZ 30H,NEXT
    POP 31H
    POP 30H
    DJNZ R7,D1
    RET
END

 代码的功能就是可以将连接在P2口上所有的LED灯同步进行闪烁

本贴仅为记录学习