INHOUDSOPGAWE:

MSP430 sekondeteller: 10 stappe
MSP430 sekondeteller: 10 stappe

Video: MSP430 sekondeteller: 10 stappe

Video: MSP430 sekondeteller: 10 stappe
Video: How to install Clang LLVM 15.0.6 (Official Release) and how to compile and run C/C++ on Windows 10 2024, November
Anonim
MSP430 sekondeteller
MSP430 sekondeteller

Welkom! Maak van sekondeteller: Gebruik CCStudio 8 en MSP430F5529 vir die projek.

C -taal om die mikrobeheerder te kodeer. Lae kragmodusse, tydtellers en onderbrekings toepas. Die uitset word via 7 segmente vertoon.

Stap 1: Insig

Insig
Insig

Laat ons begin!

Initialiseer die waghond -timer in die UIT -toestand met behulp van die vereiste wagwoord vir die waghond -timer (dit help om oneindige lusse te kontroleer en die verwerker veilig te hou).

#insluit

/** * main.c */

int main (leeg)

{

WDTCTL = WDTPW | WDTHOLD; // stop waghond timer

terugkeer 0;

}

Stap 2: Portinitialisering

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 vertel ons dat die hele PORT-3 geïnitialiseer is om insette te neem.

P3DIR | = 0xFF vertel ons dat die hele PORT-3 geïnitialiseer is om uitsette te lewer.

P3DIR | = 0x01 slegs die pen P3.0 word geïnitialiseer om in PORT-3 uitgevoer te word. Dit volg op 'n heksadesimale poortkartering.

P4REN | = 0xFF, dit dui aan dat die penne van PORT-4 hul optel-/afwaartse weerstande aangeskakel het.

Om hulle te kies tussen Pull UP of Pull DOWN, word die instruksie P $ OUT | = 0xFF gebruik.

As 0xFF gebruik word, konfigureer dit as Pull UP -weerstande en as 0x00 dit as Pull DOWN.

Stap 3: Ultra lae krag

Met MSP430F5529 kan ons die kragverlies van die verwerker verminder. Dit is handig in selfstandige toepassings.

Dit vereis dat alle pen of poorte aangegee moet word om uit te voer.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Stap 4: TIMER

Gebruik van die timer vir 'n vertraging van 'n sekonde. Dit gebruik die SMCLK van 1MHz, en die timer loop ook in die modus Laag krag (in die volgende stap, nadat die telling onderbreek is van LPM). Hierdie proses bespaar krag en las op die verwerker

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Die waardes is 999, aangesien dit nog 'n telling neem om terug te keer na nul in die timerregister.

Stap 5: Lae kragmodus

_BIS_SR (LPM0_bits+GIE);

Dit maak General interrupt Enable (GIE) moontlik, en stel die SVE op LPM0, waar MCLK wat die cpu ondersteun, af is, en SMCLK en ACLK run wat die timer laat werk. sodat ons kan sien dat die SVE afgeskakel is deur krag te bespaar.

Stap 6: ISR-timer

ISR-timer
ISR-timer

#pragma -vektor = TIMER0_A0_VECTOR

_onderbreek leemte Timer_A (leeg)

{

z ++;

as (z> vertraging)

{

P3OUT = kode [x];

P6OUT = kode1 [y];

x ++;

as (x == 10)

{

x = 0;

y ++;

}

as (y == 6)

y = 0;

z = 0;

}

}

pragma -vektor is vir ISR -voorstelling in C embd.

kode [x] en kode1 [y] is die skikkings wat uitsetwaardes bevat vir die twee sewe segmente, om die teller van 60 sekondes te vertoon.

Stap 7: Hardewareonderbreking

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Hier word P2.1 verklaar as 'n hardeware -onderbreking; as die knoppie ingedruk word, word die teller teruggestel na die waarde.

die res -program word in die ISR van hierdie onderbreking geskryf.

Stap 8: ISR- Herstel-/ drukknop

#pragma -vektor = PORT2_VECTOR

_onderbreek leemtepoort_2 (leeg)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kode [x];

P6OUT = kode1 [y];

v ++;

vir (i = 0; i

{

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

_vertraag_fietse (1048576);

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

_vertraag_fietse (1048576);

}

Hierdie ISR stel die toonbank terug en tel hoeveel keer die res ingedruk is.

(Hier word vertoon via LED -skakelaar, kan u ook 'n ander skikking en timer gebruik om die waardes as uitvoer in 7 segmente te wys).

Stap 9: KODE

KODE
KODE

#insluit

#definieer vertraging 1000

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

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

vlugtige ongetekende int x = 0, y = 0, z = 0;

vlugtige ongetekende int v = 0, i = 0;

leegte hoof ()

{

WDTCTL = WDTPW | WDTHOLD; // stop waghond timer

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

}

// Timer A0 onderbreek diensroetine

#pragma -vektor = TIMER0_A0_VECTOR

_onderbreek leemte Timer_A (leeg)

{

z ++;

as (z> vertraging)

{

P3OUT = kode [x];

P6OUT = kode1 [y];

x ++;

as (x == 10)

{

x = 0;

y ++;

}

as (y == 6)

y = 0;

z = 0;

}

}

// Diensroetine onderbreek hardeware

#pragma -vektor = PORT2_VECTOR

_onderbreek leemtepoort_2 (leeg)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kode [x];

P6OUT = kode1 [y];

v ++;

vir (i = 0; i

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

_vertraag_fietse (1048576);

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

_vertraag_fietse (1048576);

}

}

Stap 10: Verwysingskode

Verwysingskode
Verwysingskode

GitHub -bewaarplek

Aanbeveel: