Orodha ya maudhui:

Kaunta ya sekunde ya MSP430: Hatua 10
Kaunta ya sekunde ya MSP430: Hatua 10

Video: Kaunta ya sekunde ya MSP430: Hatua 10

Video: Kaunta ya sekunde ya MSP430: Hatua 10
Video: Азбука Уральских пельменей - О | Уральские пельмени 2019 2024, Novemba
Anonim
Kaunta ya sekunde ya MSP430
Kaunta ya sekunde ya MSP430

Karibu! Utengenezaji wa Kaunta ya Sekunde: Kutumia CCStudio 8 na MSP430F5529 kwa mradi huo.

Lugha ya C kuweka kificho cha kidhibiti kidogo. Kutumia Njia za Nguvu za Chini, Vipima na Usumbufu. Pato linaonyeshwa kupitia Sehemu 7.

Hatua ya 1: Ufahamu

Ufahamu
Ufahamu

Wacha tuanze!

Anzisha kipima muda cha mwangalizi kwenda HALI YAZIMA ukitumia nywila inayotakiwa kwa kipima muda cha mwangalizi (Inasaidia kutazama vitanzi visivyo na kipimo, kuweka processor salama).

# pamoja

/ ** * kuu.c * /

kuu (batili)

{

WDTCTL = WDTPW | WDTHOLD; // kuacha kipima muda cha mwangalizi

kurudi 0;

}

Hatua ya 2: Uanzishaji wa Bandari

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 inatuambia kuwa PORT-3 nzima imeanzishwa kuchukua pembejeo.

P3DIR | = 0xFF inatuambia kuwa PORT-3 nzima imeanzishwa ili kutoa matokeo.

P3DIR | = 0x01 pini tu P3.0 imeanzishwa ili kutoa PORT-3. Hii inafuata ramani ya Hexadecimal Port.

P4REN | = 0xFF, hii inaonyesha kuwa pini za PORT-4 zina vipinzaji vyake vya juu / chini.

Ili kuwachagua kati ya Vuta juu au Vuta chini, maagizo P $ OUT | = 0xFF hutumiwa.

Ikiwa 0xFF inatumiwa wanasanidi kama Vuta vipinga na ikiwa 0x00 wanasanidi kama Vuta CHINI.

Hatua ya 3: Nguvu ya chini ya Ultra

MSP430F5529 inaruhusu sisi kupunguza upotezaji wa nguvu kutoka kwa processor. Hii ni muhimu katika matumizi ya kibinafsi.

Hii inahitaji kutangazwa kwa pini zote au Bandari ili kutoa.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Hatua ya 4: TIMER

Matumizi ya kipima muda kwa kizazi cha Kuchelewa kwa sekunde moja. Hii hutumia SMCLK ya 1MHz, pia timer inaendesha katika Njia ya Nguvu ya Chini (katika hatua inayofuata, baada ya hesabu yake kukatizwa kutoka kwa LPM). Utaratibu huu huokoa nguvu na mzigo kwa processor

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Maadili ni 999, kwani inachukua hesabu moja zaidi kurudi nyuma hadi sifuri kwenye rejista ya kipima muda.

Hatua ya 5: Njia ya Nguvu ya Chini

_BIS_SR (LPM0_bits + GIE);

Hii inawezesha Usumbufu wa Jumla Wezesha (GIE), na inaweka CPU kwa LPM0, ambapo MCLK ambayo inasaidia cpu imezimwa, na SMCLK na ACLK zinaendesha ambazo zinaweka kipima muda. ili tuweze kuona CPU imezimwa, huko kwa kuokoa nguvu.

Hatua ya 6: ISR-Timer

ISR-Timer
ISR-Timer

#pragma vector = TIMER0_A0_VECTOR

_katiza timer Timer_A (batili)

{

z ++;

ikiwa (z> kuchelewa)

{

P3OUT = nambari [x];

P6OUT = code1 [y];

x ++;

ikiwa (x == 10)

{

x = 0;

y ++;

}

ikiwa (y == 6)

y = 0;

z = 0;

}

}

veg pragma ni ya uwakilishi wa ISR katika C embd.

nambari [x] na code1 [y] ni safu ambazo zina maadili ya pato kwa sehemu hizo mbili, kwa kuonyesha kaunta ya sekunde 60.

Hatua ya 7: Usumbufu wa vifaa

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Hapa P2.1 inatangazwa kama usumbufu wa vifaa, ikiwa kitufe kinabanwa, kaunta inarejeshea thamani.

mpango uliobaki umeandikwa ndani ya ISR ya usumbufu huu.

Hatua ya 8: ISR- Rudisha / Kitufe cha Kushinikiza

#pragma vector = PORT2_VECTOR

_katiza bandari batili_2 (batili)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = nambari [x];

P6OUT = code1 [y];

v ++;

kwa (i = 0; i

{

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

_kuchelewesha_mizunguko (1048576);

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

_kuchelewesha_mizunguko (1048576);

}

ISR hii inarudisha kaunta, na inahesabu hesabu ni mara ngapi zingine zilibanwa.

(Hapa kuna onyesho hufanywa kupitia toggle iliyoongozwa, inaweza pia kutumia safu nyingine na kipima muda, kuonyesha maadili hayo kama pato katika sehemu 7).

Hatua ya 9: CODE

CODE
CODE

# pamoja

#fafanua kuchelewa 1000

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

nambari ya char1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

tete isiyo sainiwa int x = 0, y = 0, z = 0;

tete unsigned int v = 0, i = 0;

utupu kuu ()

{

WDTCTL = WDTPW | WDTHOLD; // kuacha kipima muda cha mwangalizi

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 kukatiza utaratibu wa huduma

#pragma vector = TIMER0_A0_VECTOR

_katiza timer Timer_A (batili)

{

z ++;

ikiwa (z> kuchelewa)

{

P3OUT = nambari [x];

P6OUT = code1 [y];

x ++;

ikiwa (x == 10)

{

x = 0;

y ++;

}

ikiwa (y == 6)

y = 0;

z = 0;

}

}

// Vifaa vya kukatiza utaratibu wa huduma

#pragma vector = PORT2_VECTOR

_katiza bandari batili_2 (batili)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = nambari [x];

P6OUT = code1 [y];

v ++;

kwa (i = 0; i

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

_kuchelewesha_mizunguko (1048576);

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

_kuchelewesha_mizunguko (1048576);

}

}

Hatua ya 10: Nambari ya Marejeleo

Nambari ya Marejeleo
Nambari ya Marejeleo

Hifadhi ya GitHub

Ilipendekeza: