Как работает косвенная адресация вида D0[D100] в PMP20?
Квадратные скобки задают смещение: адрес в скобках складывается с базовым номером. Если D100 = 9, то D0[D100] — это D9, M10[D100] — это M19, а X3[D100] — это X14.
Форматы записи: Dn[Dm], Xn[Dm], Yn[Dm], Mn[Dm]. Смещение может храниться только в регистре D. Для слова из битов работает та же логика: DXn[Dm] означает DX[n+Dm].
Обратите внимание на восьмеричность: X3 со смещением 9 даёт X14, а не X12, потому что входы и выходы считаются восьмерично, а содержимое регистра смещения — десятичное.
Типовые применения:
- Циклический опрос модулей. Читать первый аналоговый вход модуля расширения №1 (регистр ID с номером 10000) раз в секунду и складывать значения в блок из 50 регистров, начиная с D4000, с наращиванием смещения командой INC.
- Поочерёдное включение выходов. Один фрагмент программы вместо восьми одинаковых цепей: смещение растёт, включается Y1, Y2, Y3 и так далее.
- Работа с рецептами. Один и тот же код обращается к разным блокам уставок в зависимости от номера рецепта в регистре смещения.
Контроль выхода за границу лежит на программе: при переполнении смещения включается системный меркер SM410, а номер виноватого регистра смещения оказывается в SD410. Это стоит проверять, если после доработки программы контроллер начал вести себя непредсказуемо.
Прикреплённая документация
Георгий Жуков
Ведущий инженер