Hallo, ich habe ein Programm geschrieben welches die Analogwerte am Analogport 4 mittels eines Interruot einliest. Die Spannung dabei liegt zwischen 0-5V (diese sollen dabei einen Temperaturbereich zwischen 0-50°C entsprechen). Dabei werden in MD0 der Low-Byte des Wertes und in MD1 der High-Byte des Wertes gespeichert. Mein Problem ist jetzt folgendes, mit welchem Befehl ist es möglich den eingelesenen Wert mit einem voreingestellten Wert zu vergleichen (also z.B. 40 °C). Wenn jetzt so zusagen der eingelesene Wert unter 40°C liegt dann soll Befehl 1 ausgeführt werden, ansonsten Befehl 2 Ich hoffe mein Problem ist verstanden worden. Wenn nicht einfach nochmal nachfragen, wenn noch Informationen gebraucht werden.
Was ist MD0, MD1? Welche Programmiersprache? In Assembler vergleicht man mit SUBB oder CJNE. Peter
@ Tina, also ich würde ohne der Profi zu sein sagen: Denn 10 Bit Wert in ein unsigned long i schieben. i = ( MD1 << 8) + MD2; --> ich hoffe das stimmt so aus dem Kopf Schon sind die Werte MD1 und MD2 in i gespeichert. Und nun einfach i vergleichen mit einem Referenzwert. if(i < Ref.Wert) { .......Befehl 1 etc. } else if (i > Ref.Wert) { ......Befehl 1 etc. } Gruss Thomas
Die Register MD0, MD1 .. MD7 gehören offensichtlich zur 16/32-Bit-Recheneinheit des ´517. Falls besagter Programmteil in Assembler geschrieben werden soll, bietet sich beim Vergleich von Zahlen (beliebiger Länge), wie schon weiter oben erwähnt, die Subtraktion an, da sich dann die drei möglichen Fälle(gleich, größer, kleiner)ziemlich einfach unterscheiden lassen. Das unten angegebene Programmfragment geht von der Annahme aus, dass sich das Wandlungsergebnis in MD0, MD1 und der Referenzwert sowie das Ergebnis im internen Datenspeicher gehalten werden. . . clr c ;cy wg. subtraktion löschen mov a, low referenz subb a, MD0 mov low_differenz, a mov a, high_referenz subb a, MD1 mov high_differenz, a jc messwert_größer_als_referenz clr a xrl a, low_differenz jnz messwert_kleiner_als_referenz clr a xrl a, high_differenz jnz messwert_kleiner_als_referenz kein_unterschied: mach_nichts.. messwert_kleiner_als_referenz: mach´s größer.. messwert_größer_als_referenz: mach´s_kleiner.. mfg
Port 4 ist kein Analogport. Nur P7 und P8. Was rechnest du? Wie kommst du von 0..5V auf 40°C? Was für eine Rechenoperation führst du mit der MDU durch? Die hängt nämlich davon ab in welcher Reihenfolge du die Register beschreibst. Vergleichen kann man mit CJNE.
Entschuldigt bitte, dass ich mich erst jetzt wieder melde, aber ich habe grad eine Menge um die Ohren. @aminox86: Danke mal, das war genau das was ich gesucht habe.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.