基于SDCC和Edsim51的代码仿真

文章详细介绍了使用汇编语言和C语言在Edsim51虚拟开发板上控制LED灯的方法,包括代码编写、仿真过程以及如何在Proteus中实现LED的点亮和闪烁。还涉及了汇编语言的机器指令转换和不同IDE的编程示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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
内容概要:本文档详细介绍了Android开发中内容提供者(ContentProvider)的使用方法及其在应用间数据共享的作用。首先解释了ContentProvider作为四大组件之一,能够为应用程序提供统一的数据访问接口,支持不同应用间的跨进程数据共享。接着阐述了ContentProvider的核心方法如onCreate、insert、delete、update、querygetType的具体功能与应用场景。文档还深入讲解了Uri的结构作用,它是ContentProvider中用于定位资源的重要标识。此外,文档说明了如何通过ContentResolver在客户端应用中访问其他应用的数据,并介绍了Android 6.0及以上版本的运行时权限管理机制,包括权限检查、申请及处理用户的选择结果。最后,文档提供了具体的实例,如通过ContentProvider读写联系人信息、监听短信变化、使用FileProvider发送彩信安装应用等。 适合人群:对Android开发有一定了解,尤其是希望深入理解应用间数据交互机制的开发者。 使用场景及目标:①掌握ContentProvider的基本概念主要方法的应用;②学会使用Uri进行资源定位;③理解并实现ContentResolver访问其他应用的数据;④熟悉Android 6.0以后版本的权限管理流程;⑤掌握FileProvider在发送彩信安装应用中的应用。 阅读建议:建议读者在学习过程中结合实际项目练习,特别是在理解实现ContentProvider、ContentResolver以及权限管理相关代码时,多进行代码调试测试,确保对每个知识点都有深刻的理解。
开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问操作其权限范围内的功能数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露非法访问。 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况
开发语言:Java 框架:SSM(Spring、Spring MVC、MyBatis) JDK版本:JDK 1.8 或以上 开发工具:Eclipse 或 IntelliJ IDEA Maven版本:Maven 3.3 或以上 数据库:MySQL 5.7 或以上 此压缩包包含了本毕业设计项目的完整内容,具体包括源代码、毕业论文以及演示PPT模板。 项目配置完成后即可运行,若需添加额外功能,可根据需求自行扩展。 运行条件 确保已安装 JDK 1.8 或更高版本,并正确配置 Java 环境变量。 使用 Eclipse 或 IntelliJ IDEA 打开项目,导入 Maven 依赖,确保依赖包下载完成。 配置数据库环境,确保 MySQL 服务正常运行,并导入项目中提供的数据库脚本。 在 IDE 中启动项目,确认所有服务正常运行。 主要功能简述: 用户管理:系统管理员负责管理所有用户信息,包括学生、任课老师、班主任、院系领导学校领导的账号创建、权限分配等。 数据维护:管理员可以动态更新维护系统所需的数据,如学生信息、课程安排、学年安排等,确保系统的正常运行。 系统配置:管理员可以对系统进行配置,如设置数据库连接参数、调整系统参数等,以满足不同的使用需求。 身份验证:系统采用用户名密码进行身份验证,确保只有授权用户才能访问系统。不同用户类型(学生、任课老师、班主任、院系领导、学校领导、系统管理员)具有不同的操作权限。 权限控制:系统根据用户类型分配不同的操作权限,确保用户只能访问操作其权限范围内的功能数据。 数据安全:系统采取多种措施保障数据安全,如数据库加密、访问控制等,防止数据泄露非法访问。 请假审批流程:系统支持请假申请的逐级审批,包括班主任审批院系领导审批(针对超过三天的请假)。学生可以随时查看请假申请的审批进展情况。 请假记录管理:系统记录学生的所有请假记录,包括请假时间、原因、审批状态及审批意见等,供学生审批人员查询。 学生在线请假:学生可以通过系统在线填写请假申请,包括请假的起止日期请假原因,并提交给班主任审批。超过三天的请假需经班主任审批后,再由院系领导审批。 出勤信息记录:任课老师可以在线记录学生的上课出勤情况,包括迟到、早退、旷课请假等状态。 出勤信息查询:学生、任课老师、班主任、院系领导学校领导均可根据权限查看不同范围的学生上课出勤信息。学生可以查看自己所有学年的出勤信息,任课老师可以查看所教班级的出勤信息,班主任院系领导可以查看本班或本院系的出勤信息,学校领导可以查看全校的出勤信息。 出勤统计与分析:系统提供出勤统计功能,可以按班级、学期等条件统计学生的出勤情况,帮助管理人员了解学生的出勤状况
### SDCC 编译器用于 8051 微控制器的设置与使用 #### 设置环境 为了配置并使用 SDCC 编译器来开发针对 8051 的应用程序,首先需要安装 SDCC 工具链。可以通过官方源码或者预构建包完成安装过程[^1]。对于 Linux 用户来说,可以利用包管理工具(如 `apt` 或者 `yum`)直接安装;而对于 Windows 平台,则推荐下载可执行文件版本。 ```bash sudo apt-get install sdcc ``` 上述命令适用于 Debian 及其衍生发行版,例如 Ubuntu。 #### 创建简单的 C 程序 下面展示了一个基本的例子,该例子展示了如何通过控制端口 P1 来操作 LED: ```c #include <reg51.h> void delay(unsigned int time); void main() { while (1) { P1 = 0xFF; /* 关闭所有的LED */ delay(500); /* 延迟一段时间 */ P1 = 0x00; /* 所有LED亮起 */ delay(500); } } /* 定义延时函数 */ void delay(unsigned int time){ unsigned int i, j; for(i=0;i<time;i++) for(j=0;j<1275;j++); } ``` 此代码片段实现了循环切换连接到P1端口上的八个LED的状态[^2]。 #### 使用 SDCC 进行编译 保存上面的代码至名为 blink.c 文件之后,在终端输入如下指令来进行编译: ```bash sdcc -mmcs51 --model-small blink.c ``` 这里 `-mmcs51` 参数指定了目标架构为 MCS-51 系列微处理器,而 `--model-small` 则选择了小型内存模型。 成功编译后会生成多个输出文件,其中最重要的就是 `.hex` 文件,它包含了可以直接烧录进芯片中的机器码数据。 #### 配合 EDSIM51 进行模拟测试 EDSIM51 是一款专门用来调试验证 Intel 8051 单片机程序行为的应用软件。由于 edsim51 不支持直接解析由高级语言产生的 .rel/.abs 格式的中间产物,因此必须先依靠像 SDCC 这样的外部工具将其转化为标准汇编形式再进一步处理成最终的目标二进制镜像(.hex)[^2]。 一旦拥有了合适的 hex 文件,就可以加载入 edsimmulator 中启动仿真流程了。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值