Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

52 строки
1.1KB

  1. Exor::Exor()
  2. {
  3. a=b=c=0; // nix angschlossen
  4. actionFlag=false;
  5. }
  6. Exor::~Exor() {}
  7. void Exor::ChangeInput (State s, int pin)
  8. {
  9. // Sorge dafuer, dass Gatter neu berechnet wird, wenn
  10. // alle Zustaende der Eingaenge (Draehte) festliegen
  11. if (!actionFlag)
  12. {
  13. Sim.StoreCircuitEvent(*this);
  14. actionFlag=true;
  15. }
  16. }
  17. void Exor::Action ()
  18. {
  19. // Lese Eingangssignale
  20. State A = a->GetState();
  21. State B = b->GetState();
  22. // Wertetabelle
  23. if (A==low && B==low) c->ChangeState(Sim.GetTime()+3,low);
  24. if (A==low && B==high) c->ChangeState(Sim.GetTime()+3,high);
  25. if (A==high&& B==low) c->ChangeState(Sim.GetTime()+3,high);
  26. if (A==high&& B==high) c->ChangeState(Sim.GetTime()+3,low);
  27. // unbekannt
  28. if (A==unknown||B==unknown)
  29. if (c!=0) c->ChangeState(Sim.GetTime()+3,unknown);
  30. // erlaube neue Auswertung
  31. actionFlag=false;
  32. }
  33. void Exor::ConnectInput (Wire& w, int pin)
  34. {
  35. // Wird von Connect-Funktion des Drahtes aufgerufen
  36. if (pin==0) a = &w;
  37. if (pin==1) b = &w;
  38. }
  39. void Exor::ConnectOutput (Wire& w, int pin)
  40. {
  41. // Wird von Connect-Funktion des Drahtes aufgerufen
  42. c = &w;
  43. }