新聞中心

        MSP430--通用IO端口

        作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
        IO端口是單片機(jī)最常用的外設(shè)模塊,由于單片機(jī)的總線不對外開放,所以單片機(jī)和外部進(jìn)行信息交流的橋梁就是數(shù)字IO端口。

        目前,MSP430系列單片機(jī)當(dāng)中有端口P1,P2,P3,P4,P5,P6等端口,其中P1,P2的每一位都有中斷功能,但不是獨(dú)立的,P1口每位共用PORT1_VECTOR中斷向量,P2共用PORT2_VECTOR向量。

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

        P1--P6端口大多數(shù)是復(fù)用的,具有第二功能可以通過PxSEL選擇是普通IO口或者第二功能。

        1.端口的寄存器:

        (1)P1-P2端口具有中斷能力,共7個寄存器


        PxIN輸入寄存器,只讀寄存器,即只能讀取輸入端口x的數(shù)據(jù);

        PxOUT輸出寄存器,可讀可寫,即可以向輸出端口寫8位數(shù)據(jù)輸出,同時也可以讀取數(shù)據(jù);

        PxDIR方向位寄存器,當(dāng)PxSEL選擇普通IO口時,PxDIR決定是輸出還是輸入,0輸入,1輸出;

        PxSEL功能選擇寄存器,選擇普通功能或者復(fù)用功能;0普通IO口,1復(fù)用功能;

        PxIE中斷使能寄存器,1使能相應(yīng)位的中斷,0不使能;注意:在中斷當(dāng)中要手動清除中斷標(biāo)志位。

        PxIFG中斷標(biāo)志寄存器,1相應(yīng)中斷標(biāo)志位有效,0無效;

        PxIES中斷觸發(fā)沿選擇寄存器,0上升沿,1下降沿相應(yīng)中斷標(biāo)志位置位
        (2)P3--P6無中斷能力,共4個寄存器


        PxIN輸入寄存器,只讀寄存器,即只能讀取輸入端口x的數(shù)據(jù);

        PxOUT輸出寄存器,可讀可寫,即可以向輸出端口寫8位數(shù)據(jù)輸出,同時也可以讀取數(shù)據(jù);

        PxDIR方向位寄存器,當(dāng)PxSEL選擇普通IO口時,PxDIR決定是輸出還是輸入,0輸入,1輸出;

        PxSEL功能選擇寄存器,選擇普通功能或者復(fù)用功能;0普通IO口,1復(fù)用功能;

        2.例程:

        (1)//程序描述:P1,P2口具有中斷功能,通過設(shè)置寄存器,實(shí)現(xiàn)P1口外部中斷

        #include"msp430x14x.h"

        #define uchar unsigned char
        #define uint unsigned int

        uchar i;
        uint j;
        uchar seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
        //共陽數(shù)碼管字型碼數(shù)組

        void main()
        {
        WDTCTL=WDTPW+WDTHOLD;//
        P4DIR=0xff;
        //

        P1DIR&=~BIT0;//p1.0口設(shè)置為輸入
        P1IFG=0;//開中斷前清楚標(biāo)志位
        //P1IN=1;//!!!注意:PxIN寄存器只能讀不能寫
        P1IES&=~BIT0;//中斷源選擇.下降沿觸發(fā)
        P1IE|=BIT0;//中斷使能
        _EINT();//開總中斷
        }
        #pragma vector=PORT1_VECTOR
        __interrupt void p1()
        {
        i++;
        if(P1IFG&BIT0)
        for(j=0;j<2000;j++);
        P4OUT=seg[i];//點(diǎn)亮燈
        if(i>=9)
        i=0;
        P1IFG=0;
        return;
        }

        (2)IO端口中斷模塊中斷程序,以P1口為例

        void main()

        {

        p1.0口設(shè)置為輸入;
        清標(biāo)志位;

        中斷使能;

        中斷觸發(fā)沿選擇;

        開總中斷;

        }
        #pragma vector=PORT1_VECTOR//中斷函數(shù)
        __interrupt void p1()
        {

        if(P1IFG & BIT0)

        {

        功能代碼0;

        }

        if(P1IFG & BIT1)

        {

        功能代碼1;

        }

        .......

        if(P1IFG & BIT7)

        {

        功能代碼7;

        }

        P1IFG = 0;//!!!!!!!!!!!!!注意:必須清除中斷標(biāo)志位

        }



        關(guān)鍵詞: MSP430通用IO端

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 无锡市| 天峻县| 蒙城县| 鹤山市| 安福县| 五原县| 澄迈县| 泸西县| 伊金霍洛旗| 金乡县| 格尔木市| 武穴市| 枝江市| 闸北区| 灌南县| 凌海市| 乌苏市| 郁南县| 怀化市| 正阳县| 岳西县| 抚远县| 历史| 巴塘县| 新巴尔虎左旗| 渑池县| 龙胜| 吉安市| 柞水县| 津南区| 广昌县| 璧山县| 特克斯县| 巢湖市| 镇平县| 加查县| 观塘区| 山东| 尚义县| 怀来县| 永和县|