实验一8051简单编程与调试实验目的通过简单小程序的输入和调试,熟悉并掌握Keil 的使用。
学会Proteus与Keil的整合调试。
实验基本要求建立三个项目,分别输入存储块清零、二进制BCD码及二进制ASCII码转换的汇编源程序,并进行仿真调试。
画出实验程序的流程框图。
实验步骤采用Keil Cx51 开发8051单片机应用程序一般需要经过下面几个步骤:1、在 Vision2集成开发环境中创建一个新项目(Project),并为该项目选定合适的单片机CPU器件。
在菜单栏中选择“Project”→“New Project”,弹出“Create New Project”对话框,选择目标路径,在“文件名”栏中输入项目名后,单击“保存(S)”按钮,弹出“Selecte Device for Target”对话窗口。
在此对话窗口的“Data base”栏中,单击“Atmel”前面的“+”号,或者直接双击“Atmel”,在其子类中选择“AT89C51”,确定CPU类型。
如图所示。
点击“确定”按钮后,弹出如下的对话框如果是进行汇编语言编程选择“否”。
2、利用μVision2的文件编辑器编写C语言(或汇编语言)源程序文件,并将文件添加到项目中去。
一个项目可以包含多个文件,除源程序文件外还可以有库文件或文本说明文件。
在μVision2的菜单栏中选择“File”→“New”命令,新建文档,然后在菜单栏中选择“File”→“Save”命令,保存此文档,这时会弹出“Save As”对话窗口,在“文件名(N)”一栏中,为此文本命名,注意要填写扩展名“.asm”。
单击“保存(S)”按钮,这样在编写汇编代码时,Keil会自动识别汇编语言的关键字,并以不同的颜色显示,以减少输入代码时出现的语法错误。
程序编写完后,再次保存。
在Keil中“Project Workspace”子窗口中,单击“Target 1”前面的“+”号,展开此目录。
在“Source Group 1”文件夹上单击鼠标右键,在右键菜单中选择“Add File to ‘Group Source 1’”,弹出“Add File to Group”对话窗口,在此对话窗口的“文件类型”栏中,选择“Asm Source File”,并找到刚才编写的.asm文件,双击此文件,将其添加到Source Group 中,此时“Project Workspace”子窗口如图所示。
3、通过μVision2的各种选项,配置Cx51编译器、Ax51宏汇编器、BL51/.Lx51连接定位器以及Debug调试器。
在“Project Workspace”窗口中的“Target 1”文件夹上单击鼠标右键,在弹出的右键菜单中选择“Option for Target”选项,这时会弹出“Options for Target”对话窗口,在此对话窗口中选择“Output”选项卡,选中“Create HEX File”选项,如图所示。
4、利用μVision2的构造(Buid)功能对项目中的源程序文件进行编译连接,生成绝对代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源程序中的错误后重新构造整个项目。
在Keil的菜单栏中选择“Project”→“Build Target”命令,编译汇编源文件。
如果编译成功,则在“Output Window”子窗口中会显示如图所示的信息;如果编译不成功,双击“OutputWindow”窗口中的错误信息,则会在编辑窗口中指示错误语句。
5、将没有错误的绝对代码装入 Vision2调试器进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的EPROM中。
在Keil的菜单栏中,选择“Debug”→“Start/Stop Debug Session”选项,进入程序调试环境,如图所示。
按“F11”键,单步运行程序。
在“Project Workspace”窗口中,可以查看累加器、通用寄存器及特殊功能寄存器的变化。
在“Memory”窗口中,可以看到每执行一条语句后存储空间的变化。
在“Address”栏中,输入“D: 30H”,查看AT89C51的片内直接寻址空间。
程序调试完毕后,再次在菜单栏中选择“Debug”→“Start/Stop Debug Session”选项,退出调试环境。
在Proteus中调试程序打开Proteus ISIS编辑环境,在菜单栏中选择“File”→“Load Design”弹出“Load ISIS Design File”对话窗口,选择要打开的Proteus的.DSN设计文件。
在本实验中,设计文件为本实验子目录下的Basic.DSN单击鼠标右键选中AT89C51并单击鼠标左键,打开“Edit Component”对话窗口,在此窗口中的“Program File”栏中,选择先前用Keil生成的.HEX文件,如图所示。
单击Proteus ISIS界面左下角的按钮,进入程序调试状态,并在“Debug”菜单中打开“8051 CPU Registers”、“8051 CPU Internal (IDATA) Memory”及“8051 CPU SFR Memory”三个观察窗口,按“F11”键,单步运行程序。
在程序运行过程中,可以在这三个窗口中看到各寄存器及存储单元的动态变化。
Proteus 与Keil整合调试及电路仿真在Proteus的“Debug”菜单中选择“Use Remote Debug Monitor”选项,如图所示。
选择Keil的“Project”→“Options for Target ‘Target 1’”,在弹出的对话框中,单击Debug 选项卡,单击右上部的下三角按钮选择“Proteus VSM Monitor-51 Driver”如图所示。
单击“Setting”进入对话框填写如图所示的IP地址和端口号。
在Keil中,在菜单栏中选择“Debug”→“Start/Stop Debug Session”选项,Keil系统进入调试状态。
同时Proteus也进入调试状态。
这时可以调整这两个软件窗口的大小,使它们同时出现在桌面上,这样就可以同时观察这两个软件运行的情况了。
在Proteus的调试状态下,在“Debug”菜单中打开“8051 CPU Registers”、“8051 CPU Internal(IDATA) Memory”、“8051 CPU SFR Memory”三个观察窗口,在单步运行程序的过程中,可以在这三个窗口中看到各寄存器以及存储单元的动态变化。
实验内容1Porteus模型为BASIC.DSN如下图所示。
一、存储块置全“1”源代码:汇编语言源程序:ORG 00HSTART EQU 30HMOV R1,#START ;起始地址;Rn中设置32字节计数值MOV A,#0FFHLOOP: MOV @R1,A;指向下一个地址;计数值减1,不为零继续SJMP $END在下划线处填入适当指令。
输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。
解释START EQU 30H。
二、二进制BCD码转换源代码:汇编语言源程序:RESULT EQU 30HORG 00HLJMP STARTSTART: ;堆栈指针指向40HMOV A,#123LCALL BINTOBACSJMP $BINTOBAC:;除以100得百位数MOV RESULT,AMOV A,BMOV B,#10DIV AB ;余数除以10得十位数MOV RESULT+1,AMOV RESULT+2,B ;余数为个位数RETEND在下划线处填入适当指令。
用单步执行的方法,观察子程序调用过程中堆栈指针的变化。
三、二进制ASCII码转换源代码:汇编语言源程序:RESULT EQU 30HORG 00HSTART:MOV A,#1AH;调用BINTOHEX子程序LJMP $BINTOHEX:;表的首址ASCIITAB送DPTR MOV B,A ;暂存ASWAP A;取A的高四位;查ASCII表MOV RESULT, AMOV A,B ;恢复AANL A,#0FH ;取低四位MOVC A,@A+DPTR ;查ASCII表MOV RESULT+1,ARETASCIITAB:DB '0123456789ABCDEF' ;定义数字对应的ASCII表END在下划线处填入适当指令。
单步运行程序观察查表指令的执行过程。
把LJMP $这条指令注释掉,然后全速运行该程序,然后让其停止观察程序执行到哪里?实验内容2输入、汇编、调试下列四个程序,通过信息窗口观察并回答问题。
1、程序a.asmORG 0000HMOV 30H,#87HMOV A,#69HADD A,30HNOPEND问:CY= ,(A)= ,OV= ,P=将程序中的指令NOP改为指令DA A后问:CY=,(A)= ,OV= ,P=2、程序b.asmORG 0000HMOV SP,#60HMOV DPTR,#0A679HPUSH DPHPUSH DPLMOV A,#80HPUSH ACCPOP BPOP 30HPOP 31HNOPEND问:(SP)= ,(A)= ,(30H)= ,(31H)=,(B)=,(DPH)=,(DPL)=3、程序c.asmORG 0000HMOV DPTR,#TABMOV A,#05HMOVC A,@A+DPTRNOPORG 1000HTAB: DB 6FH,30H,96H,75H,0A8H,0FEHDB 49H,8AH,5FH,0B6H,7FH,0C4HEND问:执行完MOVC A,@A+DPTR以后,(A)=4、程序d.asmORG 0000HMOV A,#02HMOV B,ARL AADD A,BMOV DPTR,#TABJMP @A+DPTRNOPORG 0800HTAB: LJMP 1000HLJMP 2000HLJMP 3000HLJMP 4000HEND问:执行完JMP @A+DPTR以后,PC=实验二汇编语言程序设计实验目的通过上机实验掌握单片机汇编语言程序的编写和调试。
实验基本要求按实验内容上机输入并调试实验程序。
画出实验程序的流程框图。
实验内容Proteus模型为BASIC.DSN。
一、内存块移动汇编语言源程序:ORG 00HSTART: MOV R0, #30HMOV R1, #00H ;设置源地址MOV R2, #40HMOV R3, #00H ;设置目标地址MOV R7, #0 ;设置计数值LOOP: MOV DPH, R0MOV DPL, R1 ;将源地址(3000H)赋DPTRMOVX A, @DPTR ;取源地址中的数据MOV DPH, R2MOV DPL, R3 ;将目标地址(4000H)赋DPTRMOVX @DPTR, A ;将源地址中的数据送到目标地址INC R1 ;源地址加1INC R3 ;目标地址加1DJNZ R7, LOOPLJMP $END输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。