新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MSP430單片機(jī)IO面面觀

        MSP430單片機(jī)IO面面觀

        作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
        一、MSP430單片機(jī)的端口概述

        P1~P6每組有8個I/O 口,P3、P4、P5、P6具有I/O及其它片內(nèi)外設(shè)功能,每組具有4個寄存器。P1、P2除具有上述功能外還具有中斷能力,每組具有7個寄存器。

        本文引用地址:http://www.104case.com/article/201611/316954.htm

        二、Px端口

        1. P1、P2端口

        (1)PxDIR 輸入/輸出方向寄存器(x代表1,2)

        相互獨立的八位分別定義了Px7~Px0,8個引腳的輸入輸出方向。

        0 輸入模式,只能讀。

        1 輸出模式,可讀可寫。

        8位在PUC后都被復(fù)位及置為0。

        Eg:P1DIR = 0x0F;

        這里,0x0F為16進(jìn)制表示,對應(yīng)的二進(jìn)制為0000 1111,即將P1DIR的高4位置0,低4位置1,也就是將P1.7、P1.6、P1.5、P1.4(P1的高4位)設(shè)置為輸入模式;將P1.3、P1.2、P1.1、P1.0(P1的低4位)設(shè)置為輸出模式。

        (2)PxIN 輸入寄存器

        每一位對應(yīng)一個輸入端口,如:第2位對應(yīng)Px.2,記錄著對應(yīng)位輸入的數(shù)據(jù),0還是1。輸入寄存器是只讀寄存器,用戶不能對它寫入,只能從中讀數(shù)據(jù)。

        eg:

        char a;

        a = P1IN;

        將P1輸入的數(shù)據(jù)賦給a,也可以讀取其中的一位或若干位。

        eg: if((P1IN&0x01) == 1) a = b;

        這句話的意思是如果P1IN得最低位為1,即P1.0輸入的是1,就將b賦給a;其中’&’意思是按位求與運算,即將P1IN中的8位數(shù)據(jù)和0x01按位求與運算。

        (3)PxOUT輸出寄存器

        該寄存器為I/O端口的輸出緩沖寄存器,每一位對應(yīng)一個輸出端口,如:第2位對應(yīng)Px.2。用戶向?qū)?yīng)位寫入數(shù)據(jù),則對應(yīng)的端口就會輸出對應(yīng)的數(shù)據(jù)。

        eg:

        P1OUT = 0x01;

        將P1OUT的最低位置1,其它位置0,即P1.7、P1.6、P1.5、P1.4、P1.3、P1.2、P1.1輸出0, P1.0輸出1;

        P1OUT = BIT0;

        通過查閱MSP430單片機(jī)的頭文件我們可以知道BIT0就是0x01,說以這句話和上一句是等價的,之所以這樣寫,是為了使程序更易懂,更簡潔。

        (4)PxIFG中斷標(biāo)志寄存器

        0 表示沒有中斷請求

        1 表示有中斷請求

        中斷標(biāo)志PxIFG.0~ PxIFG.7共用一個中斷向量,屬于多源中斷。當(dāng)對應(yīng)的I/O口有上升沿或下降沿出現(xiàn)時,對應(yīng)的標(biāo)志位會置位,如果中斷允許而且系統(tǒng)總中斷允許,則產(chǎn)生中斷,并執(zhí)行中斷處理程序。

        注意:1. PxIFG.0~ PxIFG.7被置位后,不會自動復(fù)位。必須用軟件判定哪一個I/O有中斷事件產(chǎn)生,并將相應(yīng)的標(biāo)志位復(fù)位。

        2.外部中斷事件的事件必須保持不低于1.5倍的MCLK 時間,以保證中斷請求被接受,且使相應(yīng)的中斷標(biāo)志置位。

        (5)PxIE中斷使能寄存器

        0 禁止中斷

        1 允許中斷

        只有跳變才能引起中斷請求,而靜電平不能。

        (6)PxIES中斷觸發(fā)沿選擇寄存器

        0 上升沿使相應(yīng)標(biāo)志位置位

        1 下降沿使相應(yīng)標(biāo)志位置位

        (7)PxSEL功能選擇寄存器

        0 選擇引腳為I/O功能

        1 選擇引腳為外圍模塊功能

        單片機(jī)內(nèi)還有豐富的外圍模塊,這些模塊通常也需要和外界進(jìn)行通信,但是單片機(jī)的引腳有限,故采用P1和P2引腳復(fù)用的方法來實現(xiàn)。

        eg:

        P5SEL |= 0x10; // P5.4 用作MCLK輸出

        2. 端口P3、P4、P5、P6

        (1)端口P3、P4、P5、P6除沒有中斷能力外,其余功能和P1、P2相同,包括輸入輸出功能和外圍模塊功能。

        (2)由于端口P3、P4、P5、P6沒有中斷能力,所以它們沒有和中斷相關(guān)的寄存器,每組端口有4個寄存器分別為:PxDIR 輸入/輸出方向寄存器,PxIN 輸入寄存器,PxOUT輸入寄存器,PxSEL功能選擇寄存器。

        三、端口COM和S

        用來實現(xiàn)與液晶的直接接口,只有MSP430F4XX系列的單片機(jī)才有。

        —————————————————————————————————————————

        #include "msp430x26x.h"

        void main( void )

        {

        // Stop watchdog timer to prevent time out reset

        WDTCTL = WDTPW + WDTHOLD; //停止看門狗,WDTPW是看門狗寫口令,WDTHOLD是看門狗停止位。

        P1DIR = 0x0f; //PxDIR方向寄存器,0為輸入模式,1為輸出模式。

        //在PUC全部復(fù)位后。作為輸入時,只能讀;作為輸出時,可讀可寫。

        P1OUT = 0xff;

        P1IE |= 0xf0; // P1.4、5、6、7中斷使能(0禁止中斷,1允許中斷)

        P1IES |= 0xf0; // P1.4、5、6 IO口邊沿中斷觸發(fā)模式,下邊沿有效(0上升沿有效,1下降沿有效)

        P1IFG &= 0x00; // P1.4、5、6 清IO中斷標(biāo)志位

        P2DIR |= BIT3+BIT4;

        P2OUT = 0xff;

        P2IE |= BIT0+BIT1;

        P2IES |= 0x00;

        P2IFG &= 0x00;

        _EINT(); //開總中斷允許

        LPM4; //(LOW POWER MODE)進(jìn)入低功耗模式4,此時單片機(jī)功耗最低

        }

        //***************************************************************

        //P1口中斷服務(wù)程序

        #pragma vector=PORT1_VECTOR

        __interrupt void p1int(void)

        {

        if((P1IFG&0xf0)==0x10) P1OUT=0xf1;

        else if((P1IFG&0xf0)==0x20) P1OUT=0xf2;

        else if((P1IFG&0xf0)==0x40) P1OUT=0xf4;

        else if((P1IFG&0xf0)==0x80) P1OUT=0xf8;

        P1IFG &= 0x00;

        }

        #pragma vector=PORT2_VECTOR

        __interrupt void p2_port(void)

        {

        if((P2IFG&0x0f)==0x01) P2OUT=0x04;

        else if((P2IFG&0x0f)==0x02) P2OUT=0x08;

        P2IFG &= 0x00;

        }



        關(guān)鍵詞: MSP430單片機(jī)I

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 黄浦区| 乾安县| 鲁山县| 开平市| 云和县| 兰坪| 章丘市| 昆明市| 秦皇岛市| 东平县| 兴安盟| 星子县| 砚山县| 奉节县| 贵州省| 苏尼特右旗| 逊克县| 麦盖提县| 西和县| 延川县| 乳山市| 绥化市| 同仁县| 沁阳市| 桐乡市| 两当县| 报价| 屏东市| 南充市| 临沂市| 澄城县| 福建省| 滦平县| 上饶市| 甘孜| 宣化县| 德保县| 巴楚县| 乡宁县| 寿光市| 胶州市|