Innehållsförteckning:

MSP430 Seconds Counter: 10 steg
MSP430 Seconds Counter: 10 steg

Video: MSP430 Seconds Counter: 10 steg

Video: MSP430 Seconds Counter: 10 steg
Video: 12.1 - MSP430 Timers - Overview and Calculating Time Difference 2024, Juli
Anonim
MSP430 Seconds Counter
MSP430 Seconds Counter

Välkommen! Making of Seconds Counter: Använda CCStudio 8 och MSP430F5529 för projektet.

C -språk för att koda mikrokontrollern. Tillämpa lågeffektlägen, timers och avbrott. Utgången visas via 7 segment.

Steg 1: Insikt

Insikt
Insikt

Låt oss börja!

Initiera vakthundstimern till AV -läge med hjälp av det nödvändiga lösenordet för vakthundstimern (Det hjälper till att hålla koll på oändliga slingor och hålla processorn säker).

#omfatta

/** * main.c */

int main (void)

{

WDTCTL = WDTPW | WDTHOLD; // stopp vakthund timer

returnera 0;

}

Steg 2: Portinitialisering

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 berättar att hela PORT-3 initieras för att ta in ingångar.

P3DIR | = 0xFF berättar att hela PORT-3 initieras för att ge utdata.

P3DIR | = 0x01 initialiseras endast stiftet P3.0 för utmatning i PORT-3. Detta följer en hexadecimal portmappning.

P4REN | = 0xFF, detta indikerar att stiften på PORT-4 har sina upp-/nedmotstånd aktiverade.

För att välja dem mellan Pull UP eller Pull DOWN används instruktionen P $ OUT | = 0xFF.

Om 0xFF används konfigureras de som Pull UP -motstånd och om 0x00 konfigureras de som Pull DOWN.

Steg 3: Ultra Low Power

MSP430F5529 gör att vi kan minska strömförlusten från processorn. Detta är användbart i fristående applikationer.

Detta kräver deklaration av alla stift eller portar för utmatning.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Steg 4: TIMER

Användning av timer för fördröjning av en sekund. Detta använder SMCLK på 1 MHz, även timern körs i Low Power Mode (i nästa steg, efter dess räkning avbröts det från LPM). Denna process sparar kraft och börda på processorn

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Värdena är 999, eftersom det tar ytterligare en räkning för att rulla tillbaka till noll i timerregistret.

Steg 5: Low Power Mode

_BIS_SR (LPM0_bits+GIE);

Detta möjliggör General Interrupt Enable (GIE) och sätter CPU: n till LPM0, där MCLK som stöder cpu är avstängd, och SMCLK och ACLK -körning som håller timern igång. så vi kan se att CPU är avstängd, där genom att spara ström.

Steg 6: ISR-timer

ISR-timer
ISR-timer

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

om (z> fördröjning)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

om (x == 10)

{

x = 0;

y ++;

}

om (y == 6)

y = 0;

z = 0;

}

}

pragma -vektorn är för ISR -representation i C embd.

kod [x] och kod1 [y] är matriserna som innehåller utgångsvärden för de två sju segmenten, för att visa 60 sekunders räknare.

Steg 7: Hårdvaruavbrott

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Här deklareras P2.1 som ett hårdvaruavbrott, om knappen trycks in återställs räknaren till värdet.

resten program skrivs inuti ISR för detta avbrott.

Steg 8: ISR- Återställ/ tryckknapp

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

för (i = 0; i

{

P1OUT | = BIT0; //P1.0 = växla

_fördröjning_cyklar (1048576);

P1OUT & = ~ BIT0; // P1.0 = växla

_fördröjning_cyklar (1048576);

}

Denna ISR återställer räknaren och räknar med hur många gånger resten trycktes.

(Här visas displayen via LED -växling, kan också använda en annan array och timer för att visa dessa värden som utmatning i 7 segment).

Steg 9: KOD

KODA
KODA

#omfatta

#definiera fördröjning 1000

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

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

flyktig osignerad int x = 0, y = 0, z = 0;

flyktig osignerad int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // stopp vakthund 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);

}

// Timer A0 avbryter servicerutinen

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

om (z> fördröjning)

{

P3OUT = kod [x];

P6OUT = kod1 [y];

x ++;

om (x == 10)

{

x = 0;

y ++;

}

om (y == 6)

y = 0;

z = 0;

}

}

// Maskinvaruavbrottsrutin

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kod [x];

P6OUT = kod1 [y];

v ++;

för (i = 0; i

{P1OUT | = BIT0; // P1.0 = växla

_fördröjning_cyklar (1048576);

P1OUT & = ~ BIT0; // P1.0 = växla

_fördröjning_cyklar (1048576);

}

}

Steg 10: Referenskod

Referens kod
Referens kod

GitHub -förvar

Rekommenderad: