Obsah:

Počítadlo sekund MSP430: 10 kroků
Počítadlo sekund MSP430: 10 kroků

Video: Počítadlo sekund MSP430: 10 kroků

Video: Počítadlo sekund MSP430: 10 kroků
Video: Ментальная арифметика Экзамен 2024, Červenec
Anonim
Počítadlo sekund MSP430
Počítadlo sekund MSP430

Vítejte! Počítadlo sekund: Použití CCStudio 8 a MSP430F5529 pro projekt.

Jazyk C pro kódování mikrořadiče. Použití režimů, časovačů a přerušení s nízkým výkonem. Výstup je zobrazen pomocí 7 segmentů.

Krok 1: Přehled

Porozumění
Porozumění

Pojďme začít!

Inicializujte časovač hlídání do stavu VYP pomocí požadovaného hesla pro časovač hlídání (Pomáhá udržovat kontrolu nekonečných smyček a udržovat procesor v bezpečí).

#zahrnout

/** * main.c */

int main (neplatné)

{

WDTCTL = WDTPW | WDTHOLD; // zastavení hlídače času

návrat 0;

}

Krok 2: Inicializace portu

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 nám říká, že celý PORT-3 je inicializován tak, aby přijímal vstupy.

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

P3DIR | = 0x01 pouze výstup P3.0 je inicializován pro výstup v PORT-3. Následuje mapování hexadecimálního portu.

P4REN | = 0xFF, to znamená, že na pinech PORT-4 jsou povoleny odpory nahoru/dolů.

K jejich výběru mezi Pull UP nebo Pull DOWN se používá instrukce P $ OUT | = 0xFF.

Pokud je použit 0xFF, konfigurují se jako odpory Pull UP a pokud 0x00 konfigurují jako Pull DOWN.

Krok 3: Ultra nízký výkon

MSP430F5529 nám umožňuje snížit ztrátu energie z procesoru. To je užitečné v samostatných aplikacích.

To vyžaduje deklaraci všech pinů nebo portů na výstup.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Krok 4: ČASOVAČ

Použití časovače pro zpoždění generování jedné sekundy. To používá SMCLK 1 MHz, také časovač běží v režimu nízké spotřeby (v dalším kroku je po jeho počítání přerušeno z LPM). Tento proces šetří energii a zátěž procesoru

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Hodnoty jsou 999, protože trvá jeden další počet, než se v registru časovače vrátí zpět na nulu.

Krok 5: Režim nízké spotřeby

_BIS_SR (LPM0_bits+GIE);

To umožňuje obecné přerušení povolit (GIE) a umístí CPU na LPM0, kde je MCLK, který podporuje procesor, vypnutý, a běh SMCLK a ACLK, který udržuje časovač spuštěný. takže vidíme, že procesor je vypnutý, a to úsporou energie.

Krok 6: ISR-Timer

Časovač ISR
Časovač ISR

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

if (z> zpoždění)

{

P3OUT = kód [x];

P6OUT = kód1 [y];

x ++;

pokud (x == 10)

{

x = 0;

y ++;

}

pokud (y == 6)

y = 0;

z = 0;

}

}

pragma vektor je pro ISR reprezentaci v C embd.

code [x] a code1 [y] jsou pole, která obsahují výstupní hodnoty pro dva sedm segmentů, pro zobrazení počítadla 60 sekund.

Krok 7: Přerušení hardwaru

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Zde je P2.1 deklarováno jako hardwarové přerušení, pokud je tlačítko stisknuto, čítač se resetuje na hodnotu.

zbytek programu je zapsán uvnitř ISR tohoto přerušení.

Krok 8: ISR- Reset/ Tlačítko

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kód [x];

P6OUT = kód1 [y];

v ++;

pro (i = 0; i

{

P1OUT | = BIT0; //P1.0 = přepnout

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = přepnout

_delay_cycles (1048576);

}

Tento ISR vynuluje počitadlo a počítá, kolikrát byl stisknut zbytek.

(Zde je zobrazení provedeno pomocí LED přepínače, lze také použít jiné pole a časovač, pro zobrazení těchto hodnot jako výstup v 7 segmentu).

Krok 9: KÓD

KÓD
KÓD

#zahrnout

#definujte zpoždění 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; // zastavení hlídače času

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 přerušení časovače A0

#pragma vector = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

if (z> zpoždění)

{

P3OUT = kód [x];

P6OUT = kód1 [y];

x ++;

pokud (x == 10)

{

x = 0;

y ++;

}

pokud (y == 6)

y = 0;

z = 0;

}

}

// Servisní rutina přerušení hardwaru

#pragma vector = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kód [x];

P6OUT = kód1 [y];

v ++;

pro (i = 0; i

{P1OUT | = BIT0; // P1.0 = přepnout

_delay_cycles (1048576);

P1OUT & = ~ BIT0; // P1.0 = přepnout

_delay_cycles (1048576);

}

}

Krok 10: Referenční kód

Referenční kód
Referenční kód

Úložiště GitHub

Doporučuje: