こんな感じで動作しないかな?試してないけど。

//ウィンカーの点滅
int wTimer
wTimer = 0;
//点灯すべきウィンカー
int wFlag;
wFlag = 0;
//ハザードを点滅させる場合は1。スイッチを押すたびに0-1を切り替える
int hFlag;
hFlag = 0;
//チャタリング判定用。
//通常時は0、スイッチが押されている間は1、スイッチON→OFFのタイミングでカウント増加
int swFlag;
swFlag = 0;

while(1){
if(RB5 == 0){
if(swFlag == 0){
if(hFlag == 0){
wFlag = 0b11000011;
wTimer = 0; //操作されたら、すぐに点灯させる
hFlag = 1; //ハザードスイッチの状態を覚える
}else{
wFlag = 0b00000000;
wTimer = 0;
hFlag = 0;
}
}
swFlag=1;
}else{
if(swFlag > 0) swFlag++;
if(swFlag >= 50) swFlag = 0; //RB5スイッチが50ms以上オフになるまで次の操作はできない
}
if(wFlag > 0){ //動作させるべきウィンカーがある場合は500ms毎に点滅
if(wTimer == 0) PORTB = wFlag;
if(wTimer == 500) PORTB = 0;
wTimer++;
if(wTimer >= 1000) wTimer = 0;
}else{
if(wTimer == 0){ //全オフになったら、一回だけポートBに出力
PORTB = wFlag;
wTimer = 1;
}
}
__delay_ms(1);
}