ioРассмотрим примеры настройки портов в CodeVision AVR
Например DDRB=0x02; данная запись означает что вторая ножка порта В настроена как выход, но откуда взялось это число????

Для начала переведем данную запись в более понятный нам вид:
приставка 0х означает что число записано в шестнадцатеричной системе исчисления, чтобы легко понять его суть нужно перевести его в двоичную систему. Поможет нам в этом калькулятор Windows из набора стандартных программ, сразу переводим его в режим программист.

Переключаем его в режим шестнадцатеричной системы (галочка HEX), и вводим наше число 0х02 просто как 2.

теперь не нажимаем никаких равно и пр. просто переключаемся в двоичную систему счисления (галочка Bin)

Получили число 10. Что же оно значит? У нашей ATmega8 имеется 8 ножек на порту В (обведены на картинке)

так вот если представить число 10 как 00000010, то это будет означать что только вторая ножка настроена как выход, остальные как вход.

PORTB.7 PORTB.6 PORTB.5 PORTB.4 PORTB.3 PORTB.2 PORTB.1 PORTB.0
0 0 0 0 0 0 1 0

Тут нужно отметить, что если вместо
DDRB=0x02;
запишем
DDRB=0b00000010;
то оно тоже будет работать, т.е. это равнозначные записи одного и того же числа, в разных системах счисления.

С DDRB разобрались 1-выход, 0-вход, а что же означает
PORTB=0x01;
тут принцип тот же самый, но:
если нога сконфигурирована как выход и значение PORTB будет равно единице на этой же ноге, то ножка после прошивки будет включена по умолчанию (т.е. на ней будет напряжение), если 0, то ножка будет выключена. В первом уроке мы могли бы заменить запись PORTB.0=1; записью PORTB=0x01; и получили тот же самый результат.

На самом деле, правильным решением включения/выключения ножки с точки зрения языка Си, являются следующие конструкции:

PORTD |= (1<<3); //включить ножку 3 порта D
PORTD |= (1<<2)|(1<<5)|(1<<6); //включить ножки 2, 5, 6 порта D
PORTD &= ~(1<<2); //выключить ножку 2
PORTD &= (~((1<<0)|(1<<2)|(1<<4))); //выключить ножки 0, 2, 4

Если нога сконфигурирована как вход и значение PORTB будет равно единице на этой же ноге, то к ножке будет подключен подтягивающий резистор, для устранения помех. Если вам внутренний резистор не нужен то просто установите 0 на этой ножке.

Надеюсь все понятно, если что пишите, задавайте вопросы.

5 комментариев: Настройки портов ввода-вывода CodeVision AVR

  • Вы ту недавно обмолвились товарищ Админ) Как правильно надо порты определять) думаю здесь не будет лишним упомянуть такую настройку портов как :

    PORTD |= (1<<3);установит "1" (сигнал высокого уровня) на выводе PD3
    PORTD &= ~(1<<4);установит "0" (сигнал низкого уровня) на выводе PD4.
    и аналогично им регистров).

  • Добавил

  • В статьях, предназначенных для новичков очень важно
    объяснить а не запутать!
    DDRB=0b00000010; — двоичная запись
    DDRB=0x02; — шестнадцатеричная запись
    Или:
    DDRB=(1<<1); запись логической единицы в некоторый разряд
    с обнулением остальных разрядов.
    См. Прокопенко В.С. Программирование микроконтроллеров Atmel
    на языке С, 2012г.

  • Стас, новачок как и я такими записями сразу все равно будет путаница и т.д. Просто надо читать, читать, практиковать, читать и тогда проходя времья все будет познаватся.

  • Здравствуйте! У меня ест скетч для ардуино. Событие с кнопкой такой, нажал кнопку- на определенный ноге появится импульс с длительности 200 мсек, отпустил кнопку опят на том же выходе появится такой же импульс. просьба такой как можно инициализировать ножки на атмега8 и организовать такое событие на атмеге? И ешё было бы хорошо все это делать на пик16ф628А которые мне очень доступны по цене и в наличии.
    Заране спасибо!

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Свежие записи
Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика