1. I/O口的简介
特点:
(1)多种复用和设置(即可控制是否输入、是否输出、是否接上下拉电阻、是否可接受中断)
(2)一般情况下,P1和P2都具有中断能力的。从P1和P2接口的各个I/O管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿触发,对应的中断向量表分别为P1IV和P2IV,他们只能进行字操作,并且PAIV这个寄存器是不存在的。
(3)P1、P2可合为PA,P3、P4可合为PB…。所以P1为8位BCD 0X00,PA为16位BCD 0X0000。当进行字操作写入PA口时,所有的16位都被写入这个端口;当利用字节操作写入PA口的低字节时,高字节保持不变;
(4)由于430很多I/O和外围电路接线,所以这里常用位操作。如事先定义(接下来也会用到,先在此声明),BIT0=0X01、BIT1=0X02、BIT3=0X04…,那么将
P1.1、P1.3---》1(高电平):P1OUT |=(BIT1+BIT3),
P1.1、P1.3---》0(低电平):P1OUT &=~(BIT1+BIT3),
电平翻转即按位异(取反):P1OUT ^=(BIT1+BIT3)。
(5)没有使用到的I/O口,统一拉低,当读入的数据长短小于端口最大长度时,那些没有用到的为会被视为0;
2. I/O口的简单配置(一)
430 I/O的配置是用软件来实现的,是通过相应的配置寄存器来实现的。(用到某个I/O时,一定要先配置好该I/O,否则易出错)
2.1.1 I/O方向设定寄存器PxDIR
如设定P1.1和P1.2为输出状态有以下三种设置模式:
P1DIR |=(BIT1+BIT2)
PADIR |=(BIT1+BIT2)
PADIR_L |=(BIT1+BIT2
== 拉高设定为输出,拉低设定为输入(默认)==
2.1.2 I/O输入设定寄存器PxIN
如设定P1.1和 P1.2的输入为低电平:
P1IN &=~(BIT1+BIT2)。
2.1.3 I/O输出设定寄存器PxOUT
(1)当只用为简单的输出时:如设定P1.1和P1.2输出为高电平:
P1OUT |=(BIT1+BIT2);
(2)如果该引脚为正常I/O功能,且当前已设定为输入方向,且上拉/下拉电阻寄存器是有效的,那么PxOUT可以用来配置上拉和下拉电阻。低电平为下拉电阻,高电平为上拉电阻。
2.1.4 上拉/下拉电阻使能寄存器PxREN
低电平该寄存器无效状态
高电平该寄存器有效状态
2.1.5 输出驱动能力设置寄存器PxDS
弱化驱动可以减弱电磁干扰EMI,全力驱动会增强电磁干扰。默认为减弱驱动。
低电平表示减弱的驱动(默认)。
高电平表示全力的驱动。
2.1.6 功能选择寄存器PxSEL(引脚复用)
用来声明该端口是要应用于外围电路的特殊功能(不决定输入输出方向),默认为低电平。
低电平表示普通的I/O口(默认);如:
P1SEL |=BIT0;
高电平表示该引脚将有连接外围电路的特殊用途。如:
P5SEL |=(BIT2+BIT3)
这句话的意思是声明P5.2和P5.3将有特殊用途,实际上这两个I/O接的是外部的高频时钟晶振(之后还是要设定为输入状态才可以)。此外需要注意的是。一旦某个I/O的PxSEL置高了,那么该引脚将不能再被用为中断引脚。
外部中断应用实例
/*实现LED的闪烁LED位于每个触摸按键的下方,具体接口请查询原理图
#include <msp430.h>该头文件内部包含430各个寄存器的配置情况*/
/**
* main.c
* 流水灯
*/
int main(void)
{
WDTCTL =