位置:51电子网 » 技术资料 » 嵌入式系统

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

发布时间:2007/4/23 0:00:00 访问次数:497

80C196MC货源 PDF 芯片资料 报价 | 嵌入式C语言位操作的移植与优化
电子论坛
您现在的位置:下载
,285002K
80C196MC 的货源和报价
80C196MC 的相关技术信息
其他型号 北京欣宏伟业商贸中心联系人:李小姐
电话:010-82617818-809/13141430887
深圳市赛华达电子有限公司联系人:邓女士/刘小姐
电话:0755-8304765/83047653
一東先科電子發展有限公司联系人:陈
电话:0755-33082040/33083040
深圳市新亚洲新联兴电子销售部联系人:小陈
电话:0755-61306250
>>更多供应商

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

上海芯兆电子科技有限公司 王东征

引言

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

1 用逻辑运算实现位操作

请看下面这个子程序:

INT8U Card102RdByte(void) {
  INT8U Temp8U, n = 8;
  do{ Temp8U <<= 1;
    if( PIN_CARD_SDA_RD() ) Temp8U |= 0x01;
    PIN_CARD_CLK_H();PIN_CARD_CLK_L();
  }while(--n);
  return Temp8U;
}

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

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

1.1 用于MSP430系列单片机

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

typedefunsigned charINT8U;
#include<MSP430x41x.h>
#definePIN_CARD_SDA_RD()(P6IN & 0x01)
#definePIN_CARD_CLK_H()P6OUT |=0x04
#definePIN_CARD_CLK_L()P6OUT &= ~0x04

汇编结果如下:

  In segment CODE, align 2, keepwithnext
__code unsigned char Card102RdByte(void)
  Card102RdByte:
0000007E42MOV.B#0x8, R14
  ??Card102RdByte_0:
0000024C5CRLA.BR12
000004D2B33400BIT.B#0x1, &0x34
0000080128JNC??Card102RdByte_1
00000A5CD3BIS.B#0x1, R12
  ??Card1

80C196MC货源 PDF 芯片资料 报价 | 嵌入式C语言位操作的移植与优化
电子论坛
您现在的位置:下载
,285002K
80C196MC 的货源和报价
80C196MC 的相关技术信息
其他型号 北京欣宏伟业商贸中心联系人:李小姐
电话:010-82617818-809/13141430887
深圳市赛华达电子有限公司联系人:邓女士/刘小姐
电话:0755-8304765/83047653
一東先科電子發展有限公司联系人:陈
电话:0755-33082040/33083040
深圳市新亚洲新联兴电子销售部联系人:小陈
电话:0755-61306250
>>更多供应商

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

上海芯兆电子科技有限公司 王东征

引言

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

1 用逻辑运算实现位操作

请看下面这个子程序:

INT8U Card102RdByte(void) {
  INT8U Temp8U, n = 8;
  do{ Temp8U <<= 1;
    if( PIN_CARD_SDA_RD() ) Temp8U |= 0x01;
    PIN_CARD_CLK_H();PIN_CARD_CLK_L();
  }while(--n);
  return Temp8U;
}

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

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

1.1 用于MSP430系列单片机

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

typedefunsigned charINT8U;
#include<MSP430x41x.h>
#definePIN_CARD_SDA_RD()(P6IN & 0x01)
#definePIN_CARD_CLK_H()P6OUT |=0x04
#definePIN_CARD_CLK_L()P6OUT &= ~0x04

汇编结果如下:

  In segment CODE, align 2, keepwithnext
__code unsigned char Card102RdByte(void)
  Card102RdByte:
0000007E42MOV.B#0x8, R14
  ??Card102RdByte_0:
0000024C5CRLA.BR12
000004D2B33400BIT.B#0x1, &0x34
0000080128JNC??Card102RdByte_1
00000A5CD3BIS.B#0x1, R12
  ??Card1

相关IC型号

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!