Projekt 1 – Policejní maják
28.02.2011 00:03Tento 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