Inhoudsopgave:

MSP430 secondenteller - Ajarnpa
MSP430 secondenteller - Ajarnpa

Video: MSP430 secondenteller - Ajarnpa

Video: MSP430 secondenteller - Ajarnpa
Video: Лекция 6. Обзор контроллера MSP-430 2024, November
Anonim
MSP430 Secondenteller
MSP430 Secondenteller

Welkom! Making of Seconds Counter: CCStudio 8 en MSP430F5529 gebruiken voor het project.

C-taal om de microcontroller te coderen. Het toepassen van Low Power Modes, Timers en Interrupts. De output wordt weergegeven via 7 Segment.

Stap 1: Inzicht

In zicht
In zicht

Laten we beginnen!

Initialiseer de watchdog-timer naar de UIT-status met behulp van het vereiste wachtwoord voor de watchdog-timer (het helpt om oneindige lussen te controleren en de processor veilig te houden).

#erbij betrekken

/** * hoofd.c */

int hoofd(void)

{

WDTCTL = WDTPW | WDTHOLD; // stop waakhondtimer

retourneer 0;

}

Stap 2: Poortinitialisatie

{

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

P6DIR=0xFF;

P4DIR |=0x00;

P4REN |=0xFF;

P4OUT |=0xFF;

}

P3DIR |=0x00 vertelt ons dat het geheel van PORT-3 is geïnitialiseerd om invoer te ontvangen.

P3DIR |=0xFF vertelt ons dat het geheel van PORT-3 is geïnitialiseerd om uitvoer te geven.

P3DIR |=0x01 alleen de pin P3.0 wordt geïnitialiseerd om uit te voeren in PORT-3. Dit volgt op een hexadecimale poorttoewijzing.

P4REN |=0xFF, dit geeft aan dat de pinnen van PORT-4 hun pull-up/down-weerstanden hebben ingeschakeld.

Om ze te selecteren tussen Pull UP of Pull DOWN, wordt de instructie P$OUT |=0xFF gebruikt.

Als 0xFF wordt gebruikt, configureren ze als Pull UP-weerstanden en als 0x00 configureren ze als Pull DOWN.

Stap 3: Ultra laag vermogen

Met MSP430F5529 kunnen we het stroomverlies van de processor verminderen. Dit is handig in zelfstandige toepassingen.

Dit vraagt om declaratie van alle pin of poorten om uit te voeren.

{

P7DIR |= 0xFF;

P6DIR |= 0xFF;

P5DIR |= 0xFF;

P4DIR |= 0xFF;

P3DIR |= 0xFF;

P2DIR |= 0xFF;

P1DIR |= 0xFF;

}

Stap 4: TIMER

Gebruik van timer voor vertragingsgeneratie van één seconde. Dit gebruikt de SMCLK van 1 MHz, ook loopt de timer in de energiebesparende modus (in de volgende stap wordt deze na het tellen onderbroken door LPM). Dit proces bespaart energie en belasting van de processor

TA0CCTL0=CCIE;

TA0CCR0=999;

TA0CTL = TASSEL_2 + MC_1;

Waarde is 999, omdat er nog een telling nodig is om terug te gaan naar nul in het timerregister.

Stap 5: Energiezuinige modus

_BIS_SR(LPM0_bits+GIE);

Dit schakelt General interrupt Enable (GIE) in en zet de CPU op LPM0, waar MCLK die de cpu ondersteunt uit is, en SMCLK en ACLK draaien die de timer draaiende houden. zodat we kunnen zien dat de CPU is uitgeschakeld, daar door energie te besparen.

Stap 6: ISR-timer

ISR-timer
ISR-timer

#pragma vector=TIMER0_A0_VECTOR

_interrupt ongeldig Timer_A (ongeldig)

{

z++;

if(z>vertraging)

{

P3OUT=code[x];

P6OUT=code1[y];

x++;

als(x==10)

{

x=0;

y++;

}

als(y==6)

y=0;

z=0;

}

}

pragma vector is voor ISR-representatie in C embd.

code[x] en code1[y] zijn de arrays die uitvoerwaarden bevatten voor de twee zeven segmenten, voor het weergeven van een teller van 60 seconden.

Stap 7: Hardware-onderbreking

P2DIR=0x00;

P2REN=0x02;

P2OUT=0x02;

P2IE |=BIT1;

P2IES |=BIT1;

P2IFG &= ~BIT1;

Hier wordt P2.1 gedeclareerd als een hardware-interrupt, als de knop wordt ingedrukt, wordt de teller teruggezet naar de waarde.

het restprogramma is geschreven in de ISR van deze interrupt.

Stap 8: ISR- Reset / Drukknop

#pragma vector=PORT2_VECTOR

_interrupt void port_2(void)

{

P2IFG &=~BIT1;

x=0; y=0;

P3OUT=code[x];

P6OUT=code1[y];

v++;

voor(i=0;i

{

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

_delay_cycles (1048576);

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

_delay_cycles (1048576);

}

Deze ISR stelt de teller op nul en houdt bij hoe vaak de rest is ingedrukt.

(Hier wordt de weergave gemaakt via led-toggle, kan ook een andere array en timer gebruiken om die waarden als uitvoer in 7 segmenten weer te geven).

Stap 9: CODE

CODE
CODE

#erbij betrekken

#define vertraging 1000

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

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

vluchtig unsigned int x=0, y=0, z=0;

vluchtig unsigned int v=0, i=0;

ongeldig hoofd()

{

WDTCTL = WDTPW | WDTHOLD; // stop waakhondtimer

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 onderbrekingsserviceroutine

#pragma vector=TIMER0_A0_VECTOR

_interrupt ongeldig Timer_A (ongeldig)

{

z++;

if(z>vertraging)

{

P3OUT=code[x];

P6OUT=code1[y];

x++;

als(x==10)

{

x=0;

y++;

}

als(y==6)

y=0;

z=0;

}

}

// Hardware-interrupt-serviceroutine

#pragma vector=PORT2_VECTOR

_interrupt void port_2(void)

{

P2IFG &=~BIT1;

x=0;

y=0;

P3OUT=code[x];

P6OUT=code1[y];

v++;

voor(i=0;i

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

_delay_cycles (1048576);

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

_delay_cycles (1048576);

}

}

Stap 10: Referentiecode

Referentie code
Referentie code

GitHub-opslagplaats

Aanbevolen: