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, Studeni
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 načina rada, mjerača vremena i prekida male snage. Izlaz se prikazuje putem 7 segmenata.

Korak 1: Uvid

Uvid
Uvid

Započnimo!

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

#uključi

/** * main.c */

int main (void)

{

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

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 mapiranje heksadecimalnog porta.

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 uputa 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ćuje 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

Korištenje mjerača vremena za generiranje kašnjenja od jedne sekunde. Ovo koristi SMCLK od 1MHz, a mjerač vremena radi i u načinu rada 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 mjerača vremena potrebno još jedno računanje.

Korak 5: Način niske potrošnje energije

_BIS_SR (LPM0_bit+GIE);

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

Korak 6: ISR-mjerač vremena

ISR-mjerač vremena
ISR-mjerač vremena

#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 segmenta, 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 gumb, brojač se vraća na vrijednost.

ostatak programa zapisan je unutar ISR -a ovog prekida.

Korak 8: ISR- Resetiraj/ pritisni gumb

#pragma vektor = PORT2_VECTOR

_interrupt 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

_odgoda_cikli (1048576);

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

_odgoda_cikli (1048576);

}

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

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

Korak 9: KOD

KODIRATI
KODIRATI

#uključi

#define delay 1000

kôd znaka = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

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

hlapljivi bezznačni int x = 0, y = 0, z = 0;

hlapljivi bezznačni int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // zaustavljanje mjerača vremena 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);

}

// Timer A0 rutina usluge prekida

#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

_interrupt 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

_odgoda_cikli (1048576);

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

_odgoda_cikli (1048576);

}

}

Korak 10: Referentni kod

Referentni kod
Referentni kod

GitHub spremište

Preporučeni: