实验一 指令与寻址方式认知实验(Keil)
基于Keil的单片机指令系统实验

实验1基于Keil的单片机指令系统实验一、实验目的:掌握Keil uVision4的项目文件创建、编译、运行和软件仿真的基本操作方法掌握数据传送类指令和算术运算类指令二、实验仪器:计算机、KEIL软件三、实验步骤:在KEIL中编写汇编程序(参考教材第1章)(1).打开KEIL软件。
双击桌面快捷图标即可进入如图1.1所示的集成开发环境编辑操作界面,主要包括三个窗口:工程项目窗口、编辑窗口和输出窗口。
图1.1μVision2编辑操作界面单击 Project 菜单,在弹出的下拉菜单中选中 New Project 选项,新建一个项目,如图1.2所示。
图1.2 Project界面然后选择你要保存的路径,输入工程文件的名字(比如保存到uv目录里,工程文件的名字为shiyan1),如下图1.3所示,然后点击保存。
图1.3 Project保存设置界面这时会弹出一个对话框,要求你选择单片机的型号。
可以根据你使用的单片机来选择,keil几乎支持所有的51核的单片机,这里以Atmel的89C51来说明,如下图1.4所示。
首先选择Atmel公司,然后点击左边的+号选择AT89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定,在随后弹出的对话框选择“否”。
图1.4 器件选择完成以上步骤后,屏幕如下图1.5所示。
图1.5 初始化编辑界面首先进行选项设置,将鼠标指向“Target 1”并单击右键, 再从弹出的右键菜单中单击“Options for Target”选项,如图1.6所示。
图1.6 “Options for Target”选项从弹出的“Options”窗口中选择“Output”标签栏,并如图1.7所示设置其中各项:图1.7“Output”标签栏首先选择“Select Folder for Objects”按钮,为后面生成*.hex文件选择一个存放目录,然后在后面的空格里面为将要生成的hex文件命名一个文件名,再将下面的“Create HEX File”前的选项前打:“√”,最后确认即可。
2019实验1 Keil软件学习与及操作实践

实验1 Keil软件学习与操作实践一、实验目的:熟悉Keil C51 集成开发环境的使用方法,初步掌握Keil C51基本的操作和使用,能够输入、编译和仿真调试简单的程序。
二、实验内容:在Keil C51 集成开发环境编写程序,实现P1.0口单灯闪烁的功能(假设P1.0口所接发光二极管低电平点亮),编写程序后在Keil C51 集成开发环境完成编译和仿真,实现全速运行、单步运行、并学会设置断点、查看相关寄存器等操作。
三、实验设备:安装Keil C51的计算机一台。
四、实验步骤:(参考教材第11章)1)建立一个工程项目选择芯片确定选项。
执行Keil C51软件的菜单“Project | New Project…”,弹出一个名为“Create New Project”的对话框。
先选择一个合适的文件夹准备来存放工程文件,最后,为工程取名,并保存。
如图1-1所示,紧接着,Keil C51提示您选择CPU器件。
在这里可以选择Atmel公司的AT89S52。
图1-1 Keil C51 工程的建立2)编写(或加入)汇编源文件或C 源文件,并添加到工程中。
执行菜单“File | New…”,出现一个名为“Text n”(其中n 表示序号)的文档。
如图1-2所示。
执行菜单“File | Save”,弹出一个名为“Save As”的对话框。
将文件名改为你事先起好的名称,如:led.asm然后保存。
注意:扩展名“.ASM或.c”不可省略。
单击Keil C51软件左边项目工作窗口“Target 1”上的“+”,将其展开。
然后右击“Source Group 1”文件夹,会弹出如图 1.7所示的选择菜单。
单击其中的“Add Files to Group 'Source Group 1'”项,将源程序文件添加到工程中。
然后编写如下程序源文件,并再次保存。
ORG 0000HMAIN: CLR P1.0 ;(1)点亮LEDMOV 30H,#255LCALL DELAY ;(2)调用延时子程序SETB P1.0 ;(3)熄灭LEDMOV 30H,#200LCALL DELAY ;(4)调用延时子程序AJMP MAIN ;(5)返回MAIN处执行DELAY:MOV R7,30H ;(6)延时程序D1:MOV R6,#250 ;(7)D2:DJNZ R6,D2 ;(8)R6存放内循环次数DJNZ R7,D1 ;(9)R7存放外循环次数RET ;(10)END3)设置参数单击“Project”菜单“Option…”选项(可能需要选择两次),在“Output”标签页,选中“Create HEX File”项,然后“确定”。
实验一 汇编语言的应用及Keil C编译环境

实验一汇编语言的应用及Keil C编译环境一、实验目的熟悉51指令系统,掌握程序设计方法。
二、实验内容1、通过执行程序中的相关指令,将有关数据写入工作寄存器区、位寻址区、数据缓冲区和特殊功能寄存器区各存储单元2、编写并调试一个排序子程序,其功能为用冒泡法将内存RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。
三、实验步骤及参考程序:1、编写程序,将有关数据写入工作寄存器区、位寻址区、数据缓冲区和特殊功能寄存器区各存储单元,并参考预备知识中有关内容对程序的执行结果进行检查。
参考程序A:工作寄存器区的数据传送地址机器码源程序注释检查数据ORG 0000H ;表示程序从地址0000H存放0000H 78 11 MOV R0,#11H ;将立即数11H送到寄存器R0中( H)=11H 0002H 79 22 MOV R1,#22H ;将立即数22H送到寄存器R1中( H)=22H 0004H 7A 33 MOV R2,#33H ;将立即数33H送到寄存器R2中( H)=33H 0006H 7B 44 MOV R3,#44H ;将立即数44H送到寄存器R3中( H)=44H0008H75 D010MOV PSW,#10H ;使工作寄存器工作于2区( H)=10H000BH 78 55 MOV R0,#55H ;将立即数55H送到寄存器R0中( H)=55H 000DH 79 66 MOV R1,#66H ;将立即数66H送到寄存器R1中( H)=66H 000FH 7A 77 MOV R2,#77H ;将立即数77H送到寄存器R2中( H)=77H 0011H 7B 88 MOV R3,#88H ;将立即数88H送到寄存器R3中( H)=88HEND ;程序结束参考程序B:位寻址区的数据传送地址机器码源程序注释检查数据ORG 0100H ;表示程序从地址0100H存放0100H 75 20F0 MOV 20H,#0F0H ;将字节地址20H单元中的内容置F0H(20H)=0103H D2 00 SETB 00H ;将位地址00H单元中的内容置1 ( H)=1 0105H D2 01 SETB 01H ;将位地址01H单元中的内容置1 ( H)=1 0107H D2 02 SETB 02H ;将位地址02H单元中的内容置1 ( H)=1 0109H D2 03 SETB 03H ;将位地址03H单元中的内容置1 ( H)=1 010BH C2 04 CLR 04H ;将位地址04H单元中的内容置0 ( H)=0 010DH C2 05 CLR 05H ;将位地址05H单元中的内容置0 ( H)=0 010FH C2 06 CLR 06H ;将位地址06H单元中的内容置0 ( H)=0 0111H C2 07 CLR 07H ;将位地址07H单元中的内容置0 ( H)=0(20H)= 0113H 75 90 FF MOV P1,#0FFH ;将字节地址90H单元中的内容置FFH (90H)= 0116H C2 90 CLR 90H ;将P1.0置0 ( H)=0 0118H D2 90 SETB 90H ;将P1.0置1 ( H)=1 011AH C2 91 CLR 91H ;将P1.1置0 ( H)=0 011CH D2 91 SETB 91H ;将P1.1置1 ( H)=1END ;程序结束参考程序C:数据缓冲区和特殊功能寄存器区的数据传送地址机器码源程序注释检查数据ORG 0200H ;表示程序从地址0200H存放0200H 75 30 99 MOV 30H,#99H ;将立即数99H送到30H中(30H)=(PC)=0203H75 45 AA MOV 45H,#0AAH ;将立即数AAH送到45H中(45H)=(PC)=0206H 75 81 50 MOV SP,#50H ;将立即数50H送到堆栈指针SP中( H)=50H(PC)=0209H 74 60 MOV A,#60H ;将立即数60H送到累加器A中( H)=60H(PC)=020BH 75 90 55 MOV P1,#55H ;将立即数55H送到P1口中( H)=55H(PC)=020EH 75 D0 90 MOV PSW,#90H ;使工作寄存器工作于2区、进位位CY置1( H)=90H(PC)=0211H 90 12 34 MOV DPTR,#1234H ;将立即数1234H送到数据指针DPTR中( H)=12H( H)=34H END ;程序结束2、参照预备知识中“观测和修改存储器内容”中方法6,利用鼠标右键修改存储单元的数据,将内部RAM 50H到5AH中放入不等的数据,运行参考程序,检查50H到5AH单元是否按从小到大的次序排列,自己修改程序将50H到5AH单元内容改为从大到小排列。
实验一 Keil软件的使用及简单程序的调试方法

