Белов, А.В. Микроконтроллеры 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. Теперь посмотрим, что же мы изменили в программе вручную: ♦ из автоматически сформированной программы были удалены все лишние комментарии, а вместо них были добавлены другие, на рус ском языке; ♦ в программу были внесены новые команды и операторы, реализую щие нужные нам алгоритмы.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==