PDA

Просмотр полной версии : Практический вопрос по программированию ВВ55А



dk_spb
01.02.2010, 10:31
Задача: использовать порты А и B для двунаправленной передачи данных с хитрым управлением через порт С. Хитрым потому, что стандартные режимы 1 и 2 ВВ55а не подходят.

Записываю в УС (далее везде режим 0): порты A и B - вывод, старшая половина C - вывод, младшая - ввод.
Вывожу что-то в A и B.
Записываю в C значение 0xFF.
Дальше мне нужно поменять направление портов A и B, для этого записываю в УС: порты A и B - ввод, старшая половина C - вывод, младшая - ввод.
При этом на выводах микросхемы вижу что младший бит старшей половины порта С стал в ноль.
Так и должно быть?
Можно ли этого как-либо избежать?

b2m
01.02.2010, 12:12
Возможно, что при переключении режима, порты, которые включаются (или остаются) на вывод, устанавливаются в значения, не противоречащие сигналам на ножках микросхемы. Т.е. как будто бы на короткое время включаются на ввод. Проверь, какие значения оказываются в порту С в режиме ввода.

---------- Post added at 13:12 ---------- Previous post was at 13:03 ----------

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

dk_spb
01.02.2010, 15:38
b2m, Ножки в воздухе.
Нашел где-то в инете что при установке режима портов все выводные разряды сбрасываются в 0.
:-(
Придётся защелку ставить, а так не хотелось...

b2m
01.02.2010, 15:59
Ножки в воздухе
А если всё-таки к еденице притянуть?

---------- Post added at 16:59 ---------- Previous post was at 16:53 ----------


Нашел где-то в инете что при установке режима портов все выводные разряды сбрасываются в 0
Хотя, вполне возможно.

Просто при реализации эмуляции различных компьютеров часто возникал вопрос, какие значения должны иметь порты после сброса. И не всегда это должны были быть нули. Но при сбросе все порты устанавливаются на ввод, и если по схеме порт чем-то управляет, например выбирает карту памяти, то что конкретно выберется, зависит от схемы. Однако установка режима, это не сброс, и обнуление портов вполне возможно.

AlecV
03.02.2010, 21:59
dk_spb, поставь линейку 74LS573 и не мучайся.

svofski
04.02.2010, 19:20
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 на Векторе скакала картинка на экране.

dk_spb
04.02.2010, 21:45
Угу. Бяка там со сбросом....

Atari
02.03.2010, 23:16
часто возникал вопрос, какие значения должны иметь порты после сброса. И не всегда это должны были быть нули. Но при сбросе все порты устанавливаются на ввод

Насколько мне помнится на Микроше порты А и В после сброса всегда имели не нулевое значение...

Проще включить да посмотреть :v2_smile:

---------- Post added at 21:16 ---------- Previous post was at 20:42 ----------

Вобщем, с ПЗУ "МИКРОША" порты обнулены.

с ПЗУ "МИКРОША-86РК" при включении порты А нулевой, порт В имеет произвольные значения, после "сброса" порт А обнуляется, порт В сохраняет последнее записанное значение.