实验一 Keil软件的使用及简单程序的调试方法一、实验目的掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。
二、实验器材计算机1台三、实验内容1.Keil的使用方法。
2.建立一个单片机汇编语言程序的调试过程及方法四、实验步骤1.Keil的使用方法。
Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。
启动Keil 后的界面如下:几秒钟后即进入Keil的编辑界面。
用户便可建立项目及应用程序。
2.简单程序的调试方法Keil是通过项目工程来管理汇编程序的。
因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。
(1)建立一工程单击Project菜单,在弹出的下拉菜单中选中New Project选项。
并在弹出的对话框中确定保存的位置及工程名称。
又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。
选择Atmel公司的AT89C51单片机。
如下图所示单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。
(2)建一文件单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。
单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。
如下图所示。
(3)将文件添加到工程中单击“Target 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。
单片机指令系统与寻址方式

单片机指令系统与寻址方式单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU执行该程序。
程序是由指令组成的,指令的基本组成是操作码和操作数。
单片机的品种许多,设计时怎样表示操作码和操作数,都有各自的规定,再有指令代码也各不相同,因此,必需对所选单片机的全部指令,也就是所谓“指令系统”,有足够的了解。
各个系列的单片机虽然有不同的指令系统,但也有其共同性。
把握一种单片机的指令系统,对其它系列单片机可以起到触类旁通的作用。
MCS-51单片机应用广泛,派生品种多,具有代表性,所以,这里以MCS-51系列的指令系统为例说明“指令”的组成和应用。
1、MOV A,#20H这条指令表示把20H这个数送入累加器A中(一个特别功能寄存器)。
2、ADD A,70H这条指令表示把累加器A中的内容(在上例中送入的#20H)和存贮器中地址为70H单元中的内容(也是一个数字),通过算术规律单元(英文缩写为ALU)相加,并将结果保留在A中。
这里MOV、ADD 等称为操作码,而A、#20H、70H等均称为操作数。
在汇编语言程序中,操作码通常由英文单词缩写而成,这样有助于记忆,所以又称助记符。
如MOV就是英文单词MOVE的缩写,含有搬移的意思;而ADD即为英文单词,其意为相加。
因此,对于略懂英语的用户,把握单片机指令的含意是较为便利的。
操作数有多种表示法,如以上的#20H称为马上数,即20H就是真正的操作数。
而70H是存贮器中某个单元的地址,在该单元中,放着操作数(比如说是3AH),ADD A,70H 不是将70H和A中的内容相加,而是从存贮器70H单元中将3AH取出和A中的内容相加。
由上可知,要找到实际操作数,有时就要转个弯,甚至转几个弯,这个过程称为寻址,MCS-51共有7种寻址方式,现介绍如下:一、马上寻址:操作数就写在指令中,和操作码一起放在程序存贮器中。
把“#”号放在马上数前面,以表示该寻址方式为马上寻址,如#20H。
2019实验1 Keil软件学习与及操作实践

实验1 Keil软件学习与操作实践一、实验目的:熟悉Keil C51 集成开发环境的使用方法,初步掌握Keil C51基本的操作和使用,能够输入、编译和仿真调试简单的程序。
二、实验内容:在Keil C51 集成开发环境编写程序,实现P1.0口单灯闪烁的功能(假设P1.0口所接发光二极管低电平点亮),编写程序后在Keil C51 集成开发环境完成编译和仿真,实现全速运行、单步运行、并学会设置断点、查看相关寄存器等操作。
三、实验设备:安装Keil C51的计算机一台。
四、实验步骤:(参考教材第11章)1)建立一个工程项目选择芯片确定选项。
执行Keil C51软件的菜单“Project | New Project…”,弹出一个名为“Create New Project”的对话框。
先选择一个合适的文件夹准备来存放工程文件,最后,为工程取名,并保存。
如图1-1所示,紧接着,Keil C51提示您选择CPU器件。
在这里可以选择Atmel公司的AT89S52。
图1-1 Keil C51 工程的建立2)编写(或加入)汇编源文件或C 源文件,并添加到工程中。
执行菜单“File | New…”,出现一个名为“Text n”(其中n 表示序号)的文档。
如图1-2所示。
执行菜单“File | Save”,弹出一个名为“Save As”的对话框。
将文件名改为你事先起好的名称,如:led.asm然后保存。
注意:扩展名“.ASM或.c”不可省略。
单击Keil C51软件左边项目工作窗口“Target 1”上的“+”,将其展开。
然后右击“Source Group 1”文件夹,会弹出如图 1.7所示的选择菜单。
单击其中的“Add Files to Group 'Source Group 1'”项,将源程序文件添加到工程中。
然后编写如下程序源文件,并再次保存。
ORG 0000HMAIN: CLR P1.0 ;(1)点亮LEDMOV 30H,#255LCALL DELAY ;(2)调用延时子程序SETB P1.0 ;(3)熄灭LEDMOV 30H,#200LCALL DELAY ;(4)调用延时子程序AJMP MAIN ;(5)返回MAIN处执行DELAY:MOV R7,30H ;(6)延时程序D1:MOV R6,#250 ;(7)D2:DJNZ R6,D2 ;(8)R6存放内循环次数DJNZ R7,D1 ;(9)R7存放外循环次数RET ;(10)END3)设置参数单击“Project”菜单“Option…”选项(可能需要选择两次),在“Output”标签页,选中“Create HEX File”项,然后“确定”。
实验一 KeilC的使用与汇编语言上机操作

实验一KeilC的使用与汇编语言上机操作实验目的:熟悉KeilC环境,通过在KeilC环境下调试字节拆分、合并程序、数据块清零程序、加法程序,掌握汇编语言程序的调试方法,加深对BCD码、ASCII码、堆栈、寄存器、数据指针、汇编语言指令、机器码等基本概念的理解,为后续程序编制和调试打下基础。
实验内容:1.掌握KeilC环境的使用1)字节拆分、合并:调试e421.asm程序,观察相关寄存器和单元的内容。
2)数据块填充:调试fill.asm程序,观察相关寄存器和单元的内容。
2. 编写两个十六位数的加法程序。
有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。
思考题:1.怎样查看工作寄存器、SFR、片内RAM、片外RAM及程序代码空间内容?Disassembly 窗口有何作用?2.字节拆分、合并还有哪些方法,举一例说明。
3. 若按递减1规律填充数据块,应如何修改程序?4. 若从7020H单元开始,连续填充10个字节,应该如何修改程序?5. 若完成双字节BCD码加法,应如何修改程序?字节拆分、合并程序File name: e421.asmDescription: 1字节BCD码转换为2字节ASCII2字节ASCII码转化为1字节BCD码Date:Designed by:Source used: 30H: BCD data31H, 32H:ASCII data31H, 32H ->33HORG 0000HLJMP MAINORG 0100HMAIN: MOV SP, #40H ;赋堆栈指针MOV 30H, #49H ;30H单元赋值MOV R0, #32H ;R0指针赋值MOV @R0, #0 ;32H单元清零MOV A, 30HXCHD A, @R0 ;拆分字节ORL 32H, #30H ;转换为ASCIISWAP AORL A, #30H ;转换为ASCIIMOV 31H, A ;结果存于31H单元MOV A, 31H ;从31H单元取值ANL A, #0FH ;转换为BCDSWAP AMOV 33H, A ;结果存于33H单元MOV A, 32H ;从32H单元取值 ANL A, #0FH ;转换为BCDORL 33H, A ;合并字节HERE: SJMP HERE ;踏步END数据块填充程序:将片外RAM 7000H-70FFH单元按一定规律填充File name: fill.asmDate: 2011.8.20Designed by: CDHSource used: R0: 计数器DPTR: 片外数据指针ORG 0000HLJMP MAINORG 0100HMAIN: MOV SP,#40HFILL: CLR A ;A寄存器清零MOV R0, #00H ;设循环计数器MOV DPTR, #7000H ;设数据指针FILL1: MOVX @DPTR, A ;传送到片外RAMINC A ;A内容加1INC DPTR ;修改数据指针INC R0 ;修改循环计数器CJNE R0, #00H, FILL1 ;判断是否结束HERE: SJMP HERE ;原地踏步END。
实验一-keil单片机编程软件的使用

