- •1 Внутренняя память)Обобщенная структурная схема микропроцессорной систем
- •2) Режимы обмена информации с внешними устройствами
- •3) Обобщенная структура мк
- •6) Система комманд и методы адрессации
- •9.3. Типы команд
- •10.4. Начальный запуск мк (сброс)
- •18.2. Блок тактирования (usart baud rate registers – ubrrl & ubbrh)
- •20.2. Работа передатчика.
- •20.5. Работа приемника
- •Пример. Программа измерения длительности импульса
Пример. Программа измерения длительности импульса
Н
ICR1
Рис. 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 = enF – enR // длительность импульса равна разности кодов }} int main (void) { DDRВ = 0x00; // порт В на ввод TCCR1B = 0xC2; // захват по нарастающему фронту, коэф.деления = 8 TCCR1A = 0x00; TIMSK = 0x84; // разрешает прерывание по захвату и переполнению #asm// ассемблерная вставка sei; разрешить прерывание end asm while (1)
{
// бесконечный цикл в ожидании прерывания }
}