Keil软件使用手册.doc

上传人:豆**** 文档编号:34302296 上传时间:2022-08-16 格式:DOC 页数:60 大小:4.90MB
返回 下载 相关 举报
Keil软件使用手册.doc_第1页
第1页 / 共60页
Keil软件使用手册.doc_第2页
第2页 / 共60页
点击查看更多>>
资源描述

《Keil软件使用手册.doc》由会员分享,可在线阅读,更多相关《Keil软件使用手册.doc(60页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Keil软件使用手册(本手册参考keil 4版本)一 安装到网上下载一个安装包,里面必须包含以下内容:1:(安装包文件,圈选的文件为安装说明,请务必仔细阅读)2:(打开安装文件)3:(点击下一步)4:(勾选同意,并点击下一步) 5:(浏览选择到你想安装的地方,然后选择下一步) 6:(两个空可以随便打,不重要,填完后点击下一步) 7:(正在安装中) 8:(点击完成) 9:(进入安装的文件夹,点击UV4)10:(打开Keil4的执行文件)11:(点击File,再选择License Management)Pic 12:(复制右上角的ID号)12:(打开注册机文件)13:(将复制的ID号粘贴在此处)1

2、4:(点击Generate,在上方会生成一组ID,复制下来)15:(将复制好的ID粘贴在圈选出,并点击Add LIC) 16:(当你看见这两组单词,那么恭喜你,注册成功,准备开始你的奇妙程序之旅吧!)二 新建工程1. 单击Project,选择New Project2 选择保存位置,输入工程的名字3 选择CPU。紧接着,Keil C51提示您选择CPU器件。8051内核片机最早是由Intel公司发明的,后来其他厂商如Philips、Atmel、Winbond等先后推出其兼容产品,并在8051的基础上扩展了许多增强功能,根据芯片的实际情况,选择相应的器件(本例程选择Atmel公司下的AT89C52

3、),如图:注:选择8051也可以,8051与8052有一点的差别,可以说8052是8051的升级版,主要有以下不同:1. 内部RAM,8051单片机为128Byte(00H-7FH),8052单片机为56 Byte (00H-0FFH)2.内部ROM,8051单片机为4KB,8052单片机为8KB3.8051有两个Timer:T0和T1。8052除了有T0和T1以外,还有一个Timer24.8051有5个中断源 8052有6个。关于单片机的知识我们将在后面做详细介绍。4. 选择C语言启动代码 如果使用汇编来编程,请选择“否”。 如果使用C51来编程,请选择“是”。 如果不出现本提示,请检查是否

4、将安装是否出错。5. 源程序文件 选择File菜单,选择New,然后单击保存按钮本例程保存为test.c,如果是用汇编写的程序保存的后缀名应该写成.asm右键工程项目,选择Add Fliles to 将刚才保存的test.c 添加到工程里面去以上就是工程的搭建,剩下的就是写程序程序写完编译通过后,设置生成HEX文件右键单击Target 1,选择Option for Target 1或者直接点击工具栏上面的按钮弹出的窗口选择Output,选上Create HEX编译生成HEX文件单击工具栏的“Rebuild all target files”按钮果程序有错,则会显示错误所在的文件及行号。如下图,

5、表示test.c文件的第35行有错误,双击则可定位到该位如果程序没有错误则会生成HEX文件。Data后面的数据表示使用片内RAM的大小,xdata表示使用外部数据大小,code表示程序的大小三 软件调试调试一般都是在发生错误与意外的情况下使用的。如果程序能正常执行,调试很多时候都是用不上的。所以,最高效率的程序开发还是程序员自己做好规范,而不是指望调试来解决问题。 单片机的程序调试分为两种,一种是使用软件模拟调试,第二种是硬件调试。 使用软件模拟调试,就是用计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的。但是软件调试存在一些问题,不可能像真正的单片机运行环境那样执行的指

6、令能在同一个时间完成(往往比单片机慢)。软件调试只能是一种初步的,小型工程的调试,比如一个只有几百上千行的代码的程序,软件调试能很好的完成。 硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到仿真器,然后与单片机一样执行。仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出)。仿真器会将单片机内部内存与时序等情况返回给计算机,这样 就可以在计算机里看到单片机程序真实的执行情况。不仅如此,还可以通过计算机的软件实现单步、全速、运行到光标的常规调试手段。仿真器可以接入实际的电路中仿真器以下介绍软件模拟调试调试的重要性前面

7、我们学习了如何建立工程,编写C源文件,连接工程,并获取生成的目标代码,但是坐到这些仅仅代表你的源程序没有语法错误,至于程序中存在其它错误必须通过调试才能解决。事实上,除了一小部分极其简单的程序绝大部分程序都要通过多次调试才能得到正确结果,调试是单片机开发过程中一个非常重要的环节。常用调试命令在对工程成功地进行汇编、连接以后,按Ctrl+F5或者使用菜单Debug-Start/Stop Debug Session即可进入调试状态,Keil内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真机的情况下进行程序的调试工具栏上从左到右依次为:查找(find out),第二个

8、几乎不用,开始停止调试,后面几个带圈的都和断点相关具体可将鼠标移到图标上查看,和工程窗口相关的几个小帮助最后一个是配置,可以修改各个窗口的字体,short cut key等等。单击中的调试按钮可以进入或者退出调试,单击进入进入调试状态后,界面与编缉状态相比有明显的变化,Debug菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图所示,Debug菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是:复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、命令窗口(command window)、汇编窗口(disassembly window)

9、、控制特殊功能寄存器显示窗口(Symble window)、寄存器窗口(工程窗口那块)(register window)、堆栈调用窗口(Call stack)、监视窗口(watch window)、子窗口是locals watch1 watc2、存储器窗口(memory window)、串行口调试窗口(serial window)、分析窗口(包含逻辑分析仪,性能分析仪),工具按钮等命令。全速执行,复位重新开始执行,逐语句执行,跟踪进函数内部,先设置一个断点,全速运行程序如下:出现几个工作区间,以下介绍这几个区域:1 左侧是单片机内寄存器的状态区域,给出了常用的寄存器r0r7以及a,b,sp,d

10、ptr,pc,psw等特殊功能寄存器的值,这些值会随着程序的执行发生相应的变化。(涉及单片机内存,若未学过汇编语言,建议了解);其中Regs是片内内存的相关情况值;Sys是系统一些累加器、计数器等。具体介绍一下Sys:a 累加器ACC,往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。b 寄存器B,主要用于乘法和除法操作。spsp_maxdptr 数据指针DPTR。PC $states 执行指令的数量。sec 执行指令的时间累计(单位:秒)。 psw 程序状态标志寄存器PSW,八位寄存器,用来存放运算结果的一些特征量,如有无进位、借位等。p 奇偶标志P。反映累加器ACC

11、内容的奇偶性,如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则,P=1。f1ov 溢出标志位OV。MCS51反映带符号数的运算结果是否有溢出,有溢出时,此位为1,否则为0。rsf0ac 辅助进位标志AC。又称半进位标志,它反映了两个八位数运算低四位是否有半进位,即低四位相加(或减)有否进位(或借位),如有则AC为1状态,否则为0。cy 进位标志CY(PSW 7)。它表示运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。由于PSW存放程序执行中的状态,故又叫程序状态字。运算器中还有一个按位(bit)进行逻辑运

12、算的逻辑处理机(又称布尔处理机)。根据指令执行的不同,上述值会有相应的变化,程序员可以监测这些在单片机中看不到的值而达到调试的目的2 C语言源代码区域3 反汇编指令区域这个是Disassembly Windows ,按下后可以把C51 Disassembly 转化为相应的汇编语言,如果有汇编语言知识的话,就可以对比C51程序与汇编程序了。由于汇编语言的效率高很多,这也可以作为查看C51执行效率的一个方法。可以看出,C51 代码是如何被解释为汇编的。 4 查看变量的值5 查看存储器的值选择View Memory Window存储器窗口的地址栏处输入0000H后回车,则可以查看单片机内程序存储器的

13、内容,单元地址前有”C:”表示程序存储器。如果在存储器窗口的地址栏处输入D:00H后回车,则可以查看单片机内数据存储器的内容,单元地址前有“D:”表示数据存储器,单元地址前有”X:”表示片外数据区,冒号后面表示要查看的数据地址。6 虽然软件调试无法实现硬件调试那样的信号输出,但是软件调试也可以在软件窗口监测输出信号的高低电平,以及单片机相关端口的变化,实现模拟监测输出信号的目的。在主菜单栏:peripherals可以查看定时器,和IO口的数值,中断,串行通信上图所示,Port0,Port1,Port2,Port3就对应于51单片机的四个P0,P1,P2,P3 口,共32个针脚查看输出波形单击,

14、然后选setup可以输入想要观察的引脚。全速运行并单击图中的all,可以看到以下效果,单击图中的out或者in可以对单位时间进行修改。选择合适的时间可以清楚得观察高低电平变化及占空比下面我们来看一个实例:Keil C51程序调试过程用Keil C51编写程序时,经常需要调试,如果不是经常用这个软件的话,很容易忘记这些调试步骤,现在举一个例子“验证延迟函数delay()使其延迟的时间为500ms”说明。源程序写完后,就可以调试了,按照图1所示,先进行第一步和第二步操作,使界面切换到图2的状态,可以看到在文本编辑窗口中,有一个黄色箭头指向13行的位置,说明程序从这个位置开始执行。左上角有一些跟调试

15、相关的按钮,如“全速执行”、“单步进入”。对于这个例子,目的是验证delay()函数的延迟时间,使其大约为500ms。按照下列方法可以达到这个目的:图1 编译界面图2 调试界面点击“单步跳出”按钮(或功能键F10),黄色箭头从第13行往下移一行(14),再单击“单步跳出”,则箭头移到15行那边,表示程序从第13行执行到第15行(注:这种方式是一步一步执行程序。如果要同时执行几行,比如从第13行一下子执行到15行,可以作如下操作:先用鼠标在第15行的位置处点击两下会出现一个图2所示的红色图标;然后点击“全速执行”按钮,则黄色的箭头会从第13行快速移到15行。即:这两行同时被执行)。此时左边寄存器

16、窗口中的sec有一个数值,表示程序执行的时间,即delay()函数的延迟时间。如果延迟时间不是500ms,可改变delay()函数中x,y的数值,再点击图1的第二步所对应的按钮切换到图1所示的编译界面,点击“重新构造所有对象文件”编译程序,然后再切换到图2的界面上来进行调试。重复上面的步骤,直到左边寄存器窗口中的sec(单位秒)数值大约为0.50s,即可说明delay()延迟时间为500ms。(注:这种方法比较麻烦,而且延迟时间不会很精确,如果要精确延迟的话可采用定时器的方式。)Keil C调试案例-优化导致的问题如下是一个简单的Keil C中的小程序:#include void main()

17、unsigned char i,j;i = 0xf0;j = 0x0f;P0 = i;P1 = j;while (1); 编译OK后,进入Debug session,按F11单步执行,发现i = 0xf0和j = 0x0f这两句没有执行。如下图: 很多初学者百思不得其解,其实,这是由于Keil C本身的8级优化导致的。解决的方法有两种:1、降底优化级别,如下图,可降至级别2。2、在局部变量i,j定义前加上Volatile,禁止Keil C优化这两个变量。如下:volatile unsigned char i,j; 调试OK!KEIL-C调试点滴问:用KEIL写C代码,做完以后的调试工作应该如何

18、开展?只有PC机,没有任何的硬件设备。用自带的编译功能然后查错误。写完代码后,F7编译,Alt+F5调试,F10单步运行。可以查看寄存器的值以及RAM的内容。还可以改变P0P3口的输入。KEIL就是一个开发仿真一体的。KeilC本身就是编译与仿真一体的。当不要外部数据时很方便,可以使用KeilC自带的软件调试器(软件仿真器),有单步运行,设置断点等功能。当要外部输入时(比如用定时器作计数器用),有两种处理方法:(1)做产品时最好是用硬件仿真器调试。(2)学习时可用以下方法:KeilC提供了几个调试输入用的窗口,可用它们来模拟输入;调试函数由自己根据需要按特定的格式来编辑,再按KEIL C的要求

