您的位置 首页 硬件

MSP430 位操作C言语编程

前言随着MCU种类不断的增多,我们可选择的范围也越来越大,以前很多做51的朋友,又开始为自己寻找新的猎物了,MSP430无疑成为他…

前语
跟着MCU 品种不断的增多,咱们可选择的规模也越来越大,曾经很多做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();

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/273100.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部