LaunchPad Texas Instruments

Projekt 1 – Policejní maják

28.02.2011 00:03

Tento projekt nám přímo na desce Launchpadu demonstruje tzv. blikání policejního majáku. Blikat bude střídavě LED1 (červená) a LED2 (zelená). Definice DEL1 nám udává interval blikání jedné diody a DEL2 udává interval čekání mezi přepnutím na druhou diodu.

Zde je odkaz na soubor se zdrojovým kódem

/*
Na začátku si naimportujeme knihovnu pro práci s naším procesorem.
*/
#include "msp430g2231.h"

// Nyní definujeme potřebným konstantním hodnotám jména
#define LED1 BIT0   // Definuje pro LED1 hodnotu BIT0 (pro použití P1.0 )
#define LED2 BIT6   // Definuje pro LED2 hodnotu BIT6 (pro použití P1.6 )
#define DEL1 5000   // Definuje pro DEL1 hodnotu 5000
#define DEL2 20000  // Definuje pro DEL2 hodnotu 20000

/*
Vytvoříme si proceduru (s názvem „delaytime“) pro čekání a budeme jí předávat hodnotu do proměnné ‚timex‘, kolikrát má čekání opakovat. Slovo ‚unsigned‘ u definice proměnné znamená, že definujeme proměnnou pouze s plusovými čísly, tedy 0 – 65535
*/


void delaytime(unsigned int timex)
{
  // Cyklus while s podmínkou „opakuj, pokud se ‚timex‘ nerovná 0“
  while (timex != 0)
  {
    // Následuje dekrementace (odečtení jedničky) proměnné timex
    timex--;
  }
}

/*
Nyní vytvoříme hlavní část našeho programu, a tu je „main“. Do této části programu se vkládají veškeré příkazy a volání procedur.
*/


void main(void)
{
/*
Následující příkazy zastaví Watchdog timer, nastaví výstupní porty pro LED1 a LED2 (tedy dle definovaných konstant BIT0 a BIT6), a pak BIT0 a BIT6 nastaví na log.0
*/

  WDTCTL = WDTPW + WDTHOLD;     // Zastavení Watchdog timeru
  P1DIR |= (LED1 + LED2);       // Nastavení výstupních portů
  P1OUT &= ~(LED1 + LED2);      // Nastaví BIT0 a BIT6 na log.0

/*
Nyní bude následovat část programu, která se bude stále cyklicky opakovat. Toto opakování je vytvořeno cyklem FOR bez udaných parametru opakování.
*/

  for (;;)  // Opakovací cyklus FOR
  {
    // Nyní definujeme proměnnou ‚y‘ v rozsahu unsigned integer
    unsigned int y;

/*
Cyklus FOR má stejnou syntaxi, jako známe i z jiných jazyků, tedy přidělení hodnoty proměnné, podmínka a příčítání nebo odčítání
*/

    for (y=0; y < 5; y++)
    {
      P1OUT ^= LED1;    // XOR-ování bitu definovaného v LED1
      delaytime(DEL1);  // Volání vytvořené procedury
    }
/*
Pokud bychm měnili počet mezi jednotlivými problikáváními, tak je dobré do kódu umisťovat následující příkaz, který zajistí, že po ukončení cyklu FOR bude dioda LED1 zhasnutá.
*/

    P1OUT &= ~(LED1);  // Vypnutí bitu definovaného v LED1
    delaytime(DEL2);   // Volání vytvořené procedury

// Dále se opakuje to, co jsme viděli již v předchozím cyklu

    for (y=0; y < 5; y++)
    {
      P1OUT ^= LED2;
      delaytime(DEL1);
    }
    P1OUT &= ~(LED2);
    delaytime(DEL2);
  }
}

Zpět

Vyhledávání

© 2011 Všechna práva vyhrazena.