MSP430 - program migania diodami

Odpowiedz Nowy wątek
2014-12-12 00:48
0

Witam,

Otrzymałem na zajęciach polecenie stworzenie takiego programu. Zupełnie nie mam pojęcia jak to ugryźć. Poniekąd kod tego programu jest bardzo prosty (??). Wie może ktoś jak to zrobić?


        Ćwiczenie  Nr 2 /Elektrotechnika

Napisać program dla mikrokontrolera MSP430FG4618, który wykorzystuje przerwania zewnętrzne od mikroprzełączników (SW1 - P1.0 i SW2 - P1.1). W momencie naciśnięcia mikroprzełącznika ma zacząć mrugać odpowiednia dioda LED  (SW1 – D1, SW2 – D2). Czas odpowiedniego stanu na diodach LED to:

1,5 s

Dodatkowo, by ograniczyć zużycie energii w programie głównym należy przejść do odpowiedniego trybu oszczędzania energii (jak najmniejszy pobór prądu). W trybie oszczędzania energii należy diody LED zgasić.

Przykładowy program: msp430xG46x_P1_02.c

//******************************************************************************
//   MSP430xG46x Demo - Software Port Interrupt on P1.4 from LPM4
//
//   Description: A hi/low transition on P1.4 will trigger P1_ISR which,
//   toggles P5.1. Normal mode is LPM4 ~ 0.1uA. LPM4 current can be measured
//   with the LED removed, all unused P1.x/P2.x configured as output or inputs
//   pulled high or low, and ensure the P2.0 interrupt input does not float.
//   ACLK = 32.768kHz, MCLK = SMCLK = default DCO
//
//                MSP430xG461x
//             -----------------
//         /|\|                 |
//          | |                 |
//          --|RST              |
//      /|\   |                 |
//       --o--|P1.4         P2.1|-->LED
//      \|/
//
//   K. Quiring/ M. Mitchell
//   Texas Instruments Inc.
//   October 2006
//   Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include  <msp430xG46x.h>

void main(void)
{
  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
  P2DIR |= 0x02;                           // P2.1 output
  P1IE |= 0x01;                            // P1.0 Interrupt enabled
  P1IES |= 0x01;                           // P1.0 hi/low edge
  P1IFG &= ~0x01;                          // P1.0 IFG Cleared

  _BIS_SR(LPM4_bits + GIE);                 // LPM4, enable interrupts

}

// Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR (void)
{
  P2OUT ^= 0x02;                            // P2.1 = toggle
  P1IFG &= ~0x01;                          // P1.0 IFG Cleared
}

Pozostało 580 znaków

2014-12-12 09:07
1

Skonfiguruj timer na okres 1.5s, w przerwaniu od klawisza ustawiaj flagę. W zależności od tej flagi w przerwaniu timera migaj diodą w zależności od tej flagi. Dodatkowo w pętli głównej "if flaga -> bis_sr(lpm_cośtam_cośtam)" (wpisujesz tu instrukcję do aktywacji odp. Low Power Mode.

I może być warto pamiętać o drganiach styków.

Pzdr.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0