На самом деле это делается немного по другому. Например так имеется некоторая переменная
volatile unsigned char cTimeCount1;
Пусть таймер у нас дает прерывание каждые 10 мс. Тогда в основном цикле программы, когда надо включить выход 1, пишем так:
cTimeCount1 = 200; //200 раз по 10 мс - 2 секунды
В обработчике таймера, вызываемого каждые 10мс написано следующее:
if(cTimeCount1 != 0){
P17 = 0; //вкл. выход1
cTimeCount1--;
if(cTimeCount1 == 0)
P15 = 0; //вкл. выход2
}
Таким образом, при записи в ячейку cTimerCount1 значения, отличного от нуля, обработчик прерывания, в первое-же прерывание включит выход 1. Далее на каждый свой вызов (каждые 10мс) будет уменьшать значение счетчика, и, дойдя до нуля включит выход 2. Причем отмеряться все эти промежутки и происходить действия будут в "фоновом" от основной программы режиме, Словно другая, параллельная основной программе, задача.