[资料分享] 关于MSP430 IO作为输入时内置拉电阻的问题!

火辣西米秀   2020-3-3 19:39 楼主

单片机:MSP430g2553评估板
软件:IAR
问题:用msp430单片机扫描按键时是否要加上下拉电阻。
描述:最近笔者在学TI公司的msp430单片机时要测试板载的按键,但是发现IO外面没有加上拉电阻,当我代码控制P1.3为输入时,IO表现为高阻状态,将手在IO上就能改变IO的电位,我很自然的想到应该在IO上外加上拉电阻,但是反过来想,为什么TI公司设计这板子的时候没有加上上拉电阻那?难道要让我们自己加?不科学!于是我到网上搜相关问题,很多人都是另外加电阻的,难道我想多了?突然我看到一篇博客,下面是该博客的内容:
今天帮助一个人测试msp430f2002,他又提出了这样的要求,输入,msp430内部上拉,我又习惯性的说,不行啊,只能输出可以内部上下拉,他是个硬件工程师,很是怀疑,其实我也怀疑。
又仔细看了下430的datasheet。对着内部电路一看,我靠,还真是。。作为一个电信专业出身的人,居然。。没看内部结构就下了那样的结论,大意了。

上下拉是否开启是否REN寄存器决定的,而上拉还是下拉是由OUT寄存器决定的,在作为输出时,随着OUT的高低,自动选择上下拉,作为输入的时候,我们也可以人为的付OUT寄存器来得到上下拉。
看到上面这篇博客,我恍然大悟!非常感谢博主的分享!帮我解决了问题!但是感觉博主写的不够具体,为了让大家都能看明白,我再补充一下!
正如博主所说:
PxREN寄存器控制拉电阻是否启用,而PxOUT决定了拉电阻是上拉还是下拉,具体的工作原理是这样的
 PxDIR=1时输出    PxREN=1只有拉电阻起作用    PxOUT=1上拉
PxOUT=0下拉
PxREN=0推挽输出无拉电阻    PxOUT=1输出高
PxOUT=0输出低
PxDIR=0时输入    PxREN=1有拉电阻起作用    PxOUT=1上拉
PxOUT=0下拉
PxREN=0时IO呈高阻状态    高阻状态

 #include<msp430g2553.h>
void main()
{
  WDTCTL=WDTPW+WDTHOLD;
  P1DIR=0x0001;
  P1REN=BIT3;  //输入
  P1OUT=BIT3;  //上拉 
  while(1)
  {
    if(P1IN&BIT3)
      P1OUT|=BIT0;
    else
      P1OUT&=~BIT0;
  }  
}
希望能帮到大家!

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复