1、- 20 -第 2 章 基础实验2.1 实验一 系统认识实验一、 实验目的学习实验系统的基本操作,了解在实验系统中进行程序设计、仿真和调试的操作方法和步骤。二、 实验设备Keil 单片机程序开发软件。Proteus 仿真软件DP51-PROC 单片机综合实验仪。DT-2003 数字万用表。三、 实验内容和步骤内容:简单单片机应用程序的编辑、编译、仿真和调试。实验程序:功能:使连接在 MCS-51 单片机 P1.0 引脚的 LED 闪烁。设计思路: 点亮 LED 需要约 10 mA 电流,此时LED 两端电压差约 2 V。因此,将LED 的阴极通过一个电阻连接到P1.0 引脚(电阻阻值约为 20
2、0 ) ,阳极连接到电源 VCC(5 V) 。 为便于观察,交替的时间间隔不应太小(建议选择在 0.5 s 左右) ,由于该时间不要求严格精确,所以,可采用软件延时的方法实现。 程序可采用图 2.1 中的流程结构。开始让 P1 端口初值为 11111111BP1.0 求反软件延时图 2.1 实验一程序流程图- 21 -预习:1) 提前一周预约好实验时间。2) 自学 Keil 和 Proteus 两软件的基本使用方法。3) 按设计思路,用汇编语言或 C51 语言编制实验程序。4) 了解本次实验的步骤和操作方法。图 2.2 实验一电路图步骤:1) 在 S: STUDY Kiel 文件夹中新建 Ex
3、01 文件夹(该文件夹用于保存本次实验的所有内容) ,通过网上邻居将服务器上本次实验共享文件夹下的所有文件拷贝到 S: STUDY Kiel Ex01 文件夹中。2) 运行 Keil 并创建一个新工程。工程保存为 S: STUDY Kiel Ex01 Ex01. Uv2。选择单片机型号为 Generic 中的 8051。创建新工程的操作方法:菜单 Project New Project3) 设置工程选项,将工程选项设置如下:Target 页夹: Xtal= 12 MHzOutput 页夹: Create HEX File- 22 -BL51 Locate 页夹: 取消 Use Memory L
4、ayout from Target Dialog设置 Code Range 属性为 0x40-0xFFF如用 C51 编程,设置此页夹。设置工程选项的操作方法:鼠标右击 Project Window 中的 Target 1 弹出菜单 Option for Target Target 1,在对话窗口中根据需要选择不同的页夹项4) 创建新文件并输入实验程序,然后保存在与工程相同的文件夹中(文件名为Ex01. ASM 或 Ex01.C) ,最后将其加入到工程中并编译。操作方法:创建文件: 菜单 File New保存文件: 菜单 File Save 或 Save As 加入工程: Project Wi
5、ndow 中展开 Target 1,鼠标右击 Source Group 1 弹出菜单 Add Files to Group Source Group 1,在对话窗口中选择文件类型(C Source file 或 Asm Source file)和文件名(Ex01. C 或 Ex01.ASM)编译工程: 菜单 Project Build target 或 Rebuild all target files编译中若发现错误,必须修改程序后重新编译。注意: i. 如果在工程选项中设置了 Create HEX File 选项,编译成功后则会生成目标文件( *.hex),该文件将在利用 Proteus 调
6、试程序时用到;反之,编译成功后不会生成目标文件(*.hex)。ii. 目标文件的文件名由工程选项 Output 页夹中 Name of Executeable 属性决定,目标文件的扩展名为.hex 。5) 利用 Keil 自身的软件仿真功能调试程序。任务:单步和带断点执行程序,观察程序执行过程,记录程序执行过程中相关寄存器、存储器的变化情况和指令执行时间,从而验证程序的正确性。- 23 -具体操作如下: 在 Keil 中设置工程选项如下(操作方法参见步骤 3):Debug 页夹: 选中左侧 Use:Simulator选中左侧 Load Application at Start 和 Go til
7、l main( ) 进入调试。进入或退出调试命令的操作方法:菜单 Debug Start/Stop Debug Session 单步调试程序中的指令或语句,观察和记录相关寄存器、存储器的变化情况和程序执行时间。在此过程中尝试打开或关闭 Disassembly Window(操作方法参见后面 说明 的第 3 项) ,观察它们的不同。单步命令的操作方法:菜单 Debug Step(详细跟踪当前指令或语句的执行)或Step Over(完整执行当前指令或语句)查看寄存器、存储器和程序执行时间的操作方法:参见后面 说明 的第 1、2 项 复位程序。复位 CPU 命令的操作方法:菜单 Peripheral
8、s Reset CPU 在软件延时开始的指令或语句处设置断点。设置断点的操作方法:先用鼠标点击断点处的指令或语句,再使用设置或取消断点命令:菜单 Debug Insert/Remove Breakpoint 多次使用连续运行命令控制程序的执行,当程序执行到断点处时观察P1.0 引脚的状态和程序运行时间。根据多次的信息推断 LED 的闪烁状态和间隔时间。连续运行命令的操作方法:菜单 Debug Go- 24 -观察 P1.0 引脚状态的操作方法:菜单 Peripherals I/O-Ports Port 1,在 Parallel Port 1 窗口中显示当前 P1 端口各个引脚的状态。 退出调试
9、。操作方法参见前面的操作。说明:查看结果主要通过 Project Window 中的 Regs 页夹和 Memory Window 中的各个页夹。1、 若 Memory Window 窗口没有打开,可通过菜单 View Memory Window 命令显示,选取其中任何一个页夹,在地址输入框中输入地址后,该页夹将从这个地址开始显示存储体中的数据。由于 MCS-51 的存储体在地址值上存在着重叠,为了区分不同类型的存储体,地址必须按照下面的格式输入(段符及其说明参见表 2.2): 地址值可以用十进制或十六进制表示。其中十六进制数用汇编或 C 语言的表达方式均可。例:D:0x00 或 D:00H2
10、、 在 Project Window 的 Regs 页夹中显示常用的一组值,其中大部分可以直接修改(操作方法:先用鼠标左击选择要修改的对象,然后再次左击就可以输入修改) ,详细说明参见表 2.1。3、 在 Keil 进入调试状态后,若希望查看当前程序的机器编码及其反汇编代码,可通过菜单 ViewDisassembly Window 命令显示或关闭 Disassembly Window 窗口。- 25 -6) 利用 Proteus 调试程序。任务:单步和带断点执行程序,观察程序执行过程,并按表 2.3 中的内容进行记录和计算。具体操作如下: 双击 S: STUDY Kiel Ex01 Prote
11、us 仿真 Led_light.DSN 文件,将电路中单片机对象的 Program File 属性设置为步骤 4 生成的目标文件 (*.hex),表 2.1 Regs 页夹中的内容及其说明符号 说 明 是否可修改r0 工作寄存器 r0 的值 是r1 工作寄存器 r1 的值 是r2 工作寄存器 r2 的值 是r3 工作寄存器 r3 的值 是r4 工作寄存器 r4 的值 是r5 工作寄存器 r5 的值 是r6 工作寄存器 r6 的值 是r7 工作寄存器 r7 的值 是A 累加器的值 是B B 寄存器的值 是Sp 堆栈指针寄存器的值 是sp_max 堆栈的最大值Dptr 数据指针寄存器的值 是PC
12、$ 当前指令的地址值 是States 程序执行的机器周期数Sec 程序执行的时间(秒)Psw 程序状态字的值 是,还可展开单独修改位值表 2.2 常用段符及其说明段符 说 明 示例C 程序存储地址区,地址范围 0x0000 0xFFFFFF。 C:0x30D 直接寻址数据存储区,地址范围 0x00 0xFF,其中 0x80 0xFF 是 SFR。 D:0x30D:0xE0I 间接寻址数据存储区,地址范围 0x00 0xFF。 I:0x30I:0xE0X 外部数据存储区,地址范围 0x0000 0xFFFFFF。 X:0x30- 26 -然后检查 Proteus 是否打开了远程仿真监视。操作方法
13、:设置目标文件: 鼠标右击单片机对象弹出菜单 Edit Properties,在对话窗口中设置 Program File 属性。打开仿真监视: 菜单 Debug 选中 Use Remote Debug Monitor。 在 Keil 中设置工程选项如下(操作方法参见步骤 3):Debug 页夹: 选中右侧 Use:及 Proteus VSM Simulator(下拉选项框的项)选中右侧 Load Application at Start 和 Go till main( ) 在 Keil 中进入调试,检查在软件延时开始的指令或语句处是否有断点,若没有则设置(操作方法参见步骤 5) 。 在 Kei
14、l 中多次使用连续运行命令控制程序的执行(操作方法参见步骤 5) 。当程序运行到断点时,观察 Proteus 窗口中 LED1 的燃亮情况,将 P1.0引脚支路电路的相关信息记录到表 2.3 中。 在 Keil 中去除断点,继续运行程序,观察 Proteus 窗口中实验电路的工作情况(LED1 闪烁情况及其间隔时间) 。 在 Keil 中退出调试(操作方法参见步骤 5) 。7) 利用实验仪调试程序。任务:单步和带断点执行程序,观察程序执行过程,并按表 2.3 中的内容进行记录和计算。具体操作如下: 检查实验仪与计算机之间的通信线连接,然后打开实验仪电源(电源开关在实验仪箱体右侧方) 。 测试实
15、验仪中涉及本次实验的电路是否完好。操作方法:i. 双击 S: STUDY Kiel Ex01 Test1 Test1_0.Uv2 文件(此操作会打开一个新的 Keil 窗口) 。ii. 在新窗口中进入调试,然后连续运行程序(操作方法参见步骤 5) 。- 27 -iii. 在实验仪上观察连接到 P1 端口的 8 个 LED 是否循环依次熄灭,如果发现某个 LED 常亮或常灭,则意味着 P1 端口的对应位损坏。iv. 测试完成后退出调试,然后关闭这个用于测试的 Keil 窗口。在本次实验中如果发现 P1.0 损坏,可用 P1 其它完好的位替代完成实验(此时,实验程序及其他相关操作都应做出调整) 。
16、 在实验程序的 Keil 窗口中设置工程选项如下(操作方法参见步骤 3):Debug 页夹: 选择右侧 Use:及 Keil Monitor-51 Driver(下拉选项框的项)点击右侧的 Settings 按钮,在对话窗口中选择 Serial Interrupt选中右侧 Load Application at Start 和 Go till main( ) 在 Keil 中进入调试。检查在软件延时开始的指令或语句处是否有断点,若没有则设置(操作方法参见步骤 5) 。 多次使用连续运行命令控制程序的执行(操作方法参见步骤 5) 。当程序运行到断点时,观察实验仪上 LED1 的燃亮情况,用万用表
17、测量 P1.0 引脚支路电路的相关信息并记录到表 2.3 中。测量中万用表的使用方法:i. 万用表使用时应平稳放在实验台上,既要便于观察又不能防碍实验操作。ii. 万用表的黑笔应插在实验仪 C1 区的 GND 插孔。iii. C1 区的 VCC 插孔电压就是所有 LED 的阳极电压,A2 区的 P10-P17 插孔电压就是 P1 各引脚电压, D1 区 LED 上方编号为 R65-R72 的贴片电阻的下端电压就是对应 LED 的阴极电压(因空间小,测量时须格外小心,防止通过万用表笔短路。 ) 在 Keil 中去除断点,继续运行程序,观察实验仪中实验电路的工作情况(LED1 闪烁情况及其间隔时间
18、) 。 在 Keil 中退出调试(操作方法参见步骤 5) 。- 28 -四、 实验报告要求1、 记录实验过程中的操作过程及其结果。2、 工整书写实验程序并画出其流程图。3、 对比表 2.3 中的数据,分析差异及原因。4、 总结三种仿真调试方法的特点。5、 选做 比较用汇编编写程序与用 C51 编写程序各自的特点。程序:MOV P1, #0FFH LABEL : CPL P1.1 CALL DELAY JMP LABEL DELAY: MOV R7, #0 LABEL2: NOP DJNZ R7, LABEL2 RET END表 2.3 测量点数据表记 录 计 算对象 P1.0输出值 LED1燃亮情况LED1阳极电压VLED1阴极电压VP1.0引脚电压VLED1电压降VLED1电流mA0Proteus10实验议 1