今天刚学了用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

本文介绍如何使用汇编语言控制单片机P2口的LED灯,并实现简单的闪烁效果。文中详细展示了通过设置不同的十六进制数值来控制不同LED的状态,以及通过嵌套循环和延时函数实现LED灯的闪烁。

2181

被折叠的 条评论
为什么被折叠?



