keil汇编程序设计实例
Keil创建一个汇编程序地步骤

Keil创建一个汇编程序的步骤1、在C盘新建文件夹“实验一”,启动Keil2、建立一个新工程,单击Project菜单,在弹出的下拉菜单中选中NewProject选项,如图1 - 1所示。
Fih Edit Yi的'■■ 1 ■ ■project Bebu( Ptriph«rtls Tools SVCS Yindor Htlpijt £00窟圏|©|| 1憾皆幽昌■ HarProject?^ |[■port J1 Visionl Projects"Qp«i Project图1 - 13、然后选择你要保存的路径“ C:/实验一”,输入工程文件的名字“实验一”,然后点击保存。
4、这时会弹出一个对话框,要求你选择单片机的型号,这里选择Atmel89C51,如图1 - 2所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定。
完成后,屏幕如图 1 —3所示。
CPU |Vendor:Atm«lDevic«:AT89CS2rFamily:■CS-S1rQ.*t«・tpti on:Select Devi c* for Tar1"Us* E M• *nd«d [ink" CLX51 ) i nxt «*d BIS IUst E KTL dc-<1 AxsfefftbLtr (AXH〕i tiEr lE.d. ◎£ J M-» 1Ell. Edu 0“C«buc PtL>pb*rdl looli SVCS findow ]|tlp窗aH 0 融・1© 口 JS1 B B^"|「°. 宰塞>4%戈怡鹽TI「— - ----------------- --- -----■_ -——■—— …’ ----------------------------- ---- - ------------ 一― J -ss5sa^» [f^—r■*■胴ow5、在图1- 3中,单击“ File ”菜单,再在下拉菜单中单击“NeW'选项。
Keil 的使用与汇编语言上机操作 实验报告

实验名称 Keil 的使用与汇编语言上机操作指导教师罗志祥专业班级光电1406 姓名段昳晖学号 U2014***** 联系电话 137******一、任务要求1.掌握Keil环境的使用1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。
2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。
2. 编写多个十六位数的加法程序有4个十六位无符号数,连续存放在20H开始的片上数据区中,低八位先存,高八位在后。
要求:和存于R3(高八位)和R2(低八位),进位位存于R4.二、设计思路1.掌握Keil环境的使用1)字节拆分、合并利用汇编语言中的XCHD和SWAP两个语句来实现将八位二进制数拆分为两个四位二进制数并分别存储于不同的存储空间的功能,BCD码与30H相或(加上30H)得到ASCII 码。
将两个ASCII码和0FH相与(高四位清零)得到BCD码,利用SWAP语句将高位数放至高四位,将高位数和低位数相或可实现字节的合并。
2)数据块填充将R0用作计数器,DPTR用作片外数据指针,A作为原始数据来源,依顺序在片外的存储单元内容填充数据。
利用循环语句来减少程序长度,并控制填充单元个数为片外100H个。
利用RO的进位实现,当且仅当RO=00H时,结束循环赋值过程,此时R0已经经历了从00H-0FFH的过程,即计数周期为100。
同时赋值循环也历经了一百次,完成了将片外RAM 7000H-70FFH单元按数据依次递增规律的填充。
2.多个十六位数的加法程序以2个十六位无符号数相加为基础,将输入的4个无符号数(以a、b、c、d代表),两两相加,所得的2个和,再作为加数,求和,得到4个数的和。
其中需要注意的是进位的处理。
四数求和进位,不仅有两和数相加产出的进位还要加上产生两和数时的进位。
其中2个十六位无符号数相加的原理为,先对两数低位求和,提取出其进位,加到两数高位和中,并将高位求和进位,即两数求和进位保存下来。
基于Keil的51单片机汇编程序多文件编译

