试论C语言在单片机开发中的运用

2014-03-29 09:39李宛娜
赤峰学院学报·自然科学版 2014年18期
关键词:汇编语言指针C语言

李宛娜

(哈尔滨远东理工学院,黑龙江 哈尔滨 150025)

试论C语言在单片机开发中的运用

李宛娜

(哈尔滨远东理工学院,黑龙江 哈尔滨 150025)

对于研究生思想政治教育历来受到国家的高度重视和关切,以及研究生群体的扩大和未来就业问题.研究生作为高学历人群,群体多元化的结构,面对当代研究生思想政治教育的现状,如何有效地解决和正确的分析,成为思想政治教育面临的重要研究的问题.所以面对研究工作,要全力以赴开辟全新的方式和道路对于当代研究生思想政治教育研究是具有重大意义的.

C语言;单片机;开发

单片机的开发离不开大量的编程和算法设计.而在编程的过程中我们会发现,传统的单片机编程用的更多的是汇编语言,而诸如C、C++在内的高级编译语言用的却很少.面对单片机系统日趋复杂以及功能要求不断提高的现实,如何在单片机中引入高级语言,已经成为了一种必然的趋势.

1 单片机及单片机开发的内涵与特征

单片机是以一种智能化工具出现在我们面前的,兴起于近代,并且是微电子技术的一个鲜明代表.从计算机系统来说,单片机有两种类型,即通用系统与嵌入系统,这两种系统作为两种类型共同引领着如今计算机系统的发展.单片机具有芯片小、性能强等特点,被广泛运用于仪器制造、汽车机械以及家用电气等职能设备之中.

单片机功能的发挥有赖于其背后的开发,这种开发并不是杂乱无序或者任意编码的,它有着自己的特点.首先,外围扩展需要使用串行方式,并需要广泛使用单片机的在片程序存储器技术;其次,它需要在8位机地位下进行全盘CMOS化.这种特性也就决定了其要借助C语言编程语言.就目前用于单片机开发的语言来说,主要包括汇编语言和以C语言为代表的高级编程语言.两种编程语言各有千秋,汇编语言具有很高的可控性和简便性,但C语言则有着很好的移植性和继承性,因此受到单片机系统研究和开发者的高度重视,C语言在处理器中运用的增多就是最好的证明.

2 C语言的优势及其运用到单片机开发中的可行性

C语言较汇编语言有着自身诸如可移植性强、继承性强的优势,使C语言运用于单片机开成为可能.C语言作为一种高级的编译语言,有着汇编带有的那种操作简便、性能强等特点及强大的可移植性,极大地增加了单片机开发的便捷性.因为C语言倡导使用结构化的设计方式,并且依照自上而下的形式展开,这就使得相关单片机开发人员可以在不了解单片机内部硬件结构信息的情况下对整个存储单位进行有效、合理的分配,使得单片机程序的运行十分可靠、便捷.

除其可移植性强外,C语言作为一种结构化的编译程序在程序开发上也有自身的优点.一方面,它功能性强,结构性很好,可以在不同的机型上运行,并且凭借自身强大库函数以及编译运算能力而具有很强的可读性;另一方面,相关程序人员在使用C语言进行编程时,可以专心地进行编程,不需要担心硬件的不兼容,而且C语言的简单好记、逻辑性强等特点也减轻了编程人员的压力.另外,C语言也可以凭借着其修改和扩充简单的优点而使得在进行模块化程序设计时,因为其每个模块都有很好的分工和任务,从而变得尤为简便.

3 C 语言在单片机开发中的运用实例

在单片机开发中运用C语言时,需要依据专门的运用步骤.首先,我们需要对目标源程序进行编译,并将目标代码进行连接和替换;其次,在程序设计完成之后还需要将源程序转换为单片机所能识别和运行的代码形式.整个C语言的单片机开发过程可以简要地概括为软件安装、创建C源文件、编译并调试以及生成HEX文件等几个步骤环节.

C语言能够对单片机的系统资源进行合理、有效的分配,而这种分配实际上是以指针结构的合理配置、指针数组和关系理清等方面为前提的.也就是说,要将C语言运用到单片机开发当中,就需要加强对这几方面的认识和控制.为了更好地说明C语言在单片机中的运用,本文从指针结构、指针寻址这两个方面进行介绍和说明.

首先,是指针结构.一般来说,C语言中关于指针的声明一般都是采用类型标识符*指针变量名的形式,而就单片机的存储结构来说,C语言指针的定义,与普通的C语言定义,有着格式上的不同点,需要设立存储指针变量的数据存储区以及存储指针变量指向数据的存储区.因此我们在进行指针结构的声明时,采用不一样的声明格式,即:类型标识符[存储区类型];指针变量名[指针变量存储区类型].其中,在对数据格式的设定上,主要包括data等几种,并且在进行指针变量控制时,采用如下的应用格式:

