Datenrichtungsregister auswerten, aber einfacher!

Gast #800880
Lesenswert?

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
Lesenswert?

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
Lesenswert?

> 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
Lesenswert?

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

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