51单片机架构与汇编指令

文章详细介绍了使用51单片机通过汇编和C语言控制LED灯的点亮以及实现LED流水灯效果的方法,包括汇编指令、C语言代码中的延时函数和汇编代码中的延迟逻辑。
摘要由CSDN通过智能技术生成

一、点亮一个LED灯

1.仿真电路

在这里插入图片描述

2.汇编指令

汇编语言:
ORG 0x0000 ;
MOV P1, # 0xFF ;
END ;

代码解释:
ORG 0x0000:设置程序的起始地址为0x0000。在51单片机中,代码默认从0x0000地址开始执行。
MOV P1, # 0xFF:将0xFF这个数据存入P1端口,以点亮所有LED灯。
MOV:将一个数据从一个地方移动到另一个地方。
P1:51单片机上的一个I/O端口,用于控制LED灯。
0xFF:十六进制数,表示所有的LED灯都点亮。

二、LED流水灯

1.仿真电路

在这里插入图片描述

2.C语言代码

#include <reg51.h>
#include <intrins.h>
//???
void delay_ms(int a)
{
int i,j;
for(i=0;i<a;i++)
{
for(j=0;j<1000;j++) nop();

	}
}

void main(void)
{
	while(1)
	{
		P0=0xfe;
		delay_ms(50);
		P0=0xfd;
		delay_ms(50);
		P0=0xfb;
		delay_ms(50);
		P0=0xf7;
		delay_ms(50);
		P0=0xef;
		delay_ms(50);
		P0=0xdf;
		delay_ms(50);
		P0=0xbf;
		delay_ms(50);
		P0=0x7f;
		delay_ms(50);
	}
}

3.汇编代码

ORG 0000H
AJMP MAIN
MAIN:
MOV R0,#50H (给R0,R1赋初值,用于延时函数的循环次数
MOV R1,#0F0H
MOV P2,#0FEH (P2端口与LED灯相连,设置灯的初始状态为1111 1110,即D0亮
S1: (RL为累加器循环左移,故设置P2的状态,需要先将P2的给累加器A
MOV A,P2
RL A
MOV P2,A
LCALL DEL (调用延时子程序
AJMP S1
DEL:
MOV R0,#50H (重新赋值
DJNZ R0,$ (原地跳转,内层循环
DJNZ R1,DEL (外层循环
MOV R1,#0F0H (重新赋值
RET
END

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值