80C517A-Interrupt A/D-Wandler

Gast #906218
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.
Gast #906524
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
Gast #906880
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren