Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Регистр данных PORTX фактически есть просто выходной буфер, все, что в него записывается, тут же оказывается на выходе. Но если установить вывод порта на вход (т. е. записать в регистр направления лог. 0), как это сделано по умолчанию, то регистр данных PORTX будет играть несколько иную роль — установка его разрядов в 0 (так по умолчанию) означает, что вход находится в третьем состоянии с высоким сопротивлением, а установка в 1 подключит к выводу "подтягивающий" (pull-up) резистор сопротивлением 35-120 кОм.

Еще раз отметим, что встроенного pull-up-резистора в большинстве случаев (например, если вы подключаете ко входу выносную кнопку с двумя выводами, которая коммутируется на "землю", или при работе на "общую шину" с удаленными устройствами) оказывается недостаточно для надежной работы, и лучше устанавливать дополнительный внешний резистор параллельно этому внутреннему, с сопротивлением от 1 до 5 кОм (в критичных для потребления случаях его величину можно увеличить до 20-30 кОм). О "подтягивающих" резисторах см. также раздел "Особенности практического использования МК A VR " главы 1.

Процедура чтения уровня на выводе порта, если он находится в состоянии работы на вход, не совсем тривиальна. Возникает искушение прочесть данные из регистра данных PORTX, НО это ничего не даст— вы получите только то, что там записано вами же ранее. А для чтения того, что действительно имеется на входе (непосредственно на выводе микросхемы), предусмотрена другая возможность: нужно обратиться к некоторому массиву, который обозначается PINX. Обращение осуществляется так же, как и к отдельным битам обычных регистров (см. главу 6), но PINX— это не регистр, а просто некий диапазон адресов, чтение по которым предоставляет доступ к информации из буферных элементов на входе порта. Записывать что-то по адресам PINX, естественно, нельзя.

Таймеры-счетчики
В большинстве МК AVR два или три таймера-счетчика, один из которых 16-разрядный, а оставшиеся один или два 8-разрядные (в старших моделях Mega общее число счетчиков может достигать шести). Все счетчики имеют возможность предварительной загрузки значений и могут работать от тактовой частоты (СК) процессора непосредственно, или поделенной на 8, 64, 256 или 1024 (в отдельных случаях еще на 16 и 32), а также от внешнего сигнала. В модели ATtinyl5, содержащей внутренний умножитель частоты, таймер может работать от более высокой частоты, чем тактовая (до 16СК). В этой модели, а также в моделях семейства Mega, предусмотрена возможность сброса содержимого счетчика-предделителя таймеров для того, чтобы счет всегда начинался с заданного интервала.
Предделитель (который в большинстве случаев для таймеров общий) работает независимо от самих таймеров. В семействе Mega для синхронизации запуска таймеров предделитель можно останавливать и запускать по команде. В архитектуре AVR 8-разрядным счетчикам-таймерам присвоены номера 0 и 2, а 16-разрядным— 1, 3 и далее. Некоторые 8-разрядные счетчики (обычно Timer 2, если их два) могут работать в асинхронном режиме от отдельного тактового генератора, причем продолжать функционировать даже в случае "спящего" состояния всей остальной части 1VIK, что позволяет использовать их в качестве часов реального времени. При работе счетчиков-таймеров, как обычных счетчиков внешних импульсов (причем возможна реакция как по спаду, так и по фронту импульса), частота подсчитываемых импульсов не должна превышать половины частоты тактового генератора МК (причем при несимметричном внешнем меандре инструкция рекомендует и еще меньшее значение предельной частоты — 0,4 от тактовой). Это обусловлено тем, что при счете внешних импульсов их фронты обнаруживаются синхронно (в моменты положительного перепада тактового сигнала). Кроме того, следует учитывать, что задержка обновления содержимого счетчика после прихода внешнего импульса может составлять до 2,5 периода тактовой частоты.

Это довольно существенное ограничение, поэтому, например, создавать универсальный частотомер с помощью МК не очень удобно— быстродействующие схемы лучше проектировать на соответствующей комбинационной логике или на ПЛИС (программируемых логических интегральных схемах).

При переполнении счетчика возникает событие, которое может вызывать соответствующее прерывание. 8-разрядный счетчик Timer 0 в большинстве случаев этой функцией и ограничивается. Счетчик Timer 2, если он имеется, может также вызывать прерывание по совпадению подсчитанного значения с некоторой заранее заданной величиной. 16-разрядные счетчики— более "продвинутая" штука, и могут вызывать прерывания по совпадению с двумя независимо заданными числами А и В. При этом счетчики могут обнуляться или продолжать счет, а на специальных выводах при этом — генерироваться импульсы (аппаратно, без участия программы).



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru