您现在的位置:机电论文网>> 单片机技术>> 正文内容

应用c语言编写单片机程序

作者: 来源: 发布时间:2011/2/23 11:06:57  点击数:1962

1. C语言的特点

1.1    函数
    函数是C程序的基本单位,一个C源程序至少包括一个函数,一个C源程序有且只有一个名为main()的函数,也可能包含其它函数,main()作为整个程序的入口。主程序通过直接书写语句和调用其它函数来实现有关功能,这些其它函数可以是由C语言本身提供,称之为库函数,也可以是用户自己编写,称之为用户自定义函数。那么库函数和用户自定义函数有什么区别呢?简单地说,任何使用Keil C语言的人,都可以直接调用C的库函数而不需要为这个函数写任何代码,只需要包含具有该函数说明的相应的头文件即可;而自定义函数则是完全个性化的,是用户根据自己需要而编写的。Keil C提供了100多个库函数供我们直接使用。
一个函数由两部份组成:
(1)   函数的首部、即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。
例如:void mDelay (unsigned int DelayTime)
一个函数名后面必须跟一对圆括号,即便没有任何参数也是如此。
(2)   函数体,即函数首部下面的大括号“{}”内的部份。如果一个函数内有多个大括号,则最外层的一对“{}”为函数体的范围。
函数体一般包括:
  声明部份:声明在这部份中定义所用到的变量。
  执行部份:由若干个语句组成。
  在某此情况下也可以没有声明部份,甚至即没有声明部份,也没有执行部份,
如:void mDelay() {}  这是一个空函数,什么也不干,但它是合法的。
  具体到开始编程时,可以利用空函数搭建程序框架,比如主程序需要调用一个延时函数,可具体延时多少,怎么个延时法,暂时还不清楚,我们可以主程序的框架结构弄清,先编译通过,把架子搭起来再说,至于里面的细节,可以在以后慢慢地填,这时利用空函数,先写这么一个函数,这样在主程序中就可以调用它了。
 
1.2     入口函数:一个C语言程序,总是从main函数开始执行的,而不管物理位置上这个main()放在什么地方。
 
1.3     C语言区分大小写,mDelay如果写成mdelay就会编译出错,这一点初学者应该注意。
 
1.4     C语言书写的格式自由,可以在一行写多个语句,也可以把一个语句写在多行。没有行号(但可以有标号),书写的缩进没有要求。但是建议读者自己按一定的规范来编辑,可以给自己带来阅读的方便。
 
1.5     每个语句和资料定义的最后必须有一个分号,分号是C语句的必要组成部份。
 
1.6     可以用/*…..*/的形式为C程序的任何一部份作注释,在“/*”开始后,一直到“*/”为止的中间的任何内容都被认为是注释。特别地,Keil C也支持C++风格的注释,就是用“//”引导的后面的整行语句是注释,例:

P1_0=!P1_0; //取反P1.0

  这种风格的注释,只对本行有效,所以不会出现上面的问题,而且书写比较方便,所以在只需要一行注释的时候,我们往往采用这种格式。但要注意,只有Keil C支持这种格式,早期的Franklin C以及PC机上用的TC都不支持这种格式的注释,用上这种注释,编译时通不过,会报告编译错误。

2. 使用单片机C语言的优越性

    早期一般采用汇编语言编写单片机程序,经过Keil/Franklin、Archmeades、IAR、BSO/Tasking等公司艰若不懈的努力,单片机C语言终于于90年代开始而趋成熟,成为专业化的MCU高级语言了。具体有以下表现:
l         过去长期困扰人们的所谓“高级语言产生代码太长,运行速度太慢,因此不适合单片机使用”的致使缺点已被大幅度地克服。目前,8051上的C语言的代码长度,已经做到了汇编水平的1.2~1.5倍。4K字节以上的程序,C语言的优势更能得到发挥。
l         至于执行速度的问题,只要有好的仿真器的帮助,找出关键代码,进一步用人工优化,就可很简单地达到十分美满的程度。
l         就开发速度、软件质量、结构严谨、程序坚固等方面而言,C语言的完美绝非汇编语言编程所可比拟的。
因此,单片机开发人员和学习者了解和使用C语言是非常必要的。总而言之,使用单片机C语言有以下优越性(结合8051):
·不懂得单片机的指令集,也能够编写完美的单片机程序;
·无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;
·不同函数的数据实行覆盖,有效利用片上有限的RAM空间;
·程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏;
·C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;
·提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址;
·提供small、compact、large等编译模式,以适应片上存储器的大小;
·中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办;
·提供常用的标准函数库,以供用户直接使用;
·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;
·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉;
·可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。
作者:李 晗

更多
字体:【】-【】-【】【关闭此页

上一篇:Pro/E 装配技巧--零件之组合'   下一篇:电容基本知识'


特别声明:机电之家(http://www.jdzj.com )所共享的机电类资料,机电论文、机电类文章、机电企业类管理制度、机电类软件都来自网上收集,其版权归作者本人所有,如果有任何侵犯您权益的地方,请联系我们,我们将马上进行处理。购买的论文都出自原创,保证作者的原创的版权的转让,任何纠纷由法律解决。