Satura rādītājs:

MSP430 sekunžu skaitītājs: 10 soļi
MSP430 sekunžu skaitītājs: 10 soļi

Video: MSP430 sekunžu skaitītājs: 10 soļi

Video: MSP430 sekunžu skaitītājs: 10 soļi
Video: Arduino counter button 2024, Novembris
Anonim
MSP430 sekunžu skaitītājs
MSP430 sekunžu skaitītājs

Laipni lūdzam! Sekunžu skaitītāja izveide: projektam izmantojot CCStudio 8 un MSP430F5529.

C valoda, lai kodētu mikrokontrolleri. Mazjaudas režīmu, taimeru un pārtraukumu izmantošana. Izvade tiek parādīta, izmantojot 7 segmentu.

1. darbība. Ieskats

Ieskats
Ieskats

Sāksim!

Inicializējiet sargsuņa taimeri OFF stāvoklī, izmantojot nepieciešamo sargsuņa taimera paroli (tas palīdz kontrolēt bezgalīgās cilpas, nodrošinot procesora drošību).

#iekļaut

/** * galvenais.c */

int main (anulēts)

{

WDTCTL = WDTPW | WDTHOLD; // apturēt sargsuņa taimeri

atgriezties 0;

}

2. darbība: ostas inicializēšana

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 norāda, ka viss PORT-3 ir inicializēts, lai ņemtu datus.

P3DIR | = 0xFF norāda, ka viss PORT-3 ir inicializēts, lai sniegtu rezultātus.

P3DIR | = 0x01 tikai tapa P3.0 tiek inicializēta, lai izvadītu PORT-3. Tas seko heksadecimālās ostas kartēšanai.

P4REN | = 0xFF, tas norāda, ka PORT-4 tapām ir iespējoti pacelšanas/nolaišanas rezistori.

Lai tos atlasītu starp Pull UP vai Pull DOWN, tiek izmantota instrukcija P $ OUT | = 0xFF.

Ja tiek izmantots 0xFF, tie tiek konfigurēti kā Pull UP rezistori, un, ja 0x00, tie tiek konfigurēti kā Pull DOWN.

3. solis: īpaši zema jauda

MSP430F5529 ļauj samazināt procesora enerģijas zudumus. Tas ir noderīgi atsevišķās lietojumprogrammās.

Tas prasa deklarēt visus izejas tapas vai portus.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

4. darbība: taimeris

Taimera izmantošana vienas sekundes aizkavei. Tas izmanto 1MHz SMCLK, kā arī taimeris darbojas mazjaudas režīmā (nākamajā solī pēc tam, kad tā skaitīšana ir pārtraukta no LPM). Šis process ietaupa procesora enerģiju un slogu

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Vērtības ir 999, jo, lai atgrieztos taimera reģistrā līdz nullei, nepieciešams vēl viens skaitlis.

5. darbība. Mazjaudas režīms

_BIS_SR (LPM0_bits+GIE);

Tādējādi tiek iespējota vispārējā pārtraukšanas iespējošana (GIE) un CPU tiek iestatīts uz LPM0, kur ir izslēgts MCLK, kas atbalsta procesoru, un darbojas SMCLK un ACLK, kas nodrošina taimera darbību. lai mēs varētu redzēt, ka CPU ir izslēgts, taupot enerģiju.

6. darbība: ISR taimeris

ISR taimeris
ISR taimeris

#pragma vektors = TIMER0_A0_VECTOR

_interrupt void Timer_A (anulēts)

{

z ++;

ja (z> kavēšanās)

{

P3OUT = kods [x];

P6OUT = kods1 [y];

x ++;

ja (x == 10)

{

x = 0;

y ++;

}

ja (y == 6)

y = 0;

z = 0;

}

}

pragma vektors ir paredzēts ISR attēlojumam C embd.

kods [x] un kods1 [y] ir masīvi, kas satur izvades vērtības abiem septiņiem segmentiem, lai parādītu 60 sekunžu skaitītāju.

7. darbība. Aparatūras pārtraukšana

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Šeit P2.1 tiek pasludināts par aparatūras pārtraukumu, ja tiek nospiesta poga, skaitītājs tiek atiestatīts uz vērtību.

pārējā programma ir ierakstīta šī pārtraukuma ISR iekšpusē.

8. solis: ISR- atiestatīšana/ spiedpoga

#pragma vektors = PORT2_VECTOR

_interrupt void port_2 (anulēts)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kods [x];

P6OUT = kods1 [y];

v ++;

par (i = 0; i

{

P1OUT | = BIT0; //P1.0 = pārslēgties

_kavēšanās_cikli (1048576);

P1OUT & = ~ BIT0; // P1.0 = pārslēgties

_kavēšanās_cikli (1048576);

}

Šis ISR atiestata skaitītāju un uzskaita, cik reizes pārējais tika nospiests.

(Šeit displejs tiek veidots, izmantojot pārslēgtu LED, var izmantot arī citu masīvu un taimeri, lai parādītu šīs vērtības kā izvadi 7 segmentos).

9. darbība: KODĒT

KODS
KODS

#iekļaut

#definēt kavēšanos 1000

rakstzīmju kods = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

rakstzīmju kods1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

gaistošs neparakstīts int x = 0, y = 0, z = 0;

gaistošs neparakstīts int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // apturēt sargsuņa taimeri

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

}

// Taimeris A0 pārtraukt pakalpojumu rutīnu

#pragma vektors = TIMER0_A0_VECTOR

_interrupt void Timer_A (anulēts)

{

z ++;

ja (z> kavēšanās)

{

P3OUT = kods [x];

P6OUT = kods1 [y];

x ++;

ja (x == 10)

{

x = 0;

y ++;

}

ja (y == 6)

y = 0;

z = 0;

}

}

// Aparatūras pārtraukšanas pakalpojumu rutīna

#pragma vektors = PORT2_VECTOR

_interrupt void port_2 (anulēts)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kods [x];

P6OUT = kods1 [y];

v ++;

par (i = 0; i

{P1OUT | = BIT0; // P1.0 = pārslēgties

_kavēšanās_cikli (1048576);

P1OUT & = ~ BIT0; // P1.0 = pārslēgties

_kavēšanās_cikli (1048576);

}

}

10. darbība: atsauces kods

Atsauces kods
Atsauces kods

GitHub krātuve

Ieteicams: