====== Дигитальные порты ввода/вывода ====== Все шины AVR читаемы и записываемы, если их использовать в обычном режиме ввода/вывода (англ. //input/output//, или //I/O//). AVR шины названы буквами латинского алфавита A, B, C и др. У некоторых AVR может отсутствовать шина A, не смотря на наличие шины B. Каждая шина 8-битная и обычно для каждого бита имеется отдельный вывод на контроллере. Выводы подчитываются по номерам, начиная с нуля. Для обоих направлений шины имеется два разных регистра. Так же для каждой шины существует регистр для определения реального направления, где значение бита 0 показывает, что вывод используется в качестве входа, а 1 – в качестве выхода. В общем, имеется по три регистра на одну шину: * PORT - управление состоянием вывода порта. * PIN - чтение текущего состояния порта. * DDR - настройка направления порта. Выводы 0-3 шины B требуется сделать входом, выводы 4-7 – выходом, установить порт 5 в высокое положение и считать значение вывода в переменную. Код программы на языке Си выглядит следующим образом: #include int main() { unsigned char x; // Выводы 0-3 входом, 4-7 выходом DDRB = 0xF0; // Установка пятого порта в высокое положение PORTB |= (1 << PIN5); // Считывание значения ввода 0-3 x = PINB & 0x0F; } В приведённом примере входы использованы в режиме Hi-Z, или высокого импеданса. В данном случае имеется дело с входом, который практически не нагружает источник сигнала. Подобный режим может пригодиться, если вывод используется в качестве шины данных. Если вывод используется в решении, соединяющем кнопку, выключатель или др. и землю, то следует во входе использовать резистор //pull-up//. Для этого в режиме входа требуется настроить выходной бит соответствующего вывода в высокое положение – в результате чего между напряжением питания и входом включится резистор, который будет держать уровень напряжения высоким, если его не уменьшает что-либо другое. Цель резистора //pull-up// – предотвратить „плавание“ входа (англ. //floating//) из-за статического электричества или других помех. После запуска контроллера все шины ввода/вывода по умолчанию находятся в режиме входа высокого импеданса. В основном выводы шин IO используются помимо логичных соединений и в других перифериях. При желании использовать альтернативную функцию вывода, следует ознакомиться со спецификацией AVR, где указано, в каком режиме должен работать вывод. Например, при использовании вывода в качестве входа канала АЦП (аналогово-цифровой преобразователь), он должен быть настроен на режим входа и для генерирования сигнала ШИП (широко-импульсный преобразователь) – на режим вывода. Некоторые периферические модули определяют сами режим вывода IO.