实验一 keil单片机编程软件的使用一、实验目的1、了解单片机编程软件原理2、学习使用keil软件二、概述Keil 软件由德国Keil Software/Keil Elektronik 开发,近几年在国内得到迅速普及,国内使用的一般是比较稳定的6.2 版本以及最新的7.0 版本,Keil 软件公司的8051 单片机软件开发工具可用于众多的8051 派生器件,以实现嵌入式应用。
开发工具清单如下:C51 优化C 编译器A51 宏汇编器BL51 代码连接器/定位器OC51 目标文件转换器OH51 目标十六进制转换器LIB51 库文件管理器Windows 版dScope-51 模拟器/调试器Windows 版Vision/51这些工具都集合在一个套件内。
工具套件是几个应用程序的集合,这些程序用来创建8051 应用系统,使用汇编器汇编8051 汇编程序,使用编译器将C 源代码编译成目标文件,使用连接器创建一个绝对目标文件模块供仿真器使用。
使用Keil 的开发工具其项目开发周期和任何软件开发项目都大致一样1. 创建C 或汇编语言的源程序2. 编译或汇编源文件3. 纠正源文件中的错误4. 从编译器和汇编器连接目标文件5. 测试连接的应用程序三、实验设备1、keil编程软件。
四、预习要求1、了解单片机汇编指令,指令格式。
2、了解keil软件安装过程。
五、试验内容及步骤1、了解keil软件的工作环境及各菜单的用法。
2、完成下面程序的编制1)新建一个工程文件,文件名为:prj1.uv22)新建一个程序文件,文件名为:text1.a3)在工程文件prj1.uv2 中添加程序文件text1.a4)打开程序文件text1.a,在此文件中输入下列程序:X1 DATA 20HORG 0000HAJMP RESETORG 0040HRESET: MOV R2,#08HMOV A,#01HLOOP: MOV P1,ARL ADJNZ R2,LOOPMOV X1,#0MOV A,#80HLOOP1: MOV P1,ARR AINC X1CJNE X1,#08H,LOOP1AJMP RESETEND3、对工程进行设置1)使用鼠标右键点击工程名Target 1,选择菜单上的Option for Target Target1或图标在Target 设置界面,把晶振频率选到12MHz.2)在Debug 设置界面,选择软件仿真。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一指令与寻址方式认知实验
一、实验目的
1.了解单片机基本指令及其寻址方式;
2.掌握在µVision环境中查看指令操作结果的技巧。
二、实验仪器和设备
Keil软件;THKSCM-2综合实验装置;
三、实验原理及实验内容
1.示例及相关设置
(1)建立一个文件夹:lx31。
(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx31.asm文件名存盘到lx31文件夹中。
ORG 0000H
MAIN:MOV R7,#16
MOV A,#00H
MOV R0,#30H
LP:MOV @R0,A
INC R0
INC A
DJNZ R7,LP
SJMP $
END
(3)在lx31文件夹下建立新工程,以文件名lx31存盘(工程的扩展名系统会自动添加)。
(4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置:
○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。
○2晶振频率设为11.0592MHz。
○3Output标签下的Create HEX File前小框中要打钩。
○4在Debug标签选择Use Simulator(软件模拟)。
(5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。
利用单步、执行到光标处两种方法运行程序,观察程序运行的结果。
(6)分析程序的功能,研究观察以下指令的寻址方式及其操作效果。
2.示例及相关设置
(1)建立一个文件夹:lx32。
(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx32.asm文件名存盘到lx32文件夹中。
ORG 0000H
MOV R0,#20H
MOV R1,#22H
MOV A,@R0
ADD A,@R1
MOV 24H,A
INC R0
INC R1
MOV A,@R0
ADDC A,@R1
MOV 25H,A
SJMP $
END
(3)在lx32文件夹下建立新工程,以文件名lx32存盘(工程的扩展名系统会自动添加)。
(4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置:
○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。
○2晶振频率设为11.0592MHz。
○3Output标签下的Create HEX File前小框中要打钩。
○4在Debug标签选择Use Simulator(软件模拟)。
(5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。
利用单步、执行到光标处两种方法运行程序,观察程序运行的结果。
(6)分析程序的功能,说明指令ADDC A,@R1与ADD A,@R1的异同。
(7)设计小程序,观察以下几组指令的操作效果:
ADD、ADDC;
AJMP、SJMP;
MOV、MOVC;
XCD、XCHD、SW AP;
ANL、ORL;
DJNZ;
JZ、JC;
RL、RLC等。
(8)设计小程序,研究一下指令,观察堆栈的操作效果:
PUSH、POP;
ACALL、RET。
四、实验结果和数据分析
问题:1、完成三中1与2的(5)(6)两步,并写出结果。
2、结合三中第2的(7)(8)两步设计一个小程序,并给出结果。