В blink2 () вы проверяете глобальную переменную i , но никогда не меняете ее.
Обратите внимание: blink1 () управляет LED2, а blink2 () управляет светодиодом. Возможно, более последовательное именование поможет, и то же самое относится к переменным i, x, y и count.
Нет ограничений на использование более одного прерывания одновременно, но когда из них выполняется, остальные временно заблокирован Это не ваша проблема здесь, ваш код в порядке; но если вы хотите, чтобы прерывание могло прерываться по очереди, для низкой задержки вы должны повторно включить прерывания в (относительно) «медленном» обработчике.
Последнее предложение: где у вас есть «if (y) == 100) "и в последнее время" y = 0 ", если вы переместите" y = 0 "чуть ниже" if (y == 100) ", удобочитаемость улучшится.
Все остальное кажется нормальным, но я бы перепроверьте настройку таймеров; У меня нет под рукой таблицы данных, может быть, есть флаг для очистки в обработчике прерываний (я не могу вспомнить). Учитывая, что вы говорите, что работает один таймер, я полагаю, вы знаете, что делать, два таймера должны работать без проблем.