SIEMENS, DF&PD

Предыдущее посещение: Сб май 28, 2016 2:15 Текущее время: Сб май 28, 2016 2:15

Часовой пояс: UTC + 3 часа




 [ Сообщений: 20 ] 
Автор Сообщение
 Заголовок сообщения: Косвенная адресация. Очередная тема :-(
СообщениеДобавлено: Вт ноя 16, 2010 8:58 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
Приветствую всех!

Начал постигать STL и сталкнулся с косвенной адресацией.
Решил немного поэкспериментировать.

Задача такая: через каждую секунду выводить сигнал на следующий выход.
секунда прошла - адрес, на который посылается сигнал увеличивается на 0.1

Казалось бы что может быть легче? Но я застопорился.
есть: OB1 вызывает FB1

В FB1 пишу:

NW1:

A M 1.0 // запускает алгоритм
A M 0.5 // тактовый меркер 1 секунда
FP M1.1 // ловим положительный фронт сигнала
= M 1.2 // запоминаем состояние

NW2:

LAR1 p#2.0 //указываю начальный адрес

AN(
A M1.2 // проверяем состояние положительного фронта сигнала
)
JC _000 // если не положительный то конец
LAR1 //загружаем адрессный регистр
+ 1 //инкрементируем его
TAR1 //загружаем увеличиный адресс в адресный регистр

A M1.1 // положительный фронт сигнала
A M0.5 // тактовый меркер 1 секунда
= M [AR1,P#0.0] // выводим состояние меркер по адрессу из адрессного регистра + смещение 0

_000: NOP 0


Результат:
Почему-то вывод начинается не с адресса 2.0 , а 0.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 9:07 
Не в сети
Возможно это нечеловек

Зарегистрирован: Пн окт 30, 2006 16:27
Сообщения: 2240
Откуда: Украина, Днепродзержинск
Может быть поэтому?
Цитата:
= M [AR1,P#0.0] // выводим состояние меркер по адрессу из адрессного регистра + смещение 0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 9:54 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
насколько я понимаю, то P#0.0 - смещение внутри адресного регистра, а содержимое регистра у меня меняется выше


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 10:46 
Не в сети
Это точно не человек

Зарегистрирован: Вт май 03, 2005 17:11
Сообщения: 3547
содержимое адресного регистра складывается со смещением. Вы сделали LAR1 p#2.0 - вот она Ваша 2-ка


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 10:56 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
gre_m писал(а):
содержимое адресного регистра складывается со смещением. Вы сделали LAR1 p#2.0 - вот она Ваша 2-ка


так я и говорю, что начинается с 0, а не с двойки!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 11:46 
Не в сети
Новый писатель

Зарегистрирован: Вт ноя 16, 2010 10:25
Сообщения: 23
+AR1
прибавляет содержимое аккумулятора к адресному регистру, а в вашем случае LAR1 загружает содержимое аккумулятора = 0, поэтому адрес 0.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 12:02 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Чт ноя 22, 2007 5:39
Сообщения: 1319
Откуда: Иркутск
Alorex,

что за операция "+1"?

Используйте:
1) +AR1 P#0.1

2) L p#0.1
+AR1

3) LAR1
L p#0.1
+D
TAR1


Последний раз редактировалось Kapter Вт ноя 16, 2010 12:09, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 12:07 
Не в сети
Новый писатель

Зарегистрирован: Вт ноя 16, 2010 10:25
Сообщения: 23
LAR1 загружает содержимое акку1 в адр1
TAR1 загружает содержимое адр1 в акку1

Разве нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 12:09 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Чт ноя 22, 2007 5:39
Сообщения: 1319
Откуда: Иркутск
Nei, ну да, перепутал :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 13:01 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
что за операция "+1"?
инкрементирование (по Бергеру сделано)

уфф. Совсем запутался.
Как мне сделать это?

var i:integer;
begin
= q[i] ; //выход на карте
i:=i+1;
if i=11 then i:=1;
end;

что может быть проще?
а, почему так сложно?
можно ли к выходам обращаться как к элементу массива адресов?

понимаю, что чайник, но прошу напрвить в нужное русло.

Косвенная адрессация единственный способ обращения?

сделать цикл в нутри блока - отметается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 21:48 
Не в сети
Это точно не человек

Зарегистрирован: Вт май 03, 2005 17:11
Сообщения: 3547
Цитата:
LAR1 p#2.0 //указываю начальный адрес
....
LAR1 //загружаем адресный регистр
-

чем?, аккумулятором? А что в аккумуляторе?

я вообще не понимаю - зачем делать LAR1 p#2.0, а затем, не пользуясь этой загрузкой делать LAR1 - или что-то недописано, или где-то нужна L вместо LAR?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 16, 2010 22:13 
Не в сети
Новый писатель

Зарегистрирован: Вт ноя 16, 2010 10:25
Сообщения: 23
Вот такой вариант, если правильно понял задачу.

Цитата:
A "start" //start
S M 1.3
A "stop" //stop
R M 1.3

A M 1.3
A "1Hz" //1Hz
FP M 1.2
JCN end



A "start" //обнуляем cчетчик и пойнтер (начало)
JC zero

L MW 10 //загружаем счетчик работы
L 12 //количество выходов
>=I //все выходы пройдены
JC zero

JU body



zero: L 0
T MW 10
L P#2.0 //адрес первого выхода
T MD 12

body: LAR1 MD 12
SET
= Q [AR1,P#0.0]

+AR1 P#0.1
TAR1 MD 12

L MW 10
+ 1
T MW 10

end: NOP 0

BE





Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 3:12 
Не в сети
Известный Писатель

Зарегистрирован: Пт ноя 21, 2008 9:39
Сообщения: 352
Откуда: Хабаровск
Кстати, я видел реализацию такой задачи (если я правильно понял) - вам нужно реализовать бегущий огонь?...
т.е.
100 0000
010 0000
001 0000
и тд?..

В этом случае мо.но в байт выхода загрузить например
100 0000 и каждую секунду применять команду побитного сдвига с переносом (не помню синтаксис). единичка будет бегать)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 8:55 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
Teemon писал(а):
Кстати, я видел реализацию такой задачи (если я правильно понял) - вам нужно реализовать бегущий огонь?...


Правильно поняли.

Только там ещё будет у меня проблема с тем, что выходы не друг за другом.

Надо будет подумать как реализовать массив адрессов, а потом использовать его.

реально ли это?

array of pointer ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 8:59 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
Nei писал(а):
Вот такой вариант, если правильно понял задачу.


Спасибо. Попробую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 10:01 
Не в сети
Новый писатель

Зарегистрирован: Вт ноя 16, 2010 10:25
Сообщения: 23
Alorex, sorry

Проверил в симуляторе, получился не бегущий сигнал, а заполнение.
С шифтом слова выходов, если все слово доступно - проще:

A "start" //start
S M 1.3
A "stop" //stop
R M 1.3
JC stop

A M 1.3
A "1Hz" //1Hz
FP M 1.2
JCN end

A "start"
JC zero
JU body

zero: L 1
T QW 2
JU end


body: L QW 2
SLW 1
T QW 2

JP zero //cc1=1

BEU


stop: L 0
T QW 2


end: NOP 0

BE


Последний раз редактировалось Nei Чт ноя 18, 2010 10:55, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 10:53 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
Nei писал(а):
Alorex, sorry
Проверил в симуляторе, получился не бегущий сигнал, а заполнение.


Это я уж сам поправил.
Спасибо большое за помощь.

Теперь сам буду ваять - не хорошо пользоваться чужим.

Так как на счёт массива указателей или массива выходов?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 11:03 
Не в сети
Новый писатель

Зарегистрирован: Вт ноя 16, 2010 10:25
Сообщения: 23
Адреса, пойнтеры можно также, последовательно выбирать из блока данных (используя косвенную адресацию), а полученный пойнтер использовать для косвенной адресации выхода (внутризонная с адресным регистром, как в примере выше).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 11:11 
Не в сети
Начинающий писатель

Зарегистрирован: Чт сен 03, 2009 9:08
Сообщения: 73
Откуда: Калуга
Nei писал(а):
Адреса, пойнтеры можно также, последовательно выбирать из блока данных (используя косвенную адресацию), а полученный пойнтер использовать для косвенной адресации выхода (внутризонная с адресным регистром, как в примере выше).


Здорово! Спасибо большое. Одназначно надо перечитывать пособия

При создании элемента блока данных или переменной функции у меня отсутствует тип pointer


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 18, 2010 18:42 
Не в сети
Это точно не человек

Зарегистрирован: Вт май 03, 2005 17:11
Сообщения: 3547
Посмотрите книгу,Р. Экхауз, Л. Моррис, Мини-ЭВМ: организация и программирование, М.: Финансы и статистика, 1983. Система команд совершенно другая, но методология и идеи всегда пригодны


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 20 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group