基于SDCC和Edsim51的代码仿真

采用汇编语言与C语言两种方式,在Edsim51虚拟开发板上点亮一个Led灯

1.用win+R键打开运行窗口,再输入cmd打开控制台,进入到D盘目录,用 mkdir 命令创建一个实验 目录 led_test,创建或copy 下列C代码文件如:

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

然后用sdcc --std-sdcc89 led1.c命令编译
注意:上面包含头文件 mcs51 目录下的 8051.h ,里面定义了各个寄存器的宏定义,比如 P1 、 TCON
等,不同公司的芯片其寄存器的地址可能不一样, edSim51 仿真的芯片采用的就是 mcs51 的8051芯
片。
另一个注意的地方是 main 函数是没有返回值的。
第三个注意的地方是程序里为了表示 P1 口的各个位( bit )的值,使用了 0b11111110 这样的二进制字面
量,这是非标准的 sdcc 扩展,为此,需要在编译的时候指定 --std-sdccxx 编译选项,这里 xx 需要按需
要替换为 89 、 99 、 11 、 2x 以适应不同标准,下面是一个参考命令:sdcc --std-sdcc89 led1.c
如果编译成功的话,可以在当期目录下生成需要 led1.* 的文件,其中包括 ihx 文件: led1.ihx ,然后
需要用 sdcc 配套的工具程序 packihx 把ihx文件转换为 hex 文件,操作命令如下:

sdcc --std-sdcc89 led1.c

成功的话可以得到 led1.hex 执行程序,然后我们就可以用 edSim51 仿真器中的 load 按钮加载 hex 进行仿真 run。
如果编译成功的话,可以在当期目录下生成需要 led1.* 的文件,其中包括 ihx 文件: led1.ihx ,然后需要用 sdcc 配套的工具程序 packihx 把ihx文件转换为 hex 文件,操作命令如下:

packihx led1.ihx > led1.hex

2.使用EdSim51进行仿真
直接双击打开edsim51di.jar文件
在这里插入图片描述
3.采用汇编语言点亮LED灯
点击nwe,输入以下代码:

MOV 90H, #0xFE

点击save按钮,然后run
在这里插入图片描述
4.采用C语言点亮LED灯
EdSim51中点击Load,将led1.hex文件打开,将更新频次增加到10000
在这里插入图片描述
5.让Led灯周期性闪烁,过程与上相似
汇编代码如下:

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 ;指令结束

c语言代码如下:

#include<mcs51/8051.h>
void delay(int i)			
{
	while (i--);	
}
 
void main()
{
	while (1) {
		P1 = 0b11111110;
		delay(50000);
		P1 = 0b11111111;
		delay(50000);
	}
}
 

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

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

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

在Proteus中画出一个与Edsim51虚拟电路原理基本相同的电路,用Proteus仿真完成Led灯的点亮和闪烁

将上述的.hex文件加载到Proteus中
结果如下:
在这里插入图片描述
Proteus+keil
keil源码:

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

效果图:
在这里插入图片描述

总结

基于SDCC和Edsim51的代码仿真可以帮助我调试和验证单片机程序的功能,对于我们来说是一个很好的学习工具。

  • 54
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值