段名 S E G M E N T 类型
可重定位段的存储类型有 : B I T 、 C O D E 、 D A T A、 I D A T A和 X D A T A 五种 ,分别与五个绝对地址段的指令相对应 。
一
个段在定义完成之后必须通过 R S E G指令选择激 活才能使用 。 当
■陈彩欢 甘 露。
本文结合 K e i 1 V i S i o n 2 程序 开发流程,描述 了 5 1单片机汇编程
通过 该方式 实 现多 文件 编译时 ,插 入 的源文件 既可 以是 扩展 名
为. A S M 的汇编源程序文件 ,也可 以是扩展名为. I N C的包 含文件。注意 在被包含 的源 文件结尾不 能有 E N D指令 ,否则编译会停止运行。
通过多文件编译的使用大大提高了汇编程由于绝对地址段在定义的时候对地址进行了分配链接定位器不序代码的可读性可扩展性同时也很大程度地提高程序代码的执行效能够对其地址进行更改因此很容易造成地址重叠或者内存空间浪费率以及内存空间的使用率避免内存空间的浪费
2 0 1 4年第 7期
电子通信技术
基于 K e i l 的5 1 单 片机汇编程序 多文件编译
通过可重定位段 的使 用 ,在编译 的链接 阶段 , 链 接/ 定位器会将各 个具有相同段名的段合并成一个段 , 并分配绝对地址 , 生成包含绝对地 址的 目标文件和扩展名为. M 5 1 的地址文件。
模块的概念进行描述。
一
个段可以是一块 程序代码 或者是 一个数 据块 。 根据其地址空间是
能够对其地址进行更改 ,因此很容易造成地址重叠或者内存空间浪费 ,
而且在后续对程序进行维护 、 升级 的时候很有 可能需要重新对地址进行 分配 , 非常不利 于程序 的扩展和维护 。 因此绝对地址段通 常是用在某些 特定的场合 ,例如确定中断 向量的人 口地址 、数据存储空间等。 3 、通过可重定位段 实现多文件编译
单片机汇编语言设计实例详解

单片机汇编语言设计实例详解引言:单片机是嵌入式系统中常见的控制器,它具有体积小、功耗低、成本低等特点,被广泛应用于家电、汽车、工业控制等领域。
而汇编语言作为单片机的底层语言,直接操作硬件资源,具有高效性和灵活性。
本文将以一个实例,详细讲解如何使用单片机汇编语言进行设计。
实例背景:假设我们要设计一个温度检测系统,要求实时监测环境温度,并在温度超过某个阈值时触发报警。
硬件准备:1. 单片机:我们选择一款常用的8051单片机作为例子。
2. 温度传感器:我们选择一款数字温度传感器,它可以通过串行通信与单片机进行数据交互。
3. 显示屏:为了方便实时显示温度信息,我们选用一款数码管显示屏。
软件准备:1. Keil C51:这是一款常用的单片机开发软件,支持汇编语言的编写和调试。
2. 串口调试助手:用于测试串口通信功能。
设计步骤:1. 硬件连接:将单片机与温度传感器、显示屏连接起来。
注意接线的正确性和稳定性。
2. 编写初始化程序:使用汇编语言编写单片机的初始化程序,包括端口初始化、中断向量表设置、定时器初始化等。
3. 串口通信设置:通过串口与温度传感器进行数据交互,需要设置串口通信的波特率、数据位数、停止位等参数。
4. 温度检测程序:编写汇编语言程序,实时读取温度传感器的数据,并将数据送至显示屏进行显示。
5. 温度报警程序:在温度超过设定阈值时,触发报警程序,可以通过蜂鸣器等外设发出警报信号。
6. 调试与测试:使用Keil C51进行程序调试,通过串口调试助手测试串口通信和温度显示、报警功能。
设计思路:1. 初始化程序设计:先设置端口的输入输出方向,再设置中断向量表,最后初始化定时器。
这样可以确保程序的稳定性和可靠性。
2. 串口通信设置:根据温度传感器的通信协议,设置串口的波特率、数据位数、停止位等参数。
注意要与传感器的通信规范保持一致。
3. 温度检测程序设计:通过串口读取温度传感器的数据,并进行相应的处理。
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例

有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子对这个过程进行描述,希望能对初学者有所帮助。
几年来,在这个论坛里笔者得到很多热心人指导,因此也希望藉此尽一点绵薄之力。
在这个例子里,阐述了编写c51程序调用汇编函数的一种方法,这个外部函数的入口参数是一个字符型变量和一个位变量,返回值是一个整型变量。
例中,先用c51写出这个函数的主体,然后用SRC控制指令编译产生asm文件,进一步修改这个asm文件就得到我们所要的汇编函数。
该方法让编译器自动完成各种段的安排,提高了汇编程序的编写效率。
step1. 按写普通c51程序方法,建立工程,在里面导入main.c文件和CFUNC.c文件。
相关文件如下://main.c文件#include < reg51.h >#define uchar unsigned char#define uint unsigned intextern uint AFUNC(uchar v_achr,bit v_bflag);void main(){ bit BFLAG; uchar mav_chr; uint mvintrslt; mav_chr=0xd4; BFLAG=1; mvintrslt=AFUNC(mav_chr,BFLAG);}//CFUNC.c文件#define uchar unsigned char#define uint unsigned intuint AFUNC(uchar v_achr,bit v_bflag){ uchar tmp_vchr; uint tp_vint; tmp_vchr=v_achr; tp_vint=(uint)v_bflag; return tmp_vchr+(tp_vint<<8);}step2. 在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;step3. 根据选择的编译模式,把相应的库文件(如Small 模式时,是Keil\C51\Lib\C51S.Lib)加入工程中,该文件必须作为工 程的最后文件;step4. build这个工程后将会产生一个CFUNC.SRC的文件,将这个文件改名为CFUNC.A51(也可以通过编译选项直接产生CFUNC.A51文件),然后在工程里去掉库文件(如C51S.Lib)和CFUNC.c,而将CFUNC.A51添加到工程里。
Keil创建一个汇编程序的步骤

Keil创建一个汇编程序的步骤1、在C盘新建文件夹“实验一”,启动Keil2、建立一个新工程,单击Project菜单,在弹出的下拉菜单中选中New Project选项,如图1-1所示。
图1-13、然后选择你要保存的路径“C:/ 实验一”,输入工程文件的名字“实验一”,然后点击保存。
4、这时会弹出一个对话框,要求你选择单片机的型号,这里选择Atmel 89C51,如图1-2所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定。
完成后,屏幕如图1-3所示。
图1-2图1-35、在图1-3中,单击“File”菜单,再在下拉菜单中单击“New”选项。
新建文件后屏幕如图1-4所示。
图1-46、此时光标在编辑窗口里闪烁,这时可以键入应用程序了,建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如1-5图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名如”Text1.asm”,然后,单击“保存”按钮。
图1-57、回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,并单击“Add File to Group ‘Source Group 1’”选项,在出现的对话框1-6中选中“Text1.asm”,此时出现对话框如图1-7所示,在Type 选择栏中选择第二项“Assembly Language File”,确定文件类型为汇编语言。
8、然后得到如图1-8所示的操作界面,注意比对左侧编辑框项目是否和图1-8一致,下面可以在右侧空白栏中编写汇编程序了。
图1-6图1-7图1-8实验一汇编语言实验一、实验目的1.利用单片机的P1 口作I/O 口,掌握P1 口同时作为输入和输出的用法。
2.掌握汇编语言程序编写方法。
二、实验设备(仪器)PC 微机一台,Keil软件三、实验内容1.寻址方式实验。
2. 单片机I/O口实验。
keil5 编译实例

