使用Edsim51点亮LED灯

目标概述:

根据我们之前所学的相关内容,我们将仍然使用Proteus、Keil软件,以及现在新接触的Edsim51软件和编译器SDCC,共同实现点亮LED灯的操作。

首先我们看到在Edsim51软件中,LED灯的连接如下图:

 可以看到左侧的LED 0~7 灯连接在 8051 P1 口,而且是共阳极连接,也就是 P1 各口设置为低电平( 即为 0 )时,相应的灯就会亮,下面的程序点亮LED 0 灯(其他灯灭)。

一、汇编语言

 汇编语言比较简单,因为LED0 接在P1.0端口上,8051P1.0的地址固定为 90H,因此,对这个地址 (即指针)对应的寄存器写入立即数 0(即低电平),就可以是 LED0电路导通,亮灯。 对应的汇编命令是:(三条中的任意一条代码都可以)

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

任选一条代码,粘贴上去后,根据箭头所指操作,点击 run 即可完成点亮。第二张图即编译运行后的界面所示。可以看到代码区域以及在运行;同时左下角对应 0 的方格亮起,即代表点亮成功。

思考题:MOV 90H, #0xFE 为什么 操作数之前要加上 # ? 如果去掉 后,又是什么含义?结果正常吗?

答:在汇编语言中,#符号通常用于表示立即数(immediate value)。在指令 MOV 90H, #0xFE 中, #0xFE 表示将立即数 0xFE 移动到地址为90H的内存单元中。

如果去掉#符号,指令将变成 MOV 90H, 0xFE ,这意味着将存储在地址 0xFE 处的内容移动到地址90H的内存单元中。因为它不再是一个立即数,而是一个内存地址,这样做可能会导致其他结果,以至于无法正常运行。

注意事项:在仿真运行之前,Edsim51的Update Frequency (刷新频率)要加大到10000及以上才可以正常运行。

二、C语言

由于Edsim51软件的局限性,它只可以编译汇编语言。因此,对于C语言编写的程序,需要借助其他的C编译器转换为汇编和二进制执行程序(.hex 文件)才能正常的仿真运行(比如 SDCC for 8051 或 Keil for 8051)。这里我们用 SDCC 4.3.0 为例演示。

其下载地址:Small Device C Compiler (SDCC) download | SourceForge.net

 这里我们将其安装到 D 盘中,方便后续演示,如果有安装其他版本的 SDCC 记得先卸载。安装完成之后,其编译链工具程序在 bin 文件夹下:

 首先我们先在 bin 文件下新建一个文本文件,在该文件内编写C语言程序,然后保存为 " .c " 后缀文件。

具体代码如下:

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

然后我们使用 win+R 打开windows 命令行窗口,输入 cmd ,然后用cd 命令切换当前工作目录到 D:\ 根目录下,然后用下例指令编译刚才的c文件(这里我的文件为 led01.c ),具体指令、操作如下:

D:  //转到D盘

cd D:\SDCC 4..3.0\bin  //打开文件目录下

sdcc --std-sdcc89 led01.c  //编译

packihx led1.ihx > led1.hex   //把ihx文件转换为 hex 文件

可以看到以及出现我们需要的 " .hex " 文件。

然后我们在根据箭头指示,点击 " New " 和 " Load ",选择我们生成的 " .hex " 文件。

再点击 " Run " 即可运行仿真。 

值得注意,这次在仿真运行之前,Edsim51的Update Frequency (刷新频率)要加大到50000。

附文:可能遇到的 " .c " 文件转换问题

其中有些电脑的配置或者系统原因等,直接在文件还后面添加 " .c " 无法转换为c语言文件,则要使用下面一种方法:

即,把保存类型改为 "所有文件" ,编码改为 " ANSI " ,然后再保存,就可以成功保存为c文件。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值