《MSP30基础IO口.docx》由会员分享,可在线阅读,更多相关《MSP30基础IO口.docx(5页珍藏版)》请在三一办公上搜索。
1、MSP30基础IO口学习过51单片机的同学都知道,IO口的操作是所有单片机系统的基本操作,单片机作为一个核心的运算和处理器件必须能够对外部的信号做出反应,那么如何让MSP430得知外部信号变化和做出反应就是我们今天要学习的主要内容 这里还是以MSP430G2553单片机为例 MSP430单片机的IO口都有以下几个相关的寄存器: 1、PnDIR:输入输出方向寄存器 0-输入 1-输出 2、PnOUT:输出寄存器 0-低电平 1-高电平 3、PnIN:输入寄存器 这是一个只读寄存器用来读取外部电平状态 4、PnIFG:中断标志寄存器 0-没有中断请求 1-有中断请求 该寄存器有8个标志位,对应相应
2、的引脚是否有待处理的中断请求 这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位 外部中断时间的时间必须=1.5倍的MCLK时间以保证中断请求被接受 5、PnIE:中断启用寄存器 0-不启用中断 1-启用中断 6、PnIES:中断触发边沿选择寄存器 0-上升沿中断 1-下降沿中断 7、PnSEL:功能选择寄存器 0-选择引脚为普通IO口 1-选择引脚为外围模块功能 8、PnSEL2:功能选择寄存器2 和PnSEL共同作用选择不同功能,当选择引脚作为普通IO口使用时PnSEL和PnSEL2都应该清零 9、PnREN:上拉/下拉电阻使能寄存器 0-禁止 1-使能 OK,以上就介绍完
3、了和IO口相关的寄存器,是不是觉得好多,头晕?不过头晕之余看看描述,还是能够理出一些思绪的。本篇我们只讨论IO作为普通输入输出口使用所以像PnSEL、PnSEL2、PnIE寄存器就直接写入0x00就好了,或者说可以默认不作修改。像PnIFG和PnIES寄存器那就和我们本篇完全无关了。 让我们看看MSP430G2553这个单片机的管脚是如何分布的吧,好让大家有个IO口的存在概念: 图片太小?符号密密麻麻看不清?OK,cloud用表格给大家划分一下最简单的引脚图: VCC MSP430G2553 GND P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P2.0 P2.1 P2.2 P2
4、.6 / XIN P2.7 / XOUT TEST /RST P1.7 P1.6 P2.5 P2.4 P2.3 看了这张图大家应该都明白了我们的MSP430G2553单片机只引出了P1口和P2口。所以,我们就可以通过设置P1口相关寄存器和P2口相关寄存器来实现IO口的不同功能。 比如,我们让P1口全部输出,P2口全部输入,而且将P2口采集的电平直接复制到P1口就可以如下编程: P1DIR = 0xFF; /设置P1口为全部输出 P2DIR = 0x00; /设置P2口为全部输入 while(1) P1OUT = P2IN; 是不是很简单? 又比如我们可以对IO口的某一位或者某几位进行操作: P
5、1DIR = 0x40; /设置P1.6为输出其他为输入 P1OUT = 0x40; /设置P1.6为高电平 P2DIR = BIT5 + BIT4; /设置P2.4和P2.5为输出其他为输入 P2OUT = BIT5; /设置P2.4为低电平 P2.5为高电平 这里出现了BIT4、BIT5这些新的“符号”,让我们来看看他们到底是什么,我们打开io430G2553.h这个头文件,前面几行中我们就找到了如下的类似定义: 由这几个我们就可以知道所谓BITx其实就是使一个16位二进制数的第x位为高电平其他位置零。因为MSP430是16位单片机,这里不仅有0-7,还有8-9,A-F。比如BIT9=0x
6、0200=0000 0010 0000 0000,BITC=0x1000=0001 0000 0000 0000。这里再说明一下这些符号都由#define宏定义出来所以并不占用空间,C编译器在编译阶段自动会将这些符号替换为相应的常量。 下面我们来讨论一下关于上/下拉电阻。我们打开G2553的数据手册看一下找到了P1口的内部结构图,MSP430的IO口结构图非常复杂,这里我们只对上拉/下拉电阻做简单分析: 首先我们找到一个电阻,用橙色方框框起来的那个,很明显这个就是我们要找的上拉/下拉电阻。往回看,红色方框是一个开关,这个开关只有闭合才能接入这个电阻。再沿着红色线路找到左边的红色方框,这是一个选
7、择器。由于这里我们设置IO口为普通IO口状态模式,所以PxSEL2和PxSEL都是0这样,红色选择器上面的与门就输出了0,此时,红色选择器选择0端也就是PxREN.y这个位,这样分析得出IO工作在普通模式下时,由PxREN来控制电阻是否接入。再看开关的另一头,是一个选择器,0的时候输出DVSS也就是GND,1的时候输出DVCC也就是VCC,它又由谁来控制呢?我们沿着蓝色的线路往回走,又遇到了一个选择器,别急,我们前面已经说过绿色线路的与门已经输出了0所以这里选择的是0端也就是PxOUT.y这个位。 这样我们就分析清楚了,也就是说IO在普通模式下,有没有上拉由PxREN决定,是上拉还是下拉由Px
8、OUT决定,1就是上拉,0就是下拉。 再进一步说,即使IO口处在输入状态下,如果PxREN有效,PxOUT还是起作用的,它决定了IO口外部电平的默认状态。 Cloud在实际电路中对以上过程做了实验,代码如下: P1DIR = 0x00; P1OUT = 0xF0; P1REN = 0xFF; while(1) 我把P1口设置为输入,开启上拉/下拉电阻,并使高4位为上拉,低4位为下拉。用万用表测量得到高4位都是高电平,低4位都是低电平。这验证了我们对数据手册的分析。 Cloud还测量了当上拉/下拉电阻打开时候,IO的电流状态,当上拉电阻打开时,若将该管脚直接接地,则IO输出电流约为96.2uA,
9、由此我们可以测得上拉电阻阻值约为:R=3.561V96.2uA R37K 同理,下拉电阻我们测得的灌入电流也是96.2uA,所以下拉电阻大约也应该是这个值 我们看一下数据手册中对上下拉电阻阻值的说明: 这里我们测得的37K也在此范围内。 Cloud还测试了IO口不配置上下拉电阻时的端口电压电流,外部开路状态下,端口电压在1.5V左右小幅浮动,接GND时电流为0.5uA接VCC时无法测出。 但IO口配置在输出状态时,上拉/下拉电阻却呈现了不同的现象:经过实际测量,当PnREN.y置0时,IO口的输出电流能力可以达到65mA,灌入电流的能力可以达到55mA;当PnREN.y置1时,IO口的输出和灌入电流都只有96uA左右。所以当大家要用IO直接驱动外部设备时,建议还是不要配置上拉/下拉电阻以得到更大的输出/灌入电流能力。 这里,基础IO篇我们就结束了,要详细了解更多的IO口的设置,大家可以对相关寄存器进行设置来获得更多有意思的现象。