keilc教程以及程序例子.docx
- 文档编号:3825219
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:35
- 大小:714.98KB
keilc教程以及程序例子.docx
《keilc教程以及程序例子.docx》由会员分享,可在线阅读,更多相关《keilc教程以及程序例子.docx(35页珍藏版)》请在冰豆网上搜索。
keilc教程以及程序例子
第一章KEIL编译器的安装
KEIL()编译器评估版本把目标代码长度限制在2KB以内,可以从网上下载使用。
而8051编译器正式版本由1张CD、1张有序列号码的1、44MB软盘与连接打印机端口的硬件锁定键组成。
利用评估版本(Evaluation)对源程序通过了便宜,也生成了HEX文件,但就就是不能正常运行。
这就是为什么?
使用者可以随时从网上下载KEIL评估版本进行安装,但就是编译长度小于2KB的目标代码,并且代码的起始(Start)地址自动设定为4000h,所以硬件组成也应予以支持。
免费获得的评估版还有别的限制,为了把所生成HEX文件下载到地址不就是4000h的ROM中,就要利用hex2bin、exe实用程序把hex变成bin后下载到ROM,只有这样才能正常运行。
hex2bin、exe程序可以从网上下载。
下载KEILC51安装程序后,双击Setup、exe文件约几秒后,在安装向导窗口上可以选择安装、更新、搬移程序三个选项,如图1–2所示。
图1–1安装项目的选择
在默认(InstallSupportforAdditionalMicrocontrollerArchitectures)的情况下,点击Next>进入图1–2所示画面。
EvalVersion(EvaluationVersion)评估版本;FullVersion正式版本;Quit退出安装;
在安装过程中,键入写在软盘上的序列号码,选择驱动器路径,把软盘插入驱动器继续安装。
这时,在程序设置信息项目中出现“LastName”项目,必须键入才能激活“Next”按钮,比如自己的“姓”或其她。
在安装盘上有序列号码与与安装有关的重要信息,因此有必要把安装盘进行备份以保护重要的信息。
若没有序列号的情况下请选择EvalVersion(EvaluationVersion)评估版本进行安装。
图1–2正式版与评估版的选择
如果KeiluVision2的KEIL编译器安装结束,则会生成下列路径与图标:
以最上层路径为C:
\KEIL为假设予以罗列。
安装结束后若想运行,则双击屏幕上的KeiluVision2集成运行快捷按钮
。
在Windows开始-->程序菜单上也会发现同样的快捷按钮。
表1–1文件夹的结构
路径
说明
C51\ASM
汇编SFR(SpecialFunctionRegister)定义与源程序样本文件
C51\BIN
编译器的执行文件所位置
C51\EXAMPLES
应用程序视图文件
C51\RTX51
实时操作系统Full文件,255个任务
C51\RTX_TINY
实时操作系统Tiny文件,16个任务
C51\INC
C语言中与8051有关的所有包含文件都在此处
C51\LIB
库、开始代码、输入/输出源程序
C51\MON51
监控目标硬件系统时所使用的HEX代码生成文件
UV2
编译器集成执行文件
KEIL编译器C51以ANSI(AmericanNationalStandardInstitute)规格为标准,所以使用C语言的开发人员用ANSI编写程序就可以(使用ClassicC语言也可以)。
第二章KeiluVision2快速入门
为了能让使用者快速入门,先简单介绍8051。
8051单片机就是一个具有40个引脚的长方形芯片,其中,有5V直流电源Vcc(因为内部有很多逻辑电路,应使用波纹系数小的直流电源)与电源地GND引脚。
还有至少保持2个机器周期(一个机器周期=12个振荡周期)为高电就复位的RESET引脚。
端口P0就是由开漏(用作I/O口时需要外部接上拉电阻)的驱动器构成的8位双向I/O口,用作A0~A7,D0~D7;端口1就是有内部上拉电阻的准双向I/O口;端口2就是有内部上拉电阻的准双向I/O口,用作A8~A15;端口3就是有内部上拉电阻的准双向I/O口,兼有串行通讯、外部中断、定时器、读/写的特殊功能;X1就是振荡放大器的反向输入引脚,X2就是反向输出引脚,因此,使用晶体时把晶振并联连接到X1与X2上,使用外部振荡器时只连接X1。
ALE/PROG(AddressLatchEnableOutput/ProgramPulseInput)引脚的ALE,在访问外部存储器时用来锁存低8位地址,而PROG在编程EPROM时用来进行脉冲输入。
PSEN(ProgramStrobeEnable)引脚信号作为访问外部程序存储器的读选通,每个机器周期PSEN被激活2次,在ALE的下降沿将端口0的地址锁存到外部锁存器。
EA/Vpp(ExteralAccessEnable)引脚连接到GND,则0~FFFFH地址都访问外部程序存储器;连接到Vcc,则访问内部程序存储趋。
Vpp就是对8751编程电压输入端子,其电压为12、75~21V,具体值随不同型号芯片而有所不同。
双击KeiluVision2集成执行快捷按钮,将弹出如图2–1所示的窗口。
这就是一个初始开发集成窗口。
如果没有做过任何项目,则窗口上什么也没有。
窗口的上端有10个下拉菜单。
C51在管理程序时,采用所谓的项目(Project)文件来进行管理。
项目把程序的环境甚至与编
图2–1KeiluVision2的执行
辑有关的全部信息都保存着,因此使用者可以把多个程序以项目为单位使用C51就可以了。
由于C518051KEIL编译器变成集成环境,提供即使不知道汇编或不详细知道8051也能编写应用程序的环境。
这一章的内容可以使工程人员快速并正确地熟悉编译器环境。
执行集成环境C51,如图2–1所示,出现编辑、项目、输出等3个大窗口与,View,Project,Debug,Flash,Peripherals,Tools,SVCS,Window,Help等11个下拉菜单。
为了开始新的项目,选择“Project→NewProject”选项后,出现如图2–2所示,然后选择源程序所在路径键入项目的名字并单击“保存”按钮。
项目的名字会立即出现在集成环境的左上端。
这个项目的名字最后为HEX文件的名字。
因此,项目的名字最好不超过8个英文字母,并且尽量不采用中文为好。
在这里采用的项目名字为“First_Project”。
图2–2建立一个新工程
接着选择用8051开发的目标硬件系统的MPU选项,如图2–3所示。
这个选项的就是为了反映各个不同厂家生产的具有不同性能的8051而设计的,因此,只要正确选择自己要开发的目标硬件系统的MPU就可以了。
图2–3目标硬件系统的CPU的选择
接着要进行“OptionforTarget”的设定,以修改跟编译器有关的信息与跟目标系统有关的事项。
如图2–4中,第一个选项“Target”设定目标系统的存储器、输出文件以及与源程序文件有关的事项。
在菜单栏中,选择“Project/OpintionforTarget…”或者单击工具栏中的“OptionforTarget”快捷按钮就可以开始设定。
在这里,要输入系统的工作频率、ROM与RAM的开始地址与大小以及存储模式。
首先,正确输入目标系统的晶振的频率值后选择存储模式。
图2–4OptionforTarget
为了让8051的机器语言代码下载到ROM,需要产生HEX代码。
图2–5的Option选项用来设定HEN文件的名字与要存放的文件夹(SelectFolderforObject…)。
通常编译、调试到下载ROM需要进行多次编译才能完成。
如果不选择“CreatHEXFile”,编译后不将产生HEX代码(即使不发生错误)。
这样可以避免不必要地反复写硬盘以保护硬盘的磁道与扇区。
图2–5中右上端的“NameofExecutable”表示HEX代码文件的名字,通常与项目文件同名,也可以指定别的名字。
编译完成后生成HEX代码文件,并存放在项目所在路径中。
因为8051的知识产权就是Intel公司的,其命令语的处理也跟随Intel的结构,所以KEIL只支持IntelHEX文件的形式。
另外,为了在源代码层次上进行调试,最好选择“DebugInformation”。
为了便于编译程序,最好选择“BrowserInformation”。
图2–5OptionforTarget输出文件设定
在使用监控程序(Monitor)与目标硬件系统与KEIL编译器集成环境接口,能够监控变量的值与函数的执行。
监控程序把监控程序ROM移植到目标硬件系统后运行。
为了把监控程序与目标硬件系统接口,需要制作合适的硬件。
监控程序的监控原理就是,把监控程序装入ROM区,把应用程序代码装入RAM以后,执行监控程序,则监控程序,调用应用程序执行。
这样,在RAM区域里代码存储区与数据存储区共存。
所以在使用监控程序调试应用程序的时候,需要在KEIL软件中修改以下参数,如图2–6所示将原来的“CSEGAT0”修改成“CSEGAT08000h”(不包括双引号)。
如果使用烧写器直接调试程序,则使用默认的“CSEGAT0”即可。
图2–6Startup、A51文件修改
同时将OptionforTarget中BL51Locate中的Code代码段的设定修改成如图2–7所示
图2–7OptionforTarget代码段的设定
下面就是可以驱动用于调试的仿真器与监控器的环境设定选项卡“OptionforTarget/Debug”,如图2–8所示。
主要有2个单选项:
左侧有仅用软件来仿真8051的软件模拟仿真器单选项,右侧有与目标硬件系统边传送信息边进行调试的“KEILMonitor–51Driver”与“TriscendE5Driver”单选项。
由于KEIL8051集成开发环境综合了调试(Debug)与Scope功能,所以称之为dScope。
监控器的功能就是把监控器的ROM移植到目标硬件系统,用RS–232连接PC机与目标硬件系统,PC机的KEILdScope与目标硬件系统互相传送信息。
可以下载代码,也可以查瞧目标硬件系统的变量。
图2–8OptionforTarget/Debug
第三章应用程序的调试
经过上面的软件设置,下面将介绍一下,如何在KEIL软件中进行应用程序的调试、编译与连接。
首先单击“File”菜单,在下拉的菜单中单击“New”选项,屏幕图3–1所示,此时可以瞧到编辑窗口的标题栏就是空的,而光标在编辑窗口闪烁。
这个时候就可以键入应用程序了。
图3–1含有空白的编辑窗口的屏幕
单击菜单条上的“File”菜单,在下拉菜单中选中“SaveAs”选项单击,屏幕如图3–2所示。
在“文件名”栏右侧的编辑框中,键入欲使用的文件名称,同时,必须键入正确的扩展名。
注意:
如果使用C语言编写程序,则扩展名为(*、C);如果就是用汇编语言编写的程序,则扩展名为(*、asm)。
然后,单击“保存”按钮。
图3–2保存文件对话框
然后需要将您已经保存好的文件添加到该项目中,具体步骤为:
单击“SourceGroup1”然后在单击鼠标右键,屏幕如图3–3所示。
图3–3把源程序添加到工程中
接着单击“Add‘SourceGroup1’”,此时屏幕将出现图3–4所示的画面,然后选择您刚刚设定的函数文件名。
单击“Add”按钮后则可以编写C语言程序了;
图3–4选择所需要的源程序
现在编写程序:
#include
#include
voidmain(void)
{
SCON=0x52;
TMOD=0x20;
TH1=0xf3;
TR1=1;
printf(“HelloIamKEIL51、\n”);//打印程序执行信息
printf(“Iwillbeyourfriend、\n”);//打印程序执行信息
while
(1);//等价于HALT指令
}
在输入上述程序时,KEIL51会自动识别关键字,并以不同颜色提示用户加以注意,这样可以减低错误率,有利于提高编程效率。
程序输入完毕后,屏幕如图3–5所示。
图3–5程序输入完成后的屏幕显示
编辑源程序之后,为了下载到目标硬件系统,要反复进行编译与连接操作。
这时使用的正就是“Project”下拉菜单中的编译命令。
“BuildTarget”(
)表示只编译与连接在项目窗口修改过的源程序,因此适合于多种源程序文件的情况。
“RebuildallTargetFile”(
)表示编译与连接项目里登陆的所有源程序文件。
相反,“Translate”(
)表示只编译被激活的窗口中的源程序。
另外,在编译与连接过程中,可以利用“BuildStop”(
)停止正在进行中的编译与连接,这个快捷按钮就是未被激活状态时的画面。
在窗口底部可以瞧见KEIL项目文件(*、UV)的历史记录,列出最近使用过的文件,最多10个。
除使用过的项目文件之外的历史记录,在“File”下拉菜单的下端可以到过去曾使用过的6个文件列表。
在设定“OptionforTarget”的存储器与“Settings”项后。
进行编译并执行dScope(
)。
则出现如图3–6所示画面。
当然,在执行前装如监控程序与目标硬件系统已接好电源,并且串行通信电缆也已连接到PC机的COM端口。
然后监控程序与连接都正常,则在左下端状态栏里显示蓝色的直方图表,以表示正在装入;如果通信电缆没有连接到目标硬件系统,则显示如3–7所示的信息。
这时,要按目标硬件系统的复位按钮重新执行监控程序之后,单击“TryAgain”或者“Settings……”,重新确定设定值。
特别就是要重新确定通信速度就是否为设定为9600bps,目标硬件系统的时钟频率就是否设定为11、0592Mhz。
如果这样还就是连接不上,单击“StopDebugging”来退出bScope,重新进行上面的步骤。
若还没有任何进展,则只好从头开始检查一下目标硬件系统与软件的设置,在特殊情况下,有时往往就是ROM里的指令代码有问题,或者串行通信有问题。
如果一切连接都正常,则不出现错误窗口,在dScope环境中变成准备等待(Standby)状态。
图3–6正在运行的源程序
图3–7错误信息提示
根据上述编写的程序,若需要在电脑上显示编写的结果就是不就是满足自己的要求,可不设定就是KEILMonitor–51Driver仿真;可以使用UseSimulator进行仿真。
在执行dScope(
)后,再单击(
)可以瞧见通过传口发出去的信息内容,如图3–8所示。
图3–8显示程序所实现的结果
3、1项目中含有多个文件
通常,一个项目就是由多个文件构成的,这就是结构化语言的特色之一。
对于一个大的项目,同时可以由多人编程、调试,最后再连接到总的项目中去,这就构成了工程项目。
下面介绍多文件项目使用方法。
为了便于说明,将C语言程序加上行号,列表如下:
1#include
2#include
3voidmain(void)//主程序
4{
5SCON=0x52;
6TMOD=0x20;
7TH1=0xf3;
8TR1=1;
9printf("HelloIamKEIL51、\n");//打印程序执行信息
10printf("Iwillbeyourfriend、\n");//打印程序执行信息
11while
(1);//等价于HALT指令
}
现在把5—8行程序改写成如下函数:
#include
#include
voidserial_initial(void)
{
SCON=0x52;
TMOD=0x20;
TH1=0xf3;
TR1=1;
}
将上述函数保存为serial_initial、c。
将剩余部分添加必要的两行,保存为my_second、c,程序清单如下:
#include
#include
externserial_initial();
voidmain(void)//主程序
{
serial_initial();
printf("HelloIamKEIL51、\n");//打印程序执行信息
printf("Iwillbeyourfriend、\n");//打印程序执行信息
while
(1);//等价于HALT指令
}
现在创建第二个工程项目,步骤如下:
(1)创建项目,工程名为my_second;
(2)选择所用单片机,Ateml公司的AT89s52;
(3)添加文件,将已经编写好的my_second、c与serial_initial、c添加到项目中去,完成后,(4)屏幕如图3–1–1所示;
(5)编译项目,生成机器代码;
(6)执行当前项目,实现软件仿真;
(7)查瞧程序的执行结果,观察屏幕的输出结果(与图3–8完全相同)。
图3–1–1my_second屏幕显示图
由于Monitor-51开发系统比较简单,占用了一些系统资源,有时给使用者带来了不便。
实际编程中常要解决一下两个问题:
(1)串行接口功能:
串行通信就是MCS-51单片机经常要用到的功能,而这里选用的MCS-51系列单片机AT89S52只有一个串行通信口,在与PC机相连接的仿真状态时,串行口用于与PC机通信。
若在应用程序中也用到串行口,就会发生冲突。
解决方法一就是用户程序装载完毕后,运行用户程序,再断开仿真板与PC机的串行通信线,这样串口就可以归用户程序使用了,当然这时PC机就不能在线调试了;另外,还可以选用其它的带两个串行口的MCS-51系列芯片。
(2)外部存储空间:
用户程序越长,占用的外部数据存储空间将越大。
解决的方法就是对较长的程序进行分段调试。
第四章实验程序
4、1键盘显示程序
硬件环境:
单片机最小系统、8279键盘显示电路
实现功能:
通过按键输入,在数码管上显示相应的数字
C源程序:
//**********************************************
//C按键为清屏幕
//D按键为一位一位清除
//B按键为小数点
//**********************************************
#include
#include
#defineCOMXBYTE[0x7001]
#defineDATXBYTE[0x7000]
#defineucharunsignedchar
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharidatadiss[8]={0,1,2,3,4,5,6,7};
ucharkeyin();
uchardeky();
//*************************************
voidmain(void)
{
unsignedintii;
uchari,k,n,m,j,s;
for(ii=0;ii<20000;ii++);
COM=0xD1;//清楚总命令清除RAM
COM=0x00;//键盘、显示方式、分频
COM=0x38;
while
(1)
{
k=keyin();
switch(k)
{
case0x0c:
COM=0xD1;//清楚屏幕
i=0;
continue;
break;
case0x0d:
i--;//按位清除可以一位一位的清除数码管
COM=0x90;
COM=i+0x80;
DAT=0;
continue;
break;
case0x0b:
i--;//小数点
COM=0x90;
COM=i+0x80;
j=diss[i];
s=table[j];
DAT=s|0x80;
i++;
continue;
break;
default:
break;
}
if(i<8)
{
COM=0x90;
COM=i+0x80;
diss[i]=k;
DAT=table[k];
i++;
}
else
i=0;
}
}
//***************取键值函数************
ucharkeyin(void)
{
uchari,j,k;
while(deky()==0);
COM=0x40;
j=DAT;
i=j&0x07;
i=i<<3;
k=j&0x38;
k=k>>3;
i=i+k;
return(i);
}
uchardeky(void)
{
uchark;
k=COM;
return(k&0x0f);
}
4、28255扩展I/O口实验
硬件环境:
单片机最小系统、8279键盘显示电路
实现功能:
通过按键输入数字量,则在8255的三个输出口分别输出相应的数字量
C源程序:
/*---------------------------------------------*/
/*函数名称:
8255A程序调试
/*
/*版本:
V1、0
/*完成时间:
2005年8月9日
/*---------------------------------------------*/
//文件名:
main、c
#include"EXAMPLE、h"
voidmain(void)
{
unsignedchark,i,j;
Init_8279();
while
(1)
{
k=Keyin();
switch(k)
{
case0x0a:
//确定发送
j=buffer[0]<<4;
j=buffer[1]|j;
Init_8255_mode0(j);
continue;
break;
case0x0c:
//清除屏幕
Clear_LED();
i=0;
continue;
default:
break;
}
if(i<8)
{
COM=0x90;
COM=i+0x80;
buffer[i]=k;
DAT=table[k];
i++;
}
else
i=0;
}
}
//文件名:
Init_8279
#in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- keilc 教程 以及 程序 例子