Tartalomjegyzék:

MSP430 másodpercszámláló: 10 lépés
MSP430 másodpercszámláló: 10 lépés

Videó: MSP430 másodpercszámláló: 10 lépés

Videó: MSP430 másodpercszámláló: 10 lépés
Videó: Лекция 6. Обзор контроллера MSP-430 2024, Július
Anonim
MSP430 másodpercszámláló
MSP430 másodpercszámláló

Üdvözöljük! Második számláló készítése: A CCStudio 8 és az MSP430F5529 használata a projekthez.

C nyelv a mikrovezérlő kódolásához. Kis fogyasztású módok, időzítők és megszakítások alkalmazása. A kimenet a 7 szegmensen keresztül jelenik meg.

1. lépés: Betekintés

Betekintést
Betekintést

Kezdjük!

Inicializálja a watchdog időzítőt OFF állapotba a watchdog időzítő szükséges jelszavával (Ez segít a végtelen ciklusok ellenőrzésében, a processzor biztonságában).

#befoglalni

/** * fő.c */

int main (void)

{

WDTCTL = WDTPW | WDTHOLD; // stop watchdimer timer

visszatérés 0;

}

2. lépés: Port inicializálása

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

A P3DIR | = 0x00 azt jelzi, hogy az egész PORT-3 inicializálva van a bemenetek fogadására.

A P3DIR | = 0xFF azt mondja, hogy az egész PORT-3 inicializálva van, hogy kimeneteket adjon.

P3DIR | = 0x01 csak a P3.0 érintkezőt inicializálja a PORT-3 kimenetére. Ez a hexadecimális port leképezését követi.

P4REN | = 0xFF, ez azt jelzi, hogy a PORT-4 csapjai engedélyezik a fel/le ellenállásokat.

A felhúzás vagy a lefelé húzás közötti kiválasztáshoz használja a P $ OUT | = 0xFF utasítást.

Ha 0xFF -et használnak, akkor felhúzó ellenállásként, 0x00 -nál pedig lefelé húzásként konfigurálódnak.

3. lépés: Ultra alacsony fogyasztás

Az MSP430F5529 lehetővé teszi a processzor energiaveszteségének csökkentését. Ez hasznos önálló alkalmazásokban.

Ez megköveteli az összes PIN vagy port kimenet deklarálását.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

4. lépés: IDŐZÍTŐ

Az időzítő használata az egy másodperces késleltetéshez. Ez az 1 MHz -es SMCLK -t használja, és az időzítő alacsony energiafogyasztású üzemmódban is fut (a következő lépésben, miután a számlálás megszakadt az LPM -től). Ez a folyamat energiát és terhet takarít meg a processzoron

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Az értékek 999, mivel az időszámláló regiszterben nullára való visszagörgetéshez még egy szám szükséges.

5. lépés: Alacsony fogyasztású üzemmód

_BIS_SR (LPM0_bits+GIE);

Ez lehetővé teszi az Általános megszakítás engedélyezését (GIE), és a CPU -t az LPM0 -ra állítja, ahol a CPU -t támogató MCLK ki van kapcsolva, és az SMCLK és az ACLK fut, amely folyamatosan tartja az időzítőt. így láthatjuk, hogy a CPU ki van kapcsolva, ott az energiatakarékosság miatt.

6. lépés: ISR-időzítő

ISR-időzítő
ISR-időzítő

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (érvénytelen)

{

z ++;

ha (z> késés)

{

P3OUT = kód [x];

P6OUT = kód1 [y];

x ++;

ha (x == 10)

{

x = 0;

y ++;

}

ha (y == 6)

y = 0;

z = 0;

}

}

A pragma vektor az ISR ábrázolására szolgál a C embd.

kód [x] és kód1 [y] azok a tömbök, amelyek a két hét szegmens kimeneti értékeit tartalmazzák, 60 másodperces számláló megjelenítésére.

7. lépés: Hardvermegszakítás

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Itt a P2.1 hardver megszakításnak minősül, ha megnyomja a gombot, a számláló visszaáll az értékre.

a többi program ennek a megszakításnak az ISR -jébe van írva.

8. lépés: ISR- Visszaállítás/ Nyomógomb

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (érvénytelen)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kód [x];

P6OUT = kód1 [y];

v ++;

mert (i = 0; i

{

P1OUT | = BIT0; //P1.0 = váltás

_késleltetési ciklusok (1048576);

P1OUT & = ~ BIT0; // P1.0 = váltás

_késleltetési ciklusok (1048576);

}

Ez az ISR alaphelyzetbe állítja a számlálót, és számolja, hogy hányszor nyomták meg a többit.

(Itt a kijelző led kapcsolón keresztül történik, más tömböt és időzítőt is használhat, hogy megjelenítse ezeket az értékeket kimenetként 7 szegmensben).

9. lépés: KÓDOLÁS

KÓD
KÓD

#befoglalni

#define delay 1000

karakterkód = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

karakterkód1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

illékony előjel nélküli int x = 0, y = 0, z = 0;

illékony előjel nélküli int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // stop watchdimer timer

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);

}

// A0 időzítő megszakítja a szolgáltatást

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (érvénytelen)

{

z ++;

ha (z> késés)

{

P3OUT = kód [x];

P6OUT = kód1 [y];

x ++;

ha (x == 10)

{

x = 0;

y ++;

}

ha (y == 6)

y = 0;

z = 0;

}

}

// Hardvermegszakítási szolgáltatási rutin

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (érvénytelen)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kód [x];

P6OUT = kód1 [y];

v ++;

mert (i = 0; i

{P1OUT | = BIT0; // P1.0 = váltás

_késleltetési ciklusok (1048576);

P1OUT & = ~ BIT0; // P1.0 = váltás

_késleltetési ciklusok (1048576);

}

}

10. lépés: Referenciakód

Referencia kód
Referencia kód

GitHub adattár

Ajánlott: