基于SDCC和Edsim51的代码仿真

基于SDCC和Edsim51的代码仿真

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

(一)汇编语言

1、代码
MOV 90H, #0xFE
或者
MOV 0x90,#0xFE
或者
MOV 0x90,#254
2、仿真

在这里插入图片描述

3、分析

因为LED0 接在P1.0端口上,8051中P1.0的地址固定为 90H,因此,对这个地址(指针)对应的寄存器写入立即数 0(低电平),就可以是 LED0电路导通,亮灯。

(二)c语言

1、代码
#include<mcs51/8051.h>voidmain()
{
	while(1)
	{
		P1=0b11111110;
	}
}
2、仿真

(1)到D:\SDCC\bin目录下先新建一个文本文档led1.text,copy 下列C代码文件在此目录下,然后

将文件名改为led1.c。并将c语言代码写入

(2)然后再命令行窗口中输入d:,在输入cd D:\SDCC\bin,切换到bin目录下,采用命令编译

sdcc --std-sdcc89 led1.c

(3)编译成功出现ihx文件

在这里插入图片描述

(4)接着采用命令编译将ihx文件转化为hex文件,命令如下:

packihx led1.ihx > led1.hex

(5)编译成功出现hex文件

在这里插入图片描述

(6)打开edsim51,点击new,load,选择生成的hex文件,然后然后在 update freq 选择 50000 ,点击 run 按钮,如下得到结果:

在这里插入图片描述

(三)周期性闪烁

1、C语言代码

#include<mcs51/8051.h>
void Delay(unsigned int t);
void main (void)
{
	while(1)
	{
		p1=0b11111110;
		Delay(10000);
		P1=0b11111111;
		Delay(10000);
	}
}
void Delay(unsigned int t)
{
	while(--t);
}

2、汇编语言

LOOP:SETB 90H 
	LCALL DELAY
	CLR 90H
	LCALL DELAY
	AJMP LOOP
	
DELAY: MOV R7,#250
D1:	MOV R6,#250
D2: DJNZ R6,D2
	DJNZ R7,D1
	RET
	END

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

(一)汇编语言

MOV90H,#0xFE

(二)机器语言

1)手工翻译
MOV对应机器码为74
90H对应机器码为90
#0xFE对应机器码为FE
(2)Edsim51 编译生成的机器码指令
MOV对应机器码为75 90H对应机器码为90
#0xFE对应机器码为FE

在这里插入图片描述

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

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

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

(二)采用Proteus+Keil C51 的C程序编程

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

(三)采用Proteus 内置汇编语言编译的方式

ORG 0000H
MOV 90H,#0FEH

Keil C51 的C程序编程

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

(三)采用Proteus 内置汇编语言编译的方式

ORG 0000H
MOV 90H,#0FEH
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值