01 · Timer0
Reakcióidő mérése
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
- A program 1000 ms-ot vár.
- A LED felkapcsol, ekkor indul a reakcióidő mérése.
- Gombnyomáskor a LED kialszik és a ciklus véget ér.
- 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]$
}
}