MOD

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

Hinweis kann nach Kenntnisnahme deaktiviert werden!

  • Modulo- Befehl am Beispiel der Zerlegung von mehrstelligen Zahlen in Einzelziffern
    Der MOD (Modulo)- Befehl ist eine Ableger der Division, jedoch liefert der Befehl nicht das Ergebnis
    der Divisionsaufgabe, sondern den Rest, welcher beim ganzzahligen Teilen übrig bleibt. Hier der übersetzte Auszug aus der BASCOM- Hilfe:

    Die MOD-Operation ähnelt der Divisionsoperation (/). Während eine Division die Anzahl zurückgibt, wie oft eine Zahl geteilt werden kann, gibt der MOD den Rest zurück.

    Beispiel: 21 MOD 3 führt zu 0, da 7x3 = 21 ist. Es wird keinen Rest geben.

    22 MOD 3 führt jedoch zu 1 da 22- (7x3) = 1

    In BASCOM bestimmt die zugewiesene Variable, welche Art von Mathematik verwendet wird. Wenn Sie 2 Wortvariablen haben, aus denen Sie den Modul erhalten möchten, müssen Sie auch eine Wortvariable zuweisen.
    Wenn Sie ein Byte zuweisen, wird die Byte-Mathematik verwendet.

    Wofür aber, kann man diesen Befehl sinnvoll einsetzen? Eine der häufigsten Anwendungen ist das Zerlegen von Zahlen für die Anzeigensteuerung beim Multiplexen. Wenn man beispielsweise eine vierstellige Zahl mittels Multipelexen auf einer entsprechenden Siebensegmentanzeige darstellen möchte, bringt einen die darzustellende Zahl als Ganzes nicht viel weiter. Da die einzelnen Segmente ziffernweise angesteuert werden müssen, ist es erforderlich die vorgegebene Zahl in Einzelziffern zu zerlegen, also in "Einer", "Zehner","Hunderter" und "Tausender" aufzuschlüsseln.

    Diese Aufgabe kann mit dem MOD- Befehl gelöst werden. Basierend auf unserem Dezimalsystem werden die zu separierenden Zahlen mit "MOD 10" verarbeitet. Für diese Aufgabe ist es notwendig eine Variable als Zwischenspeicher zu erzeugen. In diesem Beispiel ist diese Variabel mit "Zwischenwert" benannt.


    Wichtig ist (wie im zitierten Hilfetext erwähnt), dass alle für die Berechnung verwendeten Variablen vom gleichen Typ sind. Es ist also nicht möglich Byte- und Wordvariablen in der Berechnung zu mischen.

    Die Verwendung des MOD- Befehls zeigt das folgende BASCOM- Programm. Das Programm ist für die Anwendung im Simulator ausgelegt. Am Besten, Ihr kopiert das Programm und kompiliert dieses in BASCOM. Im Simulator könnt Ihr dann eine beliebige 4stellige Zahl eingeben, welche Euch das Programm ausführlich kommentiert zerlegt.

    BASCOM-Quellcode

    1. '************************************************************
    2. ' Beispielcode für BASCOM- Lexikon
    3. ' www.bascomforum.de
    4. ' (c) 2013/2014 ceperiga
    5. '============================================================
    6. 'Beschreibung:
    7. 'Separieren mehrstelliger Zahlen in Einzelziffern mittels MOD
    8. '************************************************************
    9. '==============================================================================
    10. $regfile = "m8adef.dat" 'verwendeter Controller
    11. $crystal = 1000000 'Taktfrequenz
    12. $hwstack = 32 'Grundeinstellung
    13. $swstack = 4 'Grundeinstellung
    14. $framesize = 4 'Grundeinstellung
    15. $sim 'für Simulatorausgabe
    16. $baud = 4800 'Für serielle Ausgabe
    17. '==============================================================================
    18. 'Variablen deklarieren
    19. '------------------------------------------------------------------------------
    20. Dim Ausgangswert As Word
    21. Dim Zwischenwert As Word
    22. Dim Stelle_4 As Word
    23. Dim Stelle_3 As Word
    24. Dim Stelle_2 As Word
    25. Dim Stelle_1 As Word
    26. '==============================================================================
    27. 'Hauptprogramm
    28. '------------------------------------------------------------------------------
    29. Do
    30. 'Alle Printanweisungen im Programm für die Ausgabe im Simulator
    31. Print "4 stelligen Ausgangswert eingeben:"
    32. Input Ausgangswert
    33. Print " Ausgangswert: ";
    34. Print Ausgangswert
    35. '----------------------------------------------------------------------------
    36. 'Separieren der rechten Stelle (Stelle_4)
    37. '----------------------------------------------------------------------------
    38. Stelle_4 = Ausgangswert Mod 10
    39. Print "---------------------------------"
    40. Print "Stelle_4 separieren"
    41. Print "Stelle_4 = " ; Stelle_4
    42. '----------------------------------------------------------------------------
    43. 'MOD- Wert von ursprungsvariable abziehen und Teilen durch 10,
    44. 'damit die nächste Stelle separiert werden kann
    45. Zwischenwert = Ausgangswert / 10
    46. Print "Zwischenwert nach Teilen durch 10"
    47. Print Zwischenwert
    48. '----------------------------------------------------------------------------
    49. 'Separieren der rechten Stelle (Stelle_3)
    50. '----------------------------------------------------------------------------
    51. Stelle_3 = Zwischenwert Mod 10
    52. Print "---------------------------------"
    53. Print "Stelle_3 separieren"
    54. Print "Stelle_3 = " ; Stelle_3
    55. '----------------------------------------------------------------------------
    56. 'MOD- Wert von ursprungsvariable abziehen und Teilen durch 10,
    57. 'damit die nächste Stelle separiert werden kann
    58. Zwischenwert = Zwischenwert / 10
    59. Print "Zwischenwert nach Teilen durch 10"
    60. Print Zwischenwert
    61. '----------------------------------------------------------------------------
    62. 'Separieren der rechten Stelle (Stelle_2)
    63. '----------------------------------------------------------------------------
    64. Stelle_2 = Zwischenwert Mod 10
    65. Print "---------------------------------"
    66. Print "Stelle_2 separieren"
    67. Print "Stelle_2 = " ; Stelle_2
    68. '----------------------------------------------------------------------------
    69. 'MOD- Wert von ursprungsvariable abziehen und Teilen durch 10,
    70. 'damit die nächste Stelle separiert werden kann
    71. Zwischenwert = Zwischenwert / 10
    72. Print "Zwischenwert nach Teilen durch 10"
    73. Print Zwischenwert
    74. Print "Der letzte Zwischenwert ist Stelle_1:"
    75. Stelle_1 = Zwischenwert
    76. Print Stelle_1
    77. '----------------------------------------------------------------------------
    78. 'Endergebnis:
    79. '----------------------------------------------------------------------------
    80. Print "----------------------------------"
    81. Print "Unser Endergebnis:"
    82. Print "----------------------------------"
    83. Print "Ausgangswert: " ;
    84. Print Ausgangswert
    85. Print "Stelle_1 : " ;
    86. Print Stelle_1
    87. Print "Stelle_2 : " ;
    88. Print Stelle_2
    89. Print "Stelle_3 : " ;
    90. Print Stelle_3
    91. Print "Stelle_4 : " ;
    92. Print Stelle_4
    93. Print "----------------------------------"
    94. Loop
    Alles anzeigen



    Darüber hinaus findet der Befehl überall dort Anwendung, wo aus mehrstelligen Zahlen Einzelziffern benötigt werden, wie beispielsweise auch bei der seriellen Datenausgabe zu den MAX7219-Modulen mit Siebensegmentanzeigen.

    8x7segmodul.jpg

    Bildquelle Internet

    12.799 mal gelesen