Три вопроса.
1. Зачем используете ассемблер в СИшном файле?
2. Почему бы вам не придерживаться обозначений регистров принятых TI. Ведь в комментариях же вы их указываете, а в тексте программы почему-то не используете. Вы думаете что все программисты адреса всех регистров в уме держат?

3. Где у вас процедура инициализации источников тактирования? Приведите уж и ее тоже. Если она заключена только в первой строчке данного кода, то она неверная. RTFM.
А ваш пример я бы модифицировал таким способом.
Код
void init_per(void)
{
asm ("BIC.B #0x20, 0x0054 "); // XT2OFF=0
// init_P1
// asm ("BIS.B #0x02, 0x0022"); // P1.1_DIR
// asm ("BIS.B #0x10, 0x0022"); // P1.4
// asm ("BIS.B #0x20, 0x0022"); // P1.5
; вместо трех коммагд одна
P1DIR |= PIN1+PIN4+PIN5;
// asm ("BIS.B #0x02, 0x0026"); // P1.1_SEL
// asm ("BIS.B #0x10, 0x0026"); // P1.4
// asm ("BIS.B #0x20, 0x0026"); // P1.5
; вместо еще трех комманд одна
P1SEL |= PIN1+PIN4+PIN5;
}
Процедуру инициализации источников тактирования я приводил в другом сообщении. См. тему
UART+System Clock