Linux命令行51单片机汇编语言开发环境搭建和开发入门:vim+as31+emu8051

本文介绍了在Linux环境下利用vim、as31和emu8051进行8051单片机汇编语言开发的过程,包括工具安装、编写汇编程序、编译和命令行/图形界面仿真。同时对比了KeilIDE的局限性,适合希望深入了解底层和使用Linux的开发者。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


Keil?

如果你已经查阅了一些关于使用汇编语言进行51单片机开发的资料,你会发现他们大多使用了keil作为开发ide。客观的说,keil作为一个入门ide有其不可替代的优势。使用keil你可以几乎不去关心代码的编译过程和环境的配置,这显然是对新手入门极其友好的。

但是,如果你深入希望了解单片机结构,或者你是一个已经有相当的开发经验,希望提高开发效率并深入底层,又或者你希望使用linux进行51单片机的开发,那么keil不甚良好的扩展性和无法跨平台的特性就显得有些不合时宜了。因此,本文介绍了在linux下进行8051单片机汇编语言开发的编译和仿真工具。


一、工具介绍

as31

as31是一个linux下的命令行汇编语言编译工具,遵循intel 8051标准。
其manal页面如此描述:

DESCRIPTION
As31 assembles infile.asm into one of several different output formats. The output will be in a file called infile.obj. The .asm extenstion is required.
As31 将 infile.asm 汇编成几种不同的输出格式之一。输出将位于名为 infile.obj 的文件中。 .asm 扩展名是必需的。

关于8051汇编语言的标准

8051汇编语言有多种标准,常见的如:

intel 8051: 8051微控制器的原始汇编语言,由Intel设计。
keil 8051: 是Intel 8051的超集,添加了一些额外的指令和功能。但基本语法与Intel 8051兼容。
其他: SDCC 8051、Hi-Tech 8051…

as31使用intel标准的intel 8051汇编,如果你尝试使用它进行编译使用keil汇编语言编写的程序,你会得到一堆的错误 : )
因此,如果你的程序在编译是出现了语法错误,请检查你的程序是否遵循了intel 8051汇编语言的标准。
你可以使用man as31查看as31支持的汇编语言语法格式。
在这里插入图片描述

emu8051

emu8051是linux下的8051 单片机的仿真器和模拟器,主要用于程序的仿真验证。
它同时具备命令行模式和gui模式,你可以在命令行使用emu8051-cli使用命令行模式,emu8051-gtk使用gui模式。
在这里插入图片描述
在这里插入图片描述
其manal页面:

DESCRIPTION
emu8051 is a simulator/emulator for the Intel 8051 family of microcon‐trollers. It is available in two versions: a console (text-only) ver‐sion and a graphical version (using the GTK+ toolkit). This is an Open-Source project. The program can load Intel HEX files.
Once loaded, a program can be run (it will run indefinitely or until a breakpoint is encountered). You can also use the STEP button to execute only a single instruction at a time and see the effects on registers and memory.
It is written in C++, and uses Perl scripts to generate automatically C++ functions corresponding to each assembly instruction of the 8051 microcontroller.
emu8051 是 Intel 8051 系列微控制器的模拟器/仿真器。 它有两个版本:控制台(纯文本)版本和图形版本(使用 GTK+ 工具包)。 这是一个开源项目。 该程序可以加载 Intel HEX 文件。
一旦加载,程序就可以运行(它将无限期地运行或直到遇到断点)。 您还可以使用 STEP 按钮一次仅执行一条指令,并查看对寄存器和内存的影响。
它是用C++编写的,并使用Perl脚本自动生成与8051微控制器的每条汇编指令相对应的C++函数。

vim配置

本文假定你已经接触过vim,如果你想了解vim的基本使用,请搜索vim相关文章。

一般来说,汇编文件不太需要语法检查。
如果你已经开启vim的语法检查功能,在asm中你可能会因为检查规则不正确得到莫名其妙的报错,如果你遇到了这一问题,你可以在你的vimrc文件中添加let g:syntastic_mode_map = { 'mode': 'active', 'passive_filetypes': ['asm'] }以关闭asm文件的语法检查功能。

二、工具安装

在debian系的linux发行版中,您可以使用apt工具进行安装。

sudo apt install as31 emu8051

三、编写汇编程序

作为例子,我们使用vim编写一个交换字节高低位并赋给其他地址的程序,源码如下:
在这里插入图片描述

四、编译得到hex文件

使用as31进行编译
在这里插入图片描述
编译成功。
可以看到得到了hex文件,这就是我们的输出了。

三、仿真验证

尝试gui仿真

首先尝试使用gui界面,如果你想使用命令行请跳过这一段。

在命令行使用emu8051-gtk打开gui界面。

1 准备工作

为了方便我们观察,我们选择页面顶部的view -> layout -> layout2并重启emu8051。
在这里插入图片描述
在这里插入图片描述

2 导入hex文件

左上角选择File -> Open Intel Hex file
在弹出的窗口中找到我们刚刚生成的hex文件并点击确认。
这样我们的hex文件就成功导入了。

3 界面元素介绍

我们可以看到界面分为4个区:分别是
Registers: 寄存器
Program: 程序,即我们的汇编程序
Internal memory: 内置存储
External memary: 外置存储

左上角有四个按钮:从左向右依次为复位、运行、停止、单步运行。

按钮右侧为PSW寄存器和仿真时间。

4 开始调试

我们在IRAM中将0000H的值改为7F,开始运行。
等待一段时间,点击停止。
可以看到程序运行成功。
在这里插入图片描述

命令行仿真

在命令行输入emu80051-cli打开命令行仿真器:
在这里插入图片描述
完成仿真。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
51汇编集成开发环境是基于windows环境的单片机汇编软件开发平台,它集源程序的编辑、汇编、反汇编和全软件仿真调试于一体,功能齐全,使用方便,适用于MCS48、MCS51和AVR系列单片机。<br> <br> 51汇编集成开发环境具有以下特点:<br> 1、源程序的编辑允许使用中文,其标号、操作码、操作数、注释均可使用中文。(详见使用说明)<br> 2、汇编过程中发现的错误,全部记录在*.err文件中,方便对照查处。<br> 3、反汇编按指令流进行,智能分段,自动添加标号,自动区分数据与代码,反汇编生成的源程序还可以直接进行汇编。(优质反汇编的前提是目标代码必须是从0地址开始的全部程序代码,本软件不支持对部分程序段的反汇编。)<br> 4、全软件仿真可以进行单步运行、设断点运行、全速运行,可以即时查看片内资源状态,可以在运行中进行I/O输入,可以直接参与串行通讯的发送与接收。<br> 5、丰富的辅助工具为应用系统的开发提供了方便:<br> 目标代码的转换:可以将二进制代码文件(*.bin)转换为十六进制代码文件(*.hex)或文本格式的代码文件(*.obj),也可以将十六进制代码文件(*.hex)或文本格式的代码文件(*.obj)转换为二进制代码文件(*.bin)。<br> 源程序移植:可以将MCS48单片机的源程序转换为MCS51单片机的源程序,为用51单片机替换或改造原有的48单片机系统提供了方便。<br> 初始化设置:使你在使用定时计数器、串行通讯和中断系统时,不需要再为设置相应的寄存器而烦恼。<br> 实用子程序:不仅提供了一些实用的子程序供您选用,还提供了一个开放的用户程序库,让你自由添加自己的实用子程序。<br> 点阵字模:可为你提取16*16点阵的汉字字模和8*16点阵的字符字模数据,为使用汉字显示提供了方便。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值