【摘 要】现在的单片机仿真器普遍支持C语言程序的调试,为单片机使用C语言提供了便利条件。C语言相对汇编语言来说,能直接对单片机硬件进行操作,既有高级语言的特点,又有汇编语言的特点。
【关键词】单片机C语言;变成;常见问题
引言
单片机系统的实现是以大规模集成电路为基础逐渐发展起来了,它将数据存储ROM,中央处理器CPU,I/O接口和负责信息传输的线路进行整合至集成电路板上,完成电脑系统的制作。
一、单片机c语言主要特点
C语言具有非常好的程序结构,常用于模块化程序设计,所以,当利用C语言进行单片机应用系统程序的设计时,第一步要尽可能地使用结构化的程序设计方法,将其功能进行模块化,另外,不同的程序模块其主要功能也是不同的,所以,模块化之后可使整个应用系统程序结构更加清晰,容易对其进行调试与维护。在不同的模块,指定与之相应的入口参数与出口参数,对于需要反复调用的程序,可以将其编成函数,不仅可以减少程序代码的长度,还有利于整个程序的管理,同时还能够增强可读性和移植性。
在实际设计过程中,单片机程序结构如下:
#include<reg5l.h> /*头文件说明部份*/
unsigned char xl,x2;/*全局变量声明部份*/
… Function 1(" "){ /*功能函数定义部份*/}
Main(){inti,j;整型变量声明部份*/
Function 1("...");/*功能函数说明部份*/
二、单片机C语言编程中几种常见问题
1、单片机的汇编语言
汇编语言是最接近机器码的一种语言,它是用文字助记符来表示机器指令。汇编语言最大的优点就是占用资源少,程序执行效率比较高。在汇编语言中,一条指令对应一条机器码,所以每一步的执行动作都非常清晰,另一方面,程序大小与堆栈调用情况都非常好控制,并且便于调试。在实际的单片机设计中,不同的类型的单片机在汇编语言上有一定的差异,因此不易移植。例如,用于PIC12CE518单片机上的汇编语言,在STC89C51单片机上就无法使用,主要由于这两种单片机的指令系统有着很大的差异。
单片机的汇编语言与其他汇编语言非常相似,与第一代微处理器相比,指令系统要强很多。然而,单片机在存储区域上的划分使得其编程更加复杂,这样的话,电子工程师就必须有扎实的汇编语言功底,能够帮助其了解影响任何语言效率的特殊规定。同样的,当要求使用浮点数和启用函数时也只有具备汇编编程经验才能避免生成庞大的、效率低的程序。在这方面,缺少了汇编语言是不可能做到的。
2、单片机C语言的算法的详解
C语言是通过算法组成的,它可以完成单一命令,也可以完成多种命令。同样,单片机C语言也是由算法组成的,这两者之间最大的区别就是存储量的大小,一般来说,C语言的编译不考虑编译程序代码的长度,只要编译结果能达到要求就可以了。然而在单片机C语言的编译中,由于单片机存储性能有限,所以不得不考虑编译程序代码的长度,如果代码长度过长,就要进行重新设计排版,使得程序算法最少。当然,算法少并不意味着代码少,有些时候代码不长的程序,由于在运行中需要走函数或者子程序,导致程序在运行过程中涉及的算法比较多。为了减少程序占用的内存,既要编辑好的程序算法,也要考虑算法本身的运行情况。
3、单片机C语言与汇编语言的混合编程
在大部分的场合,采用C语言编程就可以达到预期目的,但是对于实时时钟系统以及要求执行效率高的系统,一般不采用C语言编程,在这种情况下,进行编程时要结合汇编语言。汇编语言的特点就是,可以直接和硬件打道、执行代码的效率高等,能够做到C语言做不到的事情,例如对时钟要求非常严格时,汇编语言的使用是唯一的选择。这种混合编程的方法将C语言和汇编语言的优点结合起来,己经成为目前单片机开发最流行的编程方法。
期刊文章分类查询,尽在期刊图书馆
目前来看,大多数据单片机系统,在C语言中使用汇编语言有以下两种情况:第一,汇编程序部分和C程序部分模块不同,或文件不同,通常由C程序调用汇编程序模块的变量和函数他可称为子程序或过程;第二,嵌入式汇编,也就是在C语言程序中嵌入一段汇编语言程序。
当汇编程序和C程序为不同模块时程序一般可分为若于个C程序模块和汇编程序模块,C程序模块通常是程序的主体框架,而汇编程序模块通常由用C语言实现效率不高的函数组成,也可以是已经成熟的、没有必要再转化成C语言的汇编子程序。在这种混合编程技术中,关键是参数的传递和函数的返回值。它们必须有完整的约定,否则数据的交换就可能出错。
对于嵌入式汇编,可以在C程序中使用一些关键字嵌入下些汇编程序,这种方法主要用于实现数学运算或中断处理,以便生成精练的代码,减少运行时间。当汇编函数不大,且内部没有复杂的跳转时,可以用嵌入式汇编实现。
下面就以AT89C2051单片机在模拟电压检测中的应用为例说明C语言程序与汇编语言程序的调用。AT89C2051单片机检测模拟电压电路图(略):
AT89C2051单片机内置模拟比较器,13脚即P1.1是比较器的负输入端,12脚即P1.0是比较器的正输入端,比较器的输出端做在了CPU内部即P3.6未被引出,CPU可以直接读取P3.6状态来判定两输入端比较的结果其和一个外部电阻及一个外部电容器就可以设计成一个A/D转换器,采用RC模拟转换的原理,来检测外部P1.1引脚的输入电压。由于系统对时钟要求很严格,因此就采用了C语言和汇编语言混合编程技术,程序调用形式如下:汇编子程序:
PUBLIC一D;入口地址
con SEGMENT CODE;程序段
RSEG con
-AD: SETB P3.7;充电
Loop: JB p3.6,AD END;开始计数匹配
INC A
CJNE A,#100,Loop
AD END:CLR P3.7;放电
CJNE A,#100,Ret Val;看结果是否有溢出,有溢出说明结果不对
SJMP Con_OV;返回值
Ret VaI:DEC A
MOV R7,A;A/D转换的结果保存在R7中,传递给主程序
Con- OV:RET
END
单片机C程序:include<reg5l.h>unsigned char AD(unsigned char);//在C程序中声明汇编模数转换子程序……………
void timer0(void)interrupt 1 using 1{……………unsigned char x;x=ADS;//在C程序中调用汇编程序……………)Main{ //主程序……………}
在以上程序中,函数的返回值为一无符号字符型数,根据调用规则,返回值在R7中,这样才可保证数据的传递不出错。
结语
单片机C语言编程由于逻辑性强,编程具有一定的难度困难,在实际的操作中,通过引入规范性编程,从文档的规范性、变量及函数的规范性、程序书写的规范性,以及模块化编程等四个方面,强调规范性程序设计的重要性,在此基础上进行程序设计,使相关人员单片机应用能力能够得到了极大的提升。
参考文献:
[1]马忠梅,籍顺心,张凯.单片机的C语言应用程序设计[M].北京航空航天大学出版社,1997.
[3]张丽.单片机的发展与应用[J].科技咨询导报,2010(09).
[4]李朝青.单片机原理及接口技术[D].北京航空航天大学,2008.
论文作者:巢国强
论文发表刊物:《低碳地产》2016年10月第19期
论文发表时间:2016/11/18
标签:单片机论文; 程序论文; 汇编语言论文; 语言论文; 汇编程序论文; 函数论文; 算法论文; 《低碳地产》2016年10月第19期论文;