← vissza a főoldalra

SZTE · Mérnökinformatikus BSc

Mikrovezérlők
gyakorlat

Jegyzetek, rövid magyarázatok és kipróbálható kódrészletek.

7. hét · MicLab / EFM8BB1

SPI és hétszegmenses kijelző

segments tábla, write_spi, számjegyekre bontás és dekóderes kijelzőválasztás.

01 · Timer0

Reakcióidő mérése

8051

A program a Timer0 megszakításával egy ezredmásodperces számlálót működtet. Egy másodperc várakozás után felkapcsolja a LED-et, majd legfeljebb 500 ms-ig vár a gombnyomásra.

1

Időalap létrehozása

A megszakítás minden időzítő-túlcsorduláskor lefut. Törli a megszakításjelző bitet, majd növeli a globális ms_counter változót.

Interrupts.cTimer megszakítás
extern volatile uint16_t ms_counter;

SI_INTERRUPT (TIMER0_ISR, TIMER0_IRQn)
{
  TCON_TF0 = 0;
  ms_counter++;
}
2

A mérés menete

  1. A program 1000 ms-ot vár.
  2. A LED felkapcsol, ekkor indul a reakcióidő mérése.
  3. Gombnyomáskor a LED kialszik és a ciklus véget ér.
  4. Ha 500 ms alatt nincs gombnyomás, a várakozás lejár.
main.cFőprogram
#define BTN0 P0_B2
#define LED0 P1_B4

#define LED_ON  0U
#define LED_OFF 1U

#define BTN0_PRESSED 0U

volatile uint16_t ms_counter = 0U;

int main (void)
{
  // Hardver inicializálása
  enter_DefaultMode_from_RESET();

  LED0 = LED_OFF;
  ms_counter = 0U;

  while (ms_counter < 1000)
  {
  }

  LED0 = LED_ON;
  ms_counter = 0U;

  while (ms_counter < 500)
  {
    if (BTN0 == BTN0_PRESSED)
    {
      LED0 = LED_OFF;
      break;
    }
  }

  while (1)
  {
    // $[Generated Run-time code]
    // [Generated Run-time code]$
  }
}