《单片机C语言编程应注意的若干问题》由会员分享,可在线阅读,更多相关《单片机C语言编程应注意的若干问题(4页珍藏版)》请在人人文库网上搜索。

1、单片机C语言编程应注意的若干问题摘 要: 本文较详细地分析了单片机C语言的特点,就单片机系统资源对C语言编程的制约,汇编与C语言混合编程等问题进行进行了讨论,并给出了相应的处理程序。关键词: 单片机;C语言;汇编语言;结构化设计;优化作为一种结构化的程序设计语言,C语言的特点就是可以使你尽量少地对硬件进行操作,具有很强的功能性、结构性和可移植性,常常被优选作为单片机系统的编程 语言。但是基于单片机的C语言和标准C语言有很大区别,如何结合单片机的系统资源,用C语言开发符合实际工程需要的单片机系统,对用编程者来说具有十分重 要的意义。1单片机C语言主要特点用C 编写程序比汇编更符合人们的思考习惯,。

2、开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时 间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块 化,由不同的模块完成不同的功能1,这样可使整个应用系统程序结构清晰,易于调试和维护。不同的功能模块,分别指定相应的入口参数和出口参数,对于一 些要重复调用的程序一般把其编成函数,这样可以减少程序代码的长度,又便于整个程序的管理,还可增强可读性和移植性。在实际单片机程序设计中,程序结构一般均采用如下结构:#include /*头文件说明部份*/un。

3、signed char x1,x2; /*全局变量声明部份*/Function1( ) /*功能函数定义部份*/main()inti,j; /*整型变量声明部份*/Function1(); /*功能函数说明部份*/2单片机C语言与标准C语言的区别由于现在越来越多的产品都采用单片机开发,所完成的计算和控制工作也日趋复杂,但是单片机系统是一种资源十分有限的系统,这主要表现在程序存储器资源的不 足,因此在程序设计时如何使用好这些有限的资源就显得十分重要。用C语言编程虽然具有许多的优点,但是生成的代码相对要长,要是编程技术不好,生成的代码 甚至有可能比汇编语言生成的代码长几倍,因此对编程者来说,应该注。

4、意到单片机C语言和一般意义上的标准C语言的区别,对程序进行适当的优化。2.1 数据类型的选用单片机C语言编程不同于一般的C语言编程的显著的一个特点,就是要和程序存储器资源结合起来,虽然其提供的数据据类型十分丰富,但是只有bit和char 等数据类型是是机器语言直接支持的数据类型,用此类数据类型的语句所生成的代码较短;而其它的数据类型如整型、浮点型等数据要有一定的内部程序或内部函数 的支持,相对来说用该类数据类型的语句生成的代码要长。有些C语言程序表面上看起来十分的简单,但在在实际编译时,生成的代码却相当长。因此我们要按照实 际需要,合理地选用数据,可以大大的减少所生成的代码长度。例如在C51中。

5、每种数据类型变量所占用存储器字节数和经编译后生成的代码长度如表1所示:表1 不同数据类型占用存储器字节数和代码长度对比通过表1我们知道,不同的数据类型所生成的机器代码长度相差很多,相同类型的数据类型有无符号对机器代码长度也有影响。在程序编译时生成机器代码长的数据 类型的优先级越高,不同的数据类型在进行程序运算时要转化为高优先级的的数据类型,相应的代码长度也会增长2。因此我们应尽可能地使用bit, char等机器语言直接支持的数据类型,无符号数的变量应声明为无符号数,尽可能地减少程序中使用的数据类型的种类。2.2 算法设计问题单片机C语言和标准C语言存在着很大差别,在计算机上进行C语言程序设计时。

6、由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C语 言程序设计就必须考虑系统的硬件资源。有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常 长。不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法 2。在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明 显。在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度。

7、又能减少大量的代码。比如:用逻辑AND/&取模 比MOD/%操作更有效。在用热敏电阻测量温度时,可根据热敏电阻温度特性公式来求值。数学表达式表示为:RT=RT0expB(1/T-1/T0)如果直接按照公式温度时程序结构简单,算法复杂度不高,但是程序将调用文件中的对数函数,在编译成机器码时函数有1K多字 节,对于一般只有几K字节的单片机系统来说,这是十分不合适的。考虑到系统资源问题可以用一种替代方法查表法来实现算法。只要给出一定温度范围内不同温 度值对应热敏电阻的电阻值,然后建立表格,只要按照系统求出的阻值,进行查表,插值,就可以求出相应的温度值。这种算法相比前面的的公式法的算法复杂高, C语言。

