单片机的应用越来越广泛,种类也越来越多。由于嵌入式C语言可读性强、移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言编程。但C语言的可移植性仅限于与硬件无关的子程序,而与具体硬件有关的子程序则无法移植。在单片机应用中,位操作(特别是对引脚的位操作)非常普遍,如EEPROM数据和IC卡数据的读写、字段式LCD显示等,很多带串目的集成电路都需要单片机用软件来做I/O口读写程序。如何让这些子程序既有很好的通用性,生成代码的效率又高,是很多软件工程师都在考虑的问题。这里介绍两种C语言位操作的移植方法。

1 用逻辑运算实现位操作

请看下面这个子程序:

这是通过单片机引脚从88SC102卡中读一个字节的子程序。程序采用μC/OS-II中的书写风格,即变量和函数采用“驼峰”写法,由define定义的常量和内联函数采用全部大写加下划线的写法。

此程序驱动一个引脚输出CARD_CLK高低信号,从另一个引脚一位一位读取CARD_SDA数据。

1.1 用于MSP430系列单片机

此程序应用到MSP430单片机上(本文用的是MSP430F413单片机),头文件中要有如下定义:

汇编结果如下:

这与手工汇编编程的结果几乎一样。代码效率很高。

1.2 用于51系列单片机

在51系列单片机中应用此程序,头文件要加入以下定义:

由汇编结果可知,对位的直接清零和置位已达到最简,只是读位值不够理想。

1.3 用于196/296系列单片机

在 80C196MC、 80C296SA等单片机中,片上I/O口是可以窗口映射到低端地址的。采用这种方式,I/O口可以直接寻址,因而程序代码最短,执行速度也最快,但这样做C程序就无法移植了。若不用窗口技术,则片上I/O口是内存地址映射的,与普通内存地址一样操作。头文件中加入如下定义,即可利用原来的程序:

汇编后的代码是56字节,代码效率也很高。

采用逻辑运算实现位操作,C程序简单明了,移植性好,可读性更好。但96系列单片机无法利用JBC和JBS位操作指令,51系列单片机也无法利用JB和JNB等其特有的位操作指令来提高代码效率。用位段结构实现位操作可以弥补这个不足。

嵌入式c语言移植,嵌入式C语言位操作的移植方法相关推荐

  1. 嵌入式c语言移植,嵌入式c语言位操作的移植与优化.doc

    嵌入式C语言位操作的移植与优化 导语:?由于嵌入式C语言可读性强.移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言编程. 引言 单片机的应用越来越广泛, ...

  2. C语言到嵌入式Linux开发项目指导

    C语言到嵌入式Linux开发项目指导 第一阶段C语言 1.常量与变量,数据类型,数据类型转换,数据输入与输出: 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级: 3.C语言流程控制,分支, ...

  3. C语言在嵌入式系统编程时的注意事项

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  4. 使用Keil语言的嵌入式C编程教程(下)

    使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...

  5. 使用Keil语言的嵌入式C编程教程(上)

    使用Keil语言的嵌入式C编程教程(上) Embedded C Programming Tutorial with Keil Language Embedded System 嵌入式系统是指以单片机为 ...

  6. keil窗口显示不全_使用Keil语言的嵌入式C编程教程(下)

    使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...

  7. 学习纯软件开发(如Java/Python...)还是C语言、嵌入式、物联网呢?

    我国科技的迅速发展带动了计算机行业的兴盛发展,越来越多的学生,在职人士以及想要提升自己的人群都想学习这一行,给自己的美好未来打好物质基础,有得人想要学习纯软件开发比如Java/Python...,有的 ...

  8. 工欲善其事必先利其器-C语言拓展–嵌入式C语言(一)

    工欲善其事必先利其器-C语言拓展–嵌入式C语言(一) 我是golang出生,当时做项目的时候java.c++.js.python都折腾过,但是关于c语言的接触,基本上都停留在大一的那个暑假.后来因为要 ...

  9. # 工欲善其事必先利其器-C语言拓展--嵌入式C语言(八)

    工欲善其事必先利其器-C语言拓展–嵌入式C语言(八) 继续来看看新的属性:weak 这个符号知道是弱,但是这个是干嘛的呢?我们先来学习一下强符号和弱符号 文章内容全部来自–><嵌入式C语言 ...

最新文章

  1. WebView通过loadDataWithBaseURL加载本地页面卡死
  2. iPhone 6c配置和5s相近 4寸屏基本确定
  3. goland 报错 Main file has non-main package or doesn’t contain main function
  4. flask框架----蓝图
  5. android 使用wps打开的xls没有刷新_Excel文件打开都变成了WPS,如何改回微软Excel
  6. 改善深层神经网络:超参数调整、正则化以及优化 —— 3.1调试处理
  7. 关于银行等带有安全控件插件的输入selenium无法sendkeys的解决方案
  8. Tcpdump的详细用法
  9. 可视化,别把简单内容复杂化
  10. WampServer 常见问题
  11. 如何使用XGBoost开发随机森林集成
  12. 2019年最新面试题集绵
  13. Google扩展程序地址
  14. 什么是 HTTP cookie?
  15. js实现纯前端截屏(可以对iframe的内容进行截取)
  16. 计算机的英文原词“computer”
  17. 计蒜课中沙子的质量(动态规划)感想
  18. T flip-flop
  19. 计算机屏幕怎么拆,aoc显示器怎么拆解?拿掉器的拆解方法!
  20. c语言里取余数的运算的代码,Math——取模运算及取余运算(示例代码)

热门文章

  1. 【BZOJ2751】【codevs1853】容易题,快速幂+逆元
  2. python支持complex吗_Python中complex函数有什么用?
  3. 2017.3.5 yveh测试
  4. STL 合集(不断补充)
  5. laravel mysql 视图_视图入门:Laravel 支持的视图格式以及在路由中的基本使用
  6. Intel Core Enhanced Core架构/微架构/流水线 (12) - 数据预取
  7. 微服务跨数据库联合查询_数据库跨库查询
  8. ubuntu窗口最小化消失,任务栏上无法找到的解决方法
  9. 如何写出一个较好的快速排序程序
  10. 项目助理这个工作怎么样_影楼化妆师这个工作怎么样?