
KEIL3软件教程.pdf
9页实验一 指令调试练习 实验目的实验目的 1 熟悉仿真软件 KEIL3 的操作步骤 掌握调试程序的常用方法 2 理解常用指令的作用 实验内容实验内容 1 数据块传送程序的调试 2 方波信号产生程序的调试 实验实验设备设备 计算机和 Keil3 仿真软件 实验实验程序程序和实验和实验操作操作 1 数据块传送数据块传送程序的调试程序的调试 说明 下面程序完成两个数据块传送 其中 One 部分程序是将十六进制数 0 F 传送到 RAM 的 30H 3FH 地址单元中 Two 部分程序将 RAM 的 30H 3FH 地址单元中的数据传送到 40H 4FH 地址单元中 实验程序实验程序 ORG 0000H 指明程序的起始地址 one 下面一段程序是向 RAM 的 30H 3FH 地址单元中传送 0 F 十六个数 CLR A 要传送的数据放 A 里 初始值为 0 MOV R1 30H R1 作为数据块的地址指针 初始值指向 30H 单元 MOV R2 10H R2 是数据块的长度 共 16 个单元 Loop1 MOV R1 A 把 A 里的数据传送到 R1 指向的地址单元里 注意观察 R1 间接寻址的作用 执行完上条指令时 观察数据存储区 30H 3FH 地址单元里数据的变化 并记录在表 1 2 中 INC R1 R1 指向下一个单元地址 INC A 下一个要传送的数据 DJNZ R2 Loop1 控制循环次数和循环位置 注意观察 R2 里数据的变化 R2 减为 0 时循环结束 two 下面一段程序是将 RAM 的 30H 3FH 地址单元中的数据传送到 40H 4FH 地址单元中 MOV R0 30H R0 作为源地址指针 起始地址是 30H MOV R1 40H R1 作为目的地址指针 起始地址是 40H MOV R2 10H R2 是数据块的长度 Loop2 MOV A R0 取源数据 调试时观察 R0 的间接寻址的作用 MOV R1 A 源数据送目的地址单元 调试时观察 R1 的间接寻址的作用 执行完上条指令时 观察数据存储区 40H 4FH 单元里数据的变化 并记录在表 1 2 中 INC R0 修改源地址指针 INC R1 修改目的地址指针 DJNZ R2 Loop2 控制循环次数和循环位置 观察 R2 里数据的变化 体会 DJNZ 指令的作用 SJMP 原地踏步 END 程序结束 实验操作实验操作 1 新建工程 单击桌面图标 打开 uVision3 程序 如图 1 1 所示 图 1 1 uVision3 程序界面 单击 工程 菜单下 新建 uVision 工程 弹出 产生新工程 对话框 如图 1 2 所示 图 1 2 新建工程 选定我的文档 文件夹 可自己新建 输入文件名 默认保存类型 单击图 1 2 中 保存 按钮 出现 为 目 标 1 选择设备 的窗口 如图 1 3 左图所示 要求为新建工程选择单片机型号 下拉滚动条 选中 Atmel AT89S52 单片机 单击 确定 按钮 然后在出现的对话窗口中点击 否 完成新建工程 程序界面如图 1 3 右图所示 下拉滚动条选择 Atmel AT89S52 编辑窗口 工具栏 主菜单 工程窗口 运行信息显示窗口 已建立的工程 图 1 3 选择单片机型号 2 新建源程序文件 单击 文件 菜单下 新建 出现 Text1 编辑窗口 在空白区输入源程序 单击工具栏中保存文件 输 入文件名和文件扩展名 ASM 如图 1 4 所示 单击 保存 图 1 4 建立源程序文件 鼠标右键单击 工程窗口 中 源代码组 1 在弹出的下拉菜单中单击 添加文件到组源代码组 1 文件 类型选定为 Asm source file 在窗口中查找并选中刚保存的源程序文件 单击 Add 添加 然后 Close 关闭 把源代码组 1 前面的 号点开 此时 源代码组 1 下面显示刚添加的文件名 如图 1 5 所示 图 1 5 添加源程序文件到源代码组 3 编译与连接 单击或 工程 菜单下 编译 在输出窗口 Output Window 显示编译结果 如果输入有误 输出窗口 会有错误提示 必须检查和修改错误 重新编译 直至显示 0 个错误 0 个警告 如图 1 6 所示 图 1 6 输出窗口显示编译和连接信息 文件名后文件名后 手动添加手动添加 扩展名扩展名ASM 单击 连接 创建目标文件 结果显示在输出窗口中 如图 1 6 所示 单击 是和多个文件连接 创建目标文件 4 启动调试 单击 或 调试 菜单下选择 启动 停止调试 进入程序调试窗口 如图 1 7 所示 图 1 7 程序调试窗口 调试工具栏如图 1 8 所示 单击 程序复位 PC 指针指向程序行的第一条可执行指令 单击 跟踪执行每 一条指令 PC 指针指向下一条指令 单击 顺序执行一条指令 PC 指针指向下一行指令 单击 执行程序到光 标处停止 单击 执行完全部程序 图 1 8 调试工具栏 5 调试实验程序 记录实验数据 实验实验操作操作 1 1 单击 视图 菜单打开 反汇编窗口 可以看到经过编译后各条指令对应的机器码和存储地址 如图1 9所示 图 1 9 反汇编窗口 实验实验操作操作 2 2 单击 视图 菜单打开 存储器窗口 在地址栏里输入 C 0 回车 此时 Memory 1 窗口表示的是程序存 储器 如图 1 10 所示 在存储器 0H 0017H 单元中显示的数据是本程序的全部机器码 依次读出并记录于表 1 1 中 图 1 10 程序存储器窗口 表 1 1 程序存储器地址 0000H 0001H 0002H 0003H 0004H 000CH 机器代码 程序存储器地址 000DH 000EH 000FH 0010H 0011H 0017H 机器代码 存储器窗口每一行的 第一个单元的地址地址 机器机器代代码码 字母字母 c 代表代表 程序存储器程序存储器 机器代码 存储器地址 源程序行 源指令 实验实验操作操作 3 3 在图 1 10 存储器窗口中再打开另一个 Memory 2 窗口 在地址栏中输入 d 0 回车 此时的窗口表示的是 数据 存储器 可左右拉动边框 调整窗口大小 使之一行显示 16 个单元 如图 1 11 所示 图 1 11 数据存储器窗口 连续操作 跟踪 命令 逐条执行 one 到 two 之间的指令 同时通过特殊寄存 器窗口 在 Keil3 主界面的左边 如图 1 12 所示 观察 R1 R2 A 等寄存器里数据的变化 了解单片机传送数据的工作过程 并通过数据存储器窗口查看 30H 3FH 地址里的数据 并记录于表 1 2 中 实验实验操作操作 4 4 连续操作 跟踪 命令 逐条执行 two 到 SJMP 之间的指令 在图 1 12 特殊寄存器窗口观察 R0 R1 R2 A 等寄存器里数据的变化 了解单片机数据块传送的工作过程 在图 1 11 所示的数据存储器窗口中查看 40H 4FH 里的 数据 并记录于表 1 2 中 表 1 2 实验实验数据分析 数据分析 1 根据实验操作 4 结合表 1 2 概述单片机进行数据块的数据传送是如何实现的 2 表 1 1 中地址单元里的数据和表 1 2 中地址单元里的数据有什么不同 3 程序中的循环是由哪条指令实现的 其中的第一操作数和第二操作数分别起什么作用 数据存储器地址 30H 31H 32H 33H 34H 35H 36H 37H 数值 数据存储器地址 38H 39H 3A H 3B H 3C H 3D H 3E H 3F H 数值 数据存储器地址 40H 41H 42H 43H 44H 45H 46H 47H 数值 数据存储器地址 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH 数值 图 1 12 特殊寄存器窗口 字母 D 代表 数据数据存储器存储器 存储器窗口每一行的 第一个单元的地址地址 数据数据 2 方波信号产生方波信号产生程序的调试程序的调试 说明 1 下面这段程序是从 P1 口输出一个周期为 200 毫秒的方波信号 周期时间是由延时子程序实现 2 延时子程序的延时时间为 100 毫秒 延时时间的时长 每条指令的执行时间 执行次数 其中 每条指令执行的时间 机器周期数 一个机器周期时间 一个机器周期时间 12 个时钟周期 一个时钟周期 晶振频率的倒数 本实验晶振频率为 12M 实验程序 ORG 0000H MOV SP 60H MOV A 00H Loop MOV P1 A ACALL DELAY100ms CPL A SJMP Loop DELAY100ms MOV R6 100 1 us 1 1us Dly1 MOV R7 250 1 us 100 100us Dly2 NOP NOP 1 1 2 us 250 100 100ms DJNZ R7 Dly2 DJNZ R6 Dly1 2 us 100 200us RET 2 us 1 2us END 实验操作 1 单击 退出程序 1 的调试 2 保留工程目标 1 从源代码组 1 下删除程序 1 的源程序文件 新建程序 2 的源程序文件 如图 1 13 所示 图 1 13 新建程序 2 的源程序文件 3 保存并添加文件到源代码组 1 下 方法同程序 1 的调试 4 工程设置 在 工程 菜单下选择 为目标1 设置选项 弹出设置选项对话框 在 项目 页中 将 时钟 改为12M 如图1 14 所示 图 1 14 时钟设置 在图 1 14 中单击 调试 选项页 选中其中的 根据真实时间控制速度 如图 1 15 所示 单击 确定 5 编译 连接和启动调试 步骤同程序 1 的调试 6 连续操作 单步 命令执行程序 当 PC 指针指向 ACALL delay100ms 指令行时 在图 1 12 寄存器窗口 中观察并记录 sec 的数据 然后再执行一次 单步 命令 即 PC 指针指向 CPL A 指令行时 再观察并记录 sec 的数据 用 sec2 sec1 计算延时时间是多少 7 单击 外围设备 菜单选择 I O Ports Port 1 即 P1 口 如图 1 16 所示 反复执行 单步 命令 观察 P1 口的状态变化 图 1 16 I O 窗口 8 单击逻辑分析仪快捷图标 工具栏第二行倒数第三个 弹出窗口如图 1 17 所示 单击图中 设置 按钮 在弹出的设置窗口中输入 P1 然后 关闭 图 1 15 调试选项设置 图 1 17 逻辑分析仪的设置 执行连续运行命令 即自动连续运行程序 运用逻辑分析仪窗口中的 放大 缩小 按钮 调整横坐 标的比例 可以看到程序运行的波形图如图 1 18 所示 观察和记录 P1 口的波形图 读出周期时间并标示在图中 图 1 18 P1 口波形图 实验分析 实验分析 1 概述方波的产生是如何实现的 2 程序 2 中的循环是由哪条指令实现的 与程序 1 中的循环有什么不同 3 方波的周期时间如何调整 如果要求 P1 口输出周期为 400ms 的方波 程序如何修改 并运行程序测试延时 时间是否达到要求 记录程序运行的波形图和周期时间 选作 9 单击 程序停止运行 再单击 退出程序 2 的调试 关闭 Keil3 软件 关闭计算机 实验报告要求 实验报告要求 1 实验题目 实验人姓名 班级 学号 实验时间 实验地点 2 实验设备和调试软件的名称 3 实验内容 4 每一段实验源程序和调试操作的过程 数据记录与实验分析 5 实验总结 1 概述使用仿真软件 Keil3 调试程序的基本操作步骤 2 在实验程序调试中 使用了哪些执行程序的方法 使用了哪些窗口 各用来观察哪些数据变化和结果 3 其它 。
