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
}