| |
| ru:avr:io [2013/08/14 18:32] – создано eduardtlmk | ru:avr:io [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 |
|---|
| ====== Дигитальные порты ввода/вывода ====== | |
| |
| Все шины AVR читаемы и записываемы, если их использовать в обычном режиме ввода/вывода (англ. //input/output//, или //I/O//). AVR шины названы буквами латинского алфавита A, B, C и др. У некоторых AVR может отсутствовать шина A, не смотря на наличие шины B. Каждая шина 8-битная и обычно для каждого бита имеется отдельный вывод на контроллере. Выводы подчитываются по номерам, начиная с нуля. Для обоих направлений шины имеется два разных регистра. Так же для каждой шины существует регистр для определения реального направления, где значение бита 0 показывает, что вывод используется в качестве входа, а 1 – в качестве выхода. В общем, имеется по три регистра на одну шину: | |
| |
| * PORT - управление состоянием вывода порта. | |
| * PIN - чтение текущего состояния порта. | |
| * DDR - настройка направления порта. | |
| |
| <box 100% round #EEEEEE|Пример> | |
| |
| Выводы 0-3 шины B требуется сделать входом, выводы 4-7 – выходом, установить порт 5 в высокое положение и считать значение вывода в переменную. Код программы на языке Си выглядит следующим образом: | |
| |
| <code c> | |
| #include <avr/io.h> | |
| |
| int main() | |
| { | |
| unsigned char x; | |
| |
| // Выводы 0-3 входом, 4-7 выходом | |
| DDRB = 0xF0; | |
| |
| // Установка пятого порта в высокое положение | |
| PORTB |= (1 << PIN5); | |
| |
| // Считывание значения ввода 0-3 | |
| x = PINB & 0x0F; | |
| } | |
| </code> | |
| |
| </box> | |
| |
| В приведённом примере входы использованы в режиме Hi-Z, или высокого импеданса. В данном случае имеется дело с входом, который практически не нагружает источник сигнала. Подобный режим может пригодиться, если вывод используется в качестве шины данных. Если вывод используется в решении, соединяющем кнопку, выключатель или др. и землю, то следует во входе использовать резистор //pull-up//. Для этого в режиме входа требуется настроить выходной бит соответствующего вывода в высокое положение – в результате чего между напряжением питания и входом включится резистор, который будет держать уровень напряжения высоким, если его не уменьшает что-либо другое. Цель резистора //pull-up// – предотвратить „плавание“ входа (англ. //floating//) из-за статического электричества или других помех. После запуска контроллера все шины ввода/вывода по умолчанию находятся в режиме входа высокого импеданса. | |
| |
| В основном выводы шин IO используются помимо логичных соединений и в других перифериях. При желании использовать альтернативную функцию вывода, следует ознакомиться со спецификацией AVR, где указано, в каком режиме должен работать вывод. Например, при использовании вывода в качестве входа канала АЦП (аналогово-цифровой преобразователь), он должен быть настроен на режим входа и для генерирования сигнала ШИП (широко-импульсный преобразователь) – на режим вывода. Некоторые периферические модули определяют сами режим вывода IO. | |