xinguihu

一、目前MSP430所有系列单片机的总线都不对外开放,所以端口就成为用户可以利用的重要资源

            MSP430的端口可以直接用于输入/输出,实现多功能复用,还可以为MSP430系列扩展设备提供必要的逻辑控制信号

             P1、P2端口还具有中断能力

二、控制寄存器

1.方向寄存器(PxDIR)0为输入,1为输出;输入时只能读,输出时可读可写

2.输入寄存器(PxIN)

3.输出寄存器(PxOUT)

4.功能选择寄存器(PxSEL)

5.中断使能寄存器(PnIE)

6.中断触发沿选择寄存器(PnIES)

7.中断标志寄存器(PnIFG)

三、应用举例

/**********单个灯亮的实现************/

#include<msp430f169.h>

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;           //关闭看门狗
    //P6SEL &= ~0x01;                   //设置P6.0位输入输出,可不设置,默认为此状态
    P6DIR |= 0x01;                      //设置P6.0位输出功能  
    P6OUT |= 0x01;                      //设置P6.0初始状态为高电平,灯是灭的

    for(;;){
        volatile unsigned int i;

        P6OUT ^= 0x01;                  //P6.0输出为低电平,灯亮

        i = 50000;                      //延时50000
        do (i--);
        while (i != 0);
    }
}
/************实现流水灯*************/

#include <msp430f169.h>

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;      //关闭看门狗
    //P6SEL &= ~0x01;              //设置P6输出输入,可不设置,此状态为默认状态
    P6DIR |= 0xFF;                 //设置P6输出功能
    P6OUT |= 0xFF;                 //设置P6初始状态为高电平,灯是灭的

    for (,,){
        volatile unsigned int i;
        volatile unsigned int j;
        for(j =0 ;j < 8 ; j++)
        {
            switch(j){
            case 0:
                P6OUT ^= 0x01;     //P6.0亮
                break;
            case 1:
                P6OUT ^= 0x02;     //P6.1亮
                break;
            case 2:
                P6OUT ^= 0x04;     //P6.2亮
                break;
            case 3:
                P6OUT ^= 0x08;     //P6.3亮
                break;
            case 4:
                P6OUT ^= 0x10;     //P6.4亮
                break;
            case 5:
                P6OUT ^= 0x20;     //P6.5亮
                break;
            case 6:
                P6OUT ^= 0x40;     //P6.6亮
                break;
            case 7:
                P6OUT ^= 0x80;     //P6.7亮
                break;
            }
        i = 50000;                 //设置延时50000
        do (i--);
        while (i != 0);
        }
    }
}
#include <msp430f169.h>

int main(void)
{
    WDTCTL = WDTPW + WDTHOLD;
    P6DIR |= BIT0;
    P6OUT |= BIT0;

    //P1DIR |= 0xFE                      //设置P1.0输入
    P1DIR &= ~BIT0;                      //与上一行代码等价
                                         //BIT0第零位为一,BIT1第一位为一,以此类推,到BIT7
    
    unsigned char keyin =P1IN;
    unsigned int i;
    keyin &= 0xFE;
    if(keyin !=0xFE){
        for(i = 0, i < 2000; i++);
        for(;;)
        {
            P6OUT ^= 0x01;
            i =50000;
            do(i--);
            while(i !=0);
        }

    }
}

 

分类:

技术点:

相关文章:

  • 2021-10-21
  • 2021-12-05
  • 2021-09-07
  • 2021-10-23
  • 2021-10-28
猜你喜欢
  • 2021-10-18
  • 2022-01-01
  • 2021-10-08
  • 2021-08-09
  • 2021-12-05
  • 2021-12-05
  • 2021-07-31
相关资源
相似解决方案