当前位置:首页 >> 技术频道 >> 嵌入式开发

嵌入式C语言位操作的移植与优化

来源:单片机与嵌入式系统应用 作者:佚名 发布时间:2009-06-24 09:27:38 发表评论

摘要:单片机的应用越来越广泛,种类也越来越多。由于嵌入式C语言可读性强、移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度

关键词:嵌入式

  2.3 在MSP430系列单片机中的应用

  MSP430系列单片机没有位操作指令,所以不必定义位段结构,直接把ACC定义成一个无符号8位数即可。头文件中是这样定义的:

  #ifndef C51_ASM//此句使头文件也可以与C51的共用

  typedef INT8U bdata ;

  #define ACC ACCImg

  #define GET_CARD_SDA() if(P6IN & 0x01) ACC |=0x01;

  #endif

  汇编的结果与用逻辑运算的方法进行位操作竟完全一样。

  结语

  对引脚的位操作有3种: 直接置位或清零,从端口输入数据和从端口输出数据。前两种上文已介绍过了。从端口输出数据的C程序如下:

  do{

  OUT_SIO_DA();

  CLK_H();

  ACC <<= 1;//移位可扩展时钟脉冲宽度

  CLK_L();

  }while

  其中: 第一句OUT_SIO_DA(),51系列可定义成位操作SIO_SDA = ACC_7;196/296和430系列可如上文定义成一个if语句。

  位段操作程序中采用了ACC这个名字作为一个局部变量。在C51中这刚好是主累加器,对于2401、IC卡等半双工器件的程序很实用,但当SPI总线输入/输出同时操作时,就没这么方便了。

  用逻辑运算实现位操作不存在任何移植的障碍。μC/OS-II中的位操作就是全用逻辑运算实现的。位段定义可能存在不同编译器分配顺序不同的问题,但考虑到32位高速CPU不会用软件模拟这种串口的操作,这样的程序只会用在51、196/296、MSP430等无片内Cache的中低速单片机中,所以用位段操作引脚的方法仍有意义。具体是使用逻辑运算还是使用位段进行位操作,完全看个人喜好。本文程序采用的编译器是Keil C51 V7.03、IAR C430 V2.10A和 Tasking C96 V5.0。

0
顶一下
0
踩一下

相关文章

发表评论

请自觉遵守互联网相关政策法规,作者管理后台可以删除恶意评论、广告和违禁词语。