当mps430 uC启用或禁用时,上拉电阻器是否会影响按钮?

当mps430 uC启用或禁用时,上拉电阻器是否会影响按钮?,c,microcontroller,msp430,C,Microcontroller,Msp430,该守则的运作如下: 按下按钮:绿色打开,红色关闭 按下按钮ot:绿色关闭,红色打开 我在网上看到的所有代码示例都在使用按钮在LED之间切换时启用了上拉电阻器。这对代码的工作来说是必要的吗 我在代码中注释了这一行,我注意到的唯一变化是它打开了一个重置按钮。这就是它的目的吗 #包括 #定义LED0位0 #定义LED1位6 #定义按钮位3 内部主(空) { //停止看门狗定时器,防止超时复位 WDTCTL=WDTPW+WDTHOLD; P1DIR |=0x40; P1OUT&=~0x40; P1DIR

该守则的运作如下: 按下按钮:绿色打开,红色关闭 按下按钮ot:绿色关闭,红色打开

我在网上看到的所有代码示例都在使用按钮在LED之间切换时启用了上拉电阻器。这对代码的工作来说是必要的吗

我在代码中注释了这一行,我注意到的唯一变化是它打开了一个重置按钮。这就是它的目的吗

#包括
#定义LED0位0
#定义LED1位6
#定义按钮位3
内部主(空)
{
//停止看门狗定时器,防止超时复位
WDTCTL=WDTPW+WDTHOLD;
P1DIR |=0x40;
P1OUT&=~0x40;
P1DIR |=0x01;
P1OUT&=~0x01;
P1DIR&=~0x08;
P1SEL&=~0x08;
//P1REN |=0x08;
而(1){
如果((P1IN&0x08)==0){
P1OUT&=~0x01;
P1OUT |=0x40;
}否则{
P1OUT |=0x01;
P1OUT&=~0x40;
}
}
返回0;
}

代码似乎按预期工作,但我想知道这个上拉电阻器的实际用途是什么?

复位线已经由外部电阻器上拉,不需要使用内部电阻器上拉。重置引脚也不是GPIO(端口)引脚,因此基本上无法为其启用内部上拉。至于
P1.3
按钮:有些Launchpad板版本为该按钮焊接了外部上拉电阻器,有些则没有。因此,您应该为
P1.3
启用内部上拉,以防万一。当未按下
P1.3
按钮时,电路开路,您不希望
P1.3
引脚浮动。因此需要上拉电阻器

我发现了一些我的旧代码,可能对你有帮助。特别注意评论

/*程序演示与按钮交互(GPIO输入)*/
#包括
#定义LED_红色_位0
#定义LED_绿色_位6
#定义按钮\u位3
枚举led_状态{
红灯=0,
无灯\u R=1,/*红色led关闭后无灯*/
绿灯=2,
无灯\u G=3/*绿色led关闭后无灯*/
};
枚举led_状态;/*LED状态机的当前状态*/
静态无符号字符按下按钮;
静态无效初始指示灯(无效)
{
P1DIR |=LED|U绿色|U位| LED|U红色|位;
P1OUT&=~LED_绿色_位;
P1OUT |=LED|U红色|U位;
状态=红灯;
}
静态void init_按钮(void)
{
/*由于未安装R34——打开P1.3的内部上拉。
*详细信息:根据LaunchPad用户指南第1.3节:
*“P1.3上的上拉电阻器R34和电容器C24已拆除,以减少
*“当前消费”
*/
P1OUT |=按钮_位;/*引脚被拉起*/
P1REN |=按钮位;/*启用上拉电阻器*/
按钮是否按下=0;
}
/*切换到LED状态机的下一个状态*/
静态无效触发器\u led\u sm(无效)
{
开关(状态){
箱子红灯:
状态=无灯;
P1OUT&=~LED\u红色\u位;
打破
箱号灯号:
状态=绿灯;
P1OUT |=LED|绿色|位;
打破
案例绿灯:
状态=无灯;
P1OUT&=~LED_绿色_位;
打破
箱号灯号:
状态=红灯;
P1OUT |=LED|U红色|U位;
打破
违约:
/*重置状态机*/
初始化发光二极管();
打破
}
}
静态void init(void)
{
初始化发光二极管();
初始化按钮();
}
静态空心环(空心环)
{
/*按钮轮询*/
如果(P1IN&BUTTON_位){/*按钮处于释放状态*/
如果(按钮是否已按下){
按钮是否按下=0;
/*事件:扣上按钮*/
}
}否则{/*按钮处于按下状态*/
如果(!按钮是否已按下){
按钮按下=1;
/*事件:按下按钮*/
触发器_led_sm();
}
}
}
内部主(空)
{
init();
对于(;;)
loop();
返回0;
}
使现代化 在下面的示意图上,您可以看到“RST”引脚和“P1.3”引脚都有专用的外部上拉电阻器:RST为R27,P1.3为R34。但若你们有新版本的线路板——R34并没有焊接在那个里,所以你们必须使用内部上拉

您可以找到启动板的完整示意图


您忘了提到按钮是如何接线的。如果是接地路径,通常需要上拉。共有2个开关。S1和S2(复位)。两个开关直接连接在microntroller引脚和接地之间。所以是的,为了避免浮动误差,是的,我需要一个上拉电阻器。我只是不知道它如何直接影响我的代码。在P1REN启用的情况下,如果按下复位按钮,则不会执行任何操作。如果其被注释掉,则重置切换LED。那么重置和p1.3是否都有各自的上拉?或者两者都绑定到一个,但p1.3可以配置并且rst不能?我在回答您的问题时添加了更新。另外请注意,我在原始问题中编辑了您的代码,并修复了一些错误:您应该将您的
else
部分用花括号括起来(如下所示:
else{…}
),因为里面有不止一条说明。在您的代码中
P1OUT&=~0x40行属于
while
节,而不是
else
节.Hi。非常感谢。你的素描对我帮助很大,但你忘了添加一行:
WDTCTL=WDTPW+WDTHOLD;//禁用看门狗定时器
@Meir我并没有忘记它,我只是在我的Makefile中禁用了看门狗定时器,使用下一个GCC选项:
-mdisable watchdog