unsigned char xdata indata[6];

unsigned char xdata*data yc;

yc=indata.

在将其进行汇编语言转换过后,我们发现其编译结果对应为:

MOV 08H,#00H;

其中0x08与0x09分别是指针变量地地址空间的所在.

其次,是对指针进行寻址.通常来说,在单片机系统中的C语言数组寻址方式与一般系统上的寻址方式是一样的.由于数组存储在单片机片内,而片内的RAM资源空间相对来说比较有限,因此我们在进行数组使用时,尽量避开过大的数组,从而简化其数据结构.实际上,我们在进行指针寻址时,需要实现data区的指针寻址,通过A/D转换的模式将外部数据转进单片机之中.比如,在进行十次数据求和时,我们编写了以下的程序代码:

unsigned char data inputdata[10];

unsigned int data sum,i;

unsigned char data*data yc;

void main()

{sum=0;

collectdata();

yc=inputdata;

sum+=*yc;

}

当然,在实现指向data区的指针寻址之后,我们还需要实现其指向程序存储区的指针寻址.然而,就指针指向数据存储而言,它可以利用指针来实现对函数的调用,而这种调用一般来说需要依照特定的调用格式,即:类型标识符(*指针变量名)([参数1],[参数2]……).在对数据定义完整之后,我们在后续的代码程序中,就可以使用(*指针变量名)([参数],[参数]……)的代码对之前编写好的函数进行调用,例如,我们事先编写了一个查询函数scan(),想在之后通过一个键盘对其进行调用,其可以用以下代码实现:

Void scan()

Void main()

{void(*yc)();

Yc=scan;

高校思政实践课旨在实践中服务学生的成长与成才。大致流程如下:以实践教学班级为主要目标,以一个完整学期作为朋辈导师的服务期限,在高年级学生中精心选拔出一批优秀分子作为储备导师,并在实践课前给予针对性的培训,而后将其以“课程导师”的身份配备给每个教学班级,从思路拓展、实践规划、资源整合、团队建设、条件保障、技能学习和提升、实践过程监控和调整、实践总结与展望等方面进行引导和帮扶,从而实现共同成长的目的。

For(;;)

{(*yc)();}

}

4 从C51 热启动代码的编制看C语言在单片机开发中的运用

就目前的工业控制计算机来说,其由于缺乏看门狗电路,而在使计算机复位时,让看门狗发生动作,这也就是习惯上的热启动.而在热启动的实际过程中,却因为不允许从头开始,而使得已有的测量值或计算值复位,并最终导致系统异常.为了应对这一问题,我们通常需要利用程序实现对其冷热启动进行判别.一般来说,我们要确立其标志位(通常以某内存单位为准),并让计算机启动时首先读取这些带有标志位的内容,如果该内容与预先设定的值相同,则称其为热启动,否则为冷启动.为了实现这一功能,我们设置了一个指针,并且使其指向特定的内存单元0x7f,编制了以下C语言程序:

void main()

{char data*HotPoint=(char*)0x7f;

if((*HotPoint==0xaa)&&(*(--HotPoi-nt)==0xaa))

{/*热启动的处理*/}

else

{HotPoint=0x7e;*HotPoint=0xaa;

*(++HotPoint)=0xaa;}

}

然而,我们在对其进行编译和运行过后发现,无论是热启动还是冷启动,开机后的内存单元复位均为0,这显然无法满足热启动的要求,因为用C语言编程时,开机时执行的代码并非是从main()函数的第一句语句开始的.在main()函数的第一句语句执行前要先执行一段“起始代码”,正是这段代码执行了清零的工作.为此,我们需要对在编译过后形成的startup.a51源文件进行修改,然后用编译程序所附带的a51.exe程序对startup.a51编译,得到startup.obj文件,然后用这段代码代替原来的起始代码.

〔1〕孙静.C语言在单片机开发中的应用[J].电子世界,2012(7).

TP368.1

A

1673-260X(2014)09-0026-02

黑龙江省科学技术研究指导项目:实践教学中机器人技术的应用(12533044)

猜你喜欢
汇编语言指针C语言
基于Visual Studio Code的C语言程序设计实践教学探索
高等学校计算机专业课程教学改革实践——以汇编语言与接口技术课程为例
汇编语言与C语言的混合程序设计技术研究
基于C语言的计算机软件编程
提高《汇编语言程序设计》教学效率的思考与实践
为什么表的指针都按照顺时针方向转动
高职高专院校C语言程序设计教学改革探索
基于改进Hough变换和BP网络的指针仪表识别
试论汇编语言与C语言的混合程序设计技术
论子函数在C语言数据格式输出中的应用