第一章 单片机与C语言.docx
《第一章 单片机与C语言.docx》由会员分享,可在线阅读,更多相关《第一章 单片机与C语言.docx(3页珍藏版)》请在冰豆网上搜索。
第一章单片机与C语言
前言
用C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
目前,8051编程的代码长度,在未加入人工优化的条件下,已经做到了最优汇编程序水平的1.2-1.5倍,比得上中等程序员的水平。
如果谈到开发速度、软件质量、结构严谨性和程序坚固性等方面,C语言的完美绝非汇编语言编程所能比拟的。
第一章单片机与C语言
一、单片机的编程语言
1、汇编语言
优点:
执行效率高,运行速度快,与硬件结合较好,能充分发挥程序员的优势;
缺点:
对编程人员要求高,编程难度大,开发周期长,硬件更换后程序的可移植性差,可读性差。
不大适合专业人员开发程序。
2、Basic语言
优点:
Basic是高级语言,具有高级语言的优点,如可读性好,容易编程等。
解释性语言,易学、易查错。
缺点:
实时性差,因为所有变量均为浮点数,占用空间大,执行速度慢。
3:
C语言
具有以下优点:
1)C语言是编译型语言,具有高级语言的特点,也具备汇编语言简洁、可以控制硬件的功能。
2)表达能力强,易于编程,可读性好。
3)可移植性好,C语言本身不依赖系统硬件,可以很容易移植到不同类型的单片机上。
编译时要选择芯片,将同一条语句变成该芯片对应的指令。
4)有丰富的库函数可以调用。
5)寄存器的分配,由编译器完成,编程者可将精力集中到软件整体设计,有利于提高软件质量。
(汇编语言编程者必须记住这些分配)
6)可以多人编写一个大程序。
(将各模块之间接口确定即可)
7)有实时多任务操作系统(RTOS),可以合理的分配CPU的时间及单片机的资源。
8)开发周期短,适合工程技术人员开发应用软件。
存在的问题:
1)代码长度,C语言向单片机移植,最大的困难之一是“高级语言产生的代码长,运行速度慢,占用存储器空间大,不适合单片机应用”。
经过美国的keilSoftware公司和许多公司的努力,现在该问题已基本解决,经考核,对于程序长度超过2K字节,用C语言编写的程序,占用内存大小和运行速度优于一般编程人员(非程序员级的专业人员)用汇编语言编写的程序。
2)单片机种类多,结构不同。
编译软件还不能全部适应。
二、Keil编译器
1、简介
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。
与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具。
全Windows界面,另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解,在开发大型软件时更能体现高级语言的优势。
KeilC51标准C编译器为8051微控制器的软件开发提供了C语言环境。
C51已被完全集成到μVision3的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
2、KeilC51单片机软件开发系统的整体结构
C51工具包的整体结构如图所示,可以完成编辑、编译、连接、调试、仿真等整个开发流程,该集成系统可以编译C源程序,也可以编译汇编语言源程序。
开发人员可用IDE(Integrated Development Environment)本身或其它编辑器编辑C源文件或汇编源文件,然后分别由C51及A51编译器编译生成目标文件(.OBJ),目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)ABS文件。
由OH51转换成标准的Hex文件,以供调试器使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,HEX文件是最后写入程序存贮器中的代码。
(用多媒体进行演示)
三、单片机C语言与一般C语言的异同
特点:
单片机C语言和普通的C语言在很多方面都是相同的,现在各学校开设的编程语言大多是C语言,因此要学习单片机C语言较容易。
有的学校在开设C语言时就将单片机C语言作为一部分内容加进去,那样处理可以节约课时,但不利于单片机C语言的更好掌握。
相同点:
语法结构基本相同,也是采用函数结构;大部分函数相同。
不同点:
1)输入、输出不同,c语言中可以用Printf/Scanf等语句进行标准的输入、输出,直接从键盘输入或输出到屏幕上,而单片机用该指令,只能输出到串行口。
因此调试程序没有在计算机上调试普通C程序方便,可以看到运行的信息。
2)数据类型不同,单片机增加了bit、sbit、sfr、sfr16等数据类型。
3)单片机C语言增加了存储类型。
4)不隐含支持递归调用,要递归调用前必须说明。
5)库函数不同。
库函数大部分是相同的,有部分是不同的,如在CX51中没有freopen、fputs等库函数。
在ANSIC中没有_NOP_,应用时查相关资料。
6)单片机C有自动覆盖技术。
因为单片机的RAM和计算机相比少的可怜,所以在编译时会自动分析判断,将不再被用的变量占用的空间重新使用。
7)单片机C有优化技术,可以最大限度减少代码长度。
8)由于单片机C语言编程的目的是要将程序最后固化到单片机或者EPROM中,所以最后要生产后缀为.HEX的文件,该文件可以固化到单片机中。
用单片机C语言编程是要注意:
1)应用单片机的c更要注重对系统资源的理解,因为单片机的系统资源相对pc来说很贫乏,对于每一个ram,rom中的byte都要充分利用,可以多看看编译生成的.m51文件来了解自己程序中利用资源的情况。
2)对于程序上应用的各种算法要精简,不要对系统构成过重的负担。
尽量少用浮点运算,可以用unsigned型数据的就不要用有符号型数据,尽量避免多字节的乘除运算,多使用移位运算等等。