【无标题】

本文详细介绍了如何使用汇编语言和C语言在Edsim51和Proteus中控制LED灯,包括基本点亮、周期性闪烁操作,并对比了不同开发环境中的代码实现和机器码。
摘要由CSDN通过智能技术生成

一. 采用汇编语言与C语言两种方式,在Edsim51虚拟开发板上点亮一个Led灯,并思考尝试让Led灯周期性闪烁。

(1)用汇编语言点亮一个Led灯

在EdSim51中点击New按钮,输入如下汇编语言之一:

MOV 90H, #0xFE

MOV 0x90, #0xFE

MOV 0x90,c#254

然后点击Save按钮,再点击Run就好了。

(2)用C语言点亮一个Led灯

在SDCC的bin文件夹中新创文本文件复制以下代码到文本中,并改名为LED.c;

#include<mcs51/8051.h>
 
void main()
{
    while(1)
    {
    P1=0b11111110;
    }
}

然后在键盘上按win+R键打开运行窗口,在运行窗口中输入cmd打开控制台,用cd命令切换当前工作目录到E:\根目录下,采取以下命令编译:

sdcc --std-sdcc89 led.c

结果是得到点亮一个LED灯C语言代码的执行文件—led.hex文件,然后在Edsim51中选择load按钮,将SDCC文件中bin文件夹里的执行文件led.hex加载进软件当中,最后点击按钮run进行仿真。
在这里插入图片描述

(3)Led灯周期性闪烁

我们将如下代码带入EdSim51中:

ORG 10 ;起始地址
 
START:SETB P1.0 ;端口置1
	  LCALL DELAY ;调用延时函数
	  CLR P1.0    ;端口置0
	  LCALL DELAY ;调用函数
	  AJMP START  ;跳转到START
	
DELAY: MOV R7,#250 ;延时函数
D1:	   MOV R6,#250
D2:    DJNZ R6,D2
	   DJNZ R7,D1
	   RET  ;
	   END ;

然后就可以使Led灯周期性闪烁了。

二. 在Edsim51,把汇编语言点亮Led1灯的代码,手工翻译转换为机器指令,与Edsim51 编译生成的机器码指令进行对比,查看是否一致。

Edsim51编译生成的机器码指令为:

CODE   MNEMONIC           HEX VALUE
-------------------------------------
0000   MOV A, #FEH        74 FE
0002   MOV P1, A          F5
 

三. 在Proteus中画出一个与Edsim51虚拟电路原理基本相同的电路,用Proteus仿真完成Led灯的点亮和闪烁,须分别采用以下方式:

(1)采用Proteus+SDCC 的C程序编程;

Led灯点亮

#include<mcs51/8051.h>
void main()
{
    while (1) {
        P1 = 0b11111110;
    }
}

Led灯闪烁

#include<mcs51/8051.h>
void delay(int i)			
{
	while (i--);	
}
 
void main()
{
	while (1) {
		P1 = 0b11111110;
		delay(50000);
		P1 = 0b11111111;
		delay(50000);
	}
}
(2)采用Proteus+Keil C51 的C程序编程;

Led灯点亮

#include<reg52.h>
 
void main ()
{
	
    while (1) {
        P1 = 0xFE;
    }
}

Led灯闪烁

#include<reg51.h>
 
sbit led=P1^0;
void delay()
{
	unsigned int i,j;
	for(i=0;i<1000;i++)
	for(j=0;j<5;j++);
}
void main(void)
{
	while(1)
		{
			led=0;
			delay();
			led=1;
			delay();
		}
}
(3)采用Proteus 内置汇编语言编译的方式。

Led灯点亮

  ORG  0000H
      MOV P1,#0FEH

Led灯闪烁

 ORG 0000H ;起始地址
CLR P1.0    ;端口置0
	  LCALL DELAY ;调用延时函数
	  SETB P1.0 ;端口置1
	  LCALL DELAY ;调用函数
	  AJMP START  ;跳转到START
DELAY: MOV R7,#250 ;延时函数
D1:	   MOV R6,#250
D2:    DJNZ R6,D2
	   DJNZ R7,D1
	   RET  ;返回主函数
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值