资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
学习过51单片机的同学都知道,IO口的操作是所有单片机系统的基本操作,单片机作为一个核心的运算和处理器件必须能够对外部的信号做出反应,那么如何让MSP430得知外部信号变化和做出反应就是我们今天要学习的主要内容这里还是以MSP430G2553单片机为例MSP430单片机的IO口都有以下几个相关的寄存器:1、PnDIR:输入输出方向寄存器0-输入1-输出2、PnOUT:输出寄存器0-低电平1-高电平3、PnIN:输入寄存器这是一个只读寄存器用来读取外部电平状态4、PnIFG:中断标志寄存器0-没有中断请求1-有中断请求该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求这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,以上就介绍完了和IO口相关的寄存器,是不是觉得好多,头晕?不过头晕之余看看描述,还是能够理出一些思绪的。本篇我们只讨论IO作为普通输入输出口使用所以像PnSEL、PnSEL2、PnIE寄存器就直接写入0x00就好了,或者说可以默认不作修改。像PnIFG和PnIES寄存器那就和我们本篇完全无关了。让我们看看MSP430G2553这个单片机的管脚是如何分布的吧,好让大家有个IO口的存在概念:图片太小?符号密密麻麻看不清?OK,cloud用表格给大家划分一下最简单的引脚图:VCCMSP430G2553GNDP1.0P2.6/XINP1.1P2.7/XOUTP1.2TESTP1.3/RSTP1.4P1.7P1.5P1.6P2.0P2.5P2.1P2.4P2.2P2.3看了这张图大家应该都明白了我们的MSP430G2553单片机只引出了P1口和P2口。所以,我们就可以通过设置P1口相关寄存器和P2口相关寄存器来实现IO口的不同功能。比如,我们让P1口全部输出,P2口全部输入,而且将P2口采集的电平直接复制到P1口就可以如下编程:(为了教程简洁明了,这里只提供关键代码,详细编程请实际练习)P1DIR=0xFF;/设置P1口为全部输出P2DIR=0x00;/设置P2口为全部输入while(1)P1OUT=P2IN;是不是很简单?又比如我们可以对IO口的某一位或者某几位进行操作:P1DIR=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=0x0200=0000001000000000,BITC=0x1000=0001000000000000。这里再说明一下这些符号都由#define宏定义出来所以并不占用空间,C编译器在编译阶段自动会将这些符号替换为相应的常量。下面我们来讨论一下关于上/下拉电阻。我们打开G2553的数据手册看一下找到了P1口的内部结构图,MSP430的IO口结构图非常复杂,这里我们只对上拉/下拉电阻做简单分析:(这里需要一定逻辑分析能力和数电知识,不懂可以直接记住结论)首先我们找到一个电阻,用橙色方框框起来的那个,很明显这个就是我们要找的上拉/下拉电阻。往回看,红色方框(右)是一个开关,这个开关只有闭合才能接入这个电阻。再沿着红色线路找到左边的红色方框(左),这是一个选择器。由于这里我们设置IO口为普通IO口状态模式,所以PxSEL2和PxSEL都是0这样,红色选择器上面的与门就输出了0,此时,红色选择器选择0端也就是PxREN.y这个位,这样分析得出IO工作在普通模式下时,由PxREN来控制电阻是否接入(即开关是否闭合)。再看开关的另一头,是一个选择器,0的时候输出DVSS也就是GND,1的时候输出DVCC也就是VCC,它又由谁来控制呢?我们沿着蓝色的线路往回走,又遇到了一个选择器,别急,我们前面已经说过绿色线路的与门已经输出了0所以这里选择的是0端也就是PxOUT.y这个位。这样我们就分析清楚了,也就是说IO在普通模式下,有没有上拉由PxREN决定,是上拉还是下拉由PxOUT决定,1就是上拉,0就是下拉。再进一步说,即使IO口处在输入状态下,如果PxREN有效,PxOUT还是起作用的,它决定了IO口外部电平的默认状态(即没有任何器件连接时状态)。Cloud在实际电路中对以上过程做了实验,代码如下:P1DIR=0x00;P1OUT=0xF0;P1REN=0xFF;while(1)我把P1口设置为输入,开启上拉/下拉电阻,并使高4位为上拉,低4位为下拉。用万用表测量得到高4位都是高电平,低4位都是低电平(这里忽略了板子上LED等器件的影响,实际这种影响是存在的,比如P1.0由于存在一个LED,电平被拉高,P1.6有于存在一个LED,电压被钳位在1.7V左右)。这验证了我们对数据手册的分析。Cloud还测量了当上拉/下拉电阻打开时候,IO的电流状态,当上拉电阻打开时,若将该管脚直接接地,则IO输出电流约为96.2uA,由此我们可以测得上拉电阻阻值约为:R=3.561V96.2uA(这里MSP430使用的VCC为3.5V左右,cloud实际测量3.561V)R37K同理,下拉电阻我们测得的灌入电流也是96.2uA,所以下拉电阻大约也应该是这个值我们看一下数据手册中对上下拉电阻阻值的说明:这里我们测得的37K也在此范围内。Cloud还测试了IO口不配置上下拉电阻时的端口电压电流,外部开路状态下,端口电压在1.5V左右小幅浮动,接GND时电流为0.5uA接VCC时无法测出(一般小于0.1uA)。但IO口配置在输出状态时,上拉/下拉电阻却呈现了不同的现象(Cloud才疏学浅,暂时无法解释):经过实际测量,当PnREN.y置0时,IO口的输出电流能力可以达到65mA,灌入电流的能力可以达到55mA;当PnREN.y置1时,IO口的输出和灌入电流都只有96uA左右(貌似这个值有点眼熟啊)。所以当大家要用IO直接驱动外部设备时,建议还是不要配置上拉/下拉电阻以得到更大的输出/灌入电流能力。这里,基础IO篇我们就结束了,要详细了解更多的IO口的设置,大家可以对相关寄存器进行设置来获得更多有意思的现象。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号