Keil µVision2

Gast #172313
Lesenswert?

ganz blöd von php abgeleitet kann man einer variabel doch keinen wert
"größer als x" zuweißen sondern nur einen festen wert also z.b.
temp2=6; . temp2<=6 würde in dem fall nur bei if gehen

wenn temp <= 6 dann ....

kann sein das ich unsinn laber aber wer weiß....
Gast #172314
Lesenswert?

@dirk ups... kleiner gleich... nicht grösser gleich .... sorry, ist aber
ja schon spät ;-)

@christian: bei if benutzt du das nicht, denn dann würde stehen:
if(temp2<=6)

in der schreibweise könnte das nur in einer for-Schleife vorkommen.
aber ich hoffe nicht das hier nur ein teil der schleife dargestellt
wird ;-)

@ Boris: könntest du bitte genauer sagen was es bewirken soll? wenn
einfach nur eine zahl kleiner gleich 6 erzeugt werden soll, dann würde
ich eine zufallszahl generieren und eine modulodivision durch 6 machen
;-) aber ich glaube das ist nicht das, was du suchst. Also zeig mehr
code oder beschreibe einmal!
Gast #172318
Lesenswert?

Hi,
danke für die Hilfe!

Hier mein Code (habe ein Komentar beim Problem vermerkt):

struct date        // Struct für das Datum
  {
  uchar tag;
  uchar monat;
  int jahr;
  };

uchar DectoHex(uchar value);
uchar HextoDec(uchar value);
void get_datum(struct date *t);
void set_datum(struct date *t);


void get_datum(struct date *t)
  {
  volatile uchar temp;
  volatile uchar temp1;
  volatile uchar temp2;
  volatile uchar temp3;
  volatile uchar jahrtemp;
  volatile int t_jahr;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x05);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp&0x0f;
  temp2=temp&0x30;
  temp3=temp&0xc0;
  temp3=temp3>>6;
  temp2=temp2>>4;
  temp=temp1 + ( 10*temp2);
  t->tag=temp;
  jahrtemp=temp3;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x06);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp&0x0f;
  temp2=temp&0x10;
  temp2=temp2>>4;
  temp=temp1 + ( 10*temp2);
  t->monat=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x2f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x3f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp2=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x4f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp3=temp;
  t_jahr=(temp1*100)+temp2;
  if (temp3==jahrtemp) t->jahr=t_jahr;
    else
      {
      t_jahr++;
      t->jahr=t_jahr;
      temp2=t_jahr%100;
      temp1=t_jahr/100;
      i2c_start();
      i2c_schreiben(0xa0);
      i2c_schreiben(0x2f);
      i2c_schreiben(temp1);
      i2c_schreiben(temp2);
      i2c_schreiben(jahrtemp);
      i2c_stop();
      };
  }

void set_datum(struct date *t)
  {
  volatile uchar temp;
  volatile uchar temp1;
  volatile uchar temp2;
  volatile uchar temp3;
  volatile uchar speicher1;
  volatile uchar speicher2;
  volatile uchar jahrt;
  temp=t->tag;
  temp1=temp/10;
  temp2=temp%10;
  temp3=(temp1<<4)|temp2;
  temp=t->jahr;
  temp2=temp%4;
  jahrt=temp2;
  temp2=<6;                                // HIER DAS PROBLEM
  speicher1=temp2|temp3;
  temp3=get_wochentag();
  temp3=<5;
  temp=t->monat;
  temp1=temp/10;
  temp2=temp%10;
  temp1=<4;
  speicher2=temp1|temp2|temp3;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x05);
  i2c_schreiben(speicher1);
  i2c_schreiben(speicher2);
  i2c_stop();
  temp=t->jahr;
  temp1=temp/100;
  temp2=jahr%100;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x2f);
  i2c_schreiben(temp1);
  i2c_schreiben(temp2);
  i2c_schreiben(jahrt);
  i2c_stop();
  }
Gast #172319
Lesenswert?

Was sollen denn diese Zeilen bezwecken?

  temp2=<6;                                // HIER DAS PROBLEM

  temp3=<5;

  temp1=<4;

Könnte es sein, daß Du etwas ähnliches vorhast, wie weiter oben in
Deinem Sourcecode?

  temp3=temp3>>6;
  temp2=temp2>>4;


Dann würde

  temp2 <<= 6;

(was äquivalent zu
  temp2 = temp2 << 6;
ist)

temp2 um sechs Bits nach links schieben (also mit 64 multiplizieren).

Im übrigen ist das schwer lesbarer Spaghetticode.
Man darf auch selbsterklärende Variablennamen, Kommentare und logisch
strukturierenden Whitespace sowie Leerzeilen verwenden, das ist alles
andere als verboten.

Hast Du das wirklich selber geschrieben?
Gast #172320
Lesenswert?

Nein, das ist genau das Problem. Das ist von einem Vorgänger und ich
steig absolut nicht durch. Das ganze Prog. ist so geschrieben und
dieser Teil ist nur etwa ein fünfzigstel des ganzen Codes...
Danke für die Hilfe, das bringt mich schon weiter.

BORIS

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