1.18k likes | 1.46k Views
6.1 汇编源程序的建立与编译 6.1.1 Proteus 中的源程序设计与编译 6.1.2 Keil µVision 中的源程序设计与编译 6.2 Proteus 与单片机电路的交互式仿真与调试 6.2.1 加载目标代码 6.2.2 单片机系统的 Proteus 交互仿真 6.2.3 调试菜单与调试窗口 6.2.4 观察窗口 6.3 I/O 口输入输出应用 6.3.1 Proteus 电路设计 6.3.2 源程序设计 6.3.3 Proteus 调试与仿真 6.3.4 总结与提示 6.4 4×4 矩阵式键盘识别技术
E N D
6.1 汇编源程序的建立与编译 6.1.1 Proteus中的源程序设计与编译 6.1.2 Keil µVision中的源程序设计与编译 6.2 Proteus与单片机电路的交互式仿真与调试 6.2.1 加载目标代码 6.2.2 单片机系统的Proteus交互仿真 6.2.3 调试菜单与调试窗口 6.2.4 观察窗口 6.3 I/O口输入输出应用 6.3.1 Proteus电路设计 6.3.2 源程序设计 6.3.3 Proteus调试与仿真 6.3.4 总结与提示 6.4 4×4矩阵式键盘识别技术 6.4.1 Proteus电路设计 6.4.2 源程序设计 6.4.3 Proteus调试与仿真 6.4.4 总结与提示 6.5 动态扫描显示 6.5.1 Proteus电路设计 6.5.2 源程序设计 6.5.3 Proteus调试与仿真 6.5.4 总结与提示 6.6 8×8点阵LED显示 6.6.1 Proteus电路设计 6.6.2 源程序设计 6.6.3 Proteus设计与仿真 6.6.4 总结与提示 6.7 I/O口的扩展 6.7.1 Proteus电路设计 6.7.2 源程序设计 6.7.3 Proteus调试与仿真 6.7.4 总结与提示 6.8 定时器/计数器实验 6.8.1 Proteus电路设计 6.8.2 源程序设计 6.8.3 Proteus设计与仿真
6.8.4 总结与提示 6.9 外部数据存储器扩展 6.9.1 Proteus电路设计 6.9.2 源程序设计 6.9.3 Proteus调试与仿真 6.9.4 总结与提示 6.10 外部中断实验 6.10.1 Proteus电路设计 6.10.2 源程序设计 6.10.3 Proteus调试与仿真 6.10.4 总结与提示 6.11 单片机与PC机间的串行通信 6.11.1 Proteus电路设计 6.11.2 源程序设计 6.11.3 Proteus调试与仿真 6.11.4 总结与提示 6.12 单片机与步进电机的接口技术 6.12.1 Proteus电路设计 6.12.2 源程序设计 6.12.3 Proteus调试与仿真 6.12.4 总结与提示 6.13 单片机与直流电动机的接口技术 6.13.1 Proteus电路设计 6.13.2 源程序设计 6.13.3 Proteus调试与仿真 6.13.4 总结与提示 6.14 基于DAC0832数模转换器的数控电源 6.14.1 Proteus电路设计 6.14.2 源程序设计 6.14.3 Proteus调试与仿真 6.14.4 总结与提示 6.15 基于ADC0808模数转换器的数字电压表 6.15.1 Proteus电路设计 6.15.2 源程序设计 6.15.3 Proteus调试与仿真 6.15.4 总结与提示
第6章 MCS-51单片机接口基础 • MCS-51系列单片机在很多产品中得到了广泛的应用。在具体的工程实践中,单片机应用技术所涉及的实践环节较多,且硬件投入较大,如果因为控制方案有误而进行相应的开发设计,会浪费较多的时间和经费。Proteus仿真软件很好地解决了这些问题,它可以像Protel一样绘制硬件原理图并实现硬件调试,再与Keil编程软件进行联调,实现对控制方案的验证。尤其对于初学单片机的用户提供了极大的方便。
6.1 汇编源程序的建立与编译 • Keil是德国Keil公司开发的单片机编译器,是目前最好的51单片机开发工具之一,可以用来编译C源代码和汇编源程序、连接和重定位目标文件和库文件、创建HEX文件、调试目标程序等,是一种集成化的文件管理编译环境。在Proteus中,可以直接与Keil编程软件进行联调,进而实现对所设计电路的验证。
6.1.1 Proteus中的源程序设计与编译 • Proteus VSM提供了简单的文本编辑器,用它作为源程序的编辑环境。对于不同系列的单片机,VSM均提供了相应的编译器,使用时可根据单片机的型号和语言要求来选取。 • 编译器有以下几种: • ASEM51(51系列单片机编译器); • ASM11(Motorola单片机编译器); • AVRASM(Atmel AVR系列单片机编译器); • AVRASM32(Atmel AVR系列单片机编译器); • MPASM(PIC单片机编译器); • MPASMSWIN(PIC单片机编译器)。 • 1. 建立源程序文件 • 在Proteus ISIS界面中单击菜单Soure(源程序),在弹出的下拉菜单中单击“Add/Remove Source Files…”(添加/移开源程序)选项,弹出如图6-1所示对话框,
单击“Code Generation Tool”(目标代码生成工具)下方框中按钮,弹出下拉菜单,根据需要选择相应的编译器,例如“ASEM51”(51系列单片机编译器)。 图6-1 Add/Remove Source Code Files对话框
在图6-1中单击“New”按钮,弹出如图6-2所示的对话框,在文件名框中输入新建源程序文件名“mydesign”,单击“打开”按钮,弹出图6-2中所示的小对话框,选择“是”按钮,新建的源程序文件就添加到图6-1中的“Source Code Filename”方框中,如图6-3所示。同时在ISIS界面的“Source”菜单中也加入了源程序文件名“mydesign.asm”,如图6-4所示。
图6-3 源程序添加结果 图6-4 菜单Source中加载的源程序文件 2. 编写源程序代码 单击菜单【Source】→【mydesign.asm】,出现图6-5所示的源程序编辑窗口。编写源程序后存盘退出。 图6-5 源程序编辑窗口
3. 源程序编译 (1) 编译器设置。 第一次使用编译器时需进行相关的设置,单击菜单【Source】→【Define Code Generation Tools】,出现图6-6所示界面,本例中实际设置结果如图6-6所示 (2) 编译源程序,生成目标代码文件。 单击【Source】→【Build All】,编译结果在弹出的编译日志对话框中。如果没有错误便成功生成目标代码“.hex”文件。本例中生成的目标代码文件为“MYDESIGN.HEX”。 图6-6 编译器设置界面
6.1.2 Keil µVision中的源程序设计与编译 • 在Keil集成开发环境下使用工程的方法来管理文件,而不是单一文件的模式,所有的文件包括源程序(如C程序、汇编程序)、头文件等都可以放在工程项目文件里统一管理。对于刚刚使用Keil的用户,一般可以按照下面的步骤来创建一个自己的应用程序: • (1) 一个工程项目文件; • (2) 选择目标器件(例如,选择ATMEL公司的AT89C51);
(3) 为工程项目设置软硬件调试环境; • (4) 创建源程序文件并输入程序代码; • (5) 保存创建的源程序项目文件; • (6) 把源程序文件添加到项目中。 • 具体如何建立应用程序并进行仿真调试,我们将通过实验来详细说明。 • 1. 建立一个项目 • 双击桌面快捷图标即可进入如图6-7所示的集成开发环境编辑操作界面,主要包括三个窗口:工程项目窗口、编辑窗口和输出窗口。 • 单击 Project 菜单,在弹出的下拉菜单中选中“New Project”选项,新建一个项目,如图6-8所示。
图6-7 μVision2编辑操作界面 图6-8 Project界面
然后选择要保存的路径,输入工程文件的名字(比如保存到uv目录里,工程文件的名字为“shiyan1”),如图6-9所示,然后单击“保存”按钮。然后选择要保存的路径,输入工程文件的名字(比如保存到uv目录里,工程文件的名字为“shiyan1”),如图6-9所示,然后单击“保存”按钮。 • 这时会弹出一个对话框,要求选择单片机的型号。这里可以根据所使用的单片机来选择,Keil几乎支持所有51核的单片机,这里以Atmel的89C51来说明,如图6-10所示。 图6-9 Project保存设置界面
图6-10 选择器件 首先选择Atmel公司,然后单击左边的“+”号选择AT89C51 之后,右边栏 是对这个单片机的基本说明,然后单击“确定”,在随后弹出的对话框单击“否”。 完成以上步骤后,屏幕如图6-11所示
首先进行选项设置,将鼠标指针指向“Target 1”并单击右键,再从弹出的右键菜单中单击“Options for Target”选项,如图6-12所示。 图6-11 初始化编辑界面
从弹出的“Options”对话框中选择“Output”标签栏,并按如图6-13所示设置其中各项。从弹出的“Options”对话框中选择“Output”标签栏,并按如图6-13所示设置其中各项。 图6-12 选择“Options for Target”选项 图6-13 “Output”标签栏
2. 建立一个新的ASM汇编语言程序并编译 • 下面开始编写源程序。 • (1) 在菜单栏中,单击“File”菜单,再在下拉菜单中单击“New”选项,或直接单击工具栏的快捷图标来建立了一个新的编辑窗口。此时光标在编辑窗口里闪烁,这时可以输入用户的应用程序了。建议首先保存该空白文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项,在弹出对话框的“文件名”栏右侧编辑框中,输入欲使用的文件名,同时,必须输入正确的扩展名,如“Text1.asm”,然后,单击“保存”按钮,如图6-14所示
注意:如果用C语言编写程序,则扩展名为“.c”;如果用汇编语言编写程序,则扩展名为“.asm”,且必须添加扩展文件名。注意:如果用C语言编写程序,则扩展名为“.c”;如果用汇编语言编写程序,则扩展名为“.asm”,且必须添加扩展文件名。 • (2) 回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如图6-15所示的快捷菜单。 图6-14 保存源程序
然后单击“Add File to Group‘Source Group 1’”,打开如图6-16所示对话框,在“文件类型”处默认为“C Source file(*.c)”,因为前面我们保存的是汇编语言的文件,故需要选择“Asm Source file(*.s*;*.src;*.a*)”,这样在上面就可以看到刚才保存的汇编语言文件“Text1.asm”,双击该文件则自动添加至项目,单击“Close”关闭对话框。 • 对比图6-17和图6-15,可以看出二者的不同点:在添加了汇编语言文件后,在“Source Group 1”文件夹前面出现了一个“+”号,单击“+”号展开就看到了刚才添加的“Text1.asm”文件。 图6-15 弹出右键菜单
(3) 然后就可以在右侧的编辑区输入汇编源程序了。在输入指令时,读者可以看到事先保存待编辑文件的好处:Keil会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后别忘了再次保存,如图6-18所示。 图6-16 添加文件对话框 图6-17 添加文件后工程栏的变化
(4) 程序文件编辑完毕后,单击“Project”菜单,选中“Built target”选项(或者使用快捷键 F7),或者单击工具栏的快捷图标来进行编译,如图6-19所示 图6-18 程序输入完毕后状态 图6-19 编译菜单
(5) 如果有错误,则在最后的输出窗口中会出现所有错误所在的位置和错误的原因,并有“Target not created”的提示。双击该处的错误提示,在编辑区对应错误指令处左面出现蓝色箭头提示,然后对当前的错误指令进行修改,如图6-20所示 图6-20 错误提示
(6) 将所有提示过的错误进行修改,然后再次重复(4)的操作进行编译,直至出现“"shiyan1" - 0 Error(s), 0 Warning(s)”,说明编译完全通过,如图6-21所示。 图6-21 编译通过提示
3. 调试并仿真 • 编译成功后,就可以进行调试并仿真了。单击“Project”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键 Ctrl+F5),或者单击工具栏的快捷图标就可以进入调试界面,如图6-22所示 图6-22 调试界面
左面的工程项目窗口给出了常用的寄存器r0-r7以及a、b、sp、dptr、pc、psw等特殊功能寄存器的值。在执行程序的过程中可以看到,这些值会随着程序的执行发生相应的变化。左面的工程项目窗口给出了常用的寄存器r0-r7以及a、b、sp、dptr、pc、psw等特殊功能寄存器的值。在执行程序的过程中可以看到,这些值会随着程序的执行发生相应的变化。 • 在存储器窗口的地址栏处输入C:0000H后回车,则可以观看所有单片机片内程序存储器的内容,如图6-23所示,下面用横线画出来的部分就是已经编辑的源程序转化成的机器语言的十六进制数(或者说是对应的机器码)。如果在存储器窗口的地址栏处输入D:00H后回车,则可以观看所有单片机片内数据存储器的内容 图6-23 存储器窗口
在联机调试状态下可以启动程序全速运行、单步运行、设置断点等,单击菜单“Debug /Go”选项,启动用户程序全速运行。 • 下面介绍几种常用的调试命令及方法。 • (1) 复位CPU • 用“Debug”菜单或工具栏的“Reset CPU”命令可以复位CPU。在不改变程序的情况下,若想使程序重新开始运行,执行此命令即可。执行此命令后程序指针返回到000H地址单元。另外,一些内部特殊功能寄存器在复位期间也将重新赋值。例如,A将变为00H,DPTR变为0000H,SP变为07H,I/O口变为0FFH。
(2) 全速运行(F5) • 用“Debug”工具栏的“Go”或快捷命令“Run”命令按钮,即可实现全速运行程序。当然若程序中已经设置断点,程序将执行到断点处,并等待调试指令。 • (3) 单步跟踪(F11) • 用“Debug”工具栏的“Step”或快捷命令“StepInto”命令按钮,可以单步跟踪程序。每执行一次此命令,程序将运行一条指令(以指令为基本执行单元)。当前的指令用黄色箭头标出,每执行一步箭头都会移动,已执行过的语言呈绿色。在汇编语言调试下,可以跟踪到每一个汇编指令的执行。Vision2处于全速运行期间,Vision2不允许对任何资源的查看,也不接受其他命令。
(4) 单步运行(F10) • 用“Debug”工具栏的“Step Over”或快捷命令“Step Over”按钮,即可实现单步运行程序,此时单步运行命令将把函数和函数调用当作一个实体来看待,因此单步运行是以语句(该语句不管是单一命令行还是函数调用)为基本执行单元。 • (5) 执行返回(Ctrl+F11) • 在用单步跟踪命令跟踪到子函数或子程序内部时,使用“Debug”菜单栏中的“Step Out of Current Function”或快捷命令按钮“Step Out”,即可将程序的PC指针返回到调用此子程序或函数的下一条语句。(6) 停止调试(Ctrl+F5) • 由于“Led_Light”程序使用了系统资源P1口,为了更好地观察这些资源的变化,用户可以打开它们的观察窗口。选择“PeripheralsI/O-PortsPort1”命令,即可打开并行I/O口P1的观察窗口。
6.2 Proteus与单片机电路的交互式仿真与调试 6.2.1 加载目标代码
在Proteus ISIS界面中编辑电路原理图实例,如图6-24所示 • 双击单片机AT89C51,打开其属性编辑框,在“Program File”栏中,单击打开按钮,选取目标代码文件,这里是“MYDESIGN.HEX”。在“Clock Frequency”栏中设置时钟频率为12MHz,如图6-25所示。因为仿真运行 图6-24 实例电路原理图
时的时钟频率是以单片机属性中设置的频率值为准,所以在Proteus ISIS界面中设计电路原理图时,可以略去单片机的时钟电路。另外,复位电路也可略去。对于MCS-51系列单片机而言,在不进行电路电气检测时,EA引脚也可悬空。 图6-25 加载目标代码文件和时钟设置
6.2.2 单片机系统的Proteus交互仿真 • 在Proteus仿真界面中单击按钮,全速启动仿真,此时电路中的LED不亮。用鼠标单击电路图中的按钮,进行交互仿真。单击一次按钮,LED灯亮,再单击一次,LED灯灭,如此循环交替。本实例仿真片段如图6-26所示。单击仿真按钮,可停止仿真。 图6-26 实例仿真片段
6.2.3 调试菜单与调试窗口 • 系统在全速仿真运行时不显示调试窗口,可单击暂停按钮,然后单击Proteus ISIS界面的“Debug”菜单,弹出如图6-27所示的下拉菜单。从图中可以看出,调试菜单包含有3个存储器窗口,调试过程中可分别打开这3个存储器窗口进行观察。 • 1. 单片机寄存器窗口 • 通过菜单【Debug】→【8051 CPU Registers-U1】打开单片机寄存器窗口,如图6-28所示。里面有常用的SFR,如SP、PC、PSW、R0~R7、ACC及将要执行的指令等。在本窗口内右击,可以设置窗口的字体和颜色。
2. 单片机SFR 窗口 • 通过菜单【Debug】→【8051 CPU SFR Memory-U1】打开单片机的SFR窗口,如图6-29所示。 图6-27 “Debug”下拉菜单
3. 单片机IDATA窗口 • 通过菜单【Debug】→【8051 CPU Internal(IDATA)Memory-U1】打开单片机的IDATA窗口,如图6-30所示。 • 对于单片机的SFR寄存器,既可以从单片机的寄存器窗口中查看,也可以在SFR寄存器窗口中查看。 • 在SFR、IDATA窗口中右击,可弹出该窗口的设置菜单,如图6-31所示。可使用“Goto”命令快速运动到指定的显示单元,还可复制数据或改变显示方式等。 图6-28 单片机寄存器窗口
图6-29 单片机SFR窗口 图6-30 单片机IDATA窗口 图6-31 单片机IDATA窗口的快捷菜单
6.2.4 观察窗口 • 虽然通过以上方法可以观察单片机各个存储器的内容,但因显示内容比较分散,观察起来不方便。对此,Proteus又同时提供了一个观察窗口“Watch Window”,它可以将所关心的各项寄存器的内容集中于一个窗口中,观察起来十分方便,克服了上述缺点。 • 1. 观察项添加 • 通过菜单【Debug】→【Watch Window】打开空白的观察窗口,在观察窗口内右击,弹出快捷菜单,如图6-32所示。由该菜单可添加、删除观察项,设置观察项的数据类型,显示格式以及设置窗口的字体、颜色等。
若单击“Add Items(By Name)”项,便会弹出如图6-33所示的对话框,双击相应的SFR寄存器名称,即可以观察项名称方式将观察项添加到观察窗口中。也可选择以观察项的地址来添加观察项的方式。添加了观察项的观察窗口如图6-34所示。 图6-32 观察窗口及快捷菜单
2. 观察项删除 • 要删除已添加的观察项,有两种方法: • 在观察窗口单击选中相应的观察项,按键盘上的“Del”键即可。 • 在观察窗口右击相应的观察项,在弹出的快捷菜单中单击“Delete Item”选项。 图6-34 添加了观察项的观察窗口 图6-33 “Add Memory Item”对话框
3. 观察点条件设置 • 在仿真运行的过程中,还可以通过设置“观察点条件”的手段来触发中断,以满足某些特殊条件断点的要求。具体方法:在观察窗口内右击,在弹出的快捷菜单中单击“Watchpoint Condition”项,弹出观察点条件设置框,如图6-35所示。 图6-35 观察点条件设置框
观察点条件设置分为两级,包括“全局断点条件设置(Global Break Condition)”,如图6-35中的上半部分所示,和“观察项的断点表达式(Item Break Expression)”,如图6-35的下半部分所示。下半部分中“Item”项的内容为观察窗口中添加的观察项,可单击按钮,在下拉列表中选择要设置断点的观察项。“Condition”项为观察项的条件,“Mask”项为观察项的约束条件,它们具体包含的内容如图6-35的右边所示。
6.3 I/O口输入输出应用 • 内容 • 利用单片机AT89C51制作一个0~99计数器手动计数器,用其P2.0~P2.7接一个共阴极数码管,输出显示0~99计数值的个位,用P0.0~P0.7接数码管输出显示计数值的十位数。P3.3引脚外接一轻触开关,要求每按下一次按键,计数值加1,当计数值超出99后自动返回0重新开始循环计数。 • 训练目的 • 掌握AT89C51单片机I/O口输入输出的应用方法; • 掌握单片机驱动7段数码管显示数字的编程方法。
6.3.1 Proteus电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-1所列的清单添加元件。 表6-1 元件清单
2. 电路原理图 • 元件全部添加后,在Proteus ISIS的编辑区域中按图6-36所示的原理图(晶振和复位电路略)连接硬件电路。 图6-36 电路原理图
6.3.3 Proteus调试与仿真 • 1. 建立程序文件 • (1) 打开Keil µVision3,新建Keil项目,选择AT89C51单片机作为CPU; • (2) 新建汇编源文件,编写程序并将其导入到“Source Group 1”中; • (3) 在“Options for Target”对话框中,选中“Output”选项卡中的“Create HEX File”选项和“Debug”选项卡中的“Use:Proteus VSM Simulator”选项; • (4) 编译源程序,修改程序中的错误直至通过。
2. 加载目标代码文件 • (1) 在Proteus ISIS中,左键双击AT89C51元件打开“Edit Component”对话框,设置单片机的频率为12MHz; • (2) 在该窗口的“Program File”栏中,选择先前在Keil中编译产生的“.HEX”文件; • (3) 在Proteus ISIS菜单栏中选择【File】→【Save Design】选项,保存设计; • (4) 在Proteus ISIS菜单栏中,打开“Debug”下拉菜单,在菜单中选择“Use Remote Debug Monitor”选项,以支持与Keil的联调。 • 3. 进行调试与仿真 • (1) 在Keil的菜单栏中选择【Debug】→【Start/Stop
Debug Session】选项,或者在工具栏中直接单击图标,进入调试环境; • 3. 进行调试与仿真 • (1) 在Keil的菜单栏中选择【Debug】→【Start/Stop Debug Session】选项,或者在工具栏中直接单击图标,进入调试环境; • (2) 按“F5”键或图标,顺序执行程序; • (3) 在Proteus ISIS界面中,按动开关,可看到数码管的显示值随之加1,如图6-37所示。
6.3.4 总结与提示 图6-37 程序运行结果 AT89C51单片机的P0口在作为普通I/O使用时必须
6.4 4×4矩阵式键盘识别技术 加上拉电阻,否则不能准确输入或输出高低电平。仿真时可通过观察P0口的电平状态来体会这一点。 在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。 • 内容 • 键盘是一组按键的集合,它是最常用的单片机输入设备。操作人员可以通过键盘输入数据或命令,实现简单的人—机通信。键盘分编码键盘和非编码键盘。靠软件识别的为非编码键盘。从结构上来分又可以分为独立连接式和行列式(矩阵式)两类。