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.

[参考译文] MSP430G2553:LPM

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

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

器件型号:MSP430G2553

工具与软件:

我们正在着手一个 MSP430G2553项目、该项目的功能是执行一个充电控制器、以便通过矩阵键盘选择负载激活的日期和时间、请记住它必须在 LPM3模式下运行、但我们遇到了问题、他人可以发送任何提示或建议

#include // Inclui o cabeçalho para a Família ó n de microcontrolsladores MSP430
#include "HD44780.h"//包括 cabeçalho específico 参数显示 LCD HD44780
#include // Inclui o cabeçalho Padrão ç a da biblioteca de funções ç a de uso Geral em C.
#include // Inclui o cabeçalho para operações matemáticas ó n.
#include // Inclui o cabeçalho Padrão ç a da biblioteca de inteiros de largura fixa em C.
#include // Inclui o cabeçalho Padrão ç a da biblioteca de tipos inteiros de largura fixa em C.
#include
#include
#include
#define segunda BIT6
#define terca BIT5
#define Quarta BIT4
#define Quinta BIT3
#define sexta BIT2
#define Sabado BIT1
#define DOMINGAN BIT0


#define byte char // define um alias "byte" para 'char'
#define hab BIT7 // define um alias 'hab' para 'BIT7'
#define s(lo) 1<<lo

字节直径;//声明 UMA variável 'dia' do tipo 'byte'
字节 vet_circular [8]={0x7F、0x7E、0x7C、0x03、0x50、 0x0A、0x54、0x2A};// Init_circular 阵列'vert_circular ' de 8 Element
字节 lo;
字节 T;
Char Tecla;
char teclado[4][4]={'1'、'2'、'3'、'a'}、
{'4'、'5'、'6'、'B'}、
{'7'、'8'、'9'、'C'}、
{'*'、'0'、'#'、'D'};

/// CONTROLE de Carga inicio//
typedef struct prog{//定义 UMA estrutura 'prog'
Byte Diason;// Membro "Diason" da estrutura 'prog'
Byte Diasoff;// Membro "Diasoff" da estrutura 'prog'
Int hon, hoff;// 23 59.
} Programacao ;//定义 um alias 'prog' para 'struct prog'

struct carga { Programacao prog[3];byte bite;};// define UMA estrutura 'carg' com membros 'programacao' e 'bite

void main(){/ Função principal 'main'
struct carga Carga[2];//声明数组 de 2 Elementos do tipo 'struct carg'
Int i、j;//声明 variáveis inteiras 'i' e 'j'
Byte Dia = segunda;// 7 6 5 4 3 2 1 0
int Horas = 0;
// h/d
for (i=0;i<2;i++){//desabilita a programação de todas cargas。 循环 extern DE 0 A 1
for (j=0;j<3;j++){//循环交叉0 a 2
carga[i].prog[j].diason= 0x7F;carga[i].prog[j].diasoff= 0x7F;//初始化 membros "diason" e "diasoff" de cada elemento de 'Carga'
}
carga[i].bite =(1< 'bite'="" de="" cada="" elemento="" 'carga'}
configTeclado();

P2IE &= 0x0F;//度量 interrupção dos bit 4 a 7 da p2
P2IES &= 0x0F;//配置支持 Subida (BIT4 A 7)
P2IFG &= 0x0F;// limpa flag de interrupção è s
P2IE |= 0xF0;// habilita interrupção á

// RTI_Porta 2.
for (i=4;i<8;i++){//Linha que gerou interrupção
if (P2IFG & s (i)){
P2IE &=~s (i);
LO = I;
if (! (P2IES & s (i))){
for (j=0;j<4;j++){
LPM3;
if (P2IN & s (j)){
Tecla = teclado[i-4][j];
休息;
}
}
}
}
}
TA0CCR1 += T;
TA0CCTL1 &=~ CCIFG;
TA0CCTL1 |= CCIE;

P2OUT = 0;// Linpa o registrador P2OUT
while (1){//循环 Infiniband
对于(i = 0; i < 2; i++){//procura pela carga habilitada para ligar e desligar a carga. 循环 extern DE 0 A 1
对于(j = 0;j < 3;j++){//环路交叉0 a 2
if ((((Carga[i].prog[j].diason &(hab | dia)))=(hab | dia))
&&(Carga[i].prog[j].hon = Horas)){//verifica se é PRA ligar
P1OUT |= Carga[i].bite;
}
if ((((Carga[i].prog[j].Diasoff &(hab | dia))=(hab | dia))
&&(Carga[i].prog[j].hoff = Horas)){//verifica se é PRA ligar
P1OUT 且=~Carga[i].bite;
}
}
}//用于外部
}
}
byte opcoes_dias (byte i){// Função 'opcoes_dias' com argumento 'i'
如果((I>= 0)&&(I <= 7)){// Condição se 'i' está entre 0 e 7
return vet_circular [i];// retorna o valor do índice 'i' do array 'vert_circular '
} else{// caso contrário
if ((i>7)&&(i<=13)){// Condição se 'i' está entre 8 e 13.
返回(I-6);// Retorna "I-6"
} else{// caso contrário
return 1;// Retorna 1.
}
}
}
/// CONTROLE de Carga FIM //


#pragma vector=Timer1_A0_vector //定义 um vetor de interrupção para o Timer1_A0
__interrupt void Timer1_A0_ISR (void){// Rotina serviço de interrupção ó n para o Timer1_A0
//inicio relogio/
开关(TA0IV){
案例0x02://canal 1
P2IES ^= s(lo);
P2IFG &=~Ω(0XF0);
P2IE |=0XF0;
TA0CCTL1 &=~ CCIE;
休息;

案例0x04://canal 2
TA0CCR2 += 32768;
LPM3_EXIT;
休息;
}
/// fim relogio
TA1CCTL0 &=~CCIFG;// Linpa a Bandeira de interrupção ó n
}


/*
for (I=0;I<2;I++){//循环外部0 a 1
对于(j = 0;j < 3;j++){//环路交叉0 a 2
if (Carga[i].prog[j].diason &(hab | dia)=(hab | dia)){// Condição baseada no valor dos membros "diason" e 'dia' de cada elemento de 'Carga'
P2OUT |=(1 << Carga[i].bite);//配置寄存器 P2OUT 中的位对应项
}

if (Carga[i].prog[j].diasoff &(hab | dia)=(hab | dia)){// Condição baseada no valor dos membros "diasoff" e 'dia' de cada elemento de 'Carga'
P2OUT 且=~(1 << Carga[i].bite);// Linpa o bit contactente do registrador P2OUT
}
}
}*/

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

    我不知道从何处开始 TA0。 您是否正在使用 TASSEL__ACLK?

    ---------------

    #pragma vector=Timer1_A0_vector //定义 um vetor de interrupção para o Timer1_A0

    由于使用的是 TA0CCTL1:CCIFG、这应该是

    > #pragma vector=TIMER0_A1_VECTOR // define um vetor de interrupção para o TA0

    ---------------

    > P2IE |= 0xF0;// habilita interrupção

    您将在 P2中启用引脚中断、但我看不到 它们的 ISR (PORT2_VECTOR)

    ---------------

    这两种操作都会让您转到 unused_vector 函数(我忘记了它所调用的函数)。

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

    您好、 Erick、

    请说明问题所在以及您的预期。

    在没有背景的情况下查看您的代码超出我的范围。

    B.R.

    SAL