4329|0

6587

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

初学者先了解一下MSP430的 位操作 [复制链接]

以前很多做51 的朋友,又开始为自己寻找新的猎物了,MSP430 无疑成为他们的首选目标。因此,大多数程序员想轻松地实现过渡,那就是,把以前做的51C 程序尽可能多的移植到430平台中,很不幸,由于处理器架构不同,直接做这些工作起来确实相当困难。首先是位操作问题,51 程序中充彻着大量的位操作,因此,不得不采用变通的方法来做,以下描述了在IAR 编译平台中实现位操作的大致方法,但必须注意到,采用IO 头文件方式的程序,能够实现类似于51 的位编程语句,但并不是真正的位操作,仅仅是语法表达为一个位操作。

方法1--宏定义方式
我们来看对一个端口中位0(BIT0)的位操作程序是如何实现的,因此,假定P1.0 是输出,P1.1 是输入。
定义位操作宏如下:
#define P1BIT0_OUT_HIGH P1OUT |=BIT0
#define P1BIT0_OUT_LOW P1OUT &=~BIT0
#define P1BIT1_IN P1IN &=BIT1
注:BIT0,BIT1 定义在相应430 器件的头文件中使用位操作
......
P1BIT0_OUT_HIGH; //输出P1.0 为高
if(P1BIT_IN) P1BIT0_OUT_LOW; //如果P1.1 输入高,则输出P1.0 低
......
从某种程度上,这种编程方法具备高级语言的编程特点,具有很好的可读性,可移植性也不错,也是目前用的比较多的方法。但是缺点,是不能把宏定义统一起来,每个宏需要程序员自己定义,由此,在多项目管理中,对代码的移植性带来了一些问题。同时,也存在着一些潜在的问题,例如,无意的错误定义等。这给程序调试多多少少带来一些负面影响。

方法2--使用IO 头文件方式
IAR 除了提供目前我们经常使用的mspx43xxx.h 头文件外,其实,也定义了可以进行位操作的寄存器结构定义。还是以P1 口的BIT0,BIT1 为例。这个头文件就是io 头文件,根据不同的器件,命名为io430xxx.h,在这些头文件中,将每个寄存器封装到一个联合结构中,因此,我们既可以象方法1 一样,通过自己定义宏,实现自己的位操作,也可以像51 一样,进行位操作。使用方法如下:
......
P1OUT_bit.POUT_0=1; //输出P1.0 为高
if(P1IN_bit.PIN_1) P1OUT_bit.POUT_0=0; //如果P1.1 输入高,则输出P1.0 低
......
IO 方法,表述方法没有方法1 好。但是比较直接,当然,为了更好的可读性,可以再次重新定义宏。如下:
#define P1BIT0_OUT_HIGH P1OUT_bit.POUT_0=1
#define P1BIT0_OUT_LOW P1OUT_bit.POUT_0=0
#define P1BIT1_IN P1IN_bit.PIN_1
如此定义后,可直接使用方法1 编制的源代码,唯一的,需要修改方法1 所定义的宏了。

总结
      两种方法产生的汇编代码,是相同的,仅仅是对同一个对象的不同表述而已。建议用户采用io 定义方法,因为,io 定义几乎包含了mspx430xxx.h 的所有定义,一般而言,可以直接替换。此外,用这两种编程时,建议中断和低功耗采用如下函数,他们包括在头文件intrinsics.h 中。

中断:
__disable_interrupt();
__enable_interrupt();

SR 寄存器:
__bis_SR_register(设置参数);
__bic_SR_register(设置参数);

功耗模式:
__low_power_mode_0();
__low_power_mode_1();
__low_power_mode_2();
__low_power_mode_3();
__low_power_mode_4();
__low_power_mode_off_on_exit();

 
点赞 关注(1)

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表