Kazalo:

Števec sekund MSP430: 10 korakov
Števec sekund MSP430: 10 korakov

Video: Števec sekund MSP430: 10 korakov

Video: Števec sekund MSP430: 10 korakov
Video: Youssou N'Dour - 7 Seconds ft. Neneh Cherry 2024, November
Anonim
Števec sekund MSP430
Števec sekund MSP430

Dobrodošli! Izdelava števcev sekund: z uporabo CCStudio 8 in MSP430F5529 za projekt.

C jezik za kodiranje mikro krmilnika. Uporaba načinov nizke porabe energije, časovnikov in prekinitev. Izhod je prikazan prek 7 segmentov.

1. korak: Vpogled

Vpogled
Vpogled

Začnimo!

Inicializirajte časovnik nadzornika v stanje OFF (IZKLOPLJENO) z uporabo zahtevanega gesla za časovnika nadzornika (Pomaga pri preverjanju neskončnih zank, pri čemer je procesor varen).

#vključi

/** * main.c */

int main (void)

{

WDTCTL = WDTPW | WDTHOLD; // ustavitev časovnika nadzornika

vrnitev 0;

}

2. korak: Inicializacija vrat

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 nam pove, da je celoten PORT-3 inicializiran, da sprejme vnose.

P3DIR | = 0xFF nam pove, da je celoten PORT-3 inicializiran, da daje izhode.

P3DIR | = 0x01 je samo pin P3.0 inicializiran za izhod v PORT-3. To sledi preslikavi šestnajstiških vrat.

P4REN | = 0xFF, to pomeni, da so na zatičih PORT-4 omogočeni upori navzgor/navzdol.

Če jih želite izbrati med vlečenjem navzgor ali navzdol, uporabite navodilo P $ OUT | = 0xFF.

Če se uporablja 0xFF, se konfigurirajo kot upori navzgor, če pa 0x00, se potegnejo navzdol.

Korak: Ultra nizka poraba energije

MSP430F5529 nam omogoča zmanjšanje izgube energije iz procesorja. To je uporabno v samostojnih aplikacijah.

To zahteva deklaracijo vseh pin ali portov za izhod.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

4. korak: TIMER

Uporaba časovnika za zakasnitev ene sekunde. Ta uporablja SMCLK 1MHz, časovnik deluje tudi v načinu nizke porabe energije (v naslednjem koraku, ko se štetje prekine iz LPM). Ta postopek prihrani moč in obremenitev procesorja

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Vrednosti so 999, saj je za vrnitev na nič v registru časovnika potrebno še eno štetje.

5. korak: Način nizke porabe energije

_BIS_SR (LPM0_bit+GIE);

S tem je omogočeno Splošno omogočanje prekinitve (GIE), CPU pa nastavljen na LPM0, kjer je MCLK, ki podpira procesor, izklopljen, SMCLK in ACLK pa delujeta, da ohrani časovnik. tako lahko vidimo, da je CPU izklopljen, kar je posledica varčevanja z energijo.

6. korak: ISR-Timer

Časovnik ISR
Časovnik ISR

#pragma vektor = TIMER0_A0_VECTOR

_ prekini void Timer_A (void)

{

z ++;

če (z> zamuda)

{

P3OUT = koda [x];

P6OUT = šifra1 [y];

x ++;

če (x == 10)

{

x = 0;

y ++;

}

če (y == 6)

y = 0;

z = 0;

}

}

vektor pragme je za predstavitev ISR v C embd.

code [x] in code1 [y] sta matriki, ki vsebujeta izhodne vrednosti za dva sedem segmentov za prikaz 60 -sekundnega števca.

7. korak: Prekinitev strojne opreme

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Tu je P2.1 razglašen za strojno prekinitev. Če pritisnete gumb, se števec ponastavi na vrednost.

preostali program je zapisan znotraj ISR tega prekinitve.

8. korak: ISR- ponastavitev/ potisni gumb

#pragma vektor = PORT2_VECTOR

_prekini void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = koda [x];

P6OUT = šifra1 [y];

v ++;

za (i = 0; i

{

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

_odložni_cikli (1048576);

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

_odstavljivi_cikli (1048576);

}

Ta ISR ponastavi števec in šteje, kolikokrat je bil pritisnjen preostanek.

(Tukaj je prikaz prikazan preko LED preklopa, lahko uporabite tudi drugo matriko in časovnik, da prikažete te vrednosti kot izhod v 7 segmentu).

9. korak: KODA

KODA
KODA

#vključi

#define delay 1000

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

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

hlapni nepodpisani int x = 0, y = 0, z = 0;

hlapni nepodpisani int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // ustavitev časovnika nadzornika

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_bit+GIE);

}

// Časovna rutina prekinitve časa A0

#pragma vektor = TIMER0_A0_VECTOR

_ prekini void Timer_A (void)

{

z ++;

če (z> zamuda)

{

P3OUT = koda [x];

P6OUT = šifra1 [y];

x ++;

če (x == 10)

{

x = 0;

y ++;

}

če (y == 6)

y = 0;

z = 0;

}

}

// Storitvena rutina strojne prekinitve

#pragma vektor = PORT2_VECTOR

_prekini void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = koda [x];

P6OUT = šifra1 [y];

v ++;

za (i = 0; i

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

_odstavljivi_cikli (1048576);

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

_odstavljivi_cikli (1048576);

}

}

10. korak: Referenčna koda

Referenčna koda
Referenčna koda

Skladišče GitHub

Priporočena: