Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory.doc
Скачиваний:
29
Добавлен:
18.03.2015
Размер:
1.51 Mб
Скачать

Пример. Программа измерения длительности импульса

Н

ICR1

а выводICI (вход захвата Т/С МК) подаются импульсы, длительность которых измеряется.

Группа 454

Рис. 21.3. Схема подачи сигнала на МК.

/*******************************************************************************/

#include <mega8.h>// МК Atmega8 Unsigned char orl // счетчик переполнений Unsigned int edR, edF; // для сохранения кодов фронта и спада unsigned long pulse; // количество тактовых импульсов внутри

//интервала interrupt (sig_overflow); { orl++ ; // увеличиваем счетчик переполнения } interrupt (sig_input_capture) /* обработка прерываний при захвате на входе*/ { if ((PINВ & 0x01)!=0) /* если на выводе 0 порта В высокий уровень */ {

{ edR = IСR1; TCCR1B = TCCR1B & 0xBF /* устанавливаем следующий захват по ниспадающему фронту */ orl = 0; // сброс счетчика переполнений }} else

{ edF = ICR1; /*фиксация времени ниспадающего фронта*/ TCCR1B = TCCR1B & 0x FF; /* следующий захват по нарастающему фронту */ Pulse = enFenR // длительность импульса равна разности кодов }} int main (void) { DDRВ = 0x00; // порт В на ввод TCCR1B = 0xC2; // захват по нарастающему фронту, коэф.деления = 8 TCCR1A = 0x00; TIMSK = 0x84; // разрешает прерывание по захвату и переполнению #asm// ассемблерная вставка sei; разрешить прерывание end asm while (1)

{

// бесконечный цикл в ожидании прерывания }

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]