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.
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
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
- '************************************************************
- ' Beispielcode für BASCOM- Lexikon
- ' www.bascomforum.de
- ' (c) 2013/2014 ceperiga
- '============================================================
- 'Beschreibung:
- 'Separieren mehrstelliger Zahlen in Einzelziffern mittels MOD
- '************************************************************
- '==============================================================================
- $regfile = "m8adef.dat" 'verwendeter Controller
- $crystal = 1000000 'Taktfrequenz
- $hwstack = 32 'Grundeinstellung
- $swstack = 4 'Grundeinstellung
- $framesize = 4 'Grundeinstellung
- $sim 'für Simulatorausgabe
- $baud = 4800 'Für serielle Ausgabe
- '==============================================================================
- 'Variablen deklarieren
- '------------------------------------------------------------------------------
- Dim Ausgangswert As Word
- Dim Zwischenwert As Word
- Dim Stelle_4 As Word
- Dim Stelle_3 As Word
- Dim Stelle_2 As Word
- Dim Stelle_1 As Word
- '==============================================================================
- 'Hauptprogramm
- '------------------------------------------------------------------------------
- Do
- 'Alle Printanweisungen im Programm für die Ausgabe im Simulator
- Print "4 stelligen Ausgangswert eingeben:"
- Input Ausgangswert
- Print " Ausgangswert: ";
- Print Ausgangswert
- '----------------------------------------------------------------------------
- 'Separieren der rechten Stelle (Stelle_4)
- '----------------------------------------------------------------------------
- Stelle_4 = Ausgangswert Mod 10
- Print "---------------------------------"
- Print "Stelle_4 separieren"
- Print "Stelle_4 = " ; Stelle_4
- '----------------------------------------------------------------------------
- 'MOD- Wert von ursprungsvariable abziehen und Teilen durch 10,
- 'damit die nächste Stelle separiert werden kann
- Zwischenwert = Ausgangswert / 10
- Print "Zwischenwert nach Teilen durch 10"
- Print Zwischenwert
- '----------------------------------------------------------------------------
- 'Separieren der rechten Stelle (Stelle_3)
- '----------------------------------------------------------------------------
- Stelle_3 = Zwischenwert Mod 10
- Print "---------------------------------"
- Print "Stelle_3 separieren"
- Print "Stelle_3 = " ; Stelle_3
- '----------------------------------------------------------------------------
- 'MOD- Wert von ursprungsvariable abziehen und Teilen durch 10,
- 'damit die nächste Stelle separiert werden kann
- Zwischenwert = Zwischenwert / 10
- Print "Zwischenwert nach Teilen durch 10"
- Print Zwischenwert
- '----------------------------------------------------------------------------
- 'Separieren der rechten Stelle (Stelle_2)
- '----------------------------------------------------------------------------
- Stelle_2 = Zwischenwert Mod 10
- Print "---------------------------------"
- Print "Stelle_2 separieren"
- Print "Stelle_2 = " ; Stelle_2
- '----------------------------------------------------------------------------
- 'MOD- Wert von ursprungsvariable abziehen und Teilen durch 10,
- 'damit die nächste Stelle separiert werden kann
- Zwischenwert = Zwischenwert / 10
- Print "Zwischenwert nach Teilen durch 10"
- Print Zwischenwert
- Print "Der letzte Zwischenwert ist Stelle_1:"
- Stelle_1 = Zwischenwert
- Print Stelle_1
- '----------------------------------------------------------------------------
- 'Endergebnis:
- '----------------------------------------------------------------------------
- Print "----------------------------------"
- Print "Unser Endergebnis:"
- Print "----------------------------------"
- Print "Ausgangswert: " ;
- Print Ausgangswert
- Print "Stelle_1 : " ;
- Print Stelle_1
- Print "Stelle_2 : " ;
- Print Stelle_2
- Print "Stelle_3 : " ;
- Print Stelle_3
- Print "Stelle_4 : " ;
- Print Stelle_4
- Print "----------------------------------"
- Loop
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.796 mal gelesen