Turinys:

MSP430 sekundžių skaitiklis: 10 žingsnių
MSP430 sekundžių skaitiklis: 10 žingsnių

Video: MSP430 sekundžių skaitiklis: 10 žingsnių

Video: MSP430 sekundžių skaitiklis: 10 žingsnių
Video: Testuojam laikrodį su IV3 lempomis 2024, Lapkritis
Anonim
MSP430 sekundžių skaitiklis
MSP430 sekundžių skaitiklis

Sveiki! „Seconds Counter“kūrimas: projektui naudojant „CCStudio 8“ir „MSP430F5529“.

C kalba, skirta mikrovaldikliui koduoti. Mažos galios režimų, laikmačių ir pertraukų taikymas. Išvestis rodoma per 7 segmentus.

1 žingsnis: įžvalga

Įžvalga
Įžvalga

Pradėkime!

Inicijuokite stebėtojo laikmatį į IŠJUNGTA būseną, naudodami reikiamą stebėtojo laikmačio slaptažodį (tai padeda nuolat tikrinti begalines kilpas, kad procesorius būtų saugus).

#įtraukti

/** * pagrindinis.c */

int main (niekinis)

{

WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer

grįžti 0;

}

2 žingsnis: uosto inicijavimas

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 nurodo, kad visas PORT-3 yra inicijuotas, kad būtų galima įvesti duomenis.

P3DIR | = 0xFF nurodo, kad visas PORT-3 yra inicijuotas, kad būtų galima gauti išvestį.

P3DIR | = 0x01 tik kaištelis P3.0 inicijuojamas išvesti PORT-3. Tai seka šešioliktainį prievadą.

P4REN | = 0xFF, tai rodo, kad PORT-4 kaiščių įjungimo/pakėlimo rezistoriai yra įjungti.

Norėdami juos pasirinkti tarp Pull UP arba Pull DOWN, naudojama instrukcija P $ OUT | = 0xFF.

Jei naudojamas 0xFF, jie konfigūruojami kaip „Pull UP“rezistoriai, o jei 0x00 - „Pull DOWN“.

3 žingsnis: ypač maža galia

MSP430F5529 leidžia sumažinti procesoriaus energijos nuostolius. Tai naudinga atskirose programose.

Tam reikia išvesti visus kaiščius arba prievadus.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

4 žingsnis: LAIKMATIS

Laikmačio naudojimas delsos generavimui vieną sekundę. Tam naudojamas 1MHz SMCLK, taip pat laikmatis veikia mažos galios režimu (kitame etape, kai jo skaičiavimas nutraukiamas nuo LPM). Šis procesas taupo procesoriaus energiją ir naštą

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Reikšmės yra 999, nes reikia dar vieno skaičiaus, kad laikmačio registre grįžtumėte į nulį.

5 žingsnis: mažos galios režimas

_BIS_SR (LPM0_bits+GIE);

Tai įgalina „General interrupt Enable“(GIE) ir įjungia procesorių į LPM0, kur MCLK, palaikantis procesorių, yra išjungtas, o „SMCLK“ir „ACLK“veikia taip, kad laikmatis veiktų. kad matytume, kad taupant energiją procesorius yra išjungtas.

6 veiksmas: ISR laikmatis

ISR laikmatis
ISR laikmatis

#pragma vektorius = TIMER0_A0_VECTOR

_interrupt void Timer_A (negalioja)

{

z ++;

jei (z> delsimas)

{

P3OUT = kodas [x];

P6OUT = kodas1 [y];

x ++;

jei (x == 10)

{

x = 0;

y ++;

}

jei (y == 6)

y = 0;

z = 0;

}

}

pragma vektorius skirtas ISR atvaizdavimui C embd.

kodas [x] ir kodas1 [y] yra masyvai, kuriuose yra dviejų septynių segmentų išvesties reikšmės 60 sekundžių skaitikliui rodyti.

7 žingsnis: Aparatūros pertraukimas

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Čia P2.1 yra paskelbtas kaip aparatūros pertraukimas, jei paspaudžiamas mygtukas, skaitiklis atstatomas į vertę.

poilsio programa įrašyta šio pertraukimo ISR viduje.

8 žingsnis: ISR- atstatymas/ paspaudimas

#pragma vektorius = PORT2_VECTOR

_interrupt void port_2 (negalioja)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kodas [x];

P6OUT = kodas1 [y];

v ++;

už (i = 0; t

{

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

_delsimo_ciklai (1048576);

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

_delsimo_ciklai (1048576);

}

Šis ISR iš naujo nustato skaitiklį ir skaičiuoja, kiek kartų buvo paspausta likusi dalis.

(Čia rodomas ekranas per LED perjungiklį, taip pat gali būti naudojamas kitas masyvas ir laikmatis, kad tos vertės būtų rodomos kaip išvestis 7 segmentuose).

9 veiksmas: KODAS

KODAS
KODAS

#įtraukti

#define uždelsimas 1000

simbolių kodas = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

anglies kodas1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

nepastovus nepasirašytas int x = 0, y = 0, z = 0;

nepastovus nepasirašytas int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // stop watchdog 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);

}

// Laikmatis A0 pertraukimo aptarnavimo tvarka

#pragma vektorius = TIMER0_A0_VECTOR

_interrupt void Timer_A (negalioja)

{

z ++;

jei (z> delsimas)

{

P3OUT = kodas [x];

P6OUT = kodas1 [y];

x ++;

jei (x == 10)

{

x = 0;

y ++;

}

jei (y == 6)

y = 0;

z = 0;

}

}

// Techninės įrangos pertraukimo aptarnavimo tvarka

#pragma vektorius = PORT2_VECTOR

_interrupt void port_2 (negalioja)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kodas [x];

P6OUT = kodas1 [y];

v ++;

už (i = 0; t

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

_delsimo_ciklai (1048576);

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

_delsimo_ciklai (1048576);

}

}

10 veiksmas: nuorodos kodas

Nuorodos kodas
Nuorodos kodas

„GitHub“saugykla

Rekomenduojamas: