在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430 位操作C語(yǔ)言編程

            MSP430 位操作C語(yǔ)言編程

            作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
            前言
            隨著MCU 種類(lèi)不斷的增多,我們可選擇的范圍也越來(lái)越大,以前很多做51 的朋友,又開(kāi)始為自己尋找新的獵物了,MSP430 無(wú)疑成為他們的首選目標(biāo)。因此,大多數(shù)程序員想輕松地實(shí)現(xiàn)過(guò)渡,那就是,把以前做的51C 程序盡可能多的移植到430平臺(tái)中,很不幸,由于處理器架構(gòu)不同,直接做這些工作起來(lái)確實(shí)相當(dāng)困難。首先是位操作問(wèn)題,51 程序中充徹著大量的位操作,因此,不得不采用變通的方法來(lái)做,以下描述了在IAR 編譯平臺(tái)中實(shí)現(xiàn)位操作的大致方法,但必須注意到,采用IO 頭文件方式的程序,能夠?qū)崿F(xiàn)類(lèi)似于51 的位編程語(yǔ)句,但并不是真正的位操作,僅僅是語(yǔ)法表達(dá)為一個(gè)位操作。

            方法1--宏定義方式
            我們來(lái)看對(duì)一個(gè)端口中位0(BIT0)的位操作程序是如何實(shí)現(xiàn)的,因此,假定P1.0 是輸出,P1.1 是輸入。
            定義位操作宏如下:
            #define P1BIT0_OUT_HIGH P1OUT |=BIT0
            #define P1BIT0_OUT_LOW P1OUT &=~BIT0
            #define P1BIT1_IN P1IN &=BIT1
            注:BIT0,BIT1 定義在相應(yīng)430 器件的頭文件中使用位操作
            ......
            P1BIT0_OUT_HIGH; //輸出P1.0 為高
            if(P1BIT_IN) P1BIT0_OUT_LOW; //如果P1.1 輸入高,則輸出P1.0 低
            ......
            從某種程度上,這種編程方法具備高級(jí)語(yǔ)言的編程特點(diǎn),具有很好的可讀性,可移植性也不錯(cuò),也是目前用的比較多的方法。但是缺點(diǎn),是不能把宏定義統(tǒng)一起來(lái),每個(gè)宏需要程序員自己定義,由此,在多項(xiàng)目管理中,對(duì)代碼的移植性帶來(lái)了一些問(wèn)題。同時(shí),也存在著一些潛在的問(wèn)題,例如,無(wú)意的錯(cuò)誤定義等。這給程序調(diào)試多多少少帶來(lái)一些負(fù)面影響。

            方法2--使用IO 頭文件方式
            IAR 除了提供目前我們經(jīng)常使用的mspx43xxx.h 頭文件外,其實(shí),也定義了可以進(jìn)行位操作的寄存器結(jié)構(gòu)定義。還是以P1 口的BIT0,BIT1 為例。這個(gè)頭文件就是io 頭文件,根據(jù)不同的器件,命名為io430xxx.h,在這些頭文件中,將每個(gè)寄存器封裝到一個(gè)聯(lián)合結(jié)構(gòu)中,因此,我們既可以象方法1 一樣,通過(guò)自己定義宏,實(shí)現(xiàn)自己的位操作,也可以像51 一樣,進(jìn)行位操作。使用方法如下:
            ......
            P1OUT_bit.POUT_0=1; //輸出P1.0 為高
            if(P1IN_bit.PIN_1) P1OUT_bit.POUT_0=0; //如果P1.1 輸入高,則輸出P1.0 低
            ......
            IO 方法,表述方法沒(méi)有方法1 好。但是比較直接,當(dāng)然,為了更好的可讀性,可以再次重新定義宏。如下:
            #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 所定義的宏了。

            總結(jié)
            兩種方法產(chǎn)生的匯編代碼,是相同的,僅僅是對(duì)同一個(gè)對(duì)象的不同表述而已。建議用戶(hù)采用io 定義方法,因?yàn)?,io 定義幾乎包含了mspx430xxx.h 的所有定義,一般而言,可以直接替換。此外,用這兩種編程時(shí),建議中斷和低功耗采用如下函數(shù),他們包括在頭文件intrinsics.h 中。

            中斷:
            __disable_interrupt();
            __enable_interrupt();

            SR 寄存器:
            __bis_SR_register(設(shè)置參數(shù));
            __bic_SR_register(設(shè)置參數(shù));

            功耗模式:
            __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();


            關(guān)鍵詞: MSP430位操作C語(yǔ)言編

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