www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 A/D Problem in C


Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab den AT89C5131 und möchte gern den Widerstand des Poti in einen 
8bit Wert umwandeln, in Assembler funktioniert es. Doch mit c hab ich 
meine Probleme.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum heißen alle schönen Frauen mit Nachname JPEG?
Und warum alle Sourcecodes TXT?

BTW:
Das ist kein C-File, das du da angehängt hast.

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ups hab nur den Assemblercode angehängt.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   for(i = 8; i=0; i--)
Wie oft wird wohl diese Schleife durchlaufen?
Antwort: Nie. Und warum?
Weil i=0 kein Vergleich, sondern eine Zuweisung ist.
UND
Weil es auch mit einem Vergleich (i==0) nicht geklappt hätte.

Gemeint war wohl sowas:
   for(i=8; i>0; i--)

Das selbe gilt auch für die andere Schleife (j).

Autor: Gast (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dank dir stand irgendwie aufm Schlauch. Aber es scheint wohl nicht der 
einigste Denkfehler zu sein, denn es geht immer noch nicht.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der in C übliche Weg der Parameterübergabe ist nicht über den Akku. Der 
wird bei einem Funktionsaufruf gesichert und danach wieder der alte Wert 
hergestellt.

Sieh dir mal die Paramterübergabe in anderen C-Programmen an.

Und da wird es auf jeden Fall auch noch klemmen:
  c = P4_1;
  ACC = c;
In C wird nicht mit Carry und Akku herumhantiert. Das darf der Compiler 
selber machen.


Ich könnte mir u.A. z.B. sowas vorstellen:
char lies8bit(void)
{
  char schieberegister = 0;
  P4_1 = 1;
  for(j=8;j>0;j--)
  {
    P4_0 = 1;
    warte();
    if(P4_1) schieberegister = schieberegister|0x01; 
    schieberegister <<= 1;
    warte();
    P4_0 = 0;
    warte();
  }
   return schieberegister;
}

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke nochmal ich werds gleich ausprobieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.