资源预览内容
第1页 / 共124页
第2页 / 共124页
第3页 / 共124页
第4页 / 共124页
第5页 / 共124页
第6页 / 共124页
第7页 / 共124页
第8页 / 共124页
第9页 / 共124页
第10页 / 共124页
亲,该文档总共124页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第6章 MCS-51单片机接口基础 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 44矩阵式键盘识别技术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 88点阵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-2 新建源程序文件对话框图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); 设置软硬件调试环境; (4) 创建源程序文件并输入程序代码; (5) 保存创建的源程序项目文件; (6) 把源程序文件添加到项目中。 具体如何建立应用程序并进行仿真调试,我们将通过实验来详细说明。 1. 建立一个项目 双击桌面快捷图标即可进入如图6-7所示的集成开发环境编辑操作界面,主要包括三个窗口:工程项目窗口、编辑窗口和输出窗口。 单击 Project 菜单,在弹出的下拉菜单中选中“New Project”选项,新建一个项目,如图6-8所示。图6-7 Vision2编辑操作界面图6-8 Project界面 然后选择要保存的路径,输入工程文件的名字(比如保存到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所示设置其中各项。图6-12 选择“Options for Target”选项图6-13 “Output”标签栏2. 建立一个新的ASM汇编语言程序并编译 下面开始编写源程序。 (1) 在菜单栏中,单击“File”菜单,再在下拉菜单中单击“New”选项,或直接单击工具栏的快捷图标来建立了一个新的编辑窗口。此时光标在编辑窗口里闪烁,这时可以输入用户的应用程序了。建议首先保存该空白文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项,在弹出对话框的“文件名”栏右侧编辑框中,输入欲使用的文件名,同时,必须输入正确的扩展名,如“Text1.asm”,然后,单击“保存”按钮,如图6-14所示 注意:如果用语言编写程序,则扩展名为“.c”;如果用汇编语言编写程序,则扩展名为“.asm”,且必须添加扩展文件名。 (2) 回到编辑界面后,单击“Target 1”前面的“”号,然后在“Source Group 1”上单击右键,弹出如图6-15所示的快捷菜单。图6-14 保存源程序 然后单击“Add File to GroupSource 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等特殊功能寄存器的值。在执行程序的过程中可以看到,这些值会随着程序的执行发生相应的变化。 在存储器窗口的地址栏处输入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 加载目标代码加载目标代码 双击单片机AT89C51,打开其属性编辑框,在“Program File”栏中,单击打开按钮,选取目标代码文件,这里是“MYDESIGN.HEX”。在“Clock Frequency”栏中设置时钟频率为12MHz,如图6-25所示。因为仿真运行在Proteus ISIS界面中编辑电路原理图实例,如图6-24所示 图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、R0R7、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-33 “Add Memory Item”对话框 图6-34 添加了观察项的观察窗口 3. 观察点条件设置 在仿真运行的过程中,还可以通过设置“观察点条件”的手段来触发中断,以满足某些特殊条件断点的要求。具体方法:在观察窗口内右击,在弹出的快捷菜单中单击“Watchpoint Condition”项,弹出观察点条件设置框,如图6-35所示。图6-35 观察点条件设置框v观察点条件设置分为两级,包括“全局断点条件设置(Global Break Condition)”,如图6-35中的上半部分所示,和“观察项的断点表达式(Item Break Expression)”,如图6-35的下半部分所示。下半部分中“Item”项的内容为观察窗口中添加的观察项,可单击按钮,在下拉列表中选择要设置断点的观察项。“Condition”项为观察项的条件,“Mask”项为观察项的约束条件,它们具体包含的内容如图6-35的右边所示。 内容 利用单片机AT89C51制作一个099计数器手动计数器,用其P2.0P2.7接一个共阴极数码管,输出显示099计数值的个位,用P0.0P0.7接数码管输出显示计数值的十位数。P3.3引脚外接一轻触开关,要求每按下一次按键,计数值加1,当计数值超出99后自动返回0重新开始循环计数。 训练目的 掌握AT89C51单片机I/O口输入输出的应用方法; 掌握单片机驱动7段数码管显示数字的编程方法。6.3 I/O口输入输出应用口输入输出应用6.3.1 Proteus电路设计电路设计1. 元件清单列表打开Proteus ISIS编辑环境,按表6-1所列的清单添加元件。 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric7SEG-COM-CAT-GRNOptoelectronics7-Segment DisplaysBUTTONSwitches&RelaysSwitches表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 44矩阵式键盘识别技术矩阵式键盘识别技术 内容 键盘是一组按键的集合,它是最常用的单片机输入设备。操作人员可以通过键盘输入数据或命令,实现简单的人机通信。键盘分编码键盘和非编码键盘。靠软件识别的为非编码键盘。从结构上来分又可以分为独立连接式和行列式(矩阵式)两类。 加上拉电阻,否则不能准确输入或输出高低电平。仿真时可通过观察P0口的电平状态来体会这一点。在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。6.4.1 Proteus电路设计电路设计 为了减少键盘占用单片机的I/O线数目,通常都将键盘排列成矩阵式。 训练目的 掌握软件键盘去抖的方法; 掌握键盘识别编程的方法。1. 元件清单列表打开Proteus ISIS编辑环境,按表6-2所列的清单添加元件。元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric7SEG-COM-CAT-GRNOptoelectronics7-Segment DisplaysBUTTONSwitches&RelaysSwitches表6-2 元件表清单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-38所示的原理图(晶振和复位电路略)连接硬件电路。图 6-38 电路原理图 6.4.3 Proteus调试与仿真调试与仿真 参照6.3.3节建立程序文件,加载目标代码文件,进入调试环境,执行程序,在Proteus ISIS界面中,按下各个按键,观察数码管上的显示和所标的键号是否对应。 6.4 源程序设计源程序设计 略 6.4.4 总结与提示总结与提示 在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。 在Proteus中仿真时可以降低单片机的工作频率,观察电路中各接点的电平变化情况,看是否和所编程序符合,以增强对程序的理解。6.5 动态扫描显示动态扫描显示 内容 单片机应用系统中使用的显示器件主要有发光二极管,简称LED(Light Emitting Diode);液晶显示,简称LCD(Liquid Crystal Display)。LED有静态显示和动态显示两种方式,在多位LED显示时,为了简化电路,降低成本,将所有位的段线并联在一起,由一个8位I/O控制。而共阴(或共阳)极公共端分别由相应的I/O线控制,实现各位的分时选通。 训练目的 掌握LED动态扫描的显示方法; 掌握单片机驱动7段数码管显示数字的编程方法; 掌握串入并出集成芯片74LS595的使用方法。6.5.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-3所列的清单添加元件 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric7SEG-MPX8-CA-BLUEOptoelectronics7-Segment Displays74LS59574LS SerialRegisters表6-3 元 件 清 单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-39所示的原理图(晶振和复位电路略)连接硬件电路。图6-39 电路原理图6.5.2 源程序设计源程序设计略 6.5.3 Proteus调调 试试 与与 仿仿 真真 参照6.3.3节建立程序文件、加载目标代码文件,进入调试环境后执行程序,降低单片机的工作频率,观察动态显示的过程。 6.5.4 总总 结结 与与 提提 示示 AT89C51单片机的P0口在作为普通I/O使用时必须加上拉电阻,否则不能准确输入或输出高低电平。仿真时可通过观察P0口的电平状态来体会这一点。在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。6.6 88点阵点阵LED显示显示 内容 用单片机AT89C51驱动88点阵LED显示屏,轮流显示09的数字。显示方式采用自右向左拉幕式显示。 训练目的 掌握88点阵LED显示屏的使用方法; 掌握单片机进行拉幕式显示的编程方法。6.6.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-4所列的清单添加元件。元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric74LS245TTL 74LS SeriesTansceiversMATRIX-88-REDOptoelectronicsDot Matrix DisplaysRESPACK-8ResistorsResistors Packs表6-4 元件清单 2. 88点阵LED元件介绍 Proteus ISIS中的88点阵LED元件原理图如图6-40(a)所示。由于该元件引脚没有任何标注,因此在使用之前必须进行引脚测试,以确定行线和列线的顺序及极性。图6-40(b)给出了一种进行引脚测试的方法,根据测试结果便很容易确定该元件的电路接法。图6-40 88点阵LED元件原理图及引脚测试 3. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-41所示的原理图连接硬件电路。图6-41 电路原理图 6.6.3 Proteus设计与仿真设计与仿真 参照6.3.3节建立程序文件、加载目标代码文件,进入调试环境后执行程序,在Proteus ISIS界面中的仿真片断如图6-42所示 图6-42 仿真片段 6.6.4 总总结结与与提提示示程序编写中,必须在TCOUNT数值是8的整数倍时再进行下面的移位操作,否则显示在衔接时会乱。 6.7 I/O口的扩展口的扩展 内容 8255是微机并行可编程IO口扩展芯片。对8255输入不同的指令可改变IO口的工作方式。8255与单片机系统连接方式简单,工作方式由程序设定。 背景知识 已掌握Keil Vision3开发软件的使用方法;已掌握常用外部RAM的基本操作。 训练目的 掌握单片机与8125的接口原理,熟悉8255初始化编程,以及输入输出的设计方法。6.7.1 Proteus电路设计电路设计 1元件清单列表 打开Proteus ISIS编辑环境,按表6-5所列的清单添加元件 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 Family74LS37374LSGenericLED-BLUEActiveGeneric8255AMicroRESResistorsGenericRESPACK-8Switches&RelaysSwitches74LS04Device表6-5 元 件 清 单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-43所示的原理图连接硬件电路。图6-43 电路原理图6.7.2 源程序设计源程序设计 1. 流程图 图6-44为程序流程图。图6-44 流程图6.7.3 Proteus调试与仿真调试与仿真 参照6.3.3节建立程序文件、加载目标代码文件,进入调试环境,单击Proteus ISIS下面的仿真运行键,即可看到如图6-45所示的运行结果。图6-45 程序运行结果6.7.4 总结与提示 采用8255并口扩展芯片的PA0口,设计一个44键的矩阵键盘扫描程序。6.8 定时器定时器/计数器实验计数器实验 内容 利用单片机AT89C51,控制一发光二极管,亮1秒,关闭1秒,循环进行;要求使用定时器/计数器控制。 训练目的 掌握AT89C51单片机定时器/计数器混合编程的使用方法 6.8.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-6所列的清单添加元件 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGenericLED-BLUEActiveSWITCHActive表6-6 元件清单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-46所示的原理图连接硬件电路。图6-46 电路原理图6.8.3 Proteus设计与仿真设计与仿真 6.3.3节建立程序文件、加载目标代码文件,进入调试环境执行程序,在Proteus ISIS界面中,可以看到,LED灯亮一秒,关一秒,循环进行,如图6-47 图6-47 运行结果 6.8.4 总结与提示总结与提示尝试改变计数器的值,使延时的时间更长。6.9 外部数据存储器扩展外部数据存储器扩展 内容 用SRAM6264扩展单片机AT89C51的外部数据存储器,通过仿真窗口观察向6264写入数据的过程。 训练目的 掌握AT89C51扩展外部数据存储器时的接口电路设计方法; 加深单片机对外部数据存储器进行读写过程的理解。6.9.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-7所列的清单添加元件 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric74LS373TTL 74HC SeriesFlip Flops&Latches6264Memory IcsStatic RAM表6-7 元件清单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-48所示的原理图(复位和振荡电路略)连接硬件电路。图6-48 电路原理图6.9.3 Proteus调试与仿真调试与仿真 参照6.3.3节建立程序文件、加载目标代码文件,进入调试环境,然后执行下述操作: (1) 在Proteus ISIS界面中,单击按钮启动仿真。 (2) 通过菜单【Debug】【Memory ContentsU1】,打开6264存储器窗口; (3) 通过菜单【Debug】【DebugWatch Window】,在弹出的观察窗口右击,选择“以观察项的名称添加观察项”,在弹出的对话框中添加累加器ACC和数据指针DPTR。 (4) 单击按钮暂停仿真,可观察程序运行的中间结果,如图6-49所示。6.9.4 总结与提示总结与提示 受计算机性能的影响,以及Proteus软件运行仿真时需要处理大量的数据,会出现仿真结果的画面刷新率跟不上程序运行的速度,致使不能看到存储器内容随程序运行的动态变化,仿真时可手工刷新画面观察。图6-49 程序运行结果6.10 外部中断实验外部中断实验 内容 MCS-51是一个多中断源的单片机,以8051为例,有三类共五个中断源,分别是两个外部中断,两个定时器中断和一个串行中断。外部中断是由外部原因引起的,共有两个中断源,即外部中断0和外部中断1。它们的中断请求信号分别由引脚(P3.2)和(P3.3)引入;外部中断请求信号有两种,即低电平有效方式和脉冲后沿负跳有效方式。 中断控制是提供给用户使用的中断控制手段,实际上就是控制一些寄存器。51系列用于此目的的控制寄存器有四个:TCON、IE、SCON及IP。位地址 AF AE AD AC AB AA A9 A8 位符号 EA - ES ET1 EX1 ET0 EX0 表6-8 IE 寄 存 器EA 中断允许总控制位;EA=0 中断总禁止,禁止所有中断; EA=1 中断总允许;EX0(EX1) 外部中断允许控制位;EX0(EX1)=0 禁止外中断; EX0(EX1)=1 允许外中断; ET0(ET1) 定时/计数中断允许控制位; ET0(ET1)=0 禁止定时/计数中断; ET0(ET1)=1 允许定时/计数中断; ES 串行中断允许控制位; ES=0 禁止串行中断; ES=1 允许串行中断。 (2) 中断优先级控制寄存器(IP) 地址为B8H,位地址为BFH-B8H,各位定义如表6-9所示。位地址 BF BE BD BC BB BA B9 B8 位符号 / / / PS PT1 PX1 PT0 PX0 表6-9 IP 寄 存 器 各位含义如下: PX0 外部中断0优先级设定位; PT0 定时中断0优先级设定位; PX1 外部中断1优先级设定位; PT1 定时中断1优先级设定位; PS 串行中断优先级设定位。 为0的位优先级为低;为1的位优先级为高。 中断优先级是为中断嵌套服务的,MCS-51中断优先级的控制原则如下。 (1) 低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。 (2) 如果一个中断请求已被响应,则同级的其他中断响应将被禁止。 (3) 如果同级的多个中断请求同时出现,则按CPU查询次序确定哪个中断请求被响应,其查询次序为:外部中断0定时中断0外部中断1定时中断1串行中断。 训练目的 熟悉理解MCS-51的中断系统组成; 了解掌握单片机系统中断的原理及使用方法。6.10.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-10所列的清单添加元件 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGenericLEDOptoelectronicsLEDsBUTTONSwitches&RelaysSwitches表6-10 元 件 清 单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-50所示的原理图(晶振和复位电路略)连接硬件电路。图6-50 电路原理图6.10.3 Proteus调试与仿真 参照6.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,在Proteus ISIS界面中,按动开关,可看到数码管显示的变化,如图6-51所示。图6-51 程序运行结果6.10.4 总结与提示总结与提示 在有多个中断同时存在时注意中断优先级的设置以及中断中的触发方式; 在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况; 在某些情况下中断子程序中需要对各寄存器进行保护。6.11 单片机与单片机与PC机间的串行通信机间的串行通信 内容 利用虚拟终端仿真单片机与PC机间的串行通信。PC机先发送从键盘输入的数据,单片机接收后回发给PC机。单片机同时将收到的3039H间的数据转换成09的数字显示,其他字符的数据直接显示为其ASCII码。 背景知识 已掌握Keil Vision3开发软件的使用方法; 了解RS-232总线技术。 训练目的 掌握电平转换器件RS-232的使用方法; 掌握Proteus VSM虚拟终端(VITUAL TERMINAL)的使用; 掌握单片机与PC机间的串行通信软硬件设计方法。6.11.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-11所列的清单添加元件 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-POLCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric7SEG-BCD-GRNOptoelectronics7-Segment DisplaysMAX232Microprocessor ICsPeripheralsCOMPIMMiscellaneous表6-11 元 件 清 单 2. 串口模型介绍 串口模型COMPIM及其引脚功能如图6-52中(a)所示。需要注意的是,在Proteus ISIS元件库的“Connectors”类的“D-Type”子类中,也有一个串口模型器件CONN-D9F,如图6-52中(b)所示,因该器件在使用时没有仿真模型,将导致仿真失败,所以要避免选用。图6-52 Proteus串口模型 3. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-53所示的原理图(晶振和复位电路略)连接硬件电路。图6-53 电路原理图 4. 串口模型属性设置 串口模型属性设置为:波特率4800;数据位8;奇偶校验无;停止位1,如图6-54所示。图6-54 串口模型属性设置 4. 串口模型属性设置 串口模型属性设置为:波特率4800;数据位8;奇偶校验无;停止位1,如图6-54所示。 5. 虚拟终端属性设置 PCT代表计算机发送数据,PCR用来监视PC接收到的数据,它们的属性设置完全一样,如图6-55所示。SCMT和SCMR分别是单片机的数据发送和接收终端,用来监视单片机发送和接收的数据,它们的属性设置也完全一样,如图6-56所示。单片机和PC机双方的波特率、数据位、停止位和检验位等要确保和串口模型的设置一样,并且同单片机程序中串口的设置一致。 要注意到PC机虚拟终端与单片机虚拟终端在RX/TX Polarity属性的设置是相反的,因为信号在经过器件MAX232时要反相。图6-55 PC机虚拟终端属性设置 图6-56 单片机虚拟终端属性设置 6.11.3 Proteus调试与仿真调试与仿真 参照6.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,进行以下操作: (1) 在Proteus ISIS界面中的PCT虚拟终端上单击右键,在弹出的快捷菜单中选择“Echo Typed Characters”项; (2) 鼠标指针在PCT终端窗口单击,该窗口出现闪烁的光标,从键盘输入数字“8”,在PCS终端窗口中就出现“8”,表明PC机发送数据“8”,按照设计好的程序,单片机将接收到“8”,所以在单片机接收虚拟终端SCMR上会显示“8”,同时又将数字“8”送显到数码管上。接下来,单片机又将该数回发给PC机,因此在单片机发送终端SCMT上也显示“8”,PC机接收到数据后在接收终端PCR上同样显示“8”,结果如图6-57所示。根据程序设计,当在键盘上输入09以外的字符时,单片机输出到数码管上显示的则是该字符的ASCII码,如图6-58所示。图6-57 程序运行结果1图6-58 程序运行结果26.11.4 总结与提示总结与提示 在原理图中的电阻R1不能少,否则虚拟终端PCR将收不到信息。 在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察系统的工作过程。 在Proteus仿真中,单片机和COMPIM之间也可以不用加MAX232器件 6.12 单片机与步进电机的接口技术单片机与步进电机的接口技术 内容 利用AT89C51单片机控制步进电机的启/停、正转与反转。 背景知识 已掌握Keil Vision3开发软件的使用方法; 了解步进电机的工作原理与控制方法。 训练目的 强化对步进电机工作原理的理解; 掌握用单片机控制步进电机时的接口电路设计方法; 掌握对步进电机进行控制的编程方法。6.12.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-12所列的清单添加元件。 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGenericBUTTONSwitches&RelaysSwitchesMOTOR-STEPPERElectromechanicalULN2003AAnalog ICsMiscellaneous表6-12 元件清单 2. 步进电机元件介绍 Proteus软件中的单极性步进电机元件为6线制,其原理图及属性编辑框如图6-59所示,各属性值可根据需要修改。本例中所设置的属性值均如图6-59所示 图6-59 单极性步进电机原理图及属性 3. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-60所示的原理图连接硬件电路。图6-60 电路原理图6.12.3 Proteus调试与仿真 参照6.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,进行如下操作:图6-61 程序运行结果 (1) 在Proteus ISIS界面中,按“正转”、“反转”按钮,观察步进电机的状态,如图6-61所示; (2) 观察步进电机的单拍转动角度,体会4相8拍的含义。图6-61 程序运行结果6.12.4 总结与提示总结与提示 在进行仿真时,可以在单片机的P1.0P1.3口上接入逻辑分析仪来监测控制信号的工作状态(本例略)。 可修改步进电机属性中的步进角以观察不同的仿真结果。 在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况。6.13 单片机与直流电动机的接口技术单片机与直流电动机的接口技术 内容 PWM是单片机常用的模拟量控制方式,本例通过外接的A/D转换电路,对应外部不同的电压值,利用AT89C51单片机产生占空比不同的控制脉冲,驱动直流电动机以不同的转速转动。并通过外接的单刀双掷开关,控制电动机的正转与反转。背景知识 已掌握Keil Vision3开发软件的使用方法; 了解光电耦合器、A/D转换器件ADC0808的使用方法。 训练目的 掌握用单片机控制直流电机时的接口电路设计方法; 掌握对直流电动机控制的桥式驱动电路接法。6.13.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-13所列的清单添加元件 元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGenericSW-SPDTSwitches&RelaysSwitchesMOTORElectromechanicalADC0808Data ConvertersA/D ConvertersPOT-HGResistorsVariable2N5550TransistorsBipolarPNPTransistorsGenericOPTOCOUPLERS-NPNOptoelectronicsoptocouplers表6-13 元件清单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-62所示的原理图连接硬件电路。图6-62 电路原理图6.13.3 Proteus调试与仿真调试与仿真 参照6.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序。在Proteus ISIS界面中,调节电位器RV1,可以看到电机转速随着电位器的调节相应发生变化,如图6-63所示。同时通过示波器观察单片机输出的PWM控制脉冲信号,如图6-64所示。切换开关SW1的状态可切换电机的正、反转。图6-63 程序运行结果6.13.4 总结与提示总结与提示 尝试直接给电动机加相同幅值的直流电压,并观察其转速大小,如图6-65所示,与单片机控制下直流电动机的最大转动速度做比较,观察差别并思考其中的原因; 在Proteus ISIS界面中双击直流电机,可打开其属性编辑框,并根据需要修改其属性值,包括标称电压、转速等。图6-64 单片机输出的PWM控制脉冲信号图6-65 直接加工作电压的直流电机6.14 基于基于DAC0832数模转换器的数控电源数模转换器的数控电源 内容 利用单片机AT89C51与D/A转换器件DAC0832设计一个数控电源,按照预设的程序自动调节三端稳压电路LM317的输出电压。 背景知识 已掌握Keil Vision3开发软件的使用方法; 了解DAC0832的工作原理与使用方法; 了解LM317可调三端稳压块的使用方法。 训练目的 掌握AT89C51与D /A转换器件DAC0832接口电路的设计方法; 掌握单片机控制DAC0832器件的编程方法; 掌握数控电压源设计的基本原理和方法。6.14.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-14所列的清单添加元件。元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric元 件 名 称所 属 类所 属 子 类LM317LAnalog IcsRegulatorsDAC0832Data ConvertersD /A ConvertersLM358Operational AmplifiersDual表6-14 元件清单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-66所示的原理图(复位与振荡电路略)连接硬件电路。图6-66 电路原理图6.14.3 Proteus调试与仿真调试与仿真 参照6.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序,在Proteus ISIS界面中,观察LM317输出端的数字电压表示值发生的变化,仿真片段如图6-67所示。图6-67 程序运行结果6.14.4 总结与提示总结与提示 对本例程序进行修改,可产生不同波形连续变化的输出电压。 LM317可调输出电压的最低值为1.25V,通过本例也能观察到这一点。 由于LM358输出没有调零电路,不能校准,因此数模转换输出结果存在一定的误差,导致可调电压源的输出也存在误差,在本例中亦有所体现。6.15 基于基于ADC0808模数转换器的数字电压模数转换器的数字电压表表 内容 利用单片机AT89C51与A/D转换器件ADC0808设计一个数字电压表,能够测量05V之间的直流电压值,并用4位数码管实时显示该电压值。 背景知识 已掌握Keil Vision3开发软件的使用方法; 了解ADC0808的工作原理与使用方法。 训练目的 掌握AT89C51与A/D转换器件ADC0808接口电路的设计方法; 掌握在对测量数据处理过程中数值的量程转换方法; 体会A/D转换器的位数对测量精度的影响。6.15.1 Proteus电路设计电路设计 1. 元件清单列表 打开Proteus ISIS编辑环境,按表6-15所列的清单添加元件。元 件 名 称所 属 类所 属 子 类AT89C51Microprocessor ICs8051 FamilyCAPCapacitorsGenericCAP-ELECCapacitorsGenericCRYSTALMiscellaneousRESResistorsGeneric7SEG-MPX4-CC-BLUEOptoelectronics7-Segment DisplaysADC0808Data ConvertersA/D ConvertersPOT-LINResistorsVariable表6-15 元件清单 2. 电路原理图 元件全部添加后,在Proteus ISIS的编辑区域中按图6-68所示的原理图连接硬件电路。图6-68 电路原理图6.15.2 源程序设计源程序设计 ADC0808在进行A/D转换时需要有CLOCK信号,我们在硬件电路设计中将ADC0808的CLOCK信号接在了AT89C51单片机的P1.4端口上,即通过P1.4端口为ADC0808提供CLOCK信号,因此在程序编写时要由软件产生该时钟信号。6.15.3 Proteus调试与仿真调试与仿真 参照6.3.3节建立程序文件,加载目标代码文件,进入调试环境执行程序。在Proteus ISIS界面中,调节电位器POT-LIN,可以看到数码管显示的电压值随着电位器的调节实时发生变化,如图6-69所示。 图6-69 程序运行结果 比较数码管显示的电压值同数字电压表数值间的误差,分析误差产生的原因,并从中体会A/D转换器的转换位数同转换精度之间的关系。图6-69 程序运行结果6.15.4 总结与提示总结与提示 ADC0809与ADC0808的工作原理基本一样,但是在Proteus仿真软件里,没有ADC0809的仿真模型,所以熟悉ADC0809的读者也可用ADC0808器件作替代来进行A/D转换实验。 在Proteus与Keil的联调过程中,可以综合运用Keil中的多种调试功能来详细观察电路的工作情况
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号