There are two main ways in which one program can invoke other
1) EXEC CICS LINK
This allows one program to transfer control to another and continue execution after the called program has returned. This also occurs by means of native programming language such as COBOL CALL statement.
2) EXEC CICS XCTL
Allows for one program to call other in synchronous but unlike LINK will not receive control back when the called program returns.
In both the cases, COMMAREA is used to pass parameters and returned values
One program can call other by passing data in the FROM area defined in EXEC CICS START command. Programm for which START has been issued is executed as logical level 1, independent of the level of the program that issued START. FROM area can be accessed using RETRIEVE command
Also you can code CICS + MQSERIES program for asynchronous calls