Sadržaj:

Brojač sekundi MSP430: 10 koraka
Brojač sekundi MSP430: 10 koraka

Video: Brojač sekundi MSP430: 10 koraka

Video: Brojač sekundi MSP430: 10 koraka
Video: Основы программирования микроконтроллеров. Лекция в МИРЭА 2024, Juli
Anonim
Brojač sekundi MSP430
Brojač sekundi MSP430

Dobrodošli! Izrada brojača sekundi: Korištenje CCStudio 8 i MSP430F5529 za projekt.

C jezik za kodiranje mikro kontrolera. Primjena režima male snage, tajmera i prekida. Izlaz se prikazuje putem 7 segmenata.

Korak 1: Uvid

Uvid
Uvid

Počnimo!

Inicirajte nadzorni mjerač vremena u isključeno stanje pomoću potrebne lozinke za nadzorni mjerač vremena (pomaže u provjeri beskonačnih petlji, čuvajući procesor na sigurnom).

#include

/** * main.c */

int main (void)

{

WDTCTL = WDTPW | WDTHOLD; // zaustavljanje nadzornog mjerača vremena

return 0;

}

Korak 2: Inicijalizacija porta

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 nam govori da je cijeli PORT-3 inicijaliziran za primanje ulaza.

P3DIR | = 0xFF nam govori da je cijeli PORT-3 inicijaliziran za davanje izlaza.

P3DIR | = 0x01 samo je pin P3.0 inicijaliziran za izlaz u PORT-3. Ovo slijedi heksadecimalno mapiranje portova.

P4REN | = 0xFF, to znači da su na pinovima PORT-4 omogućeni otpornici za povlačenje/spuštanje.

Da biste ih odabrali između Povuci gore ili Povuci DOLJE, koristi se naredba P $ OUT | = 0xFF.

Ako se koristi 0xFF, oni se konfiguriraju kao otpornici na povlačenje, a ako se 0x00 konfiguriraju kao povlačenje prema dolje.

Korak 3: Ultra niska snaga

MSP430F5529 omogućava nam smanjenje gubitaka snage procesora. Ovo je korisno u samostalnim aplikacijama.

Ovo zahtijeva deklaraciju svih pinova ili portova za izlaz.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Korak 4: TIMER

Upotreba tajmera za kašnjenje od jedne sekunde. Ovo koristi SMCLK od 1MHz, a tajmer radi i u režimu niske potrošnje energije (u sljedećem koraku, nakon što je prebrojen prekinut iz LPM -a). Ovaj proces štedi energiju i opterećuje procesor

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Vrijednosti su 999, jer je za vraćanje na nulu u registru tajmera potrebno još jedno računanje.

Korak 5: Način niske potrošnje energije

_BIS_SR (LPM0_bits+GIE);

Ovo omogućava omogućavanje općeg prekida (GIE) i stavlja CPU na LPM0, gdje je MCLK koji podržava CPU isključen, a SMCLK i ACLK rade kako bi tajmer radio. tako da možemo vidjeti da je CPU isključen, štedeći energiju.

Korak 6: ISR-mjerač vremena

ISR-Timer
ISR-Timer

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

if (z> odgoda)

{

P3OUT = kôd [x];

P6OUT = kod1 [y];

x ++;

ako (x == 10)

{

x = 0;

y ++;

}

ako (y == 6)

y = 0;

z = 0;

}

}

vektor pragme služi za ISR reprezentaciju u C embd.

code [x] i code1 [y] su nizovi koji sadrže izlazne vrijednosti za dva sedam segmenata za prikaz brojača od 60 sekundi.

Korak 7: Hardverski prekid

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Ovdje se P2.1 deklarira kao hardverski prekid, ako se pritisne tipka, brojač se vraća na vrijednost.

ostatak programa je napisan unutar ISR -a ovog prekida.

Korak 8: ISR- Reset/ Pritisnite dugme

#pragma vektor = PORT2_VECTOR

_prekini void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kôd [x];

P6OUT = kod1 [y];

v ++;

za (i = 0; i

{

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

_odlaganje_cikli (1048576);

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

_odlaganje_cikli (1048576);

}

Ovaj ISR poništava brojač i broji koliko je puta pritisnut ostatak.

(Ovdje se prikaz prikazuje pomoću LED preklopke, može se koristiti i drugi niz i mjerač vremena za prikazivanje tih vrijednosti kao izlaz u 7 segmentu).

Korak 9: KOD

CODE
CODE

#include

#define delay 1000

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

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

isparljivi bez potpisa int x = 0, y = 0, z = 0;

isparljivi bez potpisa int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // zaustavljanje nadzornog mjerača vremena

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

}

// Tajmer A0 rutina prekida servisa

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

if (z> odgoda)

{

P3OUT = kôd [x];

P6OUT = kod1 [y];

x ++;

ako (x == 10)

{

x = 0;

y ++;

}

ako (y == 6)

y = 0;

z = 0;

}

}

// Uslužna rutina prekida hardverskog prekida

#pragma vektor = PORT2_VECTOR

_prekini void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kôd [x];

P6OUT = kod1 [y];

v ++;

za (i = 0; i

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

_odlaganje_cikli (1048576);

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

_odlaganje_cikli (1048576);

}

}

Korak 10: Referentni kod

Referentni kod
Referentni kod

GitHub spremište

Preporučuje se: