Sisällysluettelo:

MSP430 sekuntien laskuri: 10 vaihetta
MSP430 sekuntien laskuri: 10 vaihetta

Video: MSP430 sekuntien laskuri: 10 vaihetta

Video: MSP430 sekuntien laskuri: 10 vaihetta
Video: Лекция 6. Обзор контроллера MSP-430 2024, Marraskuu
Anonim
MSP430 sekuntien laskuri
MSP430 sekuntien laskuri

Tervetuloa! Sekuntimittarin tekeminen: CCStudio 8: n ja MSP430F5529: n käyttäminen projektissa.

C -kieli mikro -ohjaimen koodaamiseen. Pienitehoisten tilojen, ajastimien ja keskeytysten käyttö Tulos näytetään 7 segmentin kautta.

Vaihe 1: Oivallus

Oivallus
Oivallus

Aloitetaanpa!

Alusta vahtikoira -ajastin POIS -tilaan käyttämällä vahtikoira -ajastimen vaadittua salasanaa (se auttaa valvomaan äärettömiä silmukoita pitäen prosessorin turvassa).

#sisältää

/** * main.c */

int main (mitätön)

{

WDTCTL = WDTPW | WDTHOLD; // stop watchdog ajastin

palauta 0;

}

Vaihe 2: Portin alustus

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 kertoo, että koko PORT-3 on alustettu ottamaan vastaan tuloja.

P3DIR | = 0xFF kertoo meille, että koko PORT-3 alustetaan antamaan tuloksia.

P3DIR | = 0x01 vain nasta P3.0 alustetaan lähtöön PORT-3: ssa. Tämä seuraa heksadesimaaliportin kartoitusta.

P4REN | = 0xFF, tämä osoittaa, että PORT-4: n nastoissa on ylös/alas-vastukset käytössä.

Jos haluat valita ne vedä ylös tai vedä alas, käytetään käskyä P $ OUT | = 0xFF.

Jos käytetään 0xFF: ää, ne konfiguroidaan Pull UP -vastuksiksi ja jos 0x00, ne määritetään vedettäväksi alas.

Vaihe 3: Erittäin pieni virrankulutus

MSP430F5529: n avulla voimme vähentää suorittimen virtahäviötä. Tästä on hyötyä itsenäisissä sovelluksissa.

Tämä vaatii kaikkien tulostettavien nastan tai porttien ilmoittamista.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Vaihe 4: AJASTIN

Ajastimen käyttö sekunnin viiveen luomiseen. Tämä käyttää 1 MHz: n SMCLK: ta, ja myös ajastin toimii virransäästötilassa (seuraavassa vaiheessa sen laskemisen jälkeen, kun se on keskeytetty LPM: stä). Tämä prosessi säästää virtaa ja kuormitusta suorittimelle

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Arvot ovat 999, koska ajastinrekisterissä palaaminen nollaan kestää vielä yhden laskun.

Vaihe 5: Virransäästötila

_BIS_SR (LPM0_bits+GIE);

Tämä mahdollistaa GIE (General interrupt Enable) -asennuksen ja asettaa CPU: n LPM0 -tilaan, jossa CPU: ta tukeva MCLK on pois päältä, ja SMCLK ja ACLK toimivat, jotka pitävät ajastimen käynnissä. joten voimme nähdä, että suoritin on kytketty pois päältä säästämällä virtaa.

Vaihe 6: ISR-ajastin

ISR-ajastin
ISR-ajastin

#pragmavektori = TIMER0_A0_VECTOR

_interrupt void Timer_A (mitätön)

{

z ++;

jos (z> viive)

{

P3OUT = koodi [x];

P6OUT = koodi1 [y];

x ++;

jos (x == 10)

{

x = 0;

y ++;

}

jos (y == 6)

y = 0;

z = 0;

}

}

pragma -vektori on ISR -esitystä varten C embd.

koodi [x] ja koodi1 [y] ovat matriiseja, jotka sisältävät lähtöarvot kahdelle seitsemälle segmentille 60 sekunnin laskurin näyttämiseksi.

Vaihe 7: Laitteiston keskeytys

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Tässä P2.1 julistetaan laitteiston keskeytykseksi, jos painiketta painetaan, laskuri palautuu arvoon.

lepo -ohjelma kirjoitetaan tämän keskeytyksen ISR: ään.

Vaihe 8: ISR- Reset/ Push Button

#pragmavektori = PORT2_VECTOR

_interrupt void port_2 (mitätön)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = koodi [x];

P6OUT = koodi1 [y];

v ++;

varten (i = 0; i

{

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

_viive_syklit (1048576);

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

_viive_syklit (1048576);

}

Tämä ISR nollaa laskurin ja laskee, kuinka monta kertaa loput painettiin.

(Tässä näyttö on tehty led -vaihtokytkimellä, voi käyttää myös toista matriisia ja ajastinta näiden arvojen näyttämiseksi lähtöinä 7 segmentissä).

Vaihe 9: KOODI

KOODI
KOODI

#sisältää

#määritä viive 1000

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

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

haihtuva allekirjoittamaton int x = 0, y = 0, z = 0;

haihtuva allekirjoittamaton int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // stop watchdog ajastin

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

}

// Ajastin A0 keskeyttää palvelurutiinin

#pragmavektori = TIMER0_A0_VECTOR

_interrupt void Timer_A (mitätön)

{

z ++;

jos (z> viive)

{

P3OUT = koodi [x];

P6OUT = koodi1 [y];

x ++;

jos (x == 10)

{

x = 0;

y ++;

}

jos (y == 6)

y = 0;

z = 0;

}

}

// Laitteiston keskeytyspalvelurutiini

#pragmavektori = PORT2_VECTOR

_interrupt void port_2 (mitätön)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = koodi [x];

P6OUT = koodi1 [y];

v ++;

varten (i = 0; i

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

_viive_syklit (1048576);

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

_viive_syklit (1048576);

}

}

Vaihe 10: Viitekoodi

Viitekoodi
Viitekoodi

GitHub -arkisto

Suositeltava: