====== Выводы входов/выходов ====== Библиотека выводов предназначена для оптимизации дигитальных выводов входа/выхода AVR. Цель библиотеки облегчить использование выводов AVR. Пользователь может создать в программе переменную для желаемого вывода, которой присваивается физический адрес вывода при помощи специальной макрофункции. Затем при помощи переменной можно вызвать различные функции для смены направления и состояния вывода и их чтения. Назначая физическую шину (порт) вывода и индекс только один раз и в одном месте, можно легко поменять программу в случае физических изменений. Например, если сначала индикатором используется один LED, можно с помощью простого изменения программы начать использовать другой LED. Из переменных выводом можно создавать массивы, например для составления шин. ===== Типы данных ===== * **//pin//** \\ Структурный тип данных для удержания регистров вывода и битовой маски. Переменные типа //pin// константны и их следует инициализировать в начале программы. Для облегчения инициализации существует макрофункция //PIN//, первый параметр которой – это обозначение шины (заглавная латинская буква A, B, C, итд.) и второй номер вывода (0-7). ===== Функции ===== * **//void pin_setup_output(pin pin)//** \\ Установка вывода выходом. Параметры: * //pin// - Переменная вывода. * **//void pin_setup_input(pin pin)//** \\ Установка вывода входом без резистора //pull-up.// Параметры: * //pin// - Переменная вывода. * **//void pin_setup_input_with_pullup(pin pin)//** \\ Установка вывода входом с резистором //pull-up//. Параметры: * //pin// - Переменная вывода. * **//void pin_set(pin pin)//** \\ Установка выходного вывода высоким. Параметры: * //pin// - Переменная вывода. * **//void pin_clear(pin pin)//** \\ Установка выходного вывода в низкое положение. Параметры: * //pin// - Переменная вывода. * **//void pin_toggle(pin pin)//** \\ Инвертирование положения выходного вывода. Низкое положение меняется на высокое и наоборот. Параметры: * //pin// - Переменная вывода. * **//void pin_set_to(pin pin, bool value)//** \\ Установка выходного вывода в желаемое положение с помощью параметра. Параметры: * //pin// - Переменная вывода. * //value// - Переменная значения //true/false//. * **//bool pin_get_value(pin pin)//** \\ Считывание положения входного вывода и возвращение функцией. Параметры: * //pin// - Переменная вывода. * Возвращает значение //true// или //false//. * **//bool pin_get_debounced_value(pin pin)//** \\ Считывание положения входного вывода через противодребезговый фильтр выключателя и его возвращение. Фильтрация происходит минимально за 8 ms и максимально за 100 ms, в зависимости от того, как быстро закончится дребезг выключателя. Если оно не закончится через 100 ms, функция возвратит //false//. Функция использует программную паузу из библиотеки задержек функций. Параметры: * //pin// - Переменная вывода. * Возвращает значение //true// или //false//. ===== Пример ===== Пример того, как сделать значение одного вывода зависимым от другого. В программе выводу PC3 присваивается обратное выводу PC0 значение: #include pin output_pin = PIN(C, 3); pin input_pin = PIN(C, 0); int main(void) { bool value; // Установка вывода выходом pin_setup_output(output_pin); // Установка вывода входом с помощью резистора pull-up pin_setup_input_with_pullup(input_pin); // Бесконечный цикл while (true) { // Считывание значения входного вывода value = pin_get_value(input_pin); // Присвоение обратного значения выходному выводу pin_set_to(output_pin, !value); } }