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, и мы всегда можем узнать, что находится на входе – логическая единица или ноль.