Indholdsfortegnelse:

MSP430 Sekundertæller: 10 trin
MSP430 Sekundertæller: 10 trin

Video: MSP430 Sekundertæller: 10 trin

Video: MSP430 Sekundertæller: 10 trin
Video: Лекция 6. Обзор контроллера MSP-430 2024, Juli
Anonim
MSP430 Sekundertæller
MSP430 Sekundertæller

Velkommen! Making of Seconds Counter: Brug af CCStudio 8 og MSP430F5529 til projektet.

C -sprog til kodning af mikrokontrolleren. Anvendelse af lavt strømtilstande, timere og afbrydelser. Outputtet vises via 7 segmenter.

Trin 1: Indsigt

Indsigt
Indsigt

Lad os begynde!

Initialiser vagthundstimeren til OFF -tilstand ved hjælp af den nødvendige adgangskode til vagthundstimeren (Det hjælper med at kontrollere uendelige sløjfer og holde processoren sikker).

#omfatte

/** * main.c */

int main (tomrum)

{

WDTCTL = WDTPW | WDTHOLD; // stop vagthund timer

returnere 0;

}

Trin 2: Portinitialisering

{

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

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 fortæller os, at hele PORT-3 er initialiseret til at tage input.

P3DIR | = 0xFF fortæller os, at hele PORT-3 initialiseres for at give output.

P3DIR | = 0x01 kun stiften P3.0 initialiseres til output i PORT-3. Dette følger med en hexadecimal port -kortlægning.

P4REN | = 0xFF, dette angiver, at stifterne på PORT-4 har deres pull up/down modstande aktiveret.

For at vælge dem mellem Pull UP eller Pull DOWN bruges instruktionen P $ OUT | = 0xFF.

Hvis der bruges 0xFF, konfigureres de som Pull UP -modstande, og hvis 0x00 konfigureres som Pull DOWN.

Trin 3: Ultra lav strøm

MSP430F5529 giver os mulighed for at reducere effekttab fra processoren. Dette er nyttigt i selvstændige applikationer.

Dette kræver erklæring af alle pin eller porte til output.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Trin 4: TIMER

Brug af timer til forsinkelsesgenerering på et sekund. Dette bruger SMCLK på 1MHz, også timeren kører i lav strømtilstand (i det næste trin, efter tællingen, blev den afbrudt fra LPM). Denne proces sparer strøm og belastning på processoren

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Værdierne er 999, da det tager endnu en tælling at rulle tilbage til nul i timeregistret.

Trin 5: Lav strømtilstand

_BIS_SR (LPM0_bits+GIE);

Dette muliggør General interrupt Enable (GIE), og sætter CPU'en til LPM0, hvor MCLK, der understøtter cpu'en, er slukket, og SMCLK og ACLK -kørsel, der holder timeren kørende. så vi kan se CPU'en er slukket, der ved at spare strøm.

Trin 6: ISR-timer

ISR-timer
ISR-timer

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

hvis (z> forsinkelse)

{

P3OUT = kode [x];

P6OUT = kode1 [y];

x ++;

hvis (x == 10)

{

x = 0;

y ++;

}

hvis (y == 6)

y = 0;

z = 0;

}

}

pragma -vektor er til ISR -repræsentation i C embd.

kode [x] og kode1 [y] er de arrays, der indeholder outputværdier for de to syv segmenter, til visning af 60 sekunders tæller.

Trin 7: Hardwareafbrydelse

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Her erklæres P2.1 som en hardwareafbrydelse, hvis der trykkes på knappen, nulstilles tælleren til værdien.

resten program er skrevet inde i ISR af denne afbrydelse.

Trin 8: ISR- Nulstil/ trykknap

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = kode [x];

P6OUT = kode1 [y];

v ++;

for (i = 0; i

{

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

_forsinkelse_cykler (1048576);

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

_forsinkelse_cykler (1048576);

}

Denne ISR nulstiller tælleren og regner med, hvor mange gange der blev trykket på resten.

(Her vises displayet via led -skifte, kan også bruge et andet array og en timer til at vise disse værdier som output i 7 segmenter).

Trin 9: KODE

KODE
KODE

#omfatte

#definer forsinkelse 1000

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

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

flygtig usigneret int x = 0, y = 0, z = 0;

flygtig usigneret int v = 0, i = 0;

void main ()

{

WDTCTL = WDTPW | WDTHOLD; // stop vagthund 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 afbryder servicerutinen

#pragma vektor = TIMER0_A0_VECTOR

_interrupt void Timer_A (void)

{

z ++;

hvis (z> forsinkelse)

{

P3OUT = kode [x];

P6OUT = kode1 [y];

x ++;

hvis (x == 10)

{

x = 0;

y ++;

}

hvis (y == 6)

y = 0;

z = 0;

}

}

// Hardwareafbrydelsesrutine

#pragma vektor = PORT2_VECTOR

_interrupt void port_2 (void)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = kode [x];

P6OUT = kode1 [y];

v ++;

for (i = 0; i

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

_forsinkelse_cykler (1048576);

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

_forsinkelse_cykler (1048576);

}

}

Trin 10: Referencekode

Referencekode
Referencekode

GitHub -depot

Anbefalede: