资源描述
仿真软件Keil C51的使用1 Keil C51 操作入门1.1 Keil C51 简介Keil C51 是德国知名软件公司Keil(现已并入ARM 公司)开发的基于8051 内核的微控制器软件开发平台,是目前开发8051 内核单片机的主流工具。Keil 51支持汇编语言、C语言等各种开发语言。其中,uVision3集成开发环境包含项目管理、源代码编辑和强大的程序调试环境。uVision3调试器是一个强大的全特性调试器,允许用户在PC机上完全模拟目标程序、指令集和片内外围功能。1.2 Keil C51 的启动 双击桌面上的“Keil uVision3”图标或执行开始-程序-Keil uVision3命令,启动Keil C51程序,启动界面如图1所示。图1 Keil C51的启动界面1.3 建立第1 个Keil C51 程序Keil C51 是一个功能很强大的软件,但是使用起来并不复杂。现在就通过建立一个简单的LED(发光二极管)闪烁发光的实例来初步掌握Keil C51的基本用法。硬件电路参见图2,单片机I/O 输出低电平可点亮LED。图2 LED 闪烁发光电路 新建工程。执行Keil C51 软件的菜单“Project | New Project”,弹出一个名为“Create New Project”的对话框。先选择一个合适的文件夹准备来存放工程文件,比如“E:ProjectLedFlash”,其中“LedFlash”是新建的文件夹。建议:今后每新建一个工程都要在适当的磁盘位置新建一个文件夹用来保存工程文件,以方便管理,并养成良好的习惯。最后,为工程取名为“LedFlash”,并保存。参见图3。图3 新建Keil C51 工程 选择CPU。紧接着,Keil C51 提示选择CPU 器件。8051 内核单片机最早是由鼎鼎大名的Intel 公司发明的,后来其他厂商如Philips 、Atmel 、Winbond 等先后推出其兼容产品,并在8051 的基础上扩展了许多增强功能。在这里可以选择Philips 的第1 个器件“80/87C51”,该器件与Intel 的8051 完全兼容。参见图4 。图4 选择CPU 接下来弹出一个如图5 所示的对话框。该对话框提示是否要把标准8051 的启动代码添加到工程中去。Keil C51 既支持C 语言编程也支持汇编语言编程。如果打算用汇编语言写程序,则应当选择“否(N)”。如果打算用C 语言写程序,一般也选择“否(N)”,但是,如果用到了某些增强功能需要初始化配置时,则可以选择“是(Y)”。在这里,我们选择“否(N)”,即不添加启动代码。图5 选择是否要添加启动代码至此,一个空的Keil C51工程建立完毕。 执行菜单“File|New”,出现一个名为“Textn”(其中n 表示序号)的文档。 接着执行菜单“File|Save”,弹出一个名为“Save As”的对话框。将文件名改为“main.c”,然后保存,参见图6。注意:扩展名“.c”不可省略。图6 保存新建的源程序文件 添加源程序文件到工程中。现在,一个空的源程序文件“main.c”已经建立,但是这个文件与刚才新建的工程之间并没有什么内在联系。我们需要把它添加到工程中去。单击Keil C51 软件左边项目工作窗口“Target 1 ”上的“”,将其展开。然后右击“Source Group 1”文件夹,会弹出如图7 所示的选择菜单。单击其中的“Add Files to Group Source Group 1 ”项,将弹出如图8 所示的对话框。 先选择文件类型为“C Source file (*.c)”,这时,对话框内将出现刚才保存过的“main.c”。单击文件“main.c”,再按一次“Add”按钮(请不要多次点击“Add” 按钮),最后按“Close”按钮。这时,源程序文件“main.c ”已经出现在项目工作窗口的“Source Group 1 ”文件夹内,可以单击左边的“”展开后查看。图7 准备添加源程序文件到工程中图8 向工程中添加源程序文件 现在开始输入源程序。先最大化“main.c”源程序窗口,然后请按以下程序清单输入程序代码。程序清单: LED 闪烁发光程序main.c/* 程序名称:LED 闪烁发光硬件接法:P1.1 控制LED,低电平点亮运行效果:LED 亮200ms ,灭800ms,反复循环*/#include /包含8051 的SFR 寄存器定义头文件sbit LED = P11; /定义I/O 接口/*函数:Delay()功能:延时0.01s2.56s参数:t0 时,延时(t*0.01)s t=0 时,延时2.56s 说明:定时10ms 的定时器初值65536-0.01/(1/(f/12) ,其中f为晶振频率*/ void Delay(unsigned char t) do TH0 = 0xDC; /设置定时器初值(定时10ms) TL0 = 0x00; TR0 = 1; /启动定时器 while ( !TF0 );/等待定时器溢出 TR0 = 0; /停止定时器 TF0=0; / 清除溢出标志 while ( -t != 0 ); /循环t 次/主函数void main() TMOD &= 0xF0; /T0 设置在方式1,即16 位定时器(不影响T1 的模式)TMOD |= 0x01;for (;)LED = 0;/点亮LEDDelay(20);/延时200msLED = 1;/熄灭LEDDelay(80);/延时800ms 单击Keil C51 工具栏的“ ”图标,弹出名为“Options for Target Target 1 ”的对话框。单击“Output”标签页,选中“Create HEX File”项,然后“确定”。参见图9 。图9 编译环境设置 单击工具栏的按钮“ ”编译当前源程序。编译结果会显示在输出窗口内。如果是“0 Error(s), 0 Warning(s).”就表示程序没有问题了(至少是在语法上不存在问题了)。如果存在错误或警告,则仔细检查程序是否与程序清单一致。修改后,再编译,直到通过为止。 编译后的结果会生成Intel HEX 格式的程序文件“LedFlash.hex”。该文件可以被专门的芯片烧写工具载入并最终烧录到具体的芯片中。芯片安装到自己的电路板上,通电,就可以运行里面的程序了。还有一类叫做“ISP” (In System Programming )的下载方法,也能够把程序文件烧录到芯片内,但是采用的是串行在线方式,芯片不必从电路板上取下。ISP 方式编程速度较慢但操作要方便些。Philips 的多款8051 内核单片机都能很好的支持ISP 下载功能,比如P89V51RB2 、P89V51RD2 等等。1.4 新建A51 汇编工程 Keil C51 软件也支持A51 汇编编程。建立A51 工程的操作步骤与建立C51 工程基本相同,但有两个要点请注意: 新建的源程序文件名要以”.A51”或“.ASM”作为后缀。 A51 源程序添加到工程中时,文件类型要选择“Asm Source file(*.s*; *.src; *.a*)”。其它操作步骤都跟建立C51 工程相同。2 在Keil C51下调试程序Keil C51的调试功能非常强大,现在仍然以LED闪烁发光程序为例,来具体了解如何进行仿真操作。2.1 进入仿真状态如果程序编译通过,就可以仿真了。在仿真之前,有一项参数最好配置一下,仍然按“ ” 图标进入编译环境设置,在Target选项找到“Xtal (MHz)”项,填入11.0592 。最后点击“确定”。进入仿真状态很简单,直接点击工具栏红色的“ ”图标。2.2 认识各个仿真窗口图10 Keil C51 源程序窗口1. 源程序窗口Keil C51 调试界面的中间是源程序窗口,参见图10 。黄色箭头“ ”所指为当前即将执行但还没有执行的代码。以深灰色标记的程序行是可以执行的代码(当然,在调试过程中未必一定要去执行)。以浅灰色标记的程序行不可作为代码来执行,它们是注释、空行、标号或ROM 数据表。以绿色标记的程序行表示曾经执行过的代码。2. 寄存器窗口图11 Keil C51 寄存器窗口Keil C51 调试界面的左边是寄存器窗口,参见图11 。8051 的工作寄存器(R0R7) 和系统寄存器(a、b、sp、dptr、PC、psw)都列出来了。Value 栏显示的是寄存器的当前数值。如果在调试过程中某个寄存器的值有变化,则会用蓝色的背景标记。单击psw 寄存器左边的“”,展开后还可以看到其每一位的情况。3. 汇编窗口单击工具栏的“ ”图标,源程序窗口会自动切换成汇编窗口,参见图12。在汇编窗口里,我们可以看到每条指令的存储地址和编码等信息。再次单击“ ”,回到源程序窗口。4. 存储器窗口单击工具栏的“ ”图标,将显示出存储器窗口,参见图13。8051 单片机的存储器分为多个不同的逻辑空间。如果要观察代码存储器的内容,就在地址栏“Address:”内输入“C: 地址”,例如:C:0080H 。同理,观察内部数据存储器输入“I:地址”,观察外部数据存储器输入“X:地址”。拖动存储器窗口右边的滚动条可观察其它存储单元。存储器窗口有“Memory #1Memory #4 ”共4 个观察子窗,可以用来分别观察代码存储器、内部数据存储器和外部数据存储器。存储器的内容是可以修改的。用鼠标右击打算要修改的存储单元,选择“Modify Memory at ”项,弹出修改对话框,可以随意修改存储单元的内容。图12 Keil C51 汇编窗口图13 Keil C51 存储器窗口图14 Keil C51 变量观察和堆栈窗口5、变量观察和堆栈窗口单击工具栏的“”图标,将显示变量观察和堆栈窗口(Watch & Call Stack Window),参见图 14。在Locals 标签页,会自动显示局部变量的名称和数值。在C 语言程序的函数中,每一对花括号“”内定义变量都是局部变量,能够自动显示。在“Watch ”标签页内,先用鼠标点击一次“type F2 to edit”,再按功能键“F2”,输入所要观察的局部或全局变量的名称,回车后就能显示出当前数值。在“Call Stack ”标签页内,可以实时地观察到堆栈的使用情况。2.3 程序的运行控制Keil C51 能够实现程序单步和全速运行,具体由工具栏上的按钮来实现:复位按钮:单击此图标,能够使程序复位,程序将从地址C:0000H 处执行。全速运行:单击此图标,能够使程序全速运行。停止运行:该图标原来是灰色(不可操作),在进入全速运行状态后会变成红色。如果要停下来,则可以按此图标。单步进入:按此图标可以实现程序的单步执行。在遇到函数调用时,会跟踪进入函数体。单步跳过:单步执行,遇到函数时视作1条指令来执行,不会跟踪进入。单步跳出:在调试C语言程序时,如果希望从某个函数中提前返回,则可以按此图标。执行到光标 :用鼠标单击某条可执行的代码(深灰色标记的程序行)。然后按此图标,则程序开始全速执行,当遇到光标所在的行时,会自动停下来。如果单击不可执行的程序行(有浅灰色标记),试图让程序执行到该行,是不允许的,“”图标也会立即变成灰色,不让操作。设置/清除断点 :Keil C51支持断点设置功能。单击需要设置断点的行,再单击此图标,我们会看到该行被一个红色的小方块标记。当程序全速运行时遇到断点,便会自动停下来。Keil C51允许在同一个程序里设置多个断点。清除某个断点的方法是,将光标停在该行上,再按一次“ ”图标。另外一种设置/清除断点的快捷方法是,用鼠标在目标程序行的空白处双击,不妨试一试。清除所有断点 :如果设置了多个断点,想一并清除,则可以按此图标。图15 外围设备中的P1 和T0 对话框2.4 外围设备访问Keil C51 的一大特色是在仿真调试时支持对外围设备的访问。单击菜单“Peripherals”,会弹出外围设备菜单。在Peripherals菜单里列出了标准8051的外围设备(相对于CPU 内核而言):中断、I/O端口、串行口和定时器等。现在执行菜单“Peripherals|I/O-Ports|Port 1”,弹出P1端口的界面。在位07中,用表示高电平,无表示低电平。执行菜单“Peripherals|Timer|Timer 0”,弹出定时器T0的界面。参见图15。弹出的外围设备菜单是可以操作的,不妨试试。
展开阅读全文