Сейчас негде быстро посмотреть, но что-то мне вспоминается, что у классических MCS51 при выполнении записи в порт фактическое состояние его выводов изменяется где-то в начале цикла выборки следующей команды. Таким образом, возможно, что адрес после переключения не успевает стабилизироваться к моменту считывания кода. Что будет на выходах ПЗУ при изменении адреса в процессе чтения - вопрос сложный. Возможно, в описанном случае код команды LCALL не искажается, a ACALL - искажается. Что касается Атмела вообще, то мы в своей работе активно использовали AT89C51, 52, 55, S8252 именно с переключением банков ПЗУ (правда, только данных, не программ). Программа читалась только из банка 0 (при помощи внешней логики все адреса старше A15 обнулялись на время действия PSEN). На нескольких сотнях устройств никаких проблем замечено не было.
|