確かに、難しいところがありますよね。

以下の3つに分けて考えましょう。
1. main()
2. タイマー割込
3. 関数

1. main()は、細かいことは書かないで「装置全体の動作の流れ」がわかるように書くと良いです。
     
2. タイマー割り込みは、いろいろできますが、多重割り込みになると面倒ですので、
   サッと抜けるような処理だけ書きましょう。
   時間は、1msで行けると思います。(PICは楽勝。アルデーノは知らない)

3. 関数
   main()で使用する関数の中身を書きましょう。

こんな感じです。

interrupt_timer....(){
  count++
}

void main(){
  st = 0;
  while(1){
    if( st==0 ){         // 0のとき
      init(); st=1;         // 初期化して、1へ

    } else if( st==1 ){      // 1のとき
      if( SW1==on ){         // SW1が押されたら
        LED1=on;  LED2=off;  LED2=off;  // LEDをセットして
        fprintf(xx, "Get1 \r\n");      // シリアルで送信して
        st = 2;               // 次へ

      } else if( SW2==on ){      // SW2が押されたら、
        LED1=off;  LED2=on;  LED2=off;  // LEDセットして
        Mootor_L( on );            // モーター回転on
        count = 0;              // 時間カウンタreset
        st = 3;                // 次へ
      }

    } else if( st==2 ){      // 2のとき
      if( count > 800 ){       // 800ms経ったら
        st = 3;             // 次へ
      }

    } else if( st==3 ){      // 3のとき
      if( SW_stop==on ){        // StopSWが押されたら
        fprintf(xx,"STOP....\r\n");    // シリアル送信して
        Mootor_L( off );          // モーター回転off
        st = 1;              // 1へ戻る
      }
    }
  }
}