Просмотр полной версии : Зажигание светодиода процессором Z80.
zx_gamer
03.07.2022, 20:53
Здравствуйте.
Я хочу для начала "поморгать" светодиодом с помощью Z80.
Подскажите пожалуйста, как это сделать максимально просто.
Планирую подключить лишь одно ПЗУ (без ОЗУ), CS и OE не использовать (одна микросхема ведь).
Но вот не хочется дешифрировать порт... (А самое простое, что я могу представить порт FF -- как минимум требует блока "восемь логических И")
Можно ли обойтись как-нибудь вообще без логики?
Kakos_nonos
03.07.2022, 21:46
Повесить светодиод на ногу A15, а её не подключать к микросхеме памяти.
И написать такой код чтоб его половина выполнялясь в области $0000-7fff, а половина в $8000-$ffff
Тогда получится что когда выполняется первая половинк кода светодиод не горит, а когда вторая - горит.
- - - Добавлено - - -
Также можно использовать микросхему кр580вв55, это 3 порта ввода-вывода. Её выборку можно подключить к сигналу чтения/записи порта, тогда дополнительная логика не нужна.
Это задел на будущее, так можно и не только один светодиод подключить, а 24, или кнопки сделать.
TomaTLAB
03.07.2022, 21:56
светодиод на ногу A15 Это выверты из области: "зачем не знаю, смотри как можно" :) Очень любят во всяких "умных" книжках.
Практической пользы ноль, но как курьез и упражнение по программированию пойдет. Да, заявленной задаче удовлетворяет на все 100, но вещь в себе.
Зачем такой выверт, когда можно все же пойти по букварю и сделать нормальный порт на регистре. И пусть он все адреса занимает, ОЗУ-то нет.
Зачем такой выверт, когда можно все же пойти по букварю и сделать нормальный порт на регистре
не хочется дешифрировать порт...
ТС поставил задачу - ее решили =))
От себя добавлю: можно использовать другие разряды и ПЗУ меньшей емкости - вплоть до РТхх каких-нибудь. Весь вопрос в коде.
И такие задачу+решение вижу куда интересней/познавательней, чем моргать светодиодом через Ардуино (эт как сверлить лунки на рыбалке с помощью горной техники).
FPGA, t80 и твори как художник, хочешь с дешифрацией, хочешь без.
Замкнуть шину данных на общий, это будет один монументальный NOP.
Повесить светодиод на A15.
Всё.
это будет один монументальный NOP
Не, ну ТС, надеюсь, предполагал осмысленное моргание =) хотя... тут и ПЗУ тогда не понадобится. И вообще ничего, голый проц + клок.
Что до FPGA - это совсем другая история, к олдскул железу не имеющая никакого отношения. Но решать автору топика.
можно и не только один светодиод подключить, а 24
На три порта ВВ55 динамически 128 светодиодов легко. Матрица 8х16. Работало. Вот только программой ни с кем не поделишься :)
vegapiratradio
04.07.2022, 00:36
OE от ПЗУ цепляешь к процессору на линию /MREQ .
регистр все же потребуется но его можно сделать из триггера, например 1533ТМ2 или даже 155ТМ2,не важно. ногу С (триггера) цепляешь на ногу /IORQ , а D (триггера) на любую линию данных процессора, например D0.
теперь, только при обращении процессором в порт ввода-вывода (по любому адресу), в триггере будут защелкиваться данные которые будут на линии D0.
а если поставить на линию данных не триггер а полноценный регистр на 8 бит (например 1533ИР22 или 23) то в твоем распоряжении будет 8 линий выхода.
единственная неприятность это то, что вывод /IORQ процессора инверсный, но победить его можно всего одним транзистором, например кт315 (куда же без него?))))
и того 3 микросхемы и транзистор, конечно, не считая генератора который будет на логике?
С ИР23 как раз должно работать без инверсии. Он запомнит, что было на шине в момент снятия /IORQ. ИР22 -- что было в момент установки. Какой-то из них точно будет работать без инверсии :)
Лень смотреть диаграмму сигналов Z80, что там должно быть.
zx_gamer
04.07.2022, 08:48
Повесить светодиод на ногу A15, а её не подключать к микросхеме памяти.
И написать такой код чтоб его половина выполнялясь в области $0000-7fff, а половина в $8000-$ffff
Тогда получится что когда выполняется первая половинк кода светодиод не горит, а когда вторая - горит.
Вообще можно попробовать сделать так:
1. Использовать маленькое ПЗУ (32 Кб или меньше)
2. Как вы и предложили, использовать A15
3. Использовать что-то вроде такого кода:
.org 0
LD a, 255
LD b, 0
M1:
OUT (0FFFFh), a
DJNZ M1
DJNZ $ ;pause
CPL ;inverse out data
JR M1 ;and repeat
Единственное, над чем еще стоит задуматься -- это как сделать так, чтобы при обращении к порту ПЗУ не прыгало по адресам...
Сама по себе постановка задачи странная. Если тестировать сам процессор z80, то для этого можно использовать внешнюю систему и z80 подсовывать что нужно на соответствующие шины и линии. А если написать код для моргания светодиодом, то тут широчайший арсенал средств от той же персоналки с usb2(отдельные линии) до программируемого 8 ногого MCU любого из Вам доступного и программируемого на имеющемся у Вас программаторе. Использовать же z80 в качестве MCU ну это все-равно, что "из пушки палить по воробьям".
vegapiratradio
04.07.2022, 15:08
С ИР23 как раз должно работать без инверсии. Он запомнит, что было на шине в момент снятия /IORQ. ИР22 -- что было в момент установки. Какой-то из них точно будет работать без инверсии :)
Лень смотреть диаграмму сигналов Z80, что там должно быть.
да, я вот помню, что должно быть отличие по тактовому входу, но документация как обычно, с сюрпризами!
тут http://esxema.ru/?p=9170 написано, что инверсия по выходам.
а вот тут http://tec.org.ru/board/kr1533ir23/151-1-0-1169 только что нашел, что отличие как раз по тактовому входу.
кошмар :v2_dizzy_facepalm:
тут http://esxema.ru/?p=9170 написано, что инверсия по выходам.
Это не верно.
а вот тут http://tec.org.ru/board/kr1533ir23/151-1-0-1169 только что нашел, что отличие как раз по тактовому входу.
Это правда. Так что ИР23 (а еще лучше ИР37, там выводы разведены удобнее) использовать, как предложено выше, получится.
vegapiratradio
05.07.2022, 05:04
OUT (0FFFFh), a
по моему компилятор такое не пропустит.
старшая часть адреса разве не из А берется?
Повесить светодиод на ногу A15, а её не подключать к микросхеме памяти.
Какос правильно мыслит.) Достаточно z80 и ПЗУ. И играйся адресами.
; Мигание светодиодом подключенным к A15 и +5В
ON_COUNT equ 8000h ;длительность включенного состояния
OFF_COUNT equ 0c000h ; выключеного
.z80
start: .phase 0
ld bc,ON_COUNT
loop defl $
dec bc
ld a,b
or c
jr nz,loop
jp off
.dephase
.phase $ - start + 8000h
off: ld bc,OFF_COUNT
loop defl $
dec bc
ld a,b
or c
jr nz,loop
jp 0
.dephase
end
Можно даже несколько светодиодов вешать, каждый на свой адрес. И управлять по своему усмотрению.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot