Свежие обсуждения
Микроконтроллеры

Помогите написать программу цифрового таймера

1 2 9

serg_svd: PIND.3 а в WinAVR так можно к битам порта обращаться ?

 

по-моему да. А в чем проблема?
Только мне кажется, что еще до инициализации таймера надо с портами разобраться. И правильно их настроить На вход выход, с резисторами или без.
Вот например портВ где кнопки. надо настроить на вход и с подтяжкой внутренними резисторами?
А для жк порт настроить на выход и без подтяжки?

А определение кнопок может лучше в таком виде?
#define start (PIND.2==0) // Кнопка СТАРТ

 

Проблема в том, что это С, а не ассемблер. Конструкция PIND.2 с точки зрения С - неправильная. Для доступа к биту пользуйтесь маской, например (PIND & 0b00000100), либо (PIND & (1 << PD2))

 

до этого такая конструкция работала нормально. Да и в книге Программирование МК на Си она присутствует. Эта конструкция позволяет только читать из порта

А можно подробней расписать работу этих масок (PIND & 0b00000100), либо (PIND & (1 < PD2))
А то я что-то не пойму

 

serg_svd: А можно подробней расписать работу этих масок (PIND & 0b00000100), либо (PIND & (1 <PD2)) А то я что-то не пойму

Подробно о работе масок и о свдвигах и о поразрядных логических операц... - и там же он-лайн книга "Язык Си" от Карниган Ричи - основоположников Си.

 

chav1961: Конструкция PIND.2 с точки зрения С - неправильная.

А сточки зрения CVAVR правильная

 

А записывать в порт - вот так: PORTD |= 1 << PD2; (установка 1) PORTD &= ~(1 << PD2); (сброс 0)

 

И очень зря, что правильная. Я в свое время программатор на Visual Studio С в мегу8 затащил на раз-два, потому что никакой экзотикой при программировании не пользуюсь. Стандарт языка С для того и существует, чтобы его соблюдать. В WinAVR GCC она, кстати, тоже не заработает

 

chav1961: PORTD |= 1 << PD2; (установка 1) /i>

PORTD |= 1 < PD2; // установка 1 на PD2

равносильно PORTD |= 1 < 2; равносильно PORTD |= 0b100;

| - установить биты наприв "1"

 

chav1961: Стандарт языка С для того и существует, чтобы его соблюдать.

Я думаю он для того есть чтоб НЕ НАРУШАТЬ его. А соблюдать не обязательно ИМХО.
Большинство компиляторов имеют разные "штучки" не относящиеся к Си и облегчающие жизнь программиста.