logo资料库

单片机实验指导书2012版全答案版(学生用).doc

第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
资料共40页,剩余部分请下载后查看
实验一 8051简单编程与调试
实验目的
实验基本要求
建立三个项目,分别输入存储块清零、二进制BCD码及二进制ASCII码转换的汇编源程序,并进行仿真调试
实验步骤
在Proteus中调试程序
Proteus 与Keil整合调试及电路仿真
实验内容1
一、存储块置全“1”源代码:
二、二进制BCD码转换源代码:
三、二进制ASCII码转换源代码:
实验二 汇编语言程序设计(一)
实验目的
实验基本要求
实验内容
一、内存块移动
二、程序转跳表
三、数据排序
四、调试程序S1.asm
实验目的
实验基本要求
实验内容
一、调试S2.asm、S3.asm两个程序并完成思考题
二、编程并调试B1.asm和B2.asm
实验四 功能模块一(I/O口)
实验目的
实验基本要求
实验内容1
1、多路开关指示
2、键盘显示
3、0-59s计时器(软件延时)
实验内容2
实验五 功能模块二(定时器)
实验目的
实验基本要求
实验内容
一、定时器实验:
二、定时/计数器T0作定时应用
三、计数器
实验六 功能模块三(中断)
实验目的
实验基本要求
实验内容
一、外部中断
二、方波发生器
实验七 功能模块四(串口)
实验目的
实验基本要求
实验内容
一、单片机双机串口通信
二、单片机与PC机通信
实验一 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 类型。如图所示。 点击“确定”按钮后,弹出如下的对话框 1
如果是进行汇编语言编程选择“否”。 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”子窗口如图所示。 2
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”子窗口中会显示如图所示的信息;如果编译不成功,双击“Output Window”窗口中的错误信息, 则会在编辑窗口中指示错误语句。 5、 将没有错误的绝对代码装入Vision2 调试器进行仿真调试,调试成功后将 HEX 文件写入到单片 机应用系统的 EPROM 中。 3
在 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 4
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”如图所示。 5
单击“Setting”进入对话框填写如图所示的 IP 地址和端口号。 在 Keil 中,在菜单栏中选择“Debug”→“Start/Stop Debug Session”选项,Keil 系统进入调试状态。 同时 Proteus 也进入调试状态。这时可以调整这两个软件窗口的大小,使它们同时出现在桌面上,这样就 可以同时观察这两个软件运行的情况了。 在 Proteus 的调试状态下,在“Debug”菜单中打开“8051 CPU Registers”、“8051 CPU Internal(IDATA) Memory”、“8051 CPU SFR Memory”三个观察窗口,在单步运行程序的过程中,可以在这三个窗口中看到 各寄存器以及存储单元的动态变化。 6
实验内容 1 Porteus 模型为 BASIC.DSN 如下图所示。 一、 存储块置全“1”源代码: 汇编语言源程序: 00H 30H R1,#START ORG START EQU MOV MOV R7,20H MOV LOOP: MOV INC DJNZ R7,LOOP SJMP END R1 $ A,#0FFH @R1,A ;起始地址 ;Rn中设置32字节计数值 ;指向下一个地址 ;计数值减1,不为零继续 在下划线处填入适当指令。 输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。 解释 START EQU 30H。 二、 二进制 BCD 码转换源代码: 汇编语言源程序: RESULT EQU ORG LJMP START: 30H 00H START MOV SP,#40H A,#123 BINTOBAC $ MOV LCALL SJMP ;堆栈指针指向40H 7
BINTOBAC: MOV B,#64H DIV AB ;除以100得百位数 RESULT,A A,B B,#10 AB RESULT+1,A RESULT+2,B ;余数为个位数 ;余数除以10得十位数 MOV MOV MOV DIV MOV MOV RET END 在下划线处填入适当指令。 用单步执行的方法,观察子程序调用过程中堆栈指针的变化。 三、 二进制 ASCII 码转换源代码: 汇编语言源程序: EQU RESULT ORG START: 30H 00H A,#1AH MOV CALL BINTOHEX LJMP $ BINTOHEX: DPTR ,#ASCIITAB B,A MOV MOV SWAP A ANL A,#0FH MOVC A, @A+DPTR MOV MOV ANL MOVC A,@A+DPTR MOV RESULT+1,A RET RESULT, A A,B A,#0FH ;调用BINTOHEX子程序 ;表的首址ASCIITAB送DPTR ;暂存A ;取A的高四位 ;查ASCII表 ;恢复A ;取低四位 ;查ASCII表 ASCIITAB: DB END '0123456789ABCDEF' ;定义数字对应的ASCII表 在下划线处填入适当指令。 单步运行程序观察查表指令的执行过程。 把 LJMP $这条指令注释掉,然后全速运行该程序,然后让其停止观察程序执行到哪里? 实验内容 2 输入、汇编、调试下列四个程序,通过信息窗口观察并回答问题。 8
分享到:
收藏