19、调入即可。下面给出用定时器作外部事件计数时模拟外部输入的调试函数,并写出KeilC调用的步骤如下:步骤一:编写如下信号函数:singlevoid t0_singal(void)while(1)PORT3|=0x10; /pull INT0(P3.4) high againPORT3&=0x10; /pullINT0(P3.4)lowandgenerateinterruptPORT3|=0x10; /pullINT0(P3.4)highagaintwatch(CLOCK); /wait for 1second步骤二:在DEBUG状态下选择:DEBUG“FunctionEditor(Open In

20、i File),这时,将弹出两个新屏幕,将其中的“打开”窗口关闭;保留“FunctionEditor窗口;步骤三:在FunctionEditor窗口中输入上面的函数:singlevoid t0_singal(void)步骤四:保存(注意:扩展名为.ini),编译该程序,成功后关闭FunctionEditor窗口;步骤五:执行用户程序(必须连续执行);步骤六:在屏幕左下脚的命令窗口中,键入t0_singl()后(必须回车),KeilC便可向P3.4源源不断地提供脉冲信号。四 基于8051+Proteus仿真案例Protues简介Protues软件是英国Labcenter electronics公

21、司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年增加Cortex和DSP系列处理器,并持续增加其他系列处理

22、器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译。这里请读者自行安装好Proteus,双击已安装好的Proteus,我们将简单的介绍该软件,要深入学习请查阅其它资料。Protues软件界面左侧的工具栏提供丰富的硬件资源用Protues搭建单片机系统第一步,新建设计。单击“File”“New Design”命令(或单击图标命令 ),在 Protues中打开了一个空白的新电路图纸。 第二步,添加所需器件。单击“Library”“Pick Device/Symbol”命令(或单击图标命令 ),单击左侧的,然后点击打开器件选择对话框,如图3-1所示,在对话框左上角有个关键字“Keyw

23、ord” 搜索文字框,如果我们知道器件型号可输入其中,Protues将自动帮我们找到所需器件首 先,输入“AT89C51”点击Ok选中器件,在电路绘制区中央单击鼠标,AT89C51单片机就被放置到了电路图中。参考单片机的放置方法把其它器件如晶振、电容、电阻、发光二极管等也放置到电路图中的适当位置。这几个器件在器件选择对话框中的关键词分别为:res(电阻)、crystal(晶体振荡器)、cap(电容)、led-red、7seg(数码管)(关键字不唯一)。其它器件添加进去后,连接各器件构成原理图。所有元器件都放置到电路图后的效果如图接下来就是将写好的程序下载到CPU里面去,双击CPU会弹出下面的窗

24、口点击将生成的Hex文件烧录到CPU即可开始仿真依次是,运行、单步运行、暂停、停止开始仿真按钮,退出仿真在仿真中,红色代表高电平,蓝色代表低电平,灰色代表不确定。下面介绍几个简单案例:1闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include#define uchar unsigned char#define uint unsigned intsbit LED=P10;/延时void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);/主程序void main()LED=0;while(1)LED=LED;Dela

25、yMS(150);2 单只数码管循环显示09/*名称:单只数码管循环显示09说明:主程序中的循环语句反复将09的段码送至P0口,使数字09循环显示*/#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/延时void DelayMS(uint x)uchar t;while(x-) for(t=0;t120;t+);/主程序void main()uchar i=0

26、;P0=0x00;while(1)P0=DSY_CODEi;i=(i+1)%10;DelayMS(300);3数码管显示4X4矩阵键盘按键号/*名称:数码管显示4X4矩阵键盘按键号说明:按下任意键时,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加不同的值,从而得到按键的序号。*/#include#define uchar unsigned char#define uint unsigned int/段码uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83

