# data[].attributes.body
Порты микроконтроллера управляются тремя регистрами (они же команды в языке С++):

‒ DDRx (регистр направления порта) – определяет, является тот или иной вывод порта входам или выходом; если некоторый разряд регистра DDRx содержит логический 0, то соответствующий вывод порта сконфигурирован как вход, в противном случае – как выход;

‒ PORTx (регистр управления состоянием порта) – если вывод выполняет роль выхода, то в соответствующий разряд записывается значение, предназначенное для вывода; если вывод выполняет роль входа, то логический 0 в некотором разряде регистра PORTx соответствует высокоомный вход, а логическая 1 – вход, нагруженный подтягивающим сопротивлением;

‒ PINx (регистр состояния порта) – в отличие от регистров DDRx и PORTx доступен только для чтения и позволяет считать входные данные порта на внутреннюю шину МК. В регистре PINx содержится информация о реальном текущем логическом уровне на выводах порта.

# data[].attributes.headline
Более подробно устройство и работа портов ввода вывода

# data[].attributes.subject
Более подробно устройство и работа портов ввода вывода

# data[].attributes.headline
Создаем в программе Proteus схему управления состоянием светодиодов

# data[].attributes.subject
Создаем в программе Proteus схему управления состоянием светодиодов

# data[].attributes.headline
Исходный текс программы:

# data[].attributes.subject
Исходный текс программы:

# data[].attributes.body
#define F_CPU 8000000L

#include <avr/io.h>

int main(void)

{

DDRD=0b00000000;

PORTD=0b00000100;

DDRE=0b00000000;

PORTE=0b00000001;

DDRF=0b00000101;

PORTF=0b00000101;

while (1)

{

if (!(PIND&0b00000100))

PORTF=0b100;

if (!(PINE&0b00000001))

PORTF=0b001;

}

}

# data[].attributes.headline
«Правильный» способ задания выходного состояния порта

# data[].attributes.subject
«Правильный» способ задания выходного состояния порта

# data[].attributes.body
while (1)

{

if (!(PIND&0b00000100))

{

//PORTF=0b100;

PORTF &=~ (1<<(PORTF0)); //запись уровня нуля на 0-й вывод порта F

PORTF |= (1<<(PORTF2));} //запись уровня единицы на 2-й вывод порта F

if (!(PINE&0b00000001))

{

//PORTF=0b001;

PORTF &=~ (1<<(PORTF2));

PORTF |= (1<<(PORTF0));}

}

# data[].attributes.attachment_link.title
Работа портов