Кстати, замечание одно. Конечно, писать что-то вроде
SPIE = 1;
легче и быстрее, чем
SPCR |= (1 << SPIE);
"выше уровень абстракции", опять таки.
Но это может войти в привычку и в какой-то момент будет написано
INTF1 = 1;
и пойдут вопросы "ой, а куда делся флаг INTF0"
Всё же при "ручной" работе с INTF1 как с битом регистра EIMSK меньше шансов забыть, что надо делать
EIMSK = (1 << INTF1);
а не
EIMSK |= (1 << INTF1);
, в каковое выльется присвоение битовому полю.
Вопрос вкусовой, но я предпочёл бы не делать представление в в иде битовых полей для регистров, с которыми реализация этого представления в виде чтение, наложения маски и записи назад - "небезопасна"