This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430

Guru**** 2589300 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/841362/msp430

主题中讨论的其他器件:MSP432P401R

1 -禁用看门狗计时器! 2 -使用上拉内部电阻器将开关(P1.1和 P1.4)配置为输入。 3 -将 LED (P1.0和 P2.0、P2.1、P2.2)配置为输出。 4 -初始化 LED 状态(全部关闭)。 5 -在您的配置之后创建一个无限循环("while (1)")、在这里应该执行其余逻辑。 6 -持续轮询开关(具有去抖功能)。 6.1 -按下按钮1时、所选 LED 将发生变化(默认为红色 LED)。 6.2 -按下按钮2时、当前 LED 将改变状态。

对于红色 LED、只有两种状态:打开和关闭。 这应通过按位切换来执行。 对于 RGB LED、有8种状态、对应于 OFF 和7种不同的颜色。 这应该通过按位清除和设置来执行。
换言之、一个按钮在红色 LED 和 RGB LED 之间切换:另一个按钮更改当前 LED 的当前状态、允许我们打开和关闭红色 LED、并循环显示 RGB LED 的所有颜色。

这是我写的内容、但它不起作用

#include

int main (void){
volatile int i;
//禁用看门狗计时器
WDTCTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;

//GPIO 功能

P1->SEL0 &=(uint8_t)(~((1<<1)|(1<<4)));
P1->SEL1 &=(uint8_t)(~((1<<1)|(1<<4)));

//使用内部上拉设置输入方向
//电阻器
P1DIR |=(uint8_t)((0 << 1)|(0 << 4));
P1->REN |= BIT1;
P1->OUT |= BIT1;


//将 LED 配置为输出

P1DIR |=(uint8_t)((1 << 0));
P2DIR |=(uint8_t)((1 << 0)|(1 << 1)|(1 << 2));

//初始化 LED

P1->OUT &=~BIT0;
P2->OUT &=~BIT0;
P2->OUT &=~BIT1;
P2->OUT &=~BIT2;

//创建无限循环来实现剩余的逻辑
while (1){
I = 100;
//当它为0时不执行任何操作
while ((P1->IN & BIT1)==(P1->IN & BIT4)){}
//延迟循环
while (i > 0){i-;}
//如果值仍然为0;返回到等待
if ((P1->IN & BIT1)==(P1->IN & BIT4)){
继续;

否则{
//Real Press:执行所需的计算

//按下按钮1时,所选的 LED 将发生变化(红色 LED)
if (P1->IN & BIT1){
//如果按下 P1
(P1->OUT)^=(P1->OUT);//XOR on LED1和 LED2


//按下按钮2时,当前 LED 将改变状态。
if (P1->IN & BIT4){
//如果是红色 LED,则交替状态
if (P1->out){
P1->OUT ^=~BIT0;//切换位

//如果选择 RBG LED
if (P2->OUT){
//如果所有颜色都关闭,请打开第一个
if ((~BIT0)&~BIT1 &~BIT2){
P2->OUT &=~(~BIT0)&(~BIT1)&(~BIT2);

if ((~(~BIT0))&~BIT1 &~BIT2){
P2->OUT &=(~BIT0)&~(~BIT1)&(~BIT2);

if ((~BIT0)&~(~BIT1)&(~BIT2)){
P2->OUT &=(~BIT0)&(~BIT1)&~(~BIT2);

if ((~BIT0)&(~BIT1)&~(~BIT2)){
P2->OUT &=~(~BIT0)&~(~BIT1)&(~BIT2);

if (~(~BIT0)&~(~BIT1)&(~BIT2)){
P2->OUT &=(~BIT0)&~(~BIT1)&~(~BIT2);

if ((~BIT0)&~(~BIT1)&~(~BIT2)){
P2->OUT &=~(~BIT0)&(~BIT1)&~(~BIT2);

if (~(~BIT0)&(~BIT1)&~(~BIT2)){
P2OUT &=~(~BIT0)&~(~BIT1)&~(~BIT2);

if (~(~BIT0)&~(~BIT1)&~(~BIT2)){
P2->OUT &=(~BIT0)&(~BIT1)&(~BIT2);








  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kamran、

    您使用的是哪种芯片 MSP430? 您可以在以下链接中参阅端口代码示例。

    建议您在此代码示例中使用寄存器级别。

    http://dev.ti.com/tirex/explore/node?node=ANmAdAm8uAwhnhfzFmgw0A__IOGqZri__LATEST

    无法正常工作的具体问题是什么?  同时、您可以使用 CCS 单步调试函数来跟踪问题。

    此致

    Johnson

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它的430 401r

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kamran、

    该部件可能是 MSP432P401R、 根据您的程序逻辑、您正在使用轮询模式检查按钮按压操作的状态。 您可以使用 CCS 的调试函数检查 Button 函数是否正常、然后测试 LED 程序是否正常、然后依次查找问题。  

    有关配置 GPIO 的一些代码示例供您参考:

    /*配置 GPIO */
    P1->DIR |= BIT0; //将 P1.0设置为输出方向
    P6->DIR &=~BIT7; //将 P6.7设置为输入方向 

    谢谢。

    此致

    Johnson