Datenrichtungsregister auswerten, aber einfacher!

Gast #800880
Hi,

ich gebe zu, dass c neuland für mich ist und ich früher nur mit bascom 
(schande über mich) gecodet habe. mein erstes programm wertet das ddrx 
aus und gibt diese auf dem lcd aus, z.b. EAEEAEAA. mein jetziger code 
ist mir jedoch zu groß und unhandlich. kann man folgendes noch 
vereinfachen?

1
int checkddrx(void){
2

3
if(DDRD& (1<<PD0)){
4
lcd_gotoxy(7,2);
5
lcd_puts("A");
6
}
7
else {
8
lcd_gotoxy(7,2);
9
lcd_puts("E");
10
}
11

12

13
if(DDRD& (1<<PD1)){
14
lcd_gotoxy(8,2);
15
lcd_puts("A");
16
}
17
else {
18
lcd_gotoxy(8,2);
19
lcd_puts("E");
20
}
21

22
usw...
23

24
}

mfg
spence
Gast #800917
hm eigentlich müsste doch der folgende code funktionieren (ich seh 
jedenfalls keinen grund, warum nicht.) und dennoch kommt auf dem lcd 
garnix.
1
int checkddrx(void){
2
int dz  = 1;                 /* Durchlaufzähler */
3
int gt = 7;                 /* zeichen nummer */
4
while (dz >= 7)             /* Wenn dz = 7 dann hör auf */
5
{
6
if(DDRD& (1<<dz)){
7
lcd_gotoxy(gt,2);
8
lcd_puts("A");
9
}
10
else {
11
lcd_gotoxy(gt,2);
12
lcd_puts("E");
13
}
14
dz  += 1;                 /* +1 */
15
gt  += 1;
16
}
17
}
#800948
> int dz  = 1;                 /* Durchlaufzähler */
> ...
> while (dz >= 7)             /* Wenn dz = 7 dann hör auf */
> ...

Die while-Schleife wird so lange ausgeführt, wie die Bedingung wahr 
ist. In diesem Beispiel also 0-mal.

Ist es Absicht, dass du den Inhalt des Registers quasi in umgekehrter 
Reihenfolge ausgibst, also LSB...MSB?

Hier mein Vorschlag (aber in der Reihenfolge MSB...LSB):
1
int i;
2
for (i=0;i<8;i++) {
3
  lcd_gotoxy(14-i,2);
4
  if (DDRD&&(1<<i))
5
    lcd_puts("A");
6
  else
7
    lcd_puts("E");
8
}


PS: Du solltest dir unbedingt Einrückungen angewöhnen.
Gast #800977
vielen herzlichen dank erstmal für den codefetzen! gleich ausprobiert 
und siehe da: ich habe EEEEEEEE auf dem LCD. freu. jetzt hab ich mal 
DDRD nach 0xAA geändert, was zufolge haben müsste, dass EAEAEAEA 
angezeigt werden sollte. tut es jedoch nicht. stattdessen: AAAAAAAA. bin 
gerade noch am grübeln, woran es liegen könnte.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.