
//
// Transpondeur
//
Var 2500, name fs_transp, Link FSUIPC_INOUT, Offset $0354, Length 2
{
  &temp_tr_code = FROMBCD &fs_transp
  CALL &calc_temp_dgs
}
Var 2501, name aff_tr_dg4, Link IOCARD_DISPLAY, Digit 96, Numbers 1     // unités transp
Var 2502, name aff_tr_dg3, Link IOCARD_DISPLAY, Digit 97, Numbers 1     // dizaines transp
Var 2503, name aff_tr_dg2, Link IOCARD_DISPLAY, Digit 98, Numbers 1     // centaines transp
Var 2504, name aff_tr_dg1, Link IOCARD_DISPLAY, Digit 99, Numbers 1     // milliers transp
Var 2506, name aff_tr_code, Link IOCARD_DISPLAY, Digit 96, Numbers 4     // code entier
Var 2508, name press_count, Value 0     // nombre d'appuis
Var 2509, name current_digit, Value 1     // numéro du chiffre à afficher
Var 2510, name val_dg     // valeur chiffre courant
Var 2511, name temp_tr_dg1, Value 0     // valeur chiffre milliers
Var 2512, name temp_tr_dg2, Value 0     // valeur chiffre centaines
Var 2513, name temp_tr_dg3, Value 0     // valeur chiffre dizaines
Var 2514, name temp_tr_dg4, Value 0     // valeur chiffre unités
Var 2516, name temp_tr_code     // code temporaire pendans saisie
Var 2517, name mem_tr_code     // code précédent
Var 2518, name new_tr_code, Value 1     // à 0 pendant saisie, à 1 si nouveau code
Var 2520, name tr_push_0, Link IOCARD_SW, Input 127     // Push chiffre 0
{
  IF &tr_push_0 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 0         // chiffre courant = 0
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code     // calcul le nouveau code
    CALL &use_code     // vérifie si code entier
  }
}
Var 2521, name tr_push_1, Link IOCARD_SW, Input 122     // Push chiffre 1
{
  IF &tr_push_1 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 1         // chiffre courant = 1
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code
    CALL &use_code
  }
}
Var 2522, name tr_push_2, Link IOCARD_SW, Input 121     // Push chiffre 2
{
  IF &tr_push_2 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 2         // chiffre courant = 2
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code
    CALL &use_code
  }
}
Var 2523, name tr_push_3, Link IOCARD_SW, Input 108     // Push chiffre 3
{
  IF &tr_push_3 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 3         // chiffre courant = 3
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code
    CALL &use_code
  }
}
Var 2524, name tr_push_4, Link IOCARD_SW, Input 109     // Push chiffre 4
{
  IF &tr_push_4 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 4         // chiffre courant = 4
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code
    CALL &use_code
  }
}
Var 2525, name tr_push_5, Link IOCARD_SW, Input 112 // Push chiffre 5
{
  IF &tr_push_5 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 5         // chiffre courant = 5
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code
    CALL &use_code
  }
}
Var 2526, name tr_push_6, Link IOCARD_SW, Input 110     // Push chiffre 6
{
  IF &tr_push_6 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 6         // chiffre courant = 6
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code
    CALL &use_code
  }
}
Var 2527, name tr_push_7, Link IOCARD_SW, Input 111     // Push chiffre 7
{
  IF &tr_push_7 = 1
  {
    IF &press_count = 0
    {
      CALL &init_tempo
    }
    &val_dg = 7         // chiffre courant = 7
    CALL &place_dg, &val_dg     // met le chiffre à sa place en temporaire
    CALL &calc_temp_code
    CALL &use_code
  }
}
Var 2528, name vfr, Link IOCARD_SW, Input 116     // Push VFR
{
  IF &vfr = 1
  {
  ®ion = rotate 0,2,&vfr
  &tr_mode = 1 
  if ®ion = 0
    {
      &fs_transp = TOBCD 7000     // met le code 7000
      &temp_tr_dg1 = 7         // met les millers à 7  
      &temp_tr_dg2 = 0    
      &temp_tr_dg3 = 0    
      &temp_tr_dg4 = 0    
      CALL &affich_transp     // et l'affiche
    }
  if  ®ion = 1
    {
      &fs_transp = TOBCD 2000 // met le code 2000
      &temp_tr_dg1 = 2         // met les millers à 7  
      &temp_tr_dg2 = 0    
      &temp_tr_dg3 = 0    
      &temp_tr_dg4 = 0    
      CALL &affich_transp     // et l'affiche
    }
  if  ®ion = 2
    {
      &fs_transp = TOBCD 1200     // met le code 1200
      &temp_tr_dg1 = 1         // met les millers à 1  
      &temp_tr_dg2 = 2    
      &temp_tr_dg3 = 0    
      &temp_tr_dg4 = 0    
      CALL &affich_transp     // et l'affiche
    }
  }
}
Var 2529, name sw_tr_off, Link IOCARD_SW, Input 125     // Inter Transp Off
{
  IF &sw_tr_off = 1
  {
    &tr_mode = 1    
    CALL &affich_transp
  }
}
Var 2530, name sw_tr_test, Link IOCARD_SW, Input 117     // test Transp 
{
  IF &sw_tr_test = 1
  {
    &tr_mode = 1    
    CALL &affich_transp
  }
}
Var 2531, name sw_tr_sby, Link IOCARD_SW, Input 123     // Transpondeur mode standby
{
  IF &sw_tr_sby = 1
  {
    &tr_mode = 1    
    &aff_tr_dg1 = &temp_tr_dg1    
    &aff_tr_dg2 = &temp_tr_dg2    
    &aff_tr_dg3 = &temp_tr_dg3    
    &aff_tr_dg4 = &temp_tr_dg4    
    CALL &affich_transp
  }
}
Var 2532, name sw_tr_chrly, Link IOCARD_SW, Input 123     // Transpondeur mode Charly
{
  IF &sw_tr_chrly = 1
  {
    &tr_mode = 0    
  }
}
Var 2533, name sw_tr_ident, Link IOCARD_SW, Input 69     // push ident transpondeur pour ivao
{
  IF &sw_tr_ident = 1
  {
    &tr_ident = 1    
  }
}
Var 2534, name tr_ident, Link FSUIPC_INOUT, Offset $7B93, Length 1     // ident ivao
Var 2535, name tr_mode, Link FSUIPC_INOUT, Offset $7B91, Length 2, Value 0     // mode transpondeur ivao
var 2536, name region, value 0
Var 2540, name tempo, Link SUBRUTINE     // temporisation saisie
{
  IF &tempo >= 400     // si temps terminé
  {
    IF &press_count < 4     // si code partiel saisi 
    {
      &temp_tr_code = &mem_tr_code         // on remet l'ancien code  
      &fs_transp = TOBCD &temp_tr_code     // on le repasse à FS
      CALL &calc_temp_dgs     // et on calcule les chiffres
    }
    CALL &affich_transp     // on affiche les chiffres
    &press_count = 0         // et on réinitialise
    &new_tr_code = 1    
    ¤t_digit = 1    
  }
}
Var 2541, name init_tempo, Link SUBRUTINE     // initialisation tempo
{
  &tempo = 0    
  &tempo = TIMER 400 ,4 ,5
  &mem_tr_code = FROMBCD &fs_transp     // mémorisation ancien code
}
Var 2542, name place_dg, Link SUBRUTINE     // place les chiffres
{
  IF &press_count > 0     // si pas premier appui
  {
    &new_tr_code = 0         // pas un nouveau code 
  }
  &press_count = &press_count + 1
  IF ¤t_digit = 1     // saisie du chiffre des milliers
  {
    &temp_tr_dg1 = &place_dg    
  }
  IF ¤t_digit = 2     // saisie du chiffre des centaines
  {
    &temp_tr_dg2 = &place_dg    
  }
  IF ¤t_digit = 3     // saisie du chiffre des dizaines
  {
    &temp_tr_dg3 = &place_dg    
  }
  IF ¤t_digit = 4     // saisie du chiffre des unités
  {
    &temp_tr_dg4 = &place_dg    
  }
  ¤t_digit = ¤t_digit + 1     // incrémente la position
  IF ¤t_digit = 5     // revient au premier chiffre après le 4e
  {
    ¤t_digit = 1    
  }
}
Var 2543, name calc_temp_code, Link SUBRUTINE     // calcule, envoie à FS et affiche la valeu
{
  L0 = &temp_tr_dg1 * 1000
  L1 = &temp_tr_dg2 * 100
  L2 = L0 + L1
  L1 = &temp_tr_dg3 * 10
  L2 = L2 + L1
  &temp_tr_code = L2 + &temp_tr_dg4
  &fs_transp = TOBCD &temp_tr_code
  CALL &affich_transp
}
Var 2544, name use_code, Link SUBRUTINE     // décision gader ou rejeter
{
  IF &press_count = 4     // code entier saisi 
  {
    CALL &fin     // on garde le nouveau code
  }
  ELSE
  {
    CALL &tempo     // on agit selon timer
  }
}
Var 2545, name fin, Link SUBRUTINE     // termine le traitement
{
  &new_tr_code = 1         // réinitialise pour nouevau code
  ¤t_digit = 1         // réinitialise chiffre à 1
  &fs_transp = TOBCD &temp_tr_code     // envoi code à FS
}
Var 2546, name calc_temp_dgs, Link SUBRUTINE     // calcule les chiffres d'après le code si 
{
  &temp_tr_dg1 = DIV &temp_tr_code ,1000
  &temp_tr_dg4 = MOD &temp_tr_code ,10
  L0 = &temp_tr_dg1 * 1000
  L1 = &temp_tr_code - L0
  &temp_tr_dg2 = DIV L1 ,100
  L2 = &temp_tr_dg2 * 100
  L0 = L1 - L2
  &temp_tr_dg3 = DIV L0 ,10
}
Var 2550, name affich_transp, Link SUBRUTINE     // affiche les 7 segments à réunir avec SIO
{
  C0 = &sw_tr_off = 1
  C1 = &courant = 0     // pas de courant
  C2 = C0 OR C1
  C1 = &fs_avionics = 0
  IF C2 OR C1     // pas de courant ou transpondeur coupé
  {
    &affich_transp = 0    
    &aff_tr_dg1 = -999999         // on éteint les chiffres
    &aff_tr_dg2 = -999999    
    &aff_tr_dg3 = -999999    
    &aff_tr_dg4 = -999999    
  }
  ELSE
  {
  if &sw_tr_test = 1     // si test
   {
   &aff_tr_dg1 = 8         // on allume tous les 8
    &aff_tr_dg2 = 8    
    &aff_tr_dg3 = 8    
    &aff_tr_dg4 = 8
   }
   ELSE
  {
    &affich_transp = 0    
    &aff_tr_dg1 = &temp_tr_dg1    
    &aff_tr_dg2 = &temp_tr_dg2    
    &aff_tr_dg3 = &temp_tr_dg3    
    &aff_tr_dg4 = &temp_tr_dg4    
    &aff_tr_code = &temp_tr_code    
  }
 }
}


Retourner vers Programmation Sioc
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités