PDA

Просмотр полной версии : UART на минималках



Alex_LG
18.01.2026, 21:19
Не секрет, что для подключения последовательного порта к таким компьютерам как Специалист, Радио-86РК, Микро-80 и т.п. нужно лезть в схему (иногда даже менять ее), выдумывать новые порты и т.д... Но есть вариант проще, думаю, что, еще проще не получится.
Итак. Практически в каждом компьютере есть порт на ВВ55 и им пользуются обычно только в одном режиме, так называемом Mode 0, когда порты настраиваются на запись или чтение, т.е. как регистры или буферы. Но есть еще два режима, которыми практически никто не пользуется - Mode 1 и Mode 2. Они очень похожи в работе, за исключением того, что в Mode 1 порты А и В используются отдельно на ввод или вывод, а порт С - управляющий, а в Mode 2 используется только порт А как двунаправленный, порт В - свободен, часть порта С занята управляющими сигналами. В кратце опишу работу в Mode 2.
В Mode 2 порт А настраивается, как уже сказал, в режим двунаправленной передачи и его выходы находятся в Z-состоянии. Порт В свободен и его можно использовать по своему усмотрению, например в Mode 0 на вывод или ввод. Порт С делится на две части:
РС0-2 - свободны для пользователя;
РС3 - INTR A, прерывание, может быть настроено на запись как во входной так и выходной регистр или их комбинацию;
РС4 - /STB, сигнал по которому происходит запись данных во входной регистр порта А внешним устройством, устанавливает флаг IBF в "1";
РС5 - IBF, флаг наличия данных во входном регистре порта А, устанавливается в "1" в момент записи данных из внешнего устройства в порт А и сбрасывается в момент считывания данных процессором;
РС6 - /ACK, сигнал по которому происходит считывание данных из выходного регистра порта А внешним устройством, сбрасывается флаг OBF в "1";
РС7 - /OBF, флаг наличия данных в выходном регистре порта А, устанавливается в "0" в момент записи данных процессором и сбрасывается в момент чтения данных внешним устройством.
Внешнее устройство контролирует состояние флагов непосредственно на выводах порта С, чтение же флагов и управление прерываниями процессором происходит из внутреннего регистра порта С, где D7- OBF, D6 - INTE1, D5 - /IBF, D4 - INTE2, D3 - INTR A.

Т.о. есть порт, который флагами может показывать наличие или отсутствие новых данных в регистрах порта А. Остается записывать или считывать данные из этого порта и передавать их каким-либо способом на РС. В качестве преобразователя параллельных данных в последовательные использован микроконтроллер Mega8, можно использовать и поменьше - программа занимает около 400 байт. Схема подключения к ВВ55:
https://i.postimg.cc/nCCzqKwV/VV55UART.png (https://postimg.cc/nCCzqKwV)

Исходники для Меги:
https://drive.google.com/file/d/1i91jVIxyC4MkGL_yVfLZRw86llUFmHBm/view?usp=drive_link
Фьюзы: L:0xE4, H:0xD9

Ну и примеры работы (порты ВВ55 занимают адреса от 010Н до 013Н):
Вывод слова "TEST"

ORG 0
;PORTA
;MODE 2
;PORTB
;MODE 0
;OUTPUT
;PC2-0
;OUTPUT
MVI A,0C0H
OUT 013H
LXI H,STR
LOOP:
IN 012H
;CHECK OBF
ANI 080H
JZ LOOP
MOV A,M
ORA A
RZ
OUT 010H
INX H
JMP LOOP
STR:
DB 'TEST',0
END

Загрузка файла:

ORG 0
;HL=START ADDR
;DE=END ADDR

;PORTA
;MODE 2
;PORTB
;MODE 0
;OUTPUT
;PC2-0
;OUTPUT
MVI A,0C0H
OUT 013H
LOOP:
IN 012H
;CHECK IBF
ANI 020H
JZ LOOP
IN 010H
MOV M,A
INX H
;HL<>DE
CALL 0C01BH
JNZ LOOP
RET
END

M80
19.01.2026, 10:22
Минималки - это один бит порта В/В. Но нужно напрягаться с софтом.)
А вообще, проще на Ардуино - сразу USB и никаких программаторов.) Когда то приводил один из вариантов: https://zx-pk.ru/threads/25682-samodelnyj-kompyuter-na-z80-i-ne-tolko.html?p=1187233&viewfull=1#post1187233

Alex_LG
19.01.2026, 16:19
В том-то и дело, что программно - будет медленно и код не маленький. На 8085 через sim&rim делал обмен с РС на 9600, но со стороны РС пришлось делать паузы, чтобы 8085 успевал обрабатывать...
Ардуино - это та же Мега, но с обвеской, можно и ее, только Ваш вариант предусматривает подключение к процессору, т. е. лезть в комп - первое предложение в первом посте...

M80
19.01.2026, 16:55
Абсолютно согласен. Если есть свободный ВВ55, то его можно использовать. Насчёт сложности - каждый решает исходя из своих задач и возможностей.
Ардуино удобно тем, что его можно использовать совместно с ПЗУ или ОЗУ. Т.о. решается загрузка и отладка ПО.

Kulich
21.01.2026, 10:33
Что только люди не придумают чтобы нормально не делать, прикрутите 16550 или на худой конец ВВ51 и радуйтесь аппаратному уарту с управлением потоком.

M80
21.01.2026, 12:30
Ну ты сам должен сравнить. Вместо ПЗУ я вставляю свою приблуду и имею перепрограммируемое через USB ПЗУ и тот же UART до 2 мб/сек. Есть разница с твоим нормальным ВВ51, которому ещё и генератор скорости нужен, и для которых ещё соплей нужно навешать?

cy6
22.01.2026, 11:18
радуйтесь аппаратному уарту с управлением потоком
Так он здесь аппаратный, только по технологии AVR. :D

- - - Добавлено - - -

И вообще, этот девайс еще можно загрузить аппаратными I2C и SPI, до кучи. И эмуляцию загрузочного ПЗУ прикрутить, место в EEPROM встроенном есть.
Фишка здесь в обмене МК и ретро ПК через специальный режим ППА.

Alex_LG
22.01.2026, 18:45
Что только люди не придумают чтобы нормально не делать, прикрутите 16550 или на худой конец ВВ51 и радуйтесь аппаратному уарту с управлением потоком.

Ну и как это прикрутить без вмешательства в схему? Еще раз повторюсь, что смысл данной поделки не лезть в схему и не изобретать порты. Есть же порт расширения на вв55, почему бы им не воспользоваться!? Можно, конечно и на него прикрутить тот же вв51 +ие5 +кварц, но код управления всем этим буде просто огромен по сравнению с вышеописанным.