Taula de continguts:

Comptador de segons de MSP430: 10 passos
Comptador de segons de MSP430: 10 passos

Vídeo: Comptador de segons de MSP430: 10 passos

Vídeo: Comptador de segons de MSP430: 10 passos
Vídeo: sesion 3 2024, De novembre
Anonim
Comptador de segons de MSP430
Comptador de segons de MSP430

Benvingut! Comptador de segons: utilitzant CCStudio 8 i MSP430F5529 per al projecte.

Llenguatge C per codificar el microcontrolador. Aplicació de modes de baix consum, temporitzadors i interrupcions. La sortida es visualitza mitjançant 7 segments.

Pas 1: Insight

Perspicàcia
Perspicàcia

Anem a començar!

Inicialitzeu el temporitzador de vigilància a l’estat DESACTIVAT mitjançant la contrasenya necessària per al temporitzador de vigilància (ajuda a controlar els bucles infinits, mantenint el processador segur).

#incloure

/ ** * main.c * /

int main (buit)

{

WDTCTL = WDTPW | WDTHOLD; // atura el temporitzador del gos de vigilància

retorn 0;

}

Pas 2: inicialització del port

{

P3DIR = 0xFF; // P3DIR = 0x00;

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 ens indica que tot el PORT-3 s’inicialitza per prendre entrades.

P3DIR | = 0xFF ens indica que tot el PORT-3 s’inicialitza per donar sortides.

P3DIR | = 0x01 només s’inicialitza el pin P3.0 per sortir a PORT-3. Això segueix un mapatge de ports hexadecimals.

P4REN | = 0xFF, això indica que els pins de PORT-4 tenen habilitats les seves resistències de pujada / baixada.

Per seleccionar-los entre Pull UP o Pull DOWN, s'utilitza la instrucció P $ OUT | = 0xFF.

Si s’utilitza 0xFF es configuren com a resistències Pull UP i si 0x00 es configuren com Pull DOWN.

Pas 3: consum extremadament baix

MSP430F5529 ens permet reduir la pèrdua d'energia del processador. Això és útil en aplicacions independents.

Això requereix la declaració de tots els pins o ports a la sortida.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Pas 4: TEMPORITZADOR

Ús del temporitzador per a la generació de retard d'un segon. Utilitza l’SMCLK d’1 MHz, també el temporitzador s’executa en mode de baixa consum (al següent pas, després del seu recompte, s’interromp des de LPM). Aquest procés estalvia energia i càrrega al processador

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Els valors són 999, ja que es necessita un recompte més per tornar a zero al registre del temporitzador.

Pas 5: mode de consum baix

_BIS_SR (LPM0_bits + GIE);

Això habilita l’activació d’interrupcions generals (GIE) i posa la CPU a LPM0, on el MCLK que admet la CPU està desactivat i s’executen SMCLK i ACLK que mantenen el temporitzador en funcionament. de manera que podem veure que la CPU està apagada, allà estalviant energia.

Pas 6: temporitzador ISR

Temporitzador ISR
Temporitzador ISR

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (buit)

{

z ++;

if (z> delay)

{

P3OUT = codi [x];

P6OUT = codi1 [y];

x ++;

si (x == 10)

{

x = 0;

y ++;

}

if (y == 6)

y = 0;

z = 0;

}

}

el vector pragma és per a la representació ISR en C embd.

code [x] i code1 [y] són les matrius que contenen valors de sortida per als dos set segments, per mostrar un comptador de 60 segons.

Pas 7: interrupció del maquinari

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Aquí es declara P2.1 com a interrupció de maquinari, si es prem el botó, el comptador es restablirà al valor.

el programa restant s'escriu dins de la ISR d'aquesta interrupció.

Pas 8: ISR: botó de reinici / pulsació

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (buit)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = codi [x];

P6OUT = codi1 [y];

v ++;

per a (i = 0; i

{

P1OUT | = BIT0; //P1.0 = commuta

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = commuta

_delay_cycles (1048576);

}

Aquest ISR restableix el comptador i fa un recompte de quantes vegades es va prémer la resta.

(Aquí es fa la visualització mitjançant led commutació, també es pot utilitzar una altra matriu i temporitzador, per mostrar aquests valors com a sortida en 7 segments).

Pas 9: CODI

CODI
CODI

#incloure

#define delay 1000

codi char = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

char code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

volàtil sense signar int x = 0, y = 0, z = 0;

volàtil sense signar int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // atura el temporitzador del gos de vigilància

P7DIR | = 0xFF;

P7OUT | = 0x00;

P8DIR | = 0xFF;

P8OUT | = 0x00;

P4DIR | = 0xFF;

P4OUT | = 0x00;

P5DIR | = 0xFF;

P5OUT | = 0x00;

P1DIR = 0xFF;

P3DIR = 0xFF;

P6DIR = 0xFF;

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

_BIS_SR (LPM0_bits + GIE);

}

// Rutina de servei d’interrupció del temporitzador A0

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (buit)

{

z ++;

if (z> delay)

{

P3OUT = codi [x];

P6OUT = codi1 [y];

x ++;

si (x == 10)

{

x = 0;

y ++;

}

if (y == 6)

y = 0;

z = 0;

}

}

// Rutina de servei d’interrupció de maquinari

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (buit)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = codi [x];

P6OUT = codi1 [y];

v ++;

per a (i = 0; i

{P1OUT | = BIT0; // P1.0 = commuta

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = commuta

_delay_cycles (1048576);

}

}

Pas 10: Codi de referència

Codi de referència
Codi de referència

Dipòsit de GitHub

Recomanat: