实验一常用单片机仿真编译软件使用方法.docx
《实验一常用单片机仿真编译软件使用方法.docx》由会员分享,可在线阅读,更多相关《实验一常用单片机仿真编译软件使用方法.docx(7页珍藏版)》请在冰豆网上搜索。
实验一常用单片机仿真编译软件使用方法
实验一常用8051单片机仿真编译软件使用方法
一实验目的:
熟悉和掌握8051单片机常用的仿真编译软件uVision2的使用方法。
uVision2也称KeilC51,此软件功能强大,不但能编译8051的C语言和汇编语言源程序,而且能够进行软件仿真,对于一般的工程项目可以完全不用硬件仿真器。
本实验要求编写一个简单的程序并进行软件仿真和在线下载。
二实验原理:
KeilC51的操作界面如实验图1-1所示,下面我们用一个简单的例子来了解Keil的使用,以课本图7-2为例
图1-1
1.首先是新建一个LED1.C文件(File|New意义是在File主菜单中选择New,下同。
)然后写入你的程序,保存。
2.由(Project|NewProject)建立新工程,按程序要求输入工程名,如LED1(默认后缀是.uv2,Target1的文确定后弹出对话框提示你选单片机,比如可以选Atmel的89C52,然后确定;如实验图1-2所示。
图1-2
3.由(View|ProjectWindow)打开ProjectWindow,在工程管理区显示有一个Target1的文件夹,单击其前面的+号打开该文夹,可看到有一个名为SourceGroup1的子文件夹,右击它,在弹出菜单里选择AddFilestoGroup'SourceGroup1',在弹出‘打开’对话框里选中刚才建立的LED1.C文件,确定后,再用Close关闭对话框,你可以看到SourceGroup1的子文件夹里有文件了(就是刚才那个加进去的LED1.C文件)。
双击将它打开,这时如果程序的保留字没有加亮,可以用(ViewOption)打开对话框,选default,确定就行了,当然你可以按你的习惯选其他的;
4.开(Project|OptionsforTarget‘Target1’),在Xtal(MHz)后面的文字框中填入你的系统所用晶体振荡器频率,如11.0592,(如图1-3所示)。
然后切换到Output页,在CreatHEXFile复选框上打勾,然后确定(如图1-4所示)。
这样KeilC51编译器就可以输出单片机的可执行文件LED1.HEX了。
图1-3
图1-4
5.此你可以看到(ProjectBuild)菜单或按钮栏可用了。
选择它(或按F7)编译。
相应的错误和提示将在最下一栏框里显示出来,你可以根据提示进行修改程序错误,你在改正程序中的所有错误后编译通过(如图1-5所示)后;然后按下DebugStart/StopDebugSession菜单和相应的按钮就可用了,选择它就可以开始进行软件调试了。
图1-5
6.软件调试LED1.c。
所谓软件调试,就是用PC机的资源模拟出单片机的工作环境,在屏幕上直观地看到单片机的运行状态,这样可以找到大部分软件错误。
按下Debug按钮后,屏幕左边的Project窗口会变化,会显示出CPU内部寄存器状态和系统参数,源程序旁边会出现一个黄色的箭头,指向CPU复位操作后将要执行的第一条C语言指令,左边椭圆圈内是系统复位后运行的时间,读者可以试试单步运行程序(DebugStepOver)或F10,黄色箭头会向下移动,同时左边椭圆圈内系统运行时间也会相应变化,(如实验图1-6所示),这个时间相当准确,读者可以据此调节软件延时的时间。
图1-6
7、用Debug观察I/O口状态。
在(PeripheralsI/OPorts)选择Port1,屏幕上会出现P1口的示意图,然后在(ViewPeriodicWindowUpdate)选项前打勾,全速运行(Debug|Go)程序LED1,或按F5,读者可以自己看运行结果,屏幕上P1口的变化速度和软件延时长度、电脑的运行速度有关。
8、将KeilC51产生的LED1.hex通过商用编程器烧入你所用的芯片如89C52中;将芯片插回电路板,通电,发光二极管将按照我们的意愿闪烁。
也可以选用带有在线下载ISP功能的51芯片,如Atmel的89F52,SST的89C58和Philips的P89C51RD2进行在线下载。
注意,这个实验如果用限制版的KeilC51编译,就必须使用内部程序存储器空间大于4K的8051衍生品种,如ATMEL的89C52,SST的89C58和飞利浦P89C51RD2等
三实验内容:
将一个简单的程序通过8051单片机仿真器KeilC51写入实验板中。
四实验电路图:
图1-7
五实验方法:
1.按照上面的步骤将课本上图7-2的程序用KeilC51编写,编译、调试通过后下载到Atmel89C52芯片中去,看看得出的结果和编写程序的目的一致。
2.如图所示是MCS-51最小系统电路图描述如下:
在8051的脚上接一个发光二极管和限流电阻,这也是MCS-51单片机最小系统:
C2,C3,X1是CPU时钟;C1,R1是复位电路,31脚EA接+5V表示CPU芯片内部的程序将被执行,C4是电源滤波电容。
以上相关器件接线是维持89C52CPU正常工作的必要条件。
写一段软件使这个发光二极管每隔约秒闪烁一次。
下面将直接给出源程序,请读者仔细阅读它的注释。
标准C语言中是没有比特变量的,8051单片机中丰富的位处理功能如果不用那么将对编程效率是个很大的损失。
KeilC51扩展了标准C语言,很好的支持了8051特有的位处理功能。
如上程序中提到的sbit关键字,除了定义引脚以外还可以定义所有的特殊功能寄存器中可以位寻址的变量。
如定义
这是一个完整的8051的C源程序,请注意主函数中的闭合循环(死循环),因为单片机中没有其他软件,也就没有PC机C语言中所谓退到DOS或WINDOWS的概念,如果程序中没有闭合循环,程序执行的结果将不可预计。
如果是用汇编语言编写,源程序如下。
六参考程序:
1.汇编源程序
ORG0000H
JMPSTART
START:
MOVR1,#75H
MOVP1,#08H;输出低电平使LED熄灭
DARK:
MOVR0,#0FFH
DARK1:
DJNZR0,DARK1
DJNZR1,DARK
MOVP1,#00H输出电平点亮LED
MOVR1,#75H
LIGHT:
MOVR0,#0FFH
LIGHT1:
DJNZR0,LIGHT1
DJNZR1,LIGHT;延时
JMPSTART
END
2.C语言源程序
/**************************************************
*描述:
P1口输出,点亮发光二极管
**************************************************/
#include//标准8051头文件,定义了所有的特殊寄存
器
SFRsbitLED=P1^3;//定义引脚的方法,如果要定义其他引脚,
如看下一行
sbitbutton=P3^2;
voidmain(void)//主函数无返回值
{
intj;//定义了一个整型变量
while
(1)//一个完整的单片机程序必须是死循环
{
LED=0;/将引脚清零因此点亮发光二极管
for(j=0;j<30000;j++);//空循环延时
LED=1;
for(j=0;j<30000;j++);
}
}
七程序下载
方法一:
程序在KEIL编译通过后生成HEX文档代码,可以利用专用的程序烧入装置,完成芯片的烧入。
当然也可以选用具有ISP功能的PHILIPS的P89C51RA2(8K)、P89C51RB2(16K)、P89C51RC2(32K)或P89C51RD2(64K)芯片,通过计算机的串行口将程序下载到芯片中去,实现芯片的程序的在线下载。
下文对上述4种芯片统称P89C51RX2。
常用的下载软件如WINISP和中文版本的ZLGISP在线下载是调试实验程序,验证程序结果经常使用的方法。
那么下面就简单介绍一下WINISP的使用方法。
启动WINISP,WINISP的启动后的画面如图1-8所示:
图1-8
可以看到左边一列按钮是灰的。
在Chip下拉组合框中选中实验板所使用的芯片如:
P89C51RD2,这个时候左边的一列按钮已经有效了,但是还要在Port下拉组合框中选择你的串口电缆连接的计算机的串口号COM1(或COM2),在Osc(MHz)中输入11.0592MHz,先短接实验板上的PSEN跳线,然后需要按下RESET按钮,串行口电缆已连接计算机和实验板,并且实验板已经与电源接通,并打开。
在Misc组框中有Vector和Status两个文本框,默认分别是FC和FF,这两个值是为了P89C51RX2实现ISP功能而设置的。
实际上为了实验板交给用户的时候Status已经预先改写为了00。
用户可以单击Read按钮读出这两个值,但是切记不要单击Write按钮,
如果读者拿到新的P89C51RX2芯片,正常读出的值是FC和FF,说明芯片已经进入ISP状态,这时可以把STATUS值从FF改成00,然后按WRITE写回芯片中激活ISP功能。
如果把其他值写入STATUS和VECTOR,将就会导致芯片ISP功能失效。
那么我们就来看看如何将程序代码写入P89C51RX2。
1.单击EraseBlocks按钮用来擦除闪存内容,出现如下所示对话框。
左边一
列蓝色的方块表示P89C51RX2内部64K闪存的分块结构。
单击某一块会在该块上面出现黑色的网格。
从上到下的块地址分别是0X0000-0X1FFF,0X2000-0X3FFF,0X4000-0X7FFF,0X8000-0XFFFF。
SelectAll按钮用来选中全部块,DeselectAll则相反。
选中您想要擦除的块,单击右边的ERASE!
按钮,如果通讯正常,被选中的块将会红色蓝色变换闪烁,表示正在擦除中。
切记不要单击FullChipERASE!
!
按钮,否则P89C51RD2的ISP功能将会失效。
擦除完之后对话框会自动关闭。
图1-9
2.点击主界面的LoadFile按钮(建议先点击FillBuffer按钮,将主界面右侧的数据缓冲区首先填满0xFF),向WinISP的缓冲区装入欲下载的程序文件(*.hex文件)。
假定加入文件名LED.hex,单击打开按钮,主界面右侧的数据缓冲区会显示当前选定的hex文件的内容。
该缓冲区不能被编辑。
3.单击左边的ProgramPart按钮,则进入ISP编程过程,此时主界面左边的一列按钮将会变灰色,在StatusDisplay一栏显示中着当前的编程进度.当编程完成后,PC的蜂鸣器会嘀地一声响,同时StatusDisplay栏显示编程成功的信息,提醒用户编程完成.
4.程成功完成后,可单击VerifyPart校验编程结果是否和当前的数据缓冲区内容相同,也可以点击ReadPart按钮,将会读回当前P89C51RD2的闪存内容到数据缓冲区。
如果不需要,可以跳过这一步,直接到下一步。
5.把试验板断电,拔下跳线,重新上电,此时就会运行刚才下载的程序代码。
下载成功!
!
!
注意事项:
一旦P89C51RX2的BootVector或StatusVector被改写为其他的值,ISP功能将很可能失效,此时只能用商用的编程器将其分别重新改写回0xFC和0x00才能恢复ISP功能。
方法二:
在KEILC51生成HEX代码之后除了使用WINISP下载之外还可以使用ZLGISP在线下载。
ZLGISP下载编程器为用户应用PhilipsMCU器件提供一种价廉实用的编程工具,该设备用于对PhilipsFlash型MCU进行程序下载,也可作为学习PhilipsMCU的简单工具。
首先我们来看看ZLGISP的下操作界面。
1234
图1-10
1.单片机芯片选择,本下载工具只支持PHILIPS的CPU。
2.PHILIPS具体芯片选择,支持的芯片达18种之多。
3.下载串行口的选择,COM1----COM2。
4.串行下载波特率选择,范围从2400---145200。
在操作界面的最左边有6个功能设置按键,各个按键的具体功能是如下介绍:
1.设置:
在设置配置参数组框中有Vector和Status两个文本框,默认分别是FC和FF,这两个值是为了P89C51RX2实现ISP功能而设置的,用户可以单击Read按钮读出这两个值,如果读者拿到新的P89C51RX2芯片,正常读出的值是FC和FF,说明芯片已经进入ISP状态,这时必须把STATUS值从FF改成00,然后按WRITE写回芯片中激活芯片的ISP功能。
如果把其他值写入Vector和Status,将导致其ISP功能失效。
图1-11
而bit1、bit2、bit3、则是是写入单片机的加密控制字节。
2.查空:
在单片机设置好通讯口以后,就可以通过查空菜单来查询程序在单片机是否是空白芯片,具体的操作界面如下图1-12所示:
图1-12
左边的对话框可以通过选择具体地址进行查询,当然也可以全部选择芯片的空间。
在右边的按页选择则是将单片机内部的空间ROM分为若干个区域,以方便用户查询,当然也可以进行多项的选择,只要在前面的空白处打勾即可。
如果通信口设置有错或是连接不上单片机,将会出现通信出错。
2.擦除:
用来擦除闪存内容,出现如下所示对话框。
右边一列文本框方块表示P89C51RD2内部64K闪存的分块结构。
单击某一块会在该块前面的空白处打勾,可以多项选择,也可以选择左边的全部芯片空间的选项。
从上到下的块地址分别是0X0000-0X1FFF,0X2000-0X3FFF,0X4000-0X7FFF,0X8000-0XFFFF。
选中您想要擦除的块,单击右下边的擦除按钮,如果通讯正常,最下面的对话框会出现“正在进行擦除”字样,表示正在擦除中。
擦除完之后可以关闭对话框,也可以选择“正确处理有关闭对话框”,在正确操作之后对话框将自动关闭。
图1-13
4.读出:
和查空操作差不多。
能将单片机内部的闪存内容读出,有进度条显示读出闪存内容的完成的百分比。
如下图1-12所示。
图1-14
此项功能是将KEILC51编译程序生成的HEX文件下载到单片机中。
在ZLGISP的文件选项中选择装载选项,然后选择所要下载的文件,点击确定。
打开编程选项菜单对话框如下图1-13所示,将芯片的程序的具体地址设置(也可以按页选择)完后就可以点击编程按键,将程序下载到芯片当中去。
进度条会显示完成的进度。
下载完毕之后就可以关闭对话框。
图1-15
6.程成功完成后,可单击校验编程结果是否和当前的数据缓冲区内容相同,也可以点击校验按钮,将会读回当前P89C51RX2的闪存内容到数据缓冲区。
如果不需要,可以跳过这一步,直接到下一步。
4.把试验板断电,拔下跳线,重新上电,此时就会运行刚才下载的程序代码。
下载成功!
5.注意,除非必须,不要选择全部芯片空间擦除,否则会擦掉芯片的ISP功能。
八思考题
1.如果要求LED灯在闪烁时间由按键来控制,在接到按键信号后闪烁时间由原来的0.3秒变为3秒相应的程序应该怎么改动?
相应的汇编程序该怎么改变?