Перейти к содержанию
    

Читаю IN R16,PINA - записывается последний байт, который передавал из порта.

Читаю по-битно

SBIS PINA,0

JMP M

ORI R16,01

M1: SBIS PINA,1

JMP M1

ORI R16,02

M1:

и т.д. - все в порядке. В чем разница? Ведь можно же читать сразу входной байт, где ошибка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вы дали не весь код нет команды записи в порт.

непонятно среда, на чем отлаживалась программа (софтверно или на железе).

Бывают ошибки с адресацией к портам ввода вывода.

Входной и выходной имеют различные адреса.

 

Паузу в виде nop , делать не надо если схема разработана корректно все работает без задержек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если выполнено:

ser r16

out DDRA,r16

out PORTA,r16

in r16,PINA ;то без доп.действий в r16 и будет 0хff,

 

для получения другого результата

-в симуляторе в IO view | PORTA | PINA надо сбросить какой-нибудь флажок непосредственно перед считыванием (in r16,PINA)

-в железе соединить с нулем какой-нибудь контакт PORTA до выполнения соотв.куска программы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если выполнено:

ser r16

out DDRA,r16

out PORTA,r16

in r16,PINA ;то без доп.действий в r16 и будет 0хff,

 

для получения другого результата

-в симуляторе в IO view | PORTA | PINA надо сбросить какой-нибудь флажок НЕПОСРЕДСТВЕННО перед считыванием (in r16,PINA), после следующего шага галочка восстановится (для симулятора AVR Studio 3.xx)

-в железе соединить с нулем какой-нибудь контакт PORTA до выполнения соотв.куска программы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

NOP после чтения очень помогает

порты обновляются в следующей команде

аналогично на вывод

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо вставлять лиший код в программу.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задержки нужны есле относительно большая емкостная нагрузка на выходе висит. например кнопки и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Абсолютно прав Maxim и без всяких "если".

В Атмеловских даташитах об этом однозначно говорится, что появление сигнала на выходе порта происходит в следующем такте после исполнения соответствующей команды записи в порт. Поэтому команда чтения из соответствующего пина ОБЯЗАНА отставать от команды записи хотя бы на один такт (команда NOP как минимум), иначе будет считано предыдущее состояние пина.

При пошаговой отладке, например через JTAG, может показаться, что это не верно, т. к. тактовый генератор не останавливается и нужные такты проскакивают как раз между соседними шагами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.. появление сигнала на выходе порта происходит в следующем такте

 

.. (команда NOP как минимум)..

 

Почему то у Меги128 (16 мГц) "для гарантии" требуется

2 NOP..

:(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.. появление сигнала на выходе порта происходит в следующем такте

 

.. (команда NOP как минимум)..

 

Почему то у Меги128 (16 мГц) "для гарантии" требуется

2 NOP..

:(

 

Потому, что даташиты внимательно читать надо. Открой DS на AT90Sxx и на ATMEGAxx, зайди в раздел I/O Ports, и посмотри схему любого порта.

В мегах на всех входах появилась такая штука, как "Synchronizer" - цепочка из защелки и D-триггера. Соответственно, им еще такт нужен. На самом деле, пол-такта, но пол-нопа в программу не засунешь. Ну, и плюс вышеупомянутый ноп.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...