keil5 编译实例Keil 5 是一款流行的集成开发环境(IDE),主要用于编写和编译单片机程序。
下面是一个简单的Keil 5 编译实例,演示如何创建一个51 单片机项目并将其编译成功。
1. 打开Keil 5 IDE。
如果这是第一次使用Keil 5,请先安装软件。
在安装过程中,选择原来Keil 5 MDK 的安装路径。
2. 创建一个新项目。
在Keil 5 主界面的“Project”菜单中,选择“New uVision Project”。
在弹出的对话框中,输入项目名称、选择单片机型号(如AT89C51),并设置项目保存路径。
点击“OK”完成项目创建。
3. 添加源文件。
在项目目录下,创建一个新文件夹,如“Source Files”。
在此文件夹中,创建一个 C 文件,例如“main.c”。
在此文件中,编写以下简单的代码:```c#include <reg52.h>void main() {while (1) {P1 = 0xfe; // 点亮P1 口的LEDdelay(1000); // 延时1 秒P1 = 0x00; // 熄灭P1 口的LEDdelay(1000); // 延时1 秒}}```4. 配置项目。
在项目目录下,找到“Keil uVision2”文件夹,双击“Options for Target 'Target 1'”打开配置对话框。
在“Output”选项卡中,确保“Assembly Output”和“C/C++ Output”均选中。
在“C/C++ Output”选项卡中,选中“Include path”并设置项目目录下的“Header Files”文件夹路径。
点击“OK”保存配置。
5. 编译项目。
点击Keil 5 主界面上的“Build”按钮或按F7 键开始编译项目。
编译完成后,查看“Output”窗口,如果显示“Build Finished”且没有错误和警告,说明编译成功。
Keil实例教程(一)编辑源代码,建立单一工程

