Ну, существует тысяча способов.
Например, пусть модуль B зарегистрирует в модуле A процедуру обратного вызова.
## Код:
```
MODULE A;

  VAR onReceive*: PROCEDURE;

  ...

  (* получили данные *)
  IF onReceive # NIL THEN onReceive() END;

  ...

END A.
```


## Код:
```
MODULE B;

  IMPORT A;

  ...

  PROCEDURE OnReceive;
  BEGIN ...
  END OnReceive;

  ...
BEGIN
  A.onReceive := OnReceive
END B.
```


Но лучше использовать ООП: создать один модуль, в котором описать абстрактные типы (объекты которых друг с другом тесно взаимодействуют), в других модулях реализовать эти типы, и, наконец, в последнем (главном) модуле эти объекты создать и "сцепить" друг с другом.