Материал: ИДЗ_1

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

int main(void)

 

 

{

 

 

DDRB |= (1<<DDB5);

// PORTA, 5 вывод на

выход

DDRB &=~ (1<<DDB1);

// PORTB, вывод 1 на

выход

PORTB |= (1<<PB1);

// активируем подтяжку по питанию

while (1)

{

if (!(PINB & (1<<PINB1))) { PORTB &=~ (1<<PB5); } else {

PORTB |= (1<<PB5);

}

}

}

Рисунок 4 – Кнопка не нажата, диод погас

Рисунок 5 – Кнопка нажата, диод загорелся

Преимущество данного кода заключается в его компактности, простоте написания и легкой читаемости, по сравнению с кодом на Assembler, хотя по

выполняемым функциям она идентичная предыдущей программе, за

исключением появившихся здесь логических побитовых операций.

Выводы

В ходе выполнения работы мы познакомились с таким приемом как включение подтяжки Pull UP – PUE для используемой кнопки, во избежание попадания данного вывода в режим Hi-Z. Состояние высокого импеданса или

Z – состояние ( в англоязычной литературе Hi-Z ) – это такое состояние контакта логической схемы, при котором сопротивление между этим контактом и остальной схемой очень велико. Физически данный режим реализуется закрытым полевым транзистором, работающем в ключевом режиме.

Вывод, переведенный в состояние Hi-Z, ведет себя как оторванный от схемы. Внешние устройства, подключенные к этому выводу, могут изменять напряжение на нем по своему усмотрению ( в некоторых пределах ), не влияя на работу остальной схемы. Этот режим в большинстве МК включен по умолчанию, после сброса по питанию. Все переключатели разомкнуты, а

сопротивление порта очень велико, т.е. электрически вывод как будто вообще никуда не подключён и ни на что не влияет. Но при этом он постоянно считывает свое состояние в регистр PINxn, и мы всегда можем узнать, что находится на входе – логическая единица или ноль.

Источник: https://studfile.net/preview/16557549/