Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 251 27 TCNT1H=OxOO; 28 TCNT1L=OxOO; 29 ICR1H=OxOO, 30 ICR1L=OxOO; 31 0CR1AH=0x03, // Наш коэффициент деления (030CH = 780) 32 OCR1AL=OxOC; // 33 OCR1BH=OxOO; 34 OCR1BL=OxOO; 35 GIMSK=OxOO; // Инициализация внешних прерываний 36 MCUCR=OxOO; 37 TIMSK=0x40; // Запись маски прерываний 38 USICR=OxOO; // Инициализация универсального последовательного интерфейса 39 ACSR=0x80; // Инициализация аналогового компаратора 40 rab=ObOOO1OOOO; // Присвоение начального значение переменной rab 41 #asm('sei ) // Команде разрешения прерываний 42 while (1) {}; Кроме главной функции, первоначальная автоматически сформиро ­ ванная программа содержит заготовку еще одной функции — функции обработки прерывания. В строках 3 — 10 мы можем видеть ее в уже дора ­ ботанном виде. В первоначальном виде функция main содержит только строки инициализации (строки 12— 39), а функция обработки (функция «timerl_comp_isr») вообще не содержит ни одного оператора. Посмотрите внимательно на текст программы. Описание функции timerl_comp_isr (строка 3 программы) отличается от всех встречав ­ шихся нам до сих пор описаний. Слева от стандартного описания функ ­ ции добавлены еще два дополнительных элемента. Первый — это слово interrupt (прерывание). Это управляющее слово указывает трансля ­ тору на то, что данная функция является процедурой обработки преры ­ вания. Вид прерывания, которое будет вызывать данную функцию, ука ­ зывается сразу за словом interrupt в квадратных скобках. Выражение interrupt [Т1М1_СОМР] означает, что данная функция является про ­ цедурой обработки прерывания по совпадению таймера Т1. Имя функции обработки прерывания, автоматически данное масте ­ ром (timerl_comp_isr), не является обязательным. Если вы пожелаете разработать программу без участия мастера, вы можете выбрать имя для вашей функции по своему усмотрению. Вы можете также поменять имя и в нашей автоматически сформированной программе. Функция обработки прерывания, как и функция main, не должна иметь параметров и не возвращает никаких значений. Поэтому перед именем функции и в круглых скобках всегда стоит слово void. Теперь посмотрим, что же мы изменили в программе вручную: ♦ из автоматически сформированной программы были удалены все лишние комментарии, а вместо них были добавлены другие, на рус ­ ском языке; ♦ в программу были внесены новые команды и операторы, реализую ­ щие нужные нам алгоритмы.

RkJQdWJsaXNoZXIy MTExODQxMg==