Talaan ng mga Nilalaman:

MSP430 Segundo Counter: 10 Hakbang
MSP430 Segundo Counter: 10 Hakbang

Video: MSP430 Segundo Counter: 10 Hakbang

Video: MSP430 Segundo Counter: 10 Hakbang
Video: 12.1 - MSP430 Timers - Overview and Calculating Time Difference 2024, Nobyembre
Anonim
MSP430 Segundo Counter
MSP430 Segundo Counter

Maligayang pagdating! Making of Seconds Counter: Paggamit ng CCStudio 8 at MSP430F5529 para sa proyekto.

C wika upang mai-code ang micro controller. Paglalapat ng Mababang Mga Power Mode, Timer at Interrupts. Ang output ay ipinapakita sa pamamagitan ng 7 Segment.

Hakbang 1: Pananaw

Kabatiran
Kabatiran

Magsimula na tayo!

Pinasimulan ang timer ng watchdog sa OFF na estado gamit ang kinakailangang password para sa timer ng watchdog (Nakakatulong ito upang mapanatili ang pagsusuri ng mga walang katapusang mga loop, panatilihing ligtas ang processor).

# isama

/ ** * main.c * /

int main (walang bisa)

{

WDTCTL = WDTPW | WDTHOLD; // stop timer ng tagapagbantay

ibalik ang 0;

}

Hakbang 2: Initisasyon ng Port

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

Sinabi sa amin ng P3DIR | = 0x00 na ang kabuuan ng PORT-3 ay naisasimulan upang kumuha ng mga input.

Sinabi sa amin ng P3DIR | = 0xFF na ang kabuuan ng PORT-3 ay pinasimulan upang magbigay ng mga output.

P3DIR | = 0x01 ang pin P3.0 lamang ang naisasimulan upang ma-output sa PORT-3. Sumusunod ito sa isang Hexadecimal Port mapping.

P4REN | = 0xFF, ipinapahiwatig nito na ang mga pin ng PORT-4 ay pinagana ang kanilang pull up / down resistors.

Upang mapili ang mga ito sa pagitan ng Pull UP o Pull Down, ang tagubiling P $ OUT | = 0xFF ay ginagamit.

Kung ginagamit ang 0xFF nag-configure sila bilang Pull UP resistors at kung 0x00 nag-configure sila bilang Pull Down.

Hakbang 3: Ultra Mababang Lakas

Pinapayagan kami ng MSP430F5529 na bawasan ang pagkawala ng kuryente mula sa processor. Kapaki-pakinabang ito sa mga standalone na application.

Tumatawag ito para sa pagdeklara ng lahat ng mga pin o Port na output.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Hakbang 4: TIMER

Paggamit ng timer para sa Pag-antala ng henerasyon ng isang segundo. Gumagamit ito ng SMCLK ng 1MHz, tumatakbo din ang timer sa Mababang power Mode (sa susunod na hakbang, pagkatapos ng bilang nito ay nagambala ito mula sa LPM). Ang prosesong ito ay nakakatipid ng lakas at pasan sa processor

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Ang mga halaga ay 999, dahil ang tumatagal ng isa pang bilang upang i-roll pabalik sa zero sa timer register.

Hakbang 5: Mababang Power Mode

_BIS_SR (LPM0_bits + GIE);

Pinapayagan nito ang General interrupt Enable (GIE), at inilalagay ang CPU sa LPM0, kung saan naka-off ang MCLK na sumusuporta sa cpu, at tumakbo ang SMCLK at ACLK na pinapanatili ang pagpapatakbo ng timer. sa gayon maaari naming makita ang CPU ay naka-patay, doon sa pamamagitan ng pag-save ng lakas.

Hakbang 6: ISR-Timer

ISR-Timer
ISR-Timer

#pragma vector = TIMER0_A0_VECTOR

_ makagambala sa walang bisa na Timer_A (walang bisa)

{

z ++;

kung (z> antala)

{

P3OUT = code [x];

P6OUT = code1 [y];

x ++;

kung (x == 10)

{

x = 0;

y ++;

}

kung (y == 6)

y = 0;

z = 0;

}

}

ang pragma vector ay para sa representasyon ng ISR sa C embd.

ang code [x] at code1 [y] ay ang mga arrays na naglalaman ng mga halaga ng output para sa dalawang pitong segment, para sa pagpapakita ng counter ng 60 segundo.

Hakbang 7: Makagambala sa Hardware

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Dito ay idineklara bilang isang nakakagambala sa hardware, kung ang pindutan ay pinindot, ang counter ay reset sa halaga.

ang natitirang programa ay nakasulat sa loob ng ISR ng makagambala na ito.

Hakbang 8: ISR- I-reset / Button ng Push

#pragma vector = PORT2_VECTOR

_ makagambala sa walang bisa na port_2 (walang bisa)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = code [x];

P6OUT = code1 [y];

v ++;

para sa (i = 0; i

{

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

_delay_cycles (1048576);

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

_delay_cycles (1048576);

}

Ang ISR na ito ay nagre-reset ng counter, at patuloy na mabibilang kung gaano karaming beses ang natitira ay pinindot.

(Narito ang pagpapakita ay ginawa sa pamamagitan ng led toggle, maaari ring gumamit ng isa pang array at timer, upang ipakita ang mga halagang iyon bilang output sa 7 segment).

Hakbang 9: CODE

KODE
KODE

# isama

# tukuyin ang pagkaantala ng 1000

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

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

pabagu-bago ng unsigned int x = 0, y = 0, z = 0;

pabagu-bago ng unsigned int v = 0, i = 0;

walang bisa pangunahing ()

{

WDTCTL = WDTPW | WDTHOLD; // stop timer ng tagapagbantay

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

}

// Ginagambala ng Timer A0 na gawain sa serbisyo

#pragma vector = TIMER0_A0_VECTOR

_ makagambala sa walang bisa na Timer_A (walang bisa)

{

z ++;

kung (z> antala)

{

P3OUT = code [x];

P6OUT = code1 [y];

x ++;

kung (x == 10)

{

x = 0;

y ++;

}

kung (y == 6)

y = 0;

z = 0;

}

}

// Hardware makagambala sa gawain sa serbisyo

#pragma vector = PORT2_VECTOR

_ makagambala sa walang bisa na port_2 (walang bisa)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = code [x];

P6OUT = code1 [y];

v ++;

para sa (i = 0; i

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

_delay_cycles (1048576);

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

_delay_cycles (1048576);

}

}

Hakbang 10: Code ng Sanggunian

Code ng Sanggunian
Code ng Sanggunian

Repository ng GitHub

Inirerekumendang: