Forum: Mikrocontroller und Digitale Elektronik 80C517A-Interrupt A/D-Wandler


von Tina (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Was ist MD0, MD1?
Welche Programmiersprache?

In Assembler vergleicht man mit SUBB oder CJNE.


Peter

von Thomas (Gast)


Lesenswert?

@ 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

von aminox86 (Gast)


Lesenswert?

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

von Tobias P. (hubertus)


Lesenswert?

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.

von Tina (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.