请输入您要查询的百科知识:

 

词条 keil
释义

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

Keil公司

发展历程

Keil公司是一家业界领先的微控制器(MCU)软件开发工具的独立供应商。Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software Inc。Keil公司制造和销售种类广泛的开发工具,包括ANSI C编译器、宏汇编程序、调试器、连接器、库管理器、固件和实时操作系统核心(real-time kernel)。有超过10万名微控制器开发人员在使用这种得到业界认可的解决方案。其Keil C51编译器自1988年引入市场以来成为事实上的行业标准,并支持超过500种8051变种。

Keil公司在2007年被ARM公司收购。其两家公司分别更名为ARM Germany GmbH和ARM Inc和。Keil公司首席执行官Reinhard Keil表示:“作为ARM Connected Community中的一员,Keil和ARM保持着长期的良好关系。通过这次收购,我们将能更好地向高速发展的32位微控制器市场提供完整的解决方案,同时继续在uVision环境下支持我们的8051和C16x编译器。”

Keil μVision3

2006年1月30日ARM推出全新的针对各种嵌入式处理器的软件开发工具,集成Keil μVision3的RealView MDK开发环境。 RealView MDK开发工具KeilμVision3源自Keil公司。 RealView MDK集成了业内领先的技术,包括Keil μVision3集成开发环境与RealView编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的 Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。

KeilμVision4

2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。

2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。

基础

Keil C51开发系统基本知识Keil C51开发系统基本知识

1. 系统概述

Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。

2. Keil C51单片机软件开发系统的整体结构

C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

使用独立的Keil仿真器时,注意事项

* 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

* 仿真器上的复位按钮只复位仿真芯片,不复位目标系统。

* 仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。

优点

1.Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

2.与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

教程

为了让初学者更好地入门,笔者利用Keil 提供的AGSI 接口开发了两

块仿真实验板。这两块仿真板将枯燥无味的数字用形象的图形表达出来,可以使初学者在没有硬件时就能感受到真实的学习环境,降低单片机的入门门槛。图1 是键盘、LED 显示实验仿真板的图,从图中可以看出,该板比较简单,有在P1 口接有8 个发光二管,在P3 口接有4 个按钮,图的右边给出了原理图。

图 2 是另一个较为复杂的实验仿真板。在该板上有8 个数码管,16 个按键(接成4*4 的矩阵式),另外还有P1 口接的8个发光管,两个外部中断

按钮,一个带有计数器的脉冲发生器等资源,显然,这块板可以完成更多的实验。

一、实验仿真板的安装

这两块仿真实验板实际上是两个 dll 文件,名称分别是ledkey.dll 和simboard.dll,安装时只要根据需要将这两个或某一个文件拷贝到keil 软件的c51\\bin 文件夹中即可。

二、实验仿真板的使用

要使用仿真板,必须对工程进行设置,设置的方法是点击Project->Option for Target ‘Target1’打开对话框,然后选中Debug 标签页,在Dialog :Parameter:后的编缉框中输入-d 文件名。例如要用ledkey.dll(即第一块仿真板)进行调试,就输入-dl

edkey,如图3所示,输入完毕后点击确定退出。编译、连接完成后按CTRL+F5 进入调试,此时,点击菜单Peripherals,即会多出一项“键盘LED 仿真板(K)”,选中该项,即会出现如图1 的界面,同样,在设置时如果输入-dsimboard 则能够调出如图2 的界面。

第一块仿真板的硬件电路很简单,电路图已在板上,第二块板实现的功能稍复杂,其键盘和数码显示管部分的电路原理图如图4 所示。下表给出了常用字形码,读者也可以根据图中的接线自行写出其它如A、B、C、D、E、F 等的字形码。 除了键盘和数码管以外,P1 口同样也接有8 个发光二极管,连接方式与图1 相同;键盘旁的两个按钮INT0和INT1分别接到P3口的INT0和INT1即P3.2和P3.3引脚,脉冲发生器是接入T0即P3.4引脚。

0c0h 0f9h 0a4h 0b0h 99h 92h  82h 0f8h 80h 90h 0FFH

0 1 2 3 4 5 6 7 8 9 消隐三、实例调试

以下以一个稍复杂的程序为例,说明键盘、LED 显示实验仿真板的使用。该程序实现的是可控流水灯,接P3.2 的键为开始键,按此键则灯开始流动(由上而下),接P3.3 的键为停止键,按此键则停止流动,所有灯暗,接P3.4 的键为向上键,按此键则灯由上向下流动,接P3.5 的键为向下键,按此键则灯由下向上流动。

例 8:

UpDown BIT 00H ;上下行标志

StartEnd BIT 01H ;起动及停止标志

LAMPCODE EQU 21H ;存放流动的数据代码

ORG 0000H

AJMP MAIN

ORG 30H

MAIN:

MOV SP,#5FH

MOV P1,#0FFH

CLR UpDown ;启动时处于向上的状态

h g f e

P0.7

P0.0

P0.5

P0.4

P0.7

P0.6

d c b a

P0.3

P0.2

P0.0

P0.1 P2.7

P2.0

P2.7

P2.6

P2.5

P2.4

P2.3

P2.2

P2.1

P2.0 驱动

P3.0

P3.1

P3.2

P3.5

P3.3

P3.4

P3.6

P3.7

2 3

6 7

A B

