资源描述
现代电子技术工程设计与实践7.3 AT89S52单片机编译及仿真环境单片机编译及仿真环境n7.3.1 Keil C51软件及应用n7.3.2 Proteus单片机开发及仿真环境现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n1.软件简介 nKeil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,同时保留了汇编代码高效、快速的特点。目前,C51编译器的功能不断增强,C51已被完全集成到uVision2的集成开发环境中。这个集成开发环境包含编译器、汇编器、实时操作系统、项目管理器和调试器。可以完成编辑、编译、连接、调试、仿真等整个开发流程。C51 IDE可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其他第三方开发工具。开发人员可用C51 IDE或其他编辑器编辑C或汇编源文件,然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用,进行源代码级调试,也可由仿真器使用,或者直接对目标板进行调试,直接写入程序存储器如E2PROM中。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-5 Keil C51的编辑界面现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n2.基于Keil C51软件的单片机开发应用n(1)新建一个工程项目n1)建立一个新的工程,单击菜单命令【Project】/【New Project】。n2)选择要保存的路径,输入工程文件的名字,保存到C51目录里,工程文件的名字为C51,如图7-6所示。然后单击“保存”按钮。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-6 新工程取名保存现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n3)保存后会弹出一个对话框,要求选择单片机的型号,用户可以根据使用的单片机来选择,Keil C51几乎支持所有的51核的单片机,这里以Atmel的AT89C52来说明,如图7-7所示。选择AT89C52之后,右边栏是对单片机的基本说明,然后单击“确定”按钮。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-7选择单片机型号现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n4)完成上一步骤后,界面如图7-8所示,完成了新工程的建立。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-8 完成新工程的建立现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n(2)建立新文件。n1)单击菜单命令【File】/【New】,新建文件后的界面如图7-9所示。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-9建立文件编辑窗口现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n此时光标在编辑窗口里闪烁,这时可以输入用户的应用程序了。但最好先保存该空白文件,单击菜单命令【File】/【Save As】。在“文件名”栏右侧的编辑框中输入欲使用的文件名,注意必须输入正确的扩展名。如果用C语言编写程序,扩展名为(.C);如果用汇编语言编写程序,扩展名必须为(.asm)。然后单击“保存”按钮。n2)添加文件到项目中n在编辑界面,单击“Target 1”前面的“+”号,再在“Source Group 1”上单击右键,弹出的快捷菜单如图7-10所示的对话框。选择菜单上的选项“Add File to Group Source Group 1”,再选中前面保存的源文件Text1.c,然后单击“Add”按钮,界面如图7-11所示。此时,“Source Group 1”文件夹中多了一个子项“Text1.c”,子项的数量与所增加的源程序的数量相同。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-10 添加文件菜单现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-11 添加文件到文件夹现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n(3)输入程序,输入如下的C语言源程序。n例:编程在屏幕上显示“I will be your friend.”。n#include /包含头文件n#include /包含输入输出库文件nvoid main(void)/主函数nnSCON=0 x52;nTMOD=0 x20;nTH1=0 xf3;nTR1=1;/启动printf函数所必须的串行口1nprintf(I will be your friend.n);/打印程序执行的信息nwhile(1);nn在输入上述程序时,Keil c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后,如图7-12所示。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-12 输入文件后界面现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n(4)编译文件。单击菜单命令【Project】/【Build Target】编译成功后,再单击菜单命令【Debug】/【Start】/【Stop debug session】,界面如图7-13所示。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-13 调试界面现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n(5)调试程序。在上述步骤下单击菜单命令【Debug】/【Go】运行程序,然后再单击菜单命令【Debug】/【Stop Running】停止执行程序;再单击菜单命令【View】/【Serial Windows#1】,就可以看到程序运行后的结果,如图7-14所示。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-14程序运行结果现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n至此,在Keil C51上完成了一个工程的全过程。但这只是纯软件的开发过程,如果想使用硬件仿真或程序下载器观察程序运行的结果,则继续下一步。n(6)生成HEX文件。单击菜单命令【Project】/【options for target target 1】,如图7-15所示。在图中Output标签页下选中Create HEX File选项,使程序编译后产生HEX文件,HEX文件即单片机编程所要的结果,将该文件下载到单片机内,便可以运行程序了。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-15 生成HEX文件现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n(7)对于C51程序设计和Keil C51软件调试实例,将通过下面的例子做进一步的说明。n例:已知x=10,y=20,编程计算z=x+y的结果n#include /包含文件nmain()/*主函数名*/n /*主函数体开始*/n int x,y,z;/*主函数体的内部变量类型说明*/n x=10;/*变量赋值*/n y=20;n z=x+y;/*计算z=x+y的值*/n while(1);n /*程序结束*/现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n本例中main是主函数名,要执行的主函数的内容称为主函数体,主函数体用花括号“”围起来。函数体中包含若干条将被执行的程序语句,每条语句都必须以分号“;”为结束符。为了使程序便于阅读和理解,可以给程序加上一些注释。C语言的注释部分由符号“/*”开始,以符号“*/”结束,注释内容可在一行内写完,也可以分成几行来写。注释部分不参加编译,编译时注释的内容不产生可执行代码。注释在程序中的作用很重要,一个优秀的程序设计者应该在程序设计中使用足够的注释来说明整个程序的功能、有关算法和注意事项等。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n用Keil C51调试该程序,当操作到上面第(5)步时,界面如图7-16所示。单击菜单命令【Debug】/【Go】,再单击菜单命令【Debug】/【Stop Running】,界面如图7-17所示。图7-16右下角显示了变量z的值为0 x001E,转换为十进制数就是30,正是程序中x+y的结果。至于图7-17右下角的显示框,可以通过单击菜单命令【View】/【Watch&Call Stack Window】来打开或关闭。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-16 调试界面现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-17程序运行结果现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n例:编程将P1.0置位、P1.1清零。n#include /包含文件nvoid main(void)nn#pragma ASMnSETB P1.0nCLR P1.1n#pragma ENDASMnWhile(1);nn本例在C51文件中直接嵌入了汇编代码,若用Keil C51调试该程序,应按如下步骤:n1)在程序编辑窗口,输入程序,文件保存为9.c。n2)在Project 窗口中9.c栏目条上单击右键,弹出快捷菜单如图7-18所示。n3)在弹出的右键快捷菜单中选择Options for File 9.c,然后在出现的对话框中选择右边的Generate Assembler SRC File和Assemble SRC File选项,使检查框由灰色变成黑色(有效)状态,界面如图7-19所示。单击“确定”按钮确定。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-18 Text1.C栏目条上的右键快捷菜单现代电子技术工程设计与实践n图7-19 设置对话框现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n4)根据选择的编译模式(默认模式为Small),把相应的库文件(如 Small 模式时,库文件为 KeilC51LibC51S.Lib)加入工程中。单击 Project 窗口中“Target 1”栏目条前面的“+”号,再在“Source Group 1”上单击右键,弹出菜单如图7-20所示。然后选择右键快捷菜单上的选项“Add File to Group Source Group 1”,再选中源文件KeilC51LibC51S.Lib,然后单击“Add”按钮,界面如图7-21所示。此时,注意到“Source Group 1”文件夹中又多了一个子项“C51S.Lib”。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-20 Source Group 1栏目条上的右键快捷菜单现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-21 添加文件到文件夹现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n5)单击菜单命令【Project】/【Build Target】,若编译成功,则单击菜单命令【Debug】/【Start】/【Stop debug session】进入调试界面,再单击菜单命令【Debug】/【Go】运行程序,最后单击菜单命令【Debug】/【Stop Running】停止执行程序,此时界面如图7-22所示。注意屏幕右下角的显示框,这里选择的是Watch#1显示栏,可见显示框中有“type F2 to edit”显示条,单击它,然后按F2键,该显示条变成可选。此时,选P1.0后按回车键,可看到程序运行后P1.0的值。用同样的方法可查看P1.1的值。界面如图7-23所示,程序运行后的结果是P1.0的值为1,P1.1的值为0。现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-22 调试界面现代电子技术工程设计与实践7.3.1 Keil C51软件及应用n图7-23 程序运行后结果现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n1.Proteus软件简介nProteus软件是由英国Lab Center Electronics公司开发的EDA工具软件。它除了具有和其他EDA工具一样的原理编辑、印制电路板及电路仿真功能外,最大的特色是其电路仿真是交互的,可视化的。通过Proteus软件的VSM(虚拟仿真技术),用户可以对基于微控制器的系统连同所有的外围接口电子器件一起仿真。配合系统配置的虚拟仪器如示波器、逻辑分析仪等可以测量仿真的波形及记录仿真数据。在不需要硬件设备投入的情况下,Proteus软件可以建立完整的电子学习设计开发环境。图7-24是Proteus的主界面。现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-24 Proteus主界面现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n软件的菜单栏、工具栏和其它常用软件类似不再介绍,元件、仪表工具栏的各部分如图7-25所示。现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-25 Proteus软件工具栏 现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n2.基于Proteus软件单片机电路设计n下面通过一个简单的例子来说明Proteus电路的设计方法。n例:用单片机与DS1302构成时钟电路,并用数码管显示输出。n 1)创建单片机仿真文件,并保存。n 2)放置元件n把所需要的器件放置到原理图编辑区上。点击挑选元件按钮P会弹出Pick Devices对话框,如图7-26所示。现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-26 挑选元件对话框现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n在Keywords中输入AT89C52并回车,右边的对话框会显示出与输入字样匹配的结果,如图7-27所示:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-27 单片机查找元件结果现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n选中其中一个后,右边上面的窗口会显示出该芯片的预览图,下面是该芯片的封装图。如图7-28所示:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-28 单片机选择预览对话框现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n然后点击OK代表选用该芯片。此时窗口切换回主界面,可以看到元件列表区中已经显示出刚才所选用的芯片。如图7-29所示:现代电子技术工程设计与实践n图7-29 选用器件列表现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n此时在原理图编辑窗口点鼠标左键,会调出AT89C52芯片,移动鼠标将其放置到合适的位置上。如果想删除元件,最好的方法则是在元件上双击鼠标右键。如图7-30所示:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-30 单片机放置结果现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n如果对放置的位置不满意,可以用鼠标左键拖动元件重新放置。按照上面所述,将晶振(CRYSTAL),八位一体的共阳极七段数码管(7SEG-MPX8-CA-BLUE),电池(BATTERY),DS1302,上拉排阻(RESPACK-8)放置到编辑区上。如图7-31所示:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-31 器件放置结果现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n在元件上双击鼠标左键可弹出该元件的编辑窗口,进行修改。例如双击电池弹出如图7-32的窗口。现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-32 电池属性修改窗口现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境nComponent Referer是元件的标号。Voltage是电池的电压,将它改为3V。后面的Hidden,如果选中则表示在原理图中不显示对应的属性。n3)连线,把各元件连接起来。完成后的效果如图7-33所示:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-33 数码显示电路图现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n4)在KeilC51 下输入下面所示的电子万年历的程序代码,编译,生成Hex文件n#include n#include n#define uchar unsigned char nsbit SIO=P30;nsbit SCLK=P31;nsbit SRST=P32;nuchar code shuju=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xbf;/10为-nuchar code scan=0 x80,0 x40,0 x20,0 x10,0 x08,0 x04,0 x02,0 x01;/依次选中数码管的12345678现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境nuchar miao_g;nuchar miao_s;nuchar fen_g;nuchar fen_s;nuchar shi_g;nuchar shi_s;nuchar ri_g;nuchar ri_s;nuchar yue_g;nuchar yue_s;nuchar miao;nuchar fen;nuchar shi;现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境nvoid delay(uchar i);nvoid write(uchar command,uchar dat);nuchar read(uchar command);nvoid initial();nvoid updata();nvoid display();n/*1ms延时*/nvoid delay(uchar i)n uchar j,k;0n for(j=0;ji;j+)n for(k=0;k125;k+)n ;n现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n/*向1302指定的地址中写入一个数据*/nvoid write(uchar command,uchar dat)n uchar i;n n SRST=0;n SCLK=0;n SRST=1;/令复位置位,允许数据传输n for(i=0;i=1;n 现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n for(i=0;i=1;n n SRST=0;/复位置零,不能进行数据传输n delay(1);n SCLK=0;n现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n/*从指定的地址中读出一个数据*/nuchar read(uchar command)n uchar i,j=0;n SRST=0;n SCLK=0;n SRST=1;/令复位置位,允许数据传输n for(i=0;i=1;n 现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境nSIO=1;n for(i=0;i=1;nif(SIO)n j|=0 x80;n n SRST=0;n SCLK=0;n return(j);n现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境nvoid initial()n SCLK=0;n SRST=0;n write(0 x8e,0 x00);/打开写保护n write(0 x82,0 x00);/设置分钟,00n write(0 x84,0 x16);/24小时制,初值为16点n write(0 x86,0 x19);/设定日期19号n write(0 x88,0 x09);/设定月份9月n write(0 x8a,0 x02);/设定星期2n write(0 x8c,0 x20);/设定年2000n write(0 x90,0 xa6);/写充电控制寄存器 充电电流n write(0 x80,0 x00);/启动时钟n现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境nvoid display()n P2=scan7;n P0=shujushi_s;n delay(1);n P2=scan6;n P0=shujushi_g;n delay(1);n P2=scan5;n P0=shuju10;n delay(1);n P2=scan4;n P0=shujufen_s;n delay(1);n P2=scan3;n P0=shujufen_g;n delay(1);n P2=scan2;n P0=shuju10;n delay(1);现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n P2=scan1;n P0=shujumiao_s;n delay(1);n P2=scan0;n P0=shujumiao_g;n delay(1);nnvoid updata()n n miao=read(0 x81);n fen=read(0 x83);n shi=read(0 x85);n miao_g=miao&0 x0f;n miao_s=miao4;n fen_g=fen&0 x0f;n fen_s=fen4;n shi_g=shi&0 x0f;n shi_s=shi4;n现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境nmain()n initial();n while(1)n updata();n display();n nn用Keil编译并生成Hex文件后,下面要做的就是把Hex文件导入单片机中进行仿真。n5)运行仿真。在图7-30中的单片机上双击鼠标左键,弹出如图7-34的窗口:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-34 加载hex文件现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-35 加载Hex文件现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n导入该文件即可。如图7-36所示:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n还要根据实际晶振的大小设置一个时钟频率,这里用12MHz。点击OK后回到主界面。现在一切都设置好了,可以进行仿真了。点击仿真按钮中的开始键,可以看到系统已经运行。如图7-37所示:现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n图7-37电子时钟运行结果现代电子技术工程设计与实践7.3.2 Proteus单片机开发及仿真环境n最后查看仿真结果与设计的运行结果是否一致,如果不一致则检查软件和硬件,经过反复修改调试以达到预期效果。
展开阅读全文