Просмотр полной версии : Практический вопрос по программированию ВВ55А
Задача: использовать порты А и B для двунаправленной передачи данных с хитрым управлением через порт С. Хитрым потому, что стандартные режимы 1 и 2 ВВ55а не подходят.
Записываю в УС (далее везде режим 0): порты A и B - вывод, старшая половина C - вывод, младшая - ввод.
Вывожу что-то в A и B.
Записываю в C значение 0xFF.
Дальше мне нужно поменять направление портов A и B, для этого записываю в УС: порты A и B - ввод, старшая половина C - вывод, младшая - ввод.
При этом на выводах микросхемы вижу что младший бит старшей половины порта С стал в ноль.
Так и должно быть?
Можно ли этого как-либо избежать?
Возможно, что при переключении режима, порты, которые включаются (или остаются) на вывод, устанавливаются в значения, не противоречащие сигналам на ножках микросхемы. Т.е. как будто бы на короткое время включаются на ввод. Проверь, какие значения оказываются в порту С в режиме ввода.
---------- Post added at 13:12 ---------- Previous post was at 13:03 ----------
Для проверки моего предположения можно поставить на выходе два инвертора и сделать обратную связь через 1к резистор. Получится простейший триггер, вход которого будет "притянут" к нужному нам значению.
b2m, Ножки в воздухе.
Нашел где-то в инете что при установке режима портов все выводные разряды сбрасываются в 0.
:-(
Придётся защелку ставить, а так не хотелось...
Ножки в воздухе
А если всё-таки к еденице притянуть?
---------- Post added at 16:59 ---------- Previous post was at 16:53 ----------
Нашел где-то в инете что при установке режима портов все выводные разряды сбрасываются в 0
Хотя, вполне возможно.
Просто при реализации эмуляции различных компьютеров часто возникал вопрос, какие значения должны иметь порты после сброса. И не всегда это должны были быть нули. Но при сбросе все порты устанавливаются на ввод, и если по схеме порт чем-то управляет, например выбирает карту памяти, то что конкретно выберется, зависит от схемы. Однако установка режима, это не сброс, и обнуление портов вполне возможно.
dk_spb, поставь линейку 74LS573 и не мучайся.
mode_clear <= '0';
if (I_CS_L = '0') and (I_WR_L = '0') then
case I_ADDR is
when "00" => r_porta <= I_DATA;
when "01" => r_portb <= I_DATA;
when "10" => r_portc <= I_DATA;
when "11" => if (I_DATA(7) = '0') then -- set/clr
r_portc <= r_portc_masked or r_portc_setclr;
else
--svo: uncommented
mode_clear <= '1';
r_porta <= x"00";
r_portb <= x"00"; -- clear port b input reg
r_portc <= x"00"; -- clear control sigs
r_control <= I_DATA; -- load new mode
end if;
when others => null;
end case;
end if;
Вот MikeJ тоже колебался, а мне пришлось сброс портов при изменении режима раскомментировать. Иначе чего-то там не работало: судя по логам, в musician.rom на Векторе скакала картинка на экране.
Угу. Бяка там со сбросом....
часто возникал вопрос, какие значения должны иметь порты после сброса. И не всегда это должны были быть нули. Но при сбросе все порты устанавливаются на ввод
Насколько мне помнится на Микроше порты А и В после сброса всегда имели не нулевое значение...
Проще включить да посмотреть :v2_smile:
---------- Post added at 21:16 ---------- Previous post was at 20:42 ----------
Вобщем, с ПЗУ "МИКРОША" порты обнулены.
с ПЗУ "МИКРОША-86РК" при включении порты А нулевой, порт В имеет произвольные значения, после "сброса" порт А обнуляется, порт В сохраняет последнее записанное значение.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot