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


von Gast (Gast)


Angehängte Dateien:

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Ups hab nur den Assemblercode angehängt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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:
1
   for(i=8; i>0; i--)

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

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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:
1
  c = P4_1;
2
  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:
1
char lies8bit(void)
2
{
3
  char schieberegister = 0;
4
  P4_1 = 1;
5
  for(j=8;j>0;j--)
6
  {
7
    P4_0 = 1;
8
    warte();
9
    if(P4_1) schieberegister = schieberegister|0x01; 
10
    schieberegister <<= 1;
11
    warte();
12
    P4_0 = 0;
13
    warte();
14
  }
15
   return schieberegister;
16
}

von Gast (Gast)


Lesenswert?

Danke nochmal ich werds gleich ausprobieren.

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.