基于SDCC和Edsim51的代码仿真

一.LED灯点亮

1.汇编语言

当使用汇编语言点亮LED灯,由于LED灯在P1.0端口(地址90H)在其中写入0便可以点亮。

MOV 90H, #0xFE
或者
MOV 0x90,#0xFE
或者
MOV 0x90,#254

便可以得到以下结果:

2.C语言

代码如下:

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

这时候需要借用SDCC来编译如下:

首先使用命令窗口找到sdcc的bin文件后将led1.c放入再输入指令“sdcc --std-sdcc89 led1.c”得到图中显示:

其中会出现.ihx文件,使用指令“packihx led1.ihx> led1.hex”将其转化为.hex指令;

再到edsim51找到文件并仿真:

最后得到如下结果。

3.关于LED闪烁:

(1).汇编语言:


ORG 0H        ; 程序起始地址

MOV P1, #00H  ; 将P1口置为低电平

LOOP:
    SETB P1.0  ; 将P1.0口置为高电平
    ACALL DELAY ; 调用延时函数
    CLR P1.0   ; 将P1.0口置为低电平
    ACALL DELAY ; 调用延时函数
    SJMP LOOP  ; 无条件跳转到LOOP标签

DELAY:
    MOV R0, #0FFH ; 设置延时计数器初值
DELAY_LOOP:
    DJNZ R0, DELAY_LOOP ; 延时计数器递减,直到为0
    RET ; 返回

END           ; 程序结束

如图所示:

(2).c语言:
 

	#include <mcs51/8051.h>
	//延迟函数
	void delay_ms(int a)
	{
		while(--a);
	}
	
	void main(void)
	{
		while(1)
		{
			P1=0b11111110;
			delay_ms(10000);
			P1=0b11111111;
			delay_ms(10000);
		}
	}

二、在Edsim51,把汇编语言点亮Led1灯的代码,手工翻译转换为机器指令

汇编语言:

MOV 90H, #0xFE
MOV74
90H90
#0xFEFE

edsim51生成的机器码指令

三、在proteus上完成仿真

电路图如图所示:

1.sdcc中c语言

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

点亮后:

2.keil c51中c语言

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

点亮后:

3.proteus中汇编

      ORG 0000H
      MOV 90H ,#OFEH

在芯片右键选择最下面编译源代码后:


之后点亮:

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值