8、程序代码也长,但在编译成机器码时,代码长度却很短,只有一、二百字节。3 数据存储器的分配单片机内部数据存储器RAM只有几百字节,如果扩展外部存储器RAM来提高数据存储量话必将会增加了硬件成本,使系统更加的复杂,访问外部存储器比访问内部存储器所需的代码也要长得多。有效地使用片内存储器、提高存储器空间的利用率对开发者来说十分关键。内部处理器、内部堆栈、压缩栈、所有程序变量和所有包含进来的库函数都将使用数量有限的内部数据存储器RAM。因为C语言采用了存储器的覆盖技术2, 可以在程序进行连接时,它将那些已经被其它程序段释放了的存储器空间重新定义给另一个程序段的变量使用,当这个程序运行结束时再将这些存储。

9、器释放以供其它 程序段使用。全局变量的作用范围是整个程序,因此不能被释放;静态变量由于在函数的调用中专用不变,也不能被释放;只有局部变量中的动态变量可以被释放。因此在进行程序设计时应该尽量的使用局部变量,提高内部数据存储器的使用率。在C语言中程序中间结果及参数传传递是通过内部的寄存器来完成的,要是内部的 存储器不够,将会给你的程序带来许多莫名其妙的错误。例如在进行程序设计时语句不应该太长,一个长语句可以分成多个语句,这样的话可以大的减少中间变量, 当然太长时就会造成临时寄存器的不够用,导致计算出错。4单片机C语言与汇编语言的混合编程在绝大多数场合采用C语言编程即可完成预期的目的,但是对实时时钟。

10、系统、要求执行效率高的的系统就不适合采用C语言编程,对这些特殊情况进行编程时要结合 汇编语言。汇编语言具有直接和硬件打道、执行代码的效率高等特点,可以做到C语言所不能做到的一些事情,例如对时钟要求很严格时,使用汇编语言成了唯一的 选择。这种混合编程2的方法将C语言和汇编语言的优点结合起来,已经成为目前单片机开发最流行的编程方法。目前大多数据单片机系统,在C语言中使用汇编语言有两种情况:一种是汇编程序部分和C程序部分为不同的模块,或不同的文件,通常由C程序调用汇编程序模块的变量和函数(也可称为子程序或过程);另一种是嵌入式汇编,即在C语言程序中嵌入一段汇编语言程序。当汇编程序和C程序为不同模块时。

11、程序一般可分为若于个C程序模块和汇编程序模块,C程序模块通常是程序的主体框架,而汇编程序模块通常由用C语言实现效率 不高的函数组成,也可以是已经成熟的、没有必要再转化成C语言的汇编子程序。在这种混合编程技术中,关键是参数的传递和函数的返回值。它们必须有完整的约 定,否则数据的交换就可能出错。对于嵌入式汇编,可以在C程序中使用一些关键字嵌入下些汇编程序,这种方法主要用于实现数学运算或中断处理,以便生成精练的代码,减少运行时间。当汇编函数不大,且内部没有复杂的跳转时,可以用嵌入式汇编实现。下面就以AT89C2051单片机在模拟电压检测中的应用为例说明C语言程序与汇编语言程序的调用。电路图如图1所示。

12、:AT89C2051单片机内置模拟比较器,13脚即1.1是比较器的负输入端,12脚即1.0是比较器的正输入端,比较器的输出端做在了 内部即3.6未被引出,可以直接读取3.6状态来判定两输入端比较的结果其和一个外部电阻及一个外部电容器就可以设计成一个A/D转换器,采用 RC模拟转换的原理,来检测外部P1.1引脚的输入电压。由于系统对时钟要求很严格,因此就采用了C语言和汇编语言混合编程技术,程序调用形式如下:汇编子程序:PUBLIC _AD ;入口地址con SEGMENT CODE ;程序段RSEG con_AD: SETB P3.7 ;充电Loop: JB p3.6,AD_END ;开始计数匹。

13、配INC A CJNE A,#100,LoopAD_END: CLR P3.7 ;放电 CJNE A,#100,Ret_Val ;看结果是否有溢出,有溢出说明结果不对SJMP Con_OV;返回值 Ret_Val:DEC AMOV R7,A ;A/D转换的结果保存在R7中,传递给主程序Con_OV: RET END单片机C程序:includeunsigned char AD(unsigned char);/在C程序中声明汇编模数转换子程序void timer0(void) interrupt 1 using 1 unsigned char x; x=AD(); /在C程序中调用汇编程序Main /主程序在以上程序中,函数的返回值为一无符号字符型数,根据调用规则,返回值在R7中,这样才可保证数据的传递不出错。另外,在调用过程中,必须注意寄存器的入栈。这样在以后用到A/D转换时,在C语言中调用汇编语言子程序AD()即可。5结束语C语言具有很强的功能性和结构性,可以缩短单片机控制系统的开发周期,而且易于调试和维护,已经成为目前单片机语言中最流行的编程语言。。

c语言编程过程应注意什么意思,单片机C语言编程应注意的若干问题相关推荐

  1. c语言从入门到精通 当当,51单片机C语言编程从入门到精通

    本书立足于单片机的各类型应用技术,采用大量实例和程序逐行解说的方式,详细介绍51单片机和C语言编程开发与应用技术. 内容特点: 1 立足于单片机工程应用:由浅入深,结合丰富的开发实例,介绍51单片机C ...

  2. c51语言的设计步骤,第3章节单片机c51语言程序的设计基本.ppt

    第3章节单片机c51语言程序的设计基本 第3章 单片机C51语言程序设计基础 3.1 语句与流程控制 3.2 函数 3.3 本章小结 3.4 实训三 简易十字路口交通信号灯控制 教学提示 教学要求 3 ...

  3. 单片机c语言常用的语句有几条,单片机C语言常用语句详解

    <单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程中常见语句的总结.首先,C51定义 ...

  4. 单片机的c语言应用程序设计答案第六版,单片机C语言应用程序设计马忠梅课后习题答案...

    <单片机C语言应用程序设计马忠梅课后习题答案>由会员分享,可在线阅读,更多相关<单片机C语言应用程序设计马忠梅课后习题答案(4页珍藏版)>请在人人文库网上搜索. 1.第一章 1 ...

  5. atmega16单片机c语言程序设计经典实例pdf,《AVR单片机C语言程序设计实例精粹》.pdf...

    AutodeskAsiaPteLtd主编的<AutodeskRevitStructure2012应用宝典>是对AutodeskRevitStructure2012进行全面介绍的权威用书.全 ...

  6. 单片机交通灯灯c语言程序,关于LED模拟交通灯单片机C语言程序设计 - 全文

    本文为大家带来三个关于LED模拟交通灯单片机C语言程序设计. 关于LED模拟交通灯单片机C语言程序设计一 功能说明 东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南 ...

  7. c语言流水灯仿真程序设计框图,基于单片机c语言控制的流水灯程序设计及prtes仿真图.docx...

    基于单片机c语言控制的流水灯程序设计及prtes仿真图 89c51与8个发光二极管相连流水控制 一.不同花样的控制源程序代码: /*#include #define uchar unsigned ch ...

  8. 用c语言完成流水灯控制的程序设计,单片机C语言程序设计之TIMER0控制流水灯

    描述 基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的.通常在所需按键数量不多时,系统常采用独立式按键.这种按键的电路配置灵活,软件结构简单 ...

  9. 数码管动态显示c语言,《手把手教你学51单片机-C语言》之六 中断与数码管动态显示...

    中断是单片机系统重点中的重点,因为有了中断,单片机就具备了快速协调多模块工作的能力,可以完成复杂的任务.本章将首先带领大家学习一些必要的C语言基础知识,然后讲解数码管动态显示的原理,并最终借助于中断系 ...

最新文章

  1. 百度大脑开放日:24 种新 AI 能力 20 个经典案例 助力 AI 落地
  2. win32com python_python模块:win32com用法详解
  3. boost::hana::zip_with用法的测试程序
  4. CodeForces Round #403 (Div.2) A-F
  5. 【认证课程】NP理论复习之opsf(二)
  6. 我的世界服务器指令修改拔刀剑,我的世界拔刀剑Mod 合成刀方法作用
  7. C++之指针探究(十二):指针、下标、数组及其作函数参数
  8. 疫情严峻!有高校不放寒假,直接开始新学期!还有高校紧急放假,停止考试直接回家...
  9. 分簇路由算法 LEACH算法
  10. 4.计算机网络 -- 4.6 综合布线
  11. 前端加密js库--CryptoJs
  12. vivado 下载代码到flash
  13. mac 回车键、空格键失灵(非物理原因)解决方法
  14. C语言实现创建游戏角色(包含文件写入)
  15. Android 百度地图导航引擎初始化失败
  16. “顾客总是对的”,客户满意从在线客服系统开始
  17. [Jenkins]jenkins配置163邮箱做邮件发送
  18. windows查看本机的mac地址
  19. IOS13破解屏幕使用时间,无需电脑,不丢数据
  20. c++怎么取消换行或回到上一行

热门文章

  1. 普元EOS应用,更改管理端口
  2. 【Paddle打比赛】全球人工智能技术创新大赛-商品标题实体识别竞赛_副本
  3. C语言实验——求一个3*3矩阵对角线元素之和 (sdut oj)
  4. 密钥生成工具类:RSA2 256位 加解密工具类 RsaUtils
  5. navicat12破解版
  6. deepfashion(deepfashion安卓下载)
  7. 地下水位监测系统-地下水超采综合治理
  8. Mac电脑隔空投递如何添加到菜单栏?
  9. 【网络爬虫教学】一分钟带你快速寻找JS加密入口(二)
  10. 新的一年给自己定个小目标