KEIL uVISION2学习笔记KEIL uVISION2学习笔记
注意:本学习软件是版本keil c51 v7.06a 完全版,本人利用这个软件的时候碰到了很多问题,所以写出来让大家不再走弯路,希望大家都能成为C51高手。
建立一个C项目(整理03.12.17苏美克工作室)
(1) 由于本软件是完全版,没有2K字节的限制。下面是建立第一个项目的步骤:
(1)运行KEIL uVISION2 界面如下:
(2)点击Project 菜单,选择弹出的下拉式菜单中的New Project,如图1-2。接着弹出一个标准Windows 文件对话窗口,如下图,在“...
KEIL uVISION2学习笔记
注意:本学习软件是版本keil c51 v7.06a 完全版,本人利用这个软件的时候碰到了很多问题,所以写出来让大家不再走弯路,希望大家都能成为C51高手。
建立一个C项目(整理03.12.17苏美克工作室)
(1) 由于本软件是完全版,没有2K字节的限制。下面是建立第一个项目的步骤:
(1)运行KEIL uVISION2 界面如下:
(2)点击Project 菜单,选择弹出的下拉式菜单中的New Project,如图1-2。接着弹出一个标准Windows 文件对话窗口,如下图,在“文件名”中输入您的第一个C 程序项目名称,这里我用“test”,大家随便写一个就是了,只要符合Windows 文件规则的文件名都行。“保存”后的文件扩展名为uv2,这是KEILuVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。
(3)选择所要的单片机,这里我们选择常用的Ateml 公司的AT89C51。此时屏幕如图1-4 所示。完成上面步骤后,我们就可以进行程序的编写了。
(4)首先我们要在项目中创建新的程序文件或加入旧程序文件。如果您没有现成的程序,那么就要新建一个程序文件。在KEIL 中有一些程序的Demo,在这里我们还是以一个C 程序为例介绍如何新建一个C 程序和如何加到您的第一个项目中吧。点击图1-5 中1 的新建文件的快捷按钮,在2 中出现一个新的文字编辑窗口,这个操作也可以通过菜单File-New 或快捷键Ctrl+N 来实现。好了,现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。第一程序嘛,写个简单明了的吧。下面是经典的一段程序:
#include
#include
void main(void)
{
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1 定时方式2
TCON = 0x40; //设定时器1 开始计数
TH1 = 0xE8; //11.0592MHz 1200 波特率
TL1 = 0xE8;
TI = 1;
TR1 = 1; //启动定时器
while(1)
{
printf ("Hello World!\n"); //显示Hello World
}
}
这段程序的功能是不断从串口输出“Hello World!”字符,看看如何把它加入到项目中和如何编译试运行。
(5)点击图1-5 中的3 保存新建的程序,也可以用菜单File-Save 或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出类似图1-3 的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时您会发现程序单词有了不同的颜色,说明KEIL 的C 语法检查生效了。如图1-6 鼠标在屏幕左边的Source Group1 文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。我们选“ Add File to Group ‘SourceGroup 1’”弹出文件窗口,选择刚刚保存的文件,按ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。
图1-6 把文件加入到项目文件组中
(6)C 程序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX 文件,如何设置生成HEX 文件,以后用到的时候再说。我们先来看图1-7 吧,图中1、2、3 都是编译按钮,不同是1 是用于编译单个文件。2 是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3 是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3 右边的
是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5 是菜单中的它们,这个项目只有一个文件,按123 中的任何一个都可以编译。好了,在4 中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6 是有一个小放大镜的按钮,这就是开启\关闭调试模式的按钮,它也存在于菜单Debug-Start\Stop Debug Session,快捷键为Ctrl+F5。
(7)进入调试模式,软件窗口样式大致如图1-8 所示。图中1 为运行,当程序处于停止状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序回到最开头处执行。按4 我们可以打开5 中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有,这里不再一一介绍大家不妨找找看。首先按4 打开串行调试窗口,再按运行键(下图),这时就可以看到串行调试窗口中不断的打印“Hello World!”。这样就完成了您的第一个C 项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启\关闭调试模式按钮。然后我们就可以进行关闭KEIL 等相关操作了。
(8)运行结果:
怎样生成HEX文件(整理03.12.17苏美克工作室)
(2) 在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。我们先来打开刚才的程序。,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击图3-1中的1项目文件夹,弹出项目功能菜单,选Options for Target’Target1’,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。打开项目选项窗口,转到Output选项页图3-2所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。好,我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图3-3。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果,至于编程器或仿真器品种繁多具体方法就看它的说明书了,这里也不做讨论。
I/O口的观察(整理03.12.17苏美克工作室)
(3) 我们按刚才的步骤写下面的程序:(这是一个在P1口循环输出FFH和00H的程序)
#include
#include
void main(void)
{
while(1)
{
P1=0xFF;
P1=0x00;
}
}
编译运行上面的程序,然后按外部设备菜单Peripherals-I/O Ports-Port1(图33-1) 就打开Port1 的调试窗口了(图33-2):
图33-1
图33-2
我们单步运行程序如下图33-3
图33-3
P1口的变化如下图33-4:
图33-4
好了,输入输出(I/O)口的操作就是这样了,很简单的,我可是都测试过的,没有问题的。
典型的程序练习
1、 宏定义的程序:
不带参数的宏定义又称符号常量定义.一般格式为
#define 标识符 常量表达式
例如:
#define PI 3.141592 那么PI=3.141592
看一个程序:
#include;//
#include;//
#define PI 3.141562;// PI=3.141562
#define R 3.0;//R=3.0
#define L 2*PI*R
#define S PI*R*R
void main(void)//void含义:不要求有返回值的函数都定义为void函数。
{SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1 定时方式2
TCON = 0x40; //设定时器1 开始计数
TH1 = 0xE8; //11.0592MHz 1200 波特率
TL1 = 0xE8;
TI = 1;
TR1 = 1; //启动定时器
printf("L=%f\nS=%f\n",L,S);
}
运行结果如下:
2、 求最值的程序:
#include
#include
int Max(int a,int b);
void main()
{int a;
int b;
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1 定时方式2
TCON = 0x40; //设定时器1 开始计数
TH1 = 0xE8; //11.0592MHz 1200 波特率
TL1 = 0xE8;
TI = 1;
TR1 = 1; //启动定时器
printf("input a and b:\n");
scanf("%d %d",&a,&b);
printf("Max=%d",Max(a,b));
}
int Max(int x,int y)
{
int z;
if(x>y)
z=x;
else z=y;
return(z);
}
运行程序后,输入两个数据,中间用空格断开,然后回车,运行结果如下:
输入数据以前:
输入数据以后:
如何直接操作系统的各个存储器地址空间
为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用指针的办法来实现。
例如:
void restmodul(void)
{
char xdata *xdp;/*定义一个指向XDATA存储器空间的地址*/
char data *dp; /*定义一个指向DATA存储器空间的地址*/
dp 02x; /*XDATA指针赋值,指向XDATA存储器地址0002H*/
*xdp=0Xaa;/*将数据送往指定的地址*/
dp 0x30;/*DATA指针赋值,指向XDATA存储器地址0030H*/
*dp=0xBB;/*将数据0xBBH送往指定的地址*/
}
另一种直接操作存储器空间地址的方法是利用C51运行库中提供的一套定义宏“ABSACC.H”。
例如:
#include
char c var;
int r_var;
XBYTE [0x12] c_var;/*向XDATA存储器空间的地址0012H,写入数据c_var */
i_var=XWORD[0x100] /*向XDATA存储器空间的地址0100H,读取数据并赋值给i_var */
PAGE
10
本文档为【KEIL uVISION2学习笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。