Keil 工程文件的建立、设置与目标文件的获得单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP 等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
我们将通过一些实例来学习Keil软件的使用,在这一部份我们将学习如何输入源程序,建立工程、对工程进行详细的设置,以及如何将源程序变为目标代码。
图1所示电路图使用89C51单片机作为主芯片,这种单片机性属于MCS-51系列,其内部有4K的FLASH ROM,可以反复擦写,非常适于做实验。
89C51的P1引脚上接8个发光二极管,P3.2~P3.4引脚上接4个按钮开关,我们的第一个任务是让接在P1引脚上的发光二极管依次循环点亮。
一、Keil工程的建立首先启动Keil软件的集成开发环境,这里假设读者已正确安装了该软件,可以从桌面上直接双击uVision的图标以启动该软件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该伪指令的功能是规定其后面目标程序的起始地址。 它放在一段源程序(主程序、 子 程序)或数据块的前面, 说明紧跟在其后的程序段或数据块的起始地址就是指令中的 16 位地址。
例如: ORG 2000H START: MOV A, #7FH
c4 MCS-51汇编程序设计
山东职业学院
单片机编程语言概述
程序设计语言有3种: 机器语言、 汇编语言和高级语言。 1 机器语言:
计算机能直接识别和执行的二进制代码形式的指令称为机器指令,机器指令的集合称为机器语言。每种计算机 系统都有自己的机器语言, 即不同计算机系统机器语言不相同。
2 汇编语言
AI: BIT P1.0 经以上伪指令定义后, 在编程中就可以把FLG和AI作为位地址来使用。
源程序的编辑与汇编
源程序的编辑
使用任一文本编辑软件输入汇编语言源程序。 保存时,汇编语言源程序文件的扩展名为.ASM
…
伪指令
(2) 结束汇编伪指令END。 格式: [标号: ] END
END是汇编语言源程序的结束标志, 表示汇编结束。 在END以后所写的指令, 汇编程序都不予以 处理。 一个源程序只能有一个END命令。 在同时包含有主程序和子程序的源程序中, 也只能有一个 END命令, 并放到所有指令的最后, 否则, 就有一部分指令不能被汇编。
DS 20H DB 30H, 8FH 汇编后: 从 1000H开始, 预留 32(20H)个字节的内存单元, 然后从 1020H开始, 按照下一条DB指令赋值, 即 (1020H)=30H, (1021H)=8FH。 保留的存储空间将由程序的其它部分决定它们的用处。
伪指令
(6) 等值伪指令EQU。 格式: 标号:EQU 项 该伪指令的功能是将指令中项的值赋予本语句的标号。 项可以是常数、 地址标号或表达式。 例如:TAB: EQU 1000H TAB1: EQU TAB 前一条伪指令表示TAB地址的值为1000H, 后一条表示符号地址TAB1与TAB等值(可以互换), 需
(2006H) = 42H ; ′BCD′中B的ASCII码
(2002H)=7FH
(2007H) = 43H ; ′BCD′中C的ASCII码
(2003H) = 49H ; 十进制数 73 以十六进制数存放 (2008H) = 44H ; ′BCD′中D的ASCII码
(2004H) = 35H ; 数字 5 的ASCII码ห้องสมุดไป่ตู้
例如: ORG 1500H TAB2: DW 1234H, 80H
汇编以后: (1500H)=12H, (1501H)=34H, (1502H)=00H, (1503H)=80H。 (5) 预留存储空间伪指令DS。
格式: [标号: ]DS 表达式 该伪指令的功能是从标号指定的单元开始, 保留若干字节的内存空间以备源程序使用。 存储空间内 预留的存储单元数由表达式的值决定。 例如: ORG 1000H
TAB1: DB 30H, 8AH, 7FH, 73
DB ′5′,′A′,′BCD′
由于ORG 2000H, 所以TAB1的地址为2000H, 因此以上伪指令经汇编以后, 将对 2000H开始的若干
内存单元赋值:
(2000H) = 30H
(2005H) = 41H ; 字母A的ASCII码
(2001H)=8AH
伪指令
(4) 定义字伪指令DW。 格式: [标号: ]DW 项或项表 DW伪指令与DB的功能类似, 所不同的是DB用于定义一个字节(8 位二进制数), 而DW则用于定义
一个字(即两个字节, 16 位二进制数)。 在执行汇编程序时, 机器会自动按高 8 位先存入, 低 8 位后存 入的格式排列, 这和MCS—51 指令中 16 位数据存放的方式一致。
要注意的是, 在同一程序中, 用EQU伪指令对某标号赋值后, 该标号的值在整个程序中不能再改变。 (7) 位地址赋值伪指令BIT。
格式: 标号 BIT位地址 该伪指令的功能是将位地址赋予特定位的标号, 经赋值后就可用指令中BIT左面的标号来代替BIT 右边所指出的位。 例如: FLG: BIT F0
(3) 定义字节伪指令DB。
格式: [标号: ]DB 项或项表
其中项或项表指一个字节, 或用逗号分开的字符串, 或以引号括起来的字符串(一个字符用ASCII 码表示, 就相当于一个字节)。 该伪指令的功能是把项或项表的数值(字符则用ASCII码)存入从 标号开始的连续存储单元中。
例如: ORG 2000H
3 高级语言
高级语言(如 PASCAL、 C、 FORTRAN、 BASIC等)是一种面向问题或过程的语言。 接近于自然语言和数 学算法, 与机器的硬件无关, 用户编程时不必仔细了解所用计算机的具体性能和指令系统。 高级语言不 但直观、 易学、 易懂, 而且通用性强, 可以在不同的计算机上运行, 因此可移植性好。
用助记符描述的指令系统, 称为汇编语言。 汇编语言也是面向机器的, 每种计算机系统都有它自己的汇编语言, 用汇编语言编写的程序, 称为汇编语言源程序或汇编源程序。
特点: (1)汇编语言比机器语言容易理解,但必须通过编译程序翻译成机器语言,才能被计算机执行。 (2)汇编语言直接访问CPU硬件,响应速度快,程序存储器利用率高。 (3)利用汇编语言编程要求程序设计人员必须对机器的硬件结构和指令系统熟悉。
本章内容
伪指令 源程序的编辑与汇编 汇编语言程序设计
设计步骤 流程图 设计实例
伪指令
在编制汇编语言源程序的过程中,除了使用mcs-51指令系统外,还使用伪指令。汇编语言 源程序通过汇编程序的编译生成目标代码(机器语言程序),伪指令是对汇编过程进 行控制的指令,主要用来指定程序或数据的起始位置, 给出一些连续存放数据的确定 地址, 或为中间运算结果保留一部分存储空间以及表示源程序结束等。伪指令不要求 计算机进行任何操作, 也没有对应的机器码, 不产生目标程序, 不影响程序的执行。不 同版本的汇编语言, 伪指令的符号和含义可能有所不同, 但是基本用法是相似的。