Sisukord:

MSP430 sekundite loendur: 10 sammu
MSP430 sekundite loendur: 10 sammu

Video: MSP430 sekundite loendur: 10 sammu

Video: MSP430 sekundite loendur: 10 sammu
Video: Arduino counter button 2024, November
Anonim
MSP430 sekundite loendur
MSP430 sekundite loendur

Tere tulemast! Sekundite loenduri tegemine: projekti jaoks CCStudio 8 ja MSP430F5529 kasutamine.

C keel mikrokontrolleri kodeerimiseks. Vähese energiatarbega režiimide, taimerite ja katkestuste rakendamine. Väljundit kuvatakse 7 segmendi kaudu.

1. samm: ülevaade

Insight
Insight

Alustagem!

Initsialiseerige valvekoera taimer väljalülitatud olekusse, kasutades valvekoera taimeri jaoks vajalikku parooli (see aitab kontrollida lõpmatuid silmuseid, tagades protsessori turvalisuse).

#kaasake

/** * peamine.c */

int main (tühine)

{

WDTCTL = WDTPW | WDTHOLD; // peatada valvekoera taimer

tagasitulek 0;

}

2. samm: pordi lähtestamine

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 ütleb meile, et kogu PORT-3 on lähtestatud sisendite vastuvõtmiseks.

P3DIR | = 0xFF ütleb meile, et kogu PORT-3 lähtestatakse väljundite andmiseks.

P3DIR | = 0x01 lähtestatakse PORT-3 väljundiks ainult tihvt P3.0. See järgneb kuueteistkümnendsüsteemi sadama kaardistamisele.

P4REN | = 0xFF, see näitab, et PORT-4 tihvtidel on üles/alla takistid lubatud.

Nende valimiseks Pull UP või Pull DOWN kasutatakse käsku P $ OUT | = 0xFF.

Kui kasutatakse väärtust 0xFF, konfigureeritakse need tõmmatavateks takistiteks ja kui 0x00, siis allalaadimiseks.

3. samm: ülimadal võimsus

MSP430F5529 võimaldab meil vähendada protsessori toitekaod. See on kasulik iseseisvates rakendustes.

See nõuab väljundi kõigi pinide või portide deklareerimist.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

4. samm: taimer

Taimeri kasutamine ühe sekundi viivituse loomiseks. See kasutab 1MHz SMCLK -d, samuti töötab taimer vähese energiatarbega režiimis (järgmises etapis pärast selle loendamist LPM -i katkestamine). See protsess säästab protsessori energiat ja koormust

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Väärtused on 999, kuna taimeriregistris nulli tagasi pöördumiseks kulub veel üks arv.

Samm: vähese energiatarbega režiim

_BIS_SR (LPM0_bits+GIE);

See lubab üldise katkestamise lubamise (GIE) ja seab protsessori LPM0 -le, kus CPU -d toetav MCLK on välja lülitatud ning SMCLK ja ACLK töötavad, mis hoiavad taimerit töös. nii et näeme, et protsessor on energia säästmise tõttu välja lülitatud.

6. samm: ISR-taimer

ISR-taimer
ISR-taimer

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (tühine)

{

z ++;

kui (z> viivitus)

{

P3OUT = kood [x];

P6OUT = kood1 [y];

x ++;

kui (x == 10)

{

x = 0;

y ++;

}

kui (y == 6)

y = 0;

z = 0;

}

}

pragma vektor on mõeldud ISR -i esitamiseks C embd -s.

kood [x] ja kood1 [y] on massiivid, mis sisaldavad kahe seitsme segmendi väljundväärtusi 60 sekundi loenduri kuvamiseks.

Samm: riistvara katkestamine

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Siin kuulutatakse P2.1 riistvarakatkestuseks, kui nuppu vajutatakse, lähtestatakse loendur väärtusele.

ülejäänud programm on kirjutatud selle katkestuse ISR -i.

8. samm: ISR- lähtestamine/ vajutamine

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (tühine)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kood [x];

P6OUT = kood1 [y];

v ++;

jaoks (i = 0; i

{

P1OUT | = BIT0; //P1.0 = lüliti

_ viivitustsüklid (1048576);

P1OUT & = ~ BIT0; // P1.0 = lüliti

_ viivitustsüklid (1048576);

}

See ISR lähtestab loenduri ja loeb, mitu korda ülejäänud osa vajutati.

(Siin kuvatakse LED -lüliti abil, saab kasutada ka mõnda muud massiivi ja taimerit, et näidata neid väärtusi väljundina 7 segmendis).

9. samm: KOODI

KOOD
KOOD

#kaasake

#defineerige viivitus 1000

sümbolikood = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

sümbolikood = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

lenduv allkirjastamata int x = 0, y = 0, z = 0;

lenduv allkirjastamata int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // peatada valvekoera taimer

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

}

// Taimer A0 teenuse katkestamise rutiin

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (tühine)

{

z ++;

kui (z> viivitus)

{

P3OUT = kood [x];

P6OUT = kood1 [y];

x ++;

kui (x == 10)

{

x = 0;

y ++;

}

kui (y == 6)

y = 0;

z = 0;

}

}

// Riistvara katkestusteenuse rutiin

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (tühine)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kood [x];

P6OUT = kood1 [y];

v ++;

jaoks (i = 0; i

{P1OUT | = BIT0; // P1.0 = lüliti

_ viivitustsüklid (1048576);

P1OUT & = ~ BIT0; // P1.0 = lüliti

_ viivitustsüklid (1048576);

}

}

10. samm: viitekood

Viitekood
Viitekood

GitHubi hoidla

Soovitan: