Obsah:

Počítadlo sekúnd MSP430: 10 krokov
Počítadlo sekúnd MSP430: 10 krokov

Video: Počítadlo sekúnd MSP430: 10 krokov

Video: Počítadlo sekúnd MSP430: 10 krokov
Video: Основы программирования микроконтроллеров. Лекция в МИРЭА 2024, November
Anonim
Počítadlo sekúnd MSP430
Počítadlo sekúnd MSP430

Vitajte! Počítadlo sekúnd: Použitie projektu CCStudio 8 a MSP430F5529 na projekt.

Jazyk C na kódovanie mikroovládača. Použitie režimov, časovačov a prerušení s nízkym výkonom. Výstup je zobrazený prostredníctvom 7 segmentov.

Krok 1: Prehľad

Náhľad
Náhľad

Poďme začať!

Inicializujte časovač strážneho psa do stavu VYPNUTÉ pomocou požadovaného hesla pre časovač strážneho psa (Pomáha udržiavať kontrolu nad nekonečnými slučkami a udržiavať procesor v bezpečí).

#zahrnúť

/** * main.c */

int main (prázdny)

{

WDTCTL = WDTPW | WDTHOLD; // zastavenie časovača strážneho psa

návrat 0;

}

Krok 2: Inicializácia portu

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 nám hovorí, že celý PORT-3 je inicializovaný tak, aby prijímal vstupy.

P3DIR | = 0xFF nám hovorí, že celý PORT-3 je inicializovaný, aby poskytoval výstupy.

P3DIR | = 0x01 iba pin P3.0 je inicializovaný na výstup v PORT-3. Nasleduje mapovanie hexadecimálneho portu.

P4REN | = 0xFF, to znamená, že na kolíkoch PORT-4 sú povolené odpory ťahu nahor/nadol.

Na ich výber medzi Pull UP alebo Pull DOWN sa používa inštrukcia P $ OUT | = 0xFF.

Ak sa použije 0xFF, nakonfigurujú sa ako odpory Pull UP a ak 0x00 nakonfigurujú ako Pull DOWN.

Krok 3: Ultra nízky výkon

MSP430F5529 nám umožňuje znížiť stratu energie z procesora. To je užitočné v samostatných aplikáciách.

To si vyžaduje deklaráciu všetkých pinov alebo portov na výstup.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Krok 4: ČASOVAČ

Použitie časovača na oneskorenie generovania jednej sekundy. Používa sa SMCLK s frekvenciou 1 MHz a časovač beží aj v režime nízkej spotreby (v nasledujúcom kroku je jeho odpočítavanie prerušené z LPM). Tento proces šetrí energiu a záťaž procesora

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Hodnoty sú 999, pretože trvá ešte jedenkrát, kým sa v registri časovača vráti späť na nulu.

Krok 5: Režim nízkej spotreby

_BIS_SR (LPM0_bits+GIE);

To umožňuje Všeobecné prerušenie zapnúť (GIE) a prepne procesor na LPM0, kde je vypnutý MCLK, ktorý podporuje procesor, a SMCLK a ACLK, ktoré nechávajú spustený časovač. takže vidíme, že procesor je vypnutý, a to z dôvodu úspory energie.

Krok 6: Časovač ISR

Časovač ISR
Časovač ISR

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (neplatné)

{

z ++;

ak (z> oneskorenie)

{

P3OUT = kód [x];

P6OUT = kód1 [y];

x ++;

ak (x == 10)

{

x = 0;

y ++;

}

ak (y == 6)

y = 0;

z = 0;

}

}

pragma vektor je na reprezentáciu ISR v C embde.

kód [x] a kód1 [y] sú polia, ktoré obsahujú výstupné hodnoty pre sedem siedmich segmentov, na zobrazenie počítadla 60 sekúnd.

Krok 7: Prerušenie hardvéru

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Tu je P2.1 deklarovaný ako hardvérové prerušenie, ak je tlačidlo stlačené, počítadlo sa vynuluje.

zvyšok programu je zapísaný do ISR tohto prerušenia.

Krok 8: ISR- Reset/ tlačidlo

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kód [x];

P6OUT = kód1 [y];

v ++;

pre (i = 0; i

{

P1OUT | = BIT0; //P1.0 = prepínať

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = prepínať

_delay_cycles (1048576);

}

Tento ISR vynuluje počítadlo a udržiava počítanie, koľkokrát bol stlačený zvyšok.

(Tu je zobrazenie vykonávané pomocou LED prepínača, môže sa použiť aj iné pole a časovač, aby sa tieto hodnoty zobrazili ako výstup v 7 segmentoch).

Krok 9: KÓD

KÓD
KÓD

#zahrnúť

#definujte oneskorenie 1000

znakový kód = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

znakový kód1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

volatile unsigned int x = 0, y = 0, z = 0;

volatile unsigned int v = 0, i = 0;

neplatné hlavné ()

{

WDTCTL = WDTPW | WDTHOLD; // zastavenie časovača strážneho psa

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

}

// Servisná rutina prerušenia časovača A0

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (neplatné)

{

z ++;

ak (z> oneskorenie)

{

P3OUT = kód [x];

P6OUT = kód1 [y];

x ++;

ak (x == 10)

{

x = 0;

y ++;

}

ak (y == 6)

y = 0;

z = 0;

}

}

// Servisná rutina prerušenia hardvéru

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kód [x];

P6OUT = kód1 [y];

v ++;

pre (i = 0; i

{P1OUT | = BIT0; // P1.0 = prepínať

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = prepínať

_delay_cycles (1048576);

}

}

Krok 10: Referenčný kód

Referenčný kód
Referenčný kód

Úložisko GitHub

Odporúča: