一、目前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); } } }