天天看點

MSP430 IO口配置

本章介紹MSP430IO配置

前言:

IO作為單片機的重要組成部分是不可或缺的,也是必須要掌握的,掌握了IO就學會了單片機的基本使用

所有對于430單片機的操作需要緊随使用者開發手冊和指導手冊進行

使用者指導手冊

晶片管腳手冊

MSP430有多達6組IO口P1~P6,每組有8個IO口(相對于STM32F4/F7/F1系列來說比較少),每組IO口都可以單獨設定輸入輸出狀态,設定讀寫。

需要注意的是對于430F169這款晶片P1和P2是具有中斷的,可以選擇在輸入信号上升沿或者下降沿觸發中斷

MSP430 IO口配置

不過本章并不進行P1P2中斷的介紹

配置IO口功能需要設定PXIN,PXOUT,PXDIR,PXSEL寄存器

1 PXDIR寄存器

PXDIR寄存器用來設定IO口的輸出方向

當某一位為1時選擇輸出

當某一位為0時選擇輸入

MSP430 IO口配置

例:

P1DIR = 0X02;	//設定P1.1為輸出
或者
P1DIR |= BIT1;//設定P1.1為輸出
           

BIT0~BIT7在#include<msp430x16x.h>被宏定義,

分别對應每組IO的PX.0~PX.7(X=1/2/3/4/5/6)

2 PxOUT寄存器用來配置輸出高低電平

PxOUT寄存器用來設定IO口的輸出高低電平

當某一位為1時選擇輸出高電平

當某一位為0時選擇輸出低電平

MSP430 IO口配置

例:

P1OUT = 0X02;	//設定P1.1為輸出高電平
或者
P1OUT |= BIT1;//設定P1.1為輸出低電平
           

3 PxIN寄存器用來配置輸入高低電平

PxIN寄存器用來設定IO口的輸入高低電平

當某一位為1時選擇輸入高電平

當某一位為0時選擇輸入低電平

MSP430 IO口配置

例:

P1IN = 0X02;	//設定P1.1為輸入高電平
或者
P1IN |= BIT1;//設定P1.1為輸入低電平
           

4 PXSEL寄存器

PXSEL寄存器用來用來配置是否複用為外設

當某一位為1時複用為外設子產品

當某一位為0時為IO引腳

MSP430 IO口配置

例:

P1SEL = 0X02;	//設定P1.1為TA0外設
或者
P1SEL|= BIT1;//設定P1.1為TA0外設
           

每個引腳複用需要對應引腳功能圖

MSP430 IO口配置

5 PXIE中斷使能寄存器

PXIE中斷使能寄存器用來設定IO口是否發生中斷

隻有P1 P2兩組IO口具有中斷功能

這位置1開啟中斷

這位置0關閉中斷

MSP430 IO口配置

例:

P1IE=0X01		//開啟P1端口中斷
           

6 P1IES/P2IES

P1IES/P2IES中斷邊沿選擇寄存器

為1 低到高 高電平觸發

為0 高到底 低電平觸發

MSP430 IO口配置

例:

P1IES = 0X01		//選擇高電平觸發
           

7 P1IFG P2IFG

中斷标志位寄存器

為1發生中斷

為0沒有中斷

我們可以來讀取這一位來判斷是否發生中斷

MSP430 IO口配置

注意:在設定P1OUT ,P2OUT,P1DIR,P2DIR寄存器時會設定相應的P1IFG,P2IFG标志位

每個中斷發生必須保證大于1.5倍MCLK確定中斷必須發生

8 接下來我們就來配置IO口吧

配置IO需要以下幾個步驟(個人總結)

<1>是否需要開啟中斷(針對P1 P2兩組IO,一般情況下是不需要的)

<2>PXDIR 配置方向(IO輸入輸出)

<3> PxOUT或 PxIN(輸入輸出高低電平)

<4>PxSEL(是否選擇外設 序列槽,定時器之類的)

<5>設定中斷觸發邊沿(針對P1 P2)

一般來說我們隻需要2,3,4三組步驟就可以使用IO

9 接下來我們進入實戰吧 代碼開發

/渃畔*/

#include "msp430x14x.h"
void basic_clock(void);
void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;	//關閉看門狗
  basic_clock();			//初始化系統時鐘
 
  P6DIR |= BIT4;	//選擇P6.4為輸出引腳
  P6OUT	&=~BIT4; //關閉P6.4
  while(1)
  {
    P6OUT |=BIT4;		//LED開
    for(inti=0;i<1000;i++)
    P6OUT &=~BIT4;	//LED關
    for(inti=0;i<1000;i++)
  }
}

void basic_clock(void)
{
  unsigned int iq0;
  BCSCTL1&=~XT2OFF;     //基本定時器1 預設關閉T2CLK 開啟T2CLK
  do
  {
    IFG1&=~OFIFG;               //等待開啟晶振
    for(iq0=0xff;iq0>0;iq0--);
  }
  while((IFG1&OFIFG)!=0);      
  BCSCTL2=0x88;         //基本時鐘狀态寄存器2  MCLK8MHZ 1分頻  SMCLK 8MHZ 1分頻
}
           

推薦教學視訊

https://www.bilibili.com/video/BV1cE411Z79d?from=search&seid=15656799615629348503

https://www.bilibili.com/video/BV1rE41167yG?from=search&seid=6968580456886645765

MSP430 C語言例程

連結:https://pan.baidu.com/s/1z-q4JGVUzTmJrgeurAExYw

提取碼:t2qa

連結:https://pan.baidu.com/s/12bALa0_v6j4bAIcULMtzJQ

提取碼:0xv9

TI官網提供例程

連結:https://pan.baidu.com/s/1GBXAUFL5opM9LbreQ7zsNw

提取碼:1gn6