Кому интересен алгоритм определения фронтов входных сигналов (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено AlexP 01 марта 2004 г. 18:27

// Global variables for falling_edge()
unsigned char last_value;
unsigned char current_value;

// Function to define falling edge of signal (1 -> 0)
unsigned char falling_edge (unsigned char signal)
{
last_value=current_value; // Save old value
current_value=signal; // Get new value

// Return true for last == 1 & current == 0 -> falling edge
// For rising edge: (last + current) & current
return((last_value + current_value) & last_value);
}
...
// wait for falling edge of timing_mark
while (!falling_edge(timing_mark));


Работает быстрей, чем через прерывания по фронту, если еще МК такое позволяет. А если без Function(), через do...while, то цикл укладывается в 8 команд.

Успехов.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru