И так разберёмся мы в этой статье с портами и регистрами микроконтроллера, а также рассмотрим небольшой пример.
Приступимс… Регистр DDR отвечает за направление порта: 0 — вход, 1 — выход.
Регистр PORT в режиме выхода просто выдает 0 или 1 на соответствующий вывод.
Регистр PORT в режиме входа включает «1» или выключает «0» резистор подтяжки вывода на плюс.
Регистр PIN во всех режимах отражает реальное состояние нулей и единиц на ножках контроллера. Он только для чтения, пытаться изменять его не разумно. У порта на выходе его содержимое просто повторяет содержимое регистра PORT, а у порта на входе это и есть регистр, через который читают входы.
Обращаются к регистрам из Си просто — подставляют их в арифметические выражения. Чтобы зажечь светодиод на PORTB.0, нам надо сделать две вещи — переключить PORTB.0 в режим выхода , а потом в PORTB поднять 0-1 бит .
Код:
DDRB = 1;
PORTB = 1;
Из двоичной системы в десятичную переводить в уме трудно. Гораздо проще переводить в шестнадцатеричную — это легко научиться делать в уме. Поэтому мы в шестнадцатеричной системе и запишем: 01. Чтобы Си понял, что это не десятичная система, нужно перед числом написать специальный магический код «0x» — признак 16-ричности. И получается:
DDRB = 0x01;
PORTB = 0x01;
DDRB.1 = 0; //вход
delay_ms(500);
PORTB.1 = 1 ; //вход с подтяжкой
delay_ms(500);
DDRB.1 = 1 ; //настроили на выход
delay_ms(500);
PORTB.1 = 0; //на выходе «0»
delay_ms(500);
или
DDRB.1 = 0x00; //вход
delay_ms(500);
PORTB.1 =0x01 ; //вход с подтяжкой
delay_ms(500);
DDRB.1 = 0x01 ; //настроили на выход
delay_ms(500);
PORTB.1 = 0x00; //на выходе «0»
delay_ms(500);