Микроконтроллеры | Помогите написать программу цифрового таймера |
|
---|---|---|
serg_svd: PIND.3 а в WinAVR так можно к битам порта обращаться ? |
|
|
по-моему да. А в чем проблема? А определение кнопок может лучше в таком виде? |
|
|
Проблема в том, что это С, а не ассемблер. Конструкция PIND.2 с точки зрения С - неправильная. Для доступа к биту пользуйтесь маской, например (PIND & 0b00000100), либо (PIND & (1 << PD2)) |
|
|
до этого такая конструкция работала нормально. Да и в книге Программирование МК на Си она присутствует. Эта конструкция позволяет только читать из порта А можно подробней расписать работу этих масок (PIND & 0b00000100), либо (PIND & (1 < PD2)) |
|
|
serg_svd: А можно подробней расписать работу этих масок (PIND & 0b00000100), либо (PIND & (1 <PD2)) А то я что-то не пойму Подробно о работе масок и о свдвигах и о поразрядных логических операц... - и там же он-лайн книга "Язык Си" от Карниган Ричи - основоположников Си. |
|
|
chav1961: Конструкция PIND.2 с точки зрения С - неправильная. |
|
|
А записывать в порт - вот так: 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: Стандарт языка С для того и существует, чтобы его соблюдать. Я думаю он для того есть чтоб НЕ НАРУШАТЬ его. А соблюдать не обязательно ИМХО. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |