在单片机的开发应用中,已逐渐开始引入高级语言,C语言就是其中的一种。对用惯了汇编的人来说,总觉得高级语言’可控性’不好,不如汇编那样随心所欲。但是只要我们掌握了一定的C语言知识,有些东西还是容易做出来的,以下是笔者实际工作中遇到的几个问题,希望对初学C51者有所帮助。
一、C51热启动代码的编制
对于工业控制计算机,往往设有有看门狗电路,当看门狗动作,使计算机复位,这就是热启动。热启动时,一般不允许从头开始,这将导致现有的已测量到或计算到的值复位,导致系统工作异常。因而在程序必须判断是热启动还是冷启动,常用的方法是:确定某内存单位为标志位(如0x7f位和0x7e位),启动时首先读该内存单元的内容,如果它等于一个特定的值(例如两个内存单元的都是0xaa),就认为是热启动,否则就是冷启动,程序执行初始化部份,并将0xaa赋与这两个内存单元。
根据以上的设计思路,编程时,设置一个指针,让其指向特定的内存单元如0x7f,然后在程序中判断,程序如下:
void main()
{ char data *HotPoint=(char *)0x7f;
if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa))
{ /*热启动的处理 */
}
else
{ HotPoint=0x7e; /*冷启动的处进
*HotPoint=0xaa;
*(++HotPoint)=0xaa;
}
/*正常工作代码*/
}
然而实际调试中发现,无论是热启动还是冷启动,开机后所有内存单元的值都被复位为0,当然也实现不了热启动的要求。这是为什么呢?原来,用C语言编程时,开机时执行的代码并非是从main()函数的第一句语句开始的,在main()函数的第一句语句执行前要先执行一段’起始代码’。正是这段代码执行了清零的工作。C编译程序提供了这段起始代码的源程序,名为CSTARTUP.A51,打开这个文件,可以看到如下代码:
.
IDATALEN EQU 80H ; the length of IDATA memory in bytes.
.
STARTUP1:
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
.
可见,在执行到判断是否热启动的代码之前,起始代码已将所有内存单元清零。如何解决这个问题呢?好在启动代码是可以更改的,方法是:修改startup.a51源文件,然后用编译程序所附带的a51.exe程序对 startup.a51编译,得到startup.obj文件,然后用这段代码代替原来的起始代码。具体步骤是(设C源程序名为HOTSTART.C):
修改startup.a51源文件(这个文件在C51\LIB目录下)。
执行如下命令:
A51 startup.a51 得到startup.obj文件。将此文件拷入HOTSTART.C所在目录。
将编好的C源程序用C51.EXE编译好,得到目标文件HOTSTART.OBJ。
用 L51 HOTSTART, STARTUP.OBJ 命令连接,得到绝对目标文件HOTSTART。
用 OHS51 HOTSTART 得到HOTSTART.HEX文件,即可。
对于startup.a51的修改,根据自已的需要进行,如将IDATALEN EQU 80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。
二、直接调用EPROM中已固化的程序
笔者用的仿真机,由6位数码管显示,在内存DE00H处放显示子程序,只要将要显示的数放入显示缓冲区,然后调用这个子程序就可以使用了,汇编指令为:
LCALL 0DEOOH
在用C语言编程时,如何实现这一功能呢?C语言中有指向函数的指针这一概念,可以利用这种指针来实现用函数指针调用函数。指向函数的指针变量的定义格式为:
类型标识符 (*指针变量名)();
在定义好指针后就可以给指针变量赋值,使其指向某个函数的开始存地址,然后用
(*指针变量名)()即可调用这个函数。如下例:
void main(void)
{
void (*DispBuffer)(); /*定义指向函数指针*/
DispBuffer=0xde00; /*赋值*/
for(;;)
{ Key();
DispBuffer();
}
}
三、将浮点数转化为字符数组
笔者在编制应用程序时有这样的要求:将运算的结果(浮点数)存入EEPROM中。我们知道,浮点数在C语言中是以IEEE格式存储的,一个浮点数占用四个字节,例如浮点数34.526存为(160,26,10,66)这四个数。要将一个浮点数存入EEPROM,实际上就是要存这四个数。那么如何在程序中得到一个浮点数的组成数呢?
浮点数在存储时,是存储连续的字节中的,只要设法找到存储位置,就可以得到这些数了。可以定义一个void的指针,将此指针指向需要存储的浮点数,然后将此指针强制转化为char型,这样,利用指针就可以得到组成该浮点数的各个字节的值了。具体程序如下:
#define uchar unsigned char#define uint unsigned intvoid FtoC(void)
{ float a;
uchar i,*px
uchar x[4]; /*定义字符数组,准备存储浮点数的四个字节*、
void *pf;
px=x; /*px指针指向数组x*/
pf=&a; /*void 型指针指向浮点数首地址*/
a=34.526;
for(i=0;i<4;i++)
{ *(px+i)=*((char *)pf+i); /*强制void 型指针转成char型,因为*/
} /*void型指针不能运算*/
}
如果已将数存入EEPROM,要将其取出合并,方法也是一样,可参考下面的程序。
#define uchar unsigned char#define uint unsigned int
void CtoF(void)
{ float a;
uchar i,*px
uchar x[4]={56,180,150,73};
void *pf;
px=x;
pf=&a;
for(i=0;i<4;i++)
{ *((char *)pf+i)=*(px+i);
}
}
以上所用C语言为FRANKLIN C51 VER 3.2。
C语言在单片机开发中的应用
相关推荐
51单片机C语言入门教程
51单片机C语言入门教程51 单片机C 语言学习杂记学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。在众多单片机中51
2009-09-24 09:00:12
51单片机C语言入门教程
51单片机C语言入门教程使用 C 语言肯定要使用到C 编译器,以便把写好的C 程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一
2009-11-27 08:50:37
51单片机C语言入门教程
51单片机C语言入门教程学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。在众多单片机中51 架构的芯片风行很久,学习资料也
2009-02-10 20:21:46
51单片机C语言入门教程
学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。在众多单片机中 51 架构的芯片风行很久,学习资料也相对很多,是初学的较好
2023-09-28 08:01:28
51单片机c语言教程全集
。KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不一样公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用
2019-07-13 15:53:54
51单片机的C语言应用基础程序设计
51单片机的C语言应用基础程序设计汇编单片机的C语言应用程序设计1 C51数据类型及在51中的存储方式2 C51数据的存储类型与51存储结构3 51特殊功能寄存器(SFR)的C51定义4 51
2021-07-15 08:33:54
C语言在51单片机编程中的应用技巧
随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率。Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好
2021-07-14 07:18:37
C语言—单片机编程使用的高级语言
语言的优势更能得到发挥。使用C语言编程的单片机芯片执行速度的问题,配合英锐恩推出的开发工具仿真器,找出关键代码,进一步用人工优化,可以达到十分满意的程度。单片机编程采用C语言编程的优势:1.C语言
2018-10-20 16:38:57
C语言和汇编语言在开发单片机时各有哪些优缺点
01、C语言和汇编语言在开发单片机时各有哪些优缺点?C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。对于目前普遍
2022-02-11 06:54:28
C语言和汇编语言在开发单片机时各有哪些优缺点?
C语言和汇编语言在开发单片机时各有哪些优缺点?C或汇编语言可以用于单片机,C++能吗?搞单片机开发,一定要会C吗?8088和196芯片单片机教材,请问哪里可以找到?初学者到底是应该先学C还是汇编?
2021-10-19 07:51:02
C语言的结构体和共用体在单片机中的妙用是什么
【分享】C语言的结构体和共用体在单片机中的妙用C语言的结构体和共用体,往往在单片机应用开发中被忽视。如果能够用起来,不仅能够极大的提高单片机的运行效率,还可能解决一些看起来无法解决的问题。现在,给
2021-11-30 06:13:04
单片机C语言具有哪些功能
/*单片机C语言……在工程应有中,单片机语言和汇编语言使用广泛,特别是实时时钟系统,但它它们的可读性和可维护性不强,代码的可重用性也比较低。在单片机的开发应用中,逐渐引入了高级语言,C语言就是其中
2021-07-15 07:40:44
单片机C语言教程
和C语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。 下面结合8051介绍单片机C语言的优越性: ·无须懂得单片机的具体硬件
2012-12-19 10:13:36
单片机c语言
,汇编和C语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。本站提供的单片机c语言教程都是基于keilc51的。 下面结合
2014-02-13 14:26:18
单片机c语言入门
单片机c语言入门单片机c语言入门《新概念51单片机C语言教程:入门、提高、开发、拓展》从实际应用入手,以实验过程和实验现象为主导,循序渐进地讲述51单片机C语言编程方法以及51单片机的硬件结构和功能
2021-07-15 08:10:39
单片机c语言案例教程,单片机C语言案例教程 精选资料分享
语言案例教程》介绍以不使用汇编语言,不使用编程器和不使用仿真器的简约型开发手段,用Keil C51对51单片机进行系统编程的实用方法,从驱动一位数码管显示"8."的最简单的程序起步,用十多个案例作为铺垫,翔实地讲解了含时控功...
2021-07-19 06:07:14
单片机c语言经典教程(共16课,连载)
· [图文] 单片机c语言教程单片机c语言教程· [图文] 单片机c语言教程第十六章--C51指针的使用· 单片机c语言教程第十五章--C51数组的使用· 单片机c语言
2009-04-14 23:45:43
单片机中的C规则是什么
文章目录单片机中C语言的规则基本标点符号C语言关键字与五大语句32个关键字特殊关键字C51单片机预处理关键字单片机的常量(不可以被修改)单片机的变量构造类型:数组==**特别注意RAM和ROM区别
2022-01-24 07:21:03
单片机开发中应掌握的几个基本技巧
在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着.现归纳出单片机开发中应掌握的几个基本技巧. 1、如何减少程序中的bug.对于如何减少程序的bug,应该先考虑系统运行中
2017-03-25 10:10:53
单片机开发中应该掌握的四个基本技巧
在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着。现归纳出单片机开发中应掌握的几个基本技巧。1、如何减少程序中的bug。对于如何减少程序的bug,应该先考虑系统运行中应考
2018-08-06 17:54:38
单片机开发中的几个基本技巧
中的有序变化的参数。 2、如何提高C语言编程代码的效率。用C语言进行单片机程序设计是单片机开发与应用的必然趋势。如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。先试验一下每条C语言编译
2018-06-23 15:36:33
单片机开发中的几个基本技巧
、存储单元长度、堆叠深度。应用参数:这些应用参数常表现为一些单片机、功能单元的应用条件。过程参数:指系统运行中的有序变化的参数。贰如何提高C语言编程代码的效率:用C语言进行单片机程序设计是单片机开发
2016-09-26 23:20:44
单片机开发技巧小贴士
本帖最后由 dzdaw2013b 于 2013-6-4 14:02 编辑
在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着工程师。为帮助工程师解决单片机设计上
2013-05-18 15:33:34
单片机AT89C51与C语言简介
单片机AT89C51--2.单片机与C语言简介1. 单片机概述1.1 计算机的组成1.2 单片机的内部结构1.3 封装方式2. 开发板介绍3. C语言基础4. 电子电路基础1. 单片机概述1.1
2021-07-20 07:34:17
单片机为什么一直用C语言,不用其他编程语言
最适合单片机开发的编程语言实在太过晦涩难懂,并且每一种单片机的汇编指令有很大区别,所以想把一个程序从这种单片机移植到另一种单片机简直是痴心妄想,还不如重新写一遍程序。而C语言代码执行效率高,也比较精简,更便于移植......所以在现今的单片机编程语言中,C语言才会占据绝对主导地位
2020-05-19 14:23:07
单片机为什么一直用C语言,不用其他编程语言?
最适合单片机开发的编程语言实在太过晦涩难懂,并且每一种单片机的汇编指令有很大区别,所以想把一个程序从这种单片机移植到另一种单片机简直是痴心妄想,还不如重新写一遍程序。而C语言代码执行效率高,也比较精简,更便于移植......所以在现今的单片机编程语言中,C语言才会占据绝对主导地位
2020-06-30 10:30:41
单片机为什么要使用C语言
常用的标准函数库,以供用户直接使用; ·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发; ·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被
2020-12-25 09:43:21
单片机为什么要使用C语言
的标准函数库,以供用户直接使用; ·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发; ·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排
2020-12-10 09:23:57
单片机原理及c语言程序设计
0417、C语言程序设计及应用实例单片机的C语言应用程序设计 0413、单片机原理与应用及C51程序设计课件电子教案0414、《单片机原理与应用》(金龙国)电子教案0427、单片机典型模块设计实例0428、C语言趣味程序百例精解C语言程序设计及应用实例--2
2013-08-14 16:31:29
单片机的C 语言轻松入门
单片机的C 语言轻松入门单片机的C 语言轻松入门随着单片机开发技术的不断发展,目前已有越来越多的人从普遍使用汇编语言到逐渐使用高级语言开发,其中主要是以C 语言为主,市场上几种常见的单片机均有其C
2008-09-09 14:14:17
单片机的C语言程序设计与应用
资源的C51编程,在实际应用的51单片机系统中,很少是由以单块单片机独立构成的,经常需要对单片机的相关资源进行扩展,本章将介绍单片机的并行口、键盘、显示、A/D及D/A等扩展资源的C51编程。,41 并行...
2021-07-14 08:06:09
单片机的c语言应用程序设计
单片机C语言期末考试题..,单片机的c语言应用程序设计,单片机c语言编程,51单片机c语言程序100例,单片机c语言,单片机c语言编程思想,c语言开发单片机,c语言单片机程序,新概念51单片机c语言
2021-07-15 08:51:48
AVR单片机C语言开发入门指导
AVR单片机C语言开发入门指导,PDF文档,希望对大家有用 AVR单片机C语言开发入门指导.pdf 15.76 MB, 下载次数: 64
2018-07-03 09:32:38
PIC 单片机的C语言编程
PIC 单片机的C语言编程 用 C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在
2009-11-03 10:10:20
PIC单片机C语言学习教程
用 C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此 C 语言编程在单片机系统设计中已得到越来越广泛的运用。针对 PIC 单片机的软件开发,同样可以用 C 语言实现。
2012-08-04 16:19:05
PIC单片机C语言学习教程
用C语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护 升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C语言编程在单片机 系统设计中已得到越来越广泛的运用。针对
2011-10-26 12:12:15
PIC单片机C语言程序设计
文中,我们已在 MPLABIDE7.40集成开发环境中编辑 了pic07C源程序 (0~99秒脉冲发生器 )。对于PIC单片机来说 ,所有的C语言源程序,都要在进行编译并生成 目标码 .hex文件后,方能...
2021-07-15 08:56:00
PIC单片机的C语言编程
PIC单片机的C语言编程用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在单片机系统设计中已得到
2008-09-09 14:13:45
PIC单片机的C语言编程
,因此C语言编程在单片机系统设计中已得到越来越广泛的运用。针对PIC单片机的软件开发,同样可以用C语言实现。但在单片机上用C语言写程序和在PC机上写程序绝对不能简单等同。现在的PC机资源十分丰富,运算
2011-03-03 10:55:33
STC单片机C语言程序设计
STC单片机C语言程序设计 第11章 STC单片机C语言描述语句STC单片机C语言描述语句主讲输入输出语句在完整的计算机系统中,包含输入输出设备。典型的,在以PC机/笔记本为代表的计算机系统中,默认
2021-07-15 06:09:58
[原创]单片机的应用与开发技巧论文
运行中的有序变化的参数。 2、如何提高C语言编程代码的效率。用C语言进行单片机程序设计是单片机开发与应用的必然趋势。如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。先试验一下每条C
2010-03-22 11:26:58
[原创]使用单片机C语言的好处
使用; ·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发; ·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉; ·可方便地接受多种实用程序
2010-01-28 11:30:57
avr单片机C语言开发入门指导
avr单片机C语言开发入门指导本书介绍了ICCAVR编译器使用C语言的有关知识,也穿插介绍ICCAVR与常用的其他C编译器使用C语言的一些异同点,并简单介绍ICCAVR的集成环境和ICCAGVR
2010-03-19 21:24:53
【单片机开发300问】单片机开发一定要会C语言吗?
等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中
2011-11-16 16:45:23
【单片机开发300问】开发单片机时C语言和汇编语言哪个更好
,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。
2011-11-16 11:59:31
【跟我学单片机C语言】单片机C语言学习开篇寄语—导航贴
本帖最后由 eehome 于 2013-1-5 10:03 编辑
单片机c语言是高效的单片机开发语言电子发烧友论坛为了方便大家学习制作了一个单片机c语言教程,如果你是新手先看下下面的c51介绍
2011-11-29 10:54:12
为什么单片机C语言和我当初学的C语言有差异呢?
普通C语言增加了一些基本的指令,变量的赋值是16进制,当然单片机c语言只牵涉到普通c语言的基础部分。具体体现在:1、单片机中C的语法一般都对 ANSI C有些扩展,及一些特殊写法 如C51扩展的 data xdata bit ***it 一类的,还有一些中断程序写法 void int() int
2021-11-30 06:20:58
使用C语言编写单片机的程序
上次说到了使用C语言编写单片机的程序,既然使用编程语言,就需要有软件把程序语言翻译成机器能懂的机器码,把机器码下载进单片机,单片机才能运行。在这里,我们隆重推荐Keil uVision2,它支持众多
2021-07-14 08:24:05
使用C语言进行单片机的开发
前言:单片机的开发也是可以使用C语言的,但是需要使用keil软件将C语言生成的单片机可以直接执行的hex文件软件安装:51的开发程序可以在 进行下载双击运行安装包,进行安装安装好keil之后需要进行
2021-11-19 08:13:19
如何学好单片机中的c语言
我刚从学校出来实习,本身是学单片机的,但是面试的时候,看我不会C,都把我DOWN掉了,所以准备痛下决心学好C,但是我看了谭浩强老师的C语言的书,觉得太笼统了(相对于单片机来说),没有针对性,里面主要
2012-12-05 01:13:43
用C语言来开发单片机系统软件最大的好处是什么
1.为什么也是C语言?用C语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高等,因此C 语言编程在单片机系统设计中越来越广泛的运用。PIC 单片机
2021-07-15 09:17:01
讲解位操作在单片机开发中的一些实用技巧
导读C 语言是单片机开发中的必备基础知识。我们这里就列举部分STM32学习中会遇见的C 语言基础知识点1.位操作下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持如下6中位操作:(图1
2022-01-24 08:18:13
单片机方案开发注意事项及如何挑选PIC单片机进行学习
要对PIC单片机进行编程,你需要了解特定的开发工具的基本构件,例如配置寄存器,总线和存储器类型。理解C编程语言、汇编语言等单片机开发语言等。此外,选择正确的软件开发工具集还可以使升级更加容易和快捷。
2020-06-29 09:59:17892
SDCC编译器和FreeRTOS在C8051F上的开发应用
SDCC编译器和FreeRTOS在C8051F上的开发应用(肇庆理士电源技术有限公司怎么样)-引言MCS-51系列单片机应用广泛,在我国学习研究的人较多。使用C语言在单片机上开发程序可提高开发效率
2021-09-17 12:53:518
单片机如何使用?51单片机C语言编程实例有哪些?
对单片机编程不同的程序,从而实现不同的功能。一、如何使用单片机?首先我们需要掌握单片机的编程语言,目前大多数的单片机都支持C语言编程 ,个别低端单片机还需要汇编语言。所以单片机开发,我们C语言编程基础就可以满足
2021-11-23 10:21:0917
单片机怎么写入程序并烧录程序?快收藏
同的编程语言,有的是C++,有的是汇编语言。可以参考单片机的开发手册或技术手册。写好程序后,就可以进行下一步了。 程序编写完成后,还需要通过深圳单片机仿真器进行测试。当然,这一步不是必须的。最主要的是测试功能是否正常
2023-05-24 18:03:063851
评论
查看更多