Настраиваем порты ввода-вывода

И так разберёмся мы в этой статье с портами и регистрами микроконтроллера, а также рассмотрим небольшой пример.

Приступимс… Регистр 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);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *