Electronica digital
Enviado por ybw56292 • 10 de Marzo de 2023 • Documentos de Investigación • 558 Palabras (3 Páginas) • 44 Visitas
#include <msp430g2553.h>
void InitializeClocks(void);
void InitializePins(void);
void InitializeTimer(void);
void main(void)
{
enum{Bajada,Subida} Estado = Subida;
unsigned int d = 9;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
InitializeClocks();
InitializePins();
InitializeTimer();
while(1)
{
switch (Estado){
//Motor
case Subida:
if ((P1IN & BIT3)==0) { // Si pulsador pulsado
d++; // Se incrementa el valor de d
}
if (d >= 989) { // Si llega al valor maximo 99%
Estado = Bajada; // Cambia a estado de bajada
}
break;
case Bajada:
if ((P1IN & BIT3)==0) { //Si pulsador pulsado
d--; // Se disminuye el valor de d
}
if (d <= 9){ // Si llega al valor minimo 1%
Estado = Subida; // Cambia a estado de bajada
}
break;
}
TA1CCR1 = d;
// Leds
if (d >= 899) { //supera 90%
P1OUT |= BIT0; // Encender LED rojo (P1.0)
P1OUT &= ~BIT6; // Apagar LED verde (P1.6)
}
else if (d <= 99) { //baja de 10%
P1OUT |= BIT6; // Encender LED verde (P1.6)
P1OUT &= ~BIT0; // Apagar LED rojo (P1.0)
}
else {
P1OUT &= ~(BIT6 | BIT0); // Apagar ambos LEDs
}
__delay_cycles(5000);
}
}
void InitializeClocks(void)
{
BCSCTL1 = CALBC1_1MHZ; // Set DCOCLK to 1 MHz calibrated
DCOCTL = CALDCO_1MHZ; // Set DCOCLK to 1 MHz calibrated
BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0; // MCLK y SMCLK desde DCO y divididos por 1
}
void InitializePins(void)
{
P1DIR &= ~BIT3; // P1.3 como entrada
P1OUT |= BIT3; // Resistencia de pull-up en P1.3
P1REN |= BIT3; // Habilita la resistencia de pull-up en P1.3
P2DIR |= BIT2; // P2.2 como salida del PWM
P2OUT &= ~BIT2; // P2.2 inicializado a 0
P2SEL |= BIT2; // Se pone P2.2 como TA1.1
P2SEL2 &= ~BIT2;
P1DIR |= (BIT0 | BIT6); // P1.0, P1.6 como salidas (LEDS)
P1OUT &= ~(BIT0 | BIT6); // P1.0, P1.6 inicializados a 0
}
void InitializeTimer(void)
{
TA1CCR0 = 999; // T_PWM = 1ms con T_SMCLK = 1us
TA1CCR1 = 9; // duty-cycle inicial 1%
TA1CCTL1 = OUTMOD_7; // CCR1 reset/set
TA1CTL = TASSEL_2
...