Не знаю зачем такое нужно ? да и еще на меге

, вы ведь на этом ничего не выиграете.
Лучший вариант:
Код
//типы функций прерывания
typedef void(*irq_func_type)(void)
irq_func_type irq_function;
void irq_isr(void) //глобальный обработчик
{
if (irq_function!=NULL) irq_function();
}
void programm1_isr() //обработчик прерывания для 1 программы
{
}
void programm2_isr() //обработчик прерывания для 2 программы
{
}
void main(void)
{
//***************************
//Здесь определяется какая программа должна выполнятся
//***************************
//назначем прерывания
if (prigramm == 0) irq_function = programm1_isr;
else irq_function = programm2_isr;
while(1)
{
if (prigramm == 0)
{
//выполняем программу 1
}
else
{
//выполняем программу 2
};
}
}