E F

0 1

4 5

8 9

VCC C D 89C51

CLR StartEnd ;启动时处于停止状态

MOV LAMPCODE,#01H ;单灯流动的代码

LOOP: ACALL KEY ;调用键盘程序

JNB F0,LNEXT ;如果无键按下,则继续

ACALL KEYPROC ;否则调用键盘处理程序

LNEXT: ACALL LAMP ;调用灯显示程序

AJMP LOOP ;反复循环,主程序到此结束

;延时程序,键盘处理中调用

DELAY: MOV R7,#100

D1: MOV R6,#100

DJNZ R6,$

DJNZ R7,D1

RET

KEYPROC:

MOV A,B ;从B 寄存器中获取键值

JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1

JB ACC.3,KeyOver

JB ACC.4,KeyUp

JB ACC.5,KeyDown

AJMP KEY_RET

KeyStart:

SETB StartEnd ;第一个键按下后的处理

AJMP KEY_RET

KeyOver:

CLR StartEnd ;第二个键按下后的处理

AJMP KEY_RET

KeyUp:

SETB UpDown ;第三个键按下后的处理

AJMP KEY_RET

KeyDown:

CLR UpDown ;第四个键按下后的处理

KEY_RET:

RET

KEY:

CLR F0 ;清F0,表示无键按下。

ORL P3,#00111100B ;将P3 口的接有键的四位置1

MOV A,P3 ;取P3 的值

ORL A,#11000011B ;将其余4 位置1

CPL A ;取反

JZ K_RET ;如果为0 则一定无键按下

CALL DELAY ;否则延时去键抖

ORL P3,#00111100B

MOV A,P3

ORL A,#11000011B

CPL A

JZ K_RET

MOV B,A ;确实有键按下,将键值存入B 中

SETB F0 ;设置有键按下的标志

;以下的代码是可以被注释掉的,如果去掉注释,就具有判断键是否释放的功能,否则没有

K_RET: ;ORL P3,#00111100B ;此处循环等待键的释放

;MOV A,P3

;ORL A,#11000011B

;CPL A

;JZ K_RET1 ;读取的数据取反后为0 说明键释放了

;AJMP K_RET

;K_RET1:CALL DELAY ;消除后沿抖动

RET

D500MS: ;流水灯的延迟时间

MOV R7,#255

D51: MOV R6,#255

DJNZ R6,$

DJNZ R7,D51

RET

LAMP:

JB StartEnd,LampStart ;如果StartEnd=1,则启动

MOV P1,#0FFH

AJMP LAMPRET ;否则关闭所有显示,返回

LampStart:

JB UpDown,LAMPUP ;如果UpDown=1,则向上流动

MOV A,LAMPCODE

RL A ;实际就是左移位而已

MOV LAMPCODE,A

MOV P1,A

LCALL D500MS

LCALL D500MS

AJMP LAMPRET

LAMPUP:

MOV A,LAMPCODE

RR A ;向下流动实际就是右移

MOV LAMPCODE,A

MOV P1,A

LCALL D500MS

LAMPRET:

RET

END

将程序输入并建立工程文件,设置工程文件,在Debug 标签页中加入“-dledkey”,汇编、连接文件,按Ctrl+F5 开始调试,打开仿真板,使用F5 功能键全速运行,可以看到所有灯均不亮,点击最上面的按钮,立即会看到灯流动起来了,点击第二个按键,灯将停止流动,再次点击第一个按钮,使灯流动起来,点击第三个按钮,可以发现灯流动的方向变了,点击第四个按钮,灯的流动方向又变回来了。如果没有出现所描述的现象,可以使用单步、过程单步等调试手段进行调试,在进行调试时实验仿真板会随时显示出当前的情况,是不是

非常的直观和方便呢?

下面的一个例子是关于第二块实验仿真板的,演示点亮 8 位数码管。例9:

ORG 0000h

JMP MAIN

ORG 30H

MAIN:

MOV SP,#5FH

MOV R1,#08H

MOV R0,#58H ;显示缓冲区首地址

MOV A,#2

INIT:

MOV @R0,A ;初始化显示缓冲区

INC A

INC R0

DJNZ R1,INIT ;将0-7 送显示缓冲区

LOOP:

CALL DISPLAY

JMP LOOP

;主程序到此结束

DISPLAY:

MOV R0,#7FH ;列选择

MOV R7,#08H ;共有8 个字符

MOV R1,#58H ;显示缓冲区首地址

AGAIN:

MOV A,@R1

MOV DPTR,#DISPTABLE

MOVC A,@A+DPTR

MOV P0,A

MOV P2,R0

MOV A,R0

RR A

MOV R0,A

INC R1

DJNZ R7,AGAIN

RET

DISPTABLE: DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0FFH ;字形码表

END

这一程序内部RAM中58H 到5FH 被当成是显示缓冲区,主程序中用2-9 填充该显示区,然后调用显示程序显示2-9。这里是用了最简单的逐位显示的方式编写的显示程序。最后介绍一个小小技巧,将鼠标移入按钮区域,按下左键,按钮显示被按下,不要放开鼠标左键,将光标移出按钮区域,松开左键,可以看到,按钮仍处于按下状态,利用这一功能,在需要I/O 口长期处于低电平时,你就不必一直用手按着鼠标的左键啦。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/11/16 13:46:51