文档库 最新最全的文档下载
当前位置:文档库 › 单片机C语言编程实例

单片机C语言编程实例

单片机C语言编程实例
单片机C语言编程实例

单片机C语言编程实例

前言

INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着

单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的

多种芯片,从而扩充和扩展了其品种和应用领域。

C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。.

C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前

最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第

一章单片机C语言入门

1.1建立您的第一个C项目

使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,

这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软

件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,

编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面

和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真

方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。

以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周

立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

人学习和小型应用的开发。

安装好后,你是不是迫不及待的想建立自己的第一个C程序项目?下面就让我们一起来建立一个小程序项目。或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。

首先当然是运行KEIL51软件。点击桌面图标,运行几秒后,出现如图1-1的屏幕。

图1-1启动时的屏幕

接着按下面的步骤建立您的第一个项目:

(1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图1-2。接着弹出一个标准Windows文件对话窗口,如图1-3。在"文件名"中输入您的第一个C程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。"保存"后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。

图1-2New Project菜单

图1-3文件窗口

(2)选择所要的单片机,这里我们选择常用的Atmel公司的AT89C51。此时屏幕如图1-4所示。AT89C51有什么功能、特点呢?不用急,看图中右边有简单的介绍。完成上面步骤后,我们就可以进行程序的编写了[1]。

(3)首先我们要在项目中创建新的程序文件或加入旧程序文件。如果你没有现成的程序,那么就要新建一个程序文件。在KEIL中有一些程序的Demo,在这里我们还是以一个C程序为例介绍如何新建一个C程序和如何加到您的第一个项目中。点击图1-5中1的新建文件的快捷按钮,在2中出现一个新的文字编辑窗口,这个操作也可以通过菜单或快捷键Ctrl+N来实现。现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。下面是经典的一段程序,如果你看过别的程序书也许也有类似的程序:

#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

}

}

图1-4选取芯片

图1-5新建程序文件

这段程序的功能是不断从串口输出"Hello World!"字符,我们先不管程序的语法和意思,先看看如何把它加入到项目中和如何编译试运行。

(4)点击图1-5中的3保存新建的程序,也可以用菜单或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出类似图1-3的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时你会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。如图1-6鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。我们点击Add Group 'Source Group 1'"弹出文件窗口,选择刚刚保存的文件,按ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。

图1-6把文件加入到项目文件组中

(5)C程序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件,如何设置生成HEX文件就请看下面的章节。我们先来看图1-7,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5是菜单中的它们,在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6是有一个小放大镜的按钮,这就是开启\关闭调试模式的按钮,它也存在于菜单Debug -Start\Stop Debug Session,快捷键为Ctrl+F5。

图1-7编译程序

(6)进入调试模式,软件窗口样式大致如图1-8所示。图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4我们可以打开5中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有,这里不再一一介绍,大家不妨找找看,其它的功能也会在后面的章节中慢慢介绍。首先按4打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打“Hello World!“。这样就完成了您的第一个C项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启\关闭调试模式按钮。然后我们就可以进行关闭KEIL等相关操作了[1]。

到此为止,初步学习了一些KEIL uVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,还有就是对这里所讲的操作方法举一反三用于类似的操作中。

图1-8调试运行程序

1.2 生成HEX文件和最小化系统

在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映像。一般的编程器都支持这种格式。我们先来打开第一节做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击图1-9中的1项目文件夹,弹出项目功能菜单,选Options for Target'Target1',弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。

打开项目选项窗口,转到Output选项页图1-10所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX 文件到指定的路径中。我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图1-11。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果。

Keil、Proteus VSM软件使用

2.1. Keil C51

Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。

下面介绍Keil C51软件的使用方法

进入Keil C51 后,屏幕如下图所示。几秒钟后出现编辑界面。

图2-1 启动Keil C51时的屏幕

图2-2进入Keil C51后的编辑界面

简单程序的调试

学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。

1)建立一个新工程,单击Project菜单,在弹出的下拉菜单中选中New Project选项

图2-3 建立新工程

2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.

图2-4 选择保存路径

3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,Keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定:

图2-5 选择单片机型号

4)完成上一步骤后,屏幕如下图所示:

图2-6 项目主界面

到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项

图2-7 新建文件

新建文件后屏幕如下图所示:

图2-8 新建文件后屏幕

此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮。

图2-9 保存C文档

6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单。

图2-10 把C文档加入到项目

然后单击“Add Group ‘Source Group 1’” 屏幕如下图所示:

图2-11 选择C文档

选中Test.c,然后单击“Add”屏幕好下图所示:

图2-12 加入C代码

注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同。

7)现在,请输入如下的C语言源程序:

#include //包含文件

#include

void main(void) //主函数

{

SCON=0x52;

TMOD=0x20;

TH1=0xf3;

TR1=1; //此行及以上3行为PRINTF函数所必须printf(“Hello I am KEIL. \n”); //打印程序执行的信息

printf(“I wil l be your friend.\n”);

while(1);

}

在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了,即Keil c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后,如下图所示:

图2-13 编辑代码

8)在上图中,单击“Project”菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键Ctrl+F5),屏幕如下所示:

图2-14 设置断点

9)调试程序:在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“Stop Running”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“Serial Windows #1”选项,就可以看到程序运行后的结果,其结果如下图所示

图2-15 调试程序

至此,我们在Keil C51上做了一个完整工程的全过程。但这只是纯软件的开发过程,如何使用程序下载器看一看程序运行的结果呢?

10)单击“Project”菜单,再在下拉菜单中单击“ ” 在下图中,单击“Output”中单击“Create HEX File” 选项,使程序编译后产生HEX 代码,供下载器软件使用。把程序下载到AT89S51单片机中。

图2-16 设置生成Hex文件

2.2. PROTEUS VSM

本文将简单介绍一下Proteus 的使用。在这里,我用的Proteus 版本是Proteus 6.7 sp3 Professional。

2.2.1 Proteus 6 Professional 界面简介

安装完Proteus 后,运行ISIS 6 Professional,会出现以下窗口界面:

图2-17 Proteus主界面

为了方便介绍,我分别对窗口内各部分进行中文说明(见上图)。下面简单介绍各部分的功能[2]:

1.原理图编辑窗口(The Editing Window):顾名思义,它是用来绘制原理图的。蓝色方框内为可编辑区,组件要放到它里面。注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。

2.预览窗口(The Overview Window):它可显示两个内容,一个是:当你在组件列表中选择一个组件时,它会显示该组件的预览图;另一个是,当你的鼠标焦点落在原理图编辑窗口时(即放置组件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。

图2-18 改变原理图的可视范围

3.模型选择工具栏(Mode Selector Toolbar ) 主要模型(Main Modes ))

1* 选择组件(components )(默认选择的) 2* 放置连接点

3* 放置标签(用总线时会用到) 4* 放置文本 5* 用于绘制总线 6* 用于放置子电路

7* 用于即时编辑组件参数 (先单击该图标再单击要修改的组件) 配件(Gadgets )

1* 终端接口(terminals ):有 VCC 、地、输出、输入等接口 2* 器件引脚:用于绘制各种引脚

3* 仿真图表(graph ):用于各种分析,如 Noise Analysis 4* 录音机

5* 信号发生器(generators )

6* 电压探针:使用仿真图表时要用到

7* 电流探针:使用仿真图表时要用到

8* 虚拟仪表:有示波器等

2D 图形(2D Graphics):

1* 画各种直线

2* 画各种方框

3* 画各种圆

4* 画各种圆弧

5* 画各种多边形

6* 画各种文本

7* 画符号

8* 画原点等

4.组件列表(The Object Selector):

用于挑选组件( components )、终端接口( terminals)、信号发生器(generators )、仿真图表( graph )等。举例,当你选择“组件(components)”,单击“P”按钮会打开挑选组件对话框,选择了一个元件后(单击了“OK”后),该组件会在组件列表中显示,以后要用到该组件时,只需在组件列表中选择即可。

5.方向工具栏(Orientation Toolbar):旋转:旋转角度只能是90 的

整数倍。

翻转:完成水平翻转和垂直翻转。使用方法:先右键单击组件,再点击(左击)相应的旋转图标。

6.仿真工具栏仿真控制按钮

1* 运行

2* 单步运行

3* 暂停

4* 停止

2.2.2 操作简介

1、绘制原理图:绘制原理图要在原理图编辑窗口中的蓝色方框内完成。原理图

编辑窗口的操作是不同于常用的WINDOWS 应用程序的,正确的操作是:用

左键放置组件;右键选择组件;双击右键删除组件;右键拖选多个组件;先右键

后左键编辑组件属性;先右键后左键拖动组件;连线用左键,删除用右键;改连

接线:先右击连线,再左键拖动;中键缩放原理图。具体操作见下面例子。

2、定制自己的组件:有三个个实现途径,一是用PROTEUS VSM SDK 开发仿真

模型,并制作组件;另一个是在已有的组件基础上进行改造,比如把组件改为bus 接口的;还有一个是利用已制作好(别人的)的组件,我们可以到网上下载一

些新组件并把它们添加到自己的组件库里面。由于我没有PROTEUS VSM SDK,所以我只介绍后两个[2]。

3、Sub-Circuits 应用:用一个子电路可以把部分电路封装起来,这样可以节省原

理图窗口的空间。

2.2.3 AVR 单片机的仿真实例

本例是实现AVR 驱动LCD1602,并用示波器监测数据线。开始前先要准备好仿真文件,就是用编译器编译连接产生的调试或下载文件,不同编译器产生的文件格式是不同的,如ICC 是COF、IAR 是D90,GCC是COF、ELF。Proteus 6.7sp3 支持的有COF、D90、HEX 等,ELF 暂不支持。本例用的是:lcd_C.hex。运行Proteus 6 Professional(ISIS6 Professional)出现程序主界面窗口:

1、添加组件到组件列表中:本例要用到的组件有:ATMEGA16、LM016L(LCD1602)、“地“、示波器。单击“P”按钮,出现挑选组件对话框:

图2-19 点击P按钮

图2-20 选择元器件界面

在对话框的KEYWORDS 中输入ATMEGA16,得到以下结果:

图2-21 搜索元器件

单击OK,关闭对话框,这时组件列表中列出ATMEGA16,同样找出LM016L。最终结果:

图2-22 已选元器件列表

2、放置组件:在组件列表中左键选取ATMEGA16,在原理图编辑窗口中单击左键,这样ATMEGA16 就被放到原理图编辑窗口中了。同样放置LM016L。

图2-23 放置组件

添加“地” :左键选择模型选择工具栏中的图标,出现:

图2-24 添加“地”

左键选择GROUND,并在原理图编辑窗口中左击,这样“地”就被放置到原理图编辑窗口中了。

添加示波器:左键选择模型选择工具栏中的图标,出现:

图2-25 添加示波器

左键选择OSCILLOSCOPE,并在原理图编辑窗口中左击,这样示波器就被放置到原理图编辑窗口中了。

相关文档