AVR по умолчанию ожидает, что сразу после первой команды с адресом $0000 идет таблица т. н. векторов прерываний. Вектор — это просто отсылка по нужному адресу с помощью команды rjmp. Вообще-то вектор по нулевому адресу, на который программа переходит по сбросу (вектор сброса или вектор начальной загрузки), тоже считается прерыванием, хотя оно занимает особое место.
Теперь обратимся к процедуре reset, т. е. к истинному началу программы — что там должно быть? Когда контроллер доходит до команды вызова подпрограммы (call или rcall), или в нем происходит прерывание (хотя в векторе и стоит обычное rjmp или jmp, но по сути это тоже вызов подпрограммы), он должен сохранить состояние программного счетчика с тем, чтобы потом знать, куда вернуться. Это происходит в специальной области памяти, которая называется стек (stack).
Давайте начнем с формирования временного интервала. Нам нужно сформировать задержку порядка долей секунды. Метод без таймера основан на том, что каждая команда в МК выполняется за строго определенное время. В AVR считать время вообще очень просто: большинство команд выполняется за один такт, и потому, например, для формирования интервала в одну секунду при тактовой частоте 4 МГц, нам требуется выполнить какую-нибудь (в принципе неважно, какую) последовательность из четырех миллионов команд.
У всех периферийных устройств микроконтроллеров есть регистры управления. В данных регистрах содержатся флаговые биты (биты состояния) и управляющие биты. Флаговые биты устанавливаются в единицу при возникновении прерывания, то есть являются своеобразным индикатором о том, что прерывание произошло. Данные биты устанавливаются аппаратно и по их установке происходит переход по соответствующему вектору прерывания. Управляющие же биты задают условия возникновения прерывания и устанавливаются либо сбрасываются программно. Рассмотрим регистры управления и настройки прерываний некоторых периферийных устройств микроконтроллеров Atmel AVR на примере ATmega8.
Любая программа представляет собой определенный алгоритм действий, которые должен выполнять микроконтроллер. Для хранения программы и ее последовательного выполнения в микроконтроллерах AVR предназначена встроенная FLASH-память программ. В данной области памяти хранится откомпилированная, то есть переведенная в машинный язык программа.
Оперативная память микроконтроллеров AVR реализована в виде статической памяти RAM (SRAM). Статической она называется потому, что регенерация находящихся в памяти данных не происходит. Данные, находящиеся в SRAM не сохраняются после отключения напряжения питания микроконтроллера, именно поэтому она и называется оперативной памятью. Объем ОЗУ микроконтроллеров AVR составляет от 128 байт (в моделях семейства tiny) до 4-8 кбайт в поздних представителях семейства mega. Ячейки ОЗУ адресуются побайтно, следовательно, для адресации, например 8 кбайт памяти, достаточно 2-байтного адреса.
В состав AVR микроконтроллеров входит большое число периферийных устройств (ADC, Timer/Counters, EXTI, Analog Comparator, EEPROM, USART, SPI, I2C и т.д.), каждое из которых может выполнять определенные действия над данными/сигналами и пр. информацией. Эти устройства встроены в микроконтроллер для повышения эффективности приложения и снижения затрат при разработке всевозможных устройств на базе AVR микроконтроллеров.
Прежде чем приступить к созданию программ для AVR микроконтроллеров, хорошо бы знать как эти самые программы исполняются, т.е. узнать побольше о архитектуре микроконтроллера. В качестве небольшого вступления, хотел бы отметить тот факт что компания Atmel, как и большинство производителей микроконтроллеров не рассекречивают внутреннее строение своего микроконтроллера, так что придется обходиться материалом предоставляемым разработчиком: даташиты, апп.ноты, блок-схемы и т.д. Таким образом производитель лишает нас возможности покритиковать его схемотехнические решения а также стырить какую-нибудь часть или весь контроллер целиком. В принципе те кому это нужно было давно это сделали.
Любая интегральная схема, даже рассматриваемая в качестве черного ящика (black box), немыслима без портов ввода/вывода (ПВВ). Без преувеличения, ПВВ участвуют в абсолютно каждом проекте с использованием микроконтроллеров.