基于SDCC和Edsim51的代码仿真


一、SDCC和Edsim51介绍

1.SDCC

SDCC是一款免费开源的编译器,它支持标准(ANSI C89 / ISO C90,ISO C99,ISO C11 /ISO C17)C编译。SDCC是由Sandeep Dutta为8位单片机设计的编译器,支持MCS51(8051,8052,8031,8032等)、STM8、PIC、DS80C390,HC08,Z80等十几种架构的单片机的编译。SDCC还是一款跨平台的编译器,支持windows、linux和Mac OS,同一个代码工程可以在不同平台编译和调试。

2.Edsim51

EdSim51(Education Simulation 8051)是一个用于学习和模拟 8051 微控制器的教育软件。它提供了一个仿真环境,允许用户编写、编辑、调试和运行 8051 微控制器的汇编语言程序。 EdSim51 提供了一个实时的仿真环境,可以模拟 8051 微控制器的运行情况。用户可以在仿真环境中编写程序并立即查看其执行结果,而无需实际的硬件设备。EdSim51 包含了一个功能丰富的编辑器和调试器,使用户可以方便地编写、编辑和调试汇编语言程序。调试器可以帮助用户定位和修复程序中的错误。 EdSim51 支持多种8051微控制器的指令集,包括标准的 8051 指令集以及一些扩展指令集。这使得用户可以在仿真环境中尝试不同的指令集,并了解它们之间的区别和优劣。

二、Edsim51虚拟开发板上点亮一个Led灯

1.C语言实现点亮一个LED灯

C语言点灯代码如下:

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

在SDCC目录的bin文件下创建led.c文件,在命令终端输入指令进行编译:
在这里插入图片描述
用 sdcc 配套的工具程序 packihx 把ihx文件转换为 hex 文件:
在这里插入图片描述
打开Edsim51,将生成的led1.hex文件加载到软件中,点击运行:
在这里插入图片描述
观察到P1.0端口为高电平,LED灯点亮

2.汇编语言实现点亮一个LED灯

ORG 0000H
MOV P1 ,#0FEH
END 

将程序写入软件,观察LED灯点亮情况:
在这里插入图片描述

3.汇编语言点亮Led1灯的代码翻译转换为机器指令

首先,MOV 指令的操作码为 MOV A, immediate,其中 A 是累加器,immediate 是立即数。

P1是目标寄存器,即端口0的寄存器。

#0FEH 是立即数,代表要写入端口0的值,其中 0xFE 的二进制表示为 11111110,我们假设 LED1 连接在 P0 的最低有效位,因此我们想要的是 00000001,即将 P0 的第一位设置为高电平以点亮 LED1。

因此,需要将 MOV P0, #0FEH 转换为对应的机器指令。

首先,MOV 指令的操作码是 MOV A, immediate,即 74H。
立即数 0xFE 转换为十六进制为 FEH。
因此,MOV P0, #0FEH 汇编指令对应的机器指令是:

MOV A, #FEH
MOV P1, A

其中,第一条指令 MOV A, #FEH 的机器指令表示为 74 FE,第二条指令 MOV P0, A 的机器指令表示为 F5。

所以,将上述汇编语言点亮 LED1 的代码手工翻译为机器指令后是:

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

三、Proteus完成Led灯的点亮和闪烁

1.采用Proteus+SDCC 的C程序编程

将上文生成的led.hex文件加载到Proteus中,观察结果:
在这里插入图片描述

2.采用Proteus+Keil C51 的C程序编程

在这里插入图片描述
观察结果:
在这里插入图片描述

3.采用Proteus 内置汇编语言编译的方式

在Proteus的内置汇编语言中输入汇编代码:
在这里插入图片描述
编译,观察结果:
在这里插入图片描述

四、总结

本次实验进一步熟悉了LED点灯实验,熟练应用了SDCC编译,Edsim51仿真软件,Proteus画电路图;通过汇编语言与C语言分别在Edsim51软件与Proteus中成功点亮了LED灯,培养了硬件设计与硬件编程的能力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值