27、,0xc6,0xa1,0x86,0x8e,0x00;sbit BEEP=P37;/上次按键和当前按键的序号,该矩阵中序号范围015,16表示无按键uchar Pre_KeyNo=16,KeyNo=16;/延时void DelayMS(uint x)uchar i;while(x-) for(i=0;i40x0f;/按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值switch(Tmp)/对03行分别附加起始值0,4,8,12case 1:KeyNo+=0;break;case 2:KeyNo+=4;break;case 4:KeyNo+=8;bre

28、ak;case 8:KeyNo+=12;/蜂鸣器void Beep()uchar i;for(i=0;i100;i+)DelayMS(1);BEEP=BEEP;BEEP=0;/主程序void main()P0=0x00;BEEP=0;while(1)P1=0xf0;if(P1!=0xf0) Keys_Scan(); /获取键序号if(Pre_KeyNo!=KeyNo)P0=DSY_CODEKeyNo;Beep();Pre_KeyNo=KeyNo;DelayMS(100);4 100 000s以内的计时程序/*名称:100 000s以内的计时程序说明:在6只数码管上完成099 999.9s。*/

29、#include#include#define uchar unsigned char#define uint unsigned int/段码uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/6只数码管上显示的数字uchar Digits_of_6DSY=0,0,0,0,0,0;uchar Count;sbit Dot=P07;/延时void DelayMS(uint ms)uchar t;while(ms-) for(t=0;t120;t+);/主程序void main()uchar i,j;P0=0

30、x00; P3=0xff;Count=0;TMOD=0x01;/计数器T0方式1TH0=(65536-50000)/256;/50ms定时TL0=(65536-50000)%256;IE=0x82;TR0=1;/启动T0while(1)j=0x7f;/显示Digits_of_6DSY5Digits_of_6DSY0的内容/前面高位,后面低位,循环中i!=-1亦可写成i!=0xfffor(i=5;i!=-1;i-)j=_crol_(j,1);P3=j;P0=DSY_CODEDigits_of_6DSYi;if(i=1) Dot=1;/加小数点DelayMS(2);/T0中断函数void Time

31、r0() interrupt 1uchar i;TH0=(65536-50000)/256;/恢复初值TL0=(65536-50000)%256;if(+Count!=2) return;Count=0;Digits_of_6DSY0+;/0.1s位累加for(i=0;i=5;i+)/进位处理if(Digits_of_6DSYi=10)Digits_of_6DSYi=0;if(i!=5) Digits_of_6DSYi+1+; /如果04位则分别向高一位进位else break;/若某低位没有进位,怎循环提前结束5 单片机之间双向通信/*名称:甲机串口程序说明:甲机向乙机发送控制命令字符,甲机

32、同时接收乙机发送的数字,并显示在数码管上。*/#include#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit K1=P17;uchar Operation_No=0;/操作代码/数码管代码uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/延时void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i=0&SBUF=9) P0=DSY_CODES

33、BUF;else P0=0x00;/*名称:乙机程序接收甲机发送字符并完成相应动作说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。*/#include#define uchar unsigned char#define uint unsigned intsbit LED1=P10;sbit LED2=P13;sbit K2=P17;uchar NumX=-1;/延时void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i 将Project Targets对话框中的Target1改为工程名字led2 将Groups对话框中的So

34、urce Group 1改为Startup3在Groups对话框中新建两个文件组STM32_Lib和user 4点击STM32_Lib,然后在Files中添加DriverLib文件。5点击user,然后在Files中添加led.c文件或其它的C文件。添加完如图所示:点击上图OK按钮后,工程下面显示创建列表:ARM的几种下载方式:1.MDK配置下载(需要用到J-link)2.ISP下载(串口下载,需要用到官配串口下载软件)3.J-Flash下载(需要用到J-link)J-Flash下载(需要用到J-link)先安装J-link驱动,可以到1. MDK配置下载,即在MDK中在线调试下载。首先确保j-link驱动已经安装成功。剩下的工作只是设置一下MDK即可。单击Keil 4 工具栏上面的,对Debug和Utilities配置:下载到单片机时选中硬件调试,如需要软件调试则选中第一个选项,再点击进行软件调试。调试过程和51单片机大同小异,这里不予赘述。设置Debug,选择正确的下载器。选择CPU型号:配置好后即可进行下载了。2. ISP下载(串口下载)下载软件Flash_Loader_Demonstrator_V1.3_Setup.exe安装,串口连接好单片机与PC,接下来按照下图一步一步进行。60

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 家庭教育

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com