Hallo,
ich habe ein bißchen Probleme mit meinem Compiler und/oder mit meinem
Programm. Ich benutze einen 8535. Der folgende Programmabschnitt soll
ein Auswahlmenü werden, bei dem ich jedoch noch die Zahl i hinterher
weiter benötige (für Einstellungen der RS232).
Ich bin auch ein bißchen bewandert, was C/C++ angeht, aber ich finde den
Fehler nicht. Es werden ständig nur die Hälfte der Strings bzw. kein
String im LCD dargestellt. Ich habe nun schon 2 verschiedene Methoden
eingebaut, aber bei beiden dasselbe.
Vielleicht kann mir einer von euch helfen.
Hier der Code:
flash char bps12[10] = "1200bps";
flash char bps24[10] = "2400bps";
flash char bps48[10] = "4800bps";
flash char bps96[10] = "9600bps";
flash char bps192[10] = "19200bps";
flash char p_none[10] = "kein";
flash char p_even[10] = "gerade";
flash char p_odd[10] = "ungerade";
flash char flash
*baud_messages[5]={"1200bps","2400bps","4800bps","9600bps","19200bps"};
.
.
.
void konfig(void)
// Unterprogramm zur Konfiguration der RS232-Schnittstelle
{
unsigned char i = 0;
char text[10];
char flash *p_baud[5];
char flash *p_paritaet[3];
p_baud[0] = bps12;
p_baud[1] = bps24;
p_baud[2] = bps48;
p_baud[3] = bps96;
p_baud[4] = bps192;
p_paritaet[0] = p_none;
p_paritaet[1] = p_even;
p_paritaet[2] = p_odd;
lcd_putsf("Konfigurations-");
lcd_gotoxy(0,1);
lcd_putsf("modus!");
for (i=0; i<=3; i++) {delay_ms(250);}; // 1 Sekunde Wartezeit
baudrate = 0x33; // Festlegung der Baudrate auf 9600bps
rs_config = 0x98; // Festlegung auf 8N1
lcd_clear();
lcd_putsf("Baudrate:");
lcd_gotoxy(0,1);
sprintf(text,"%10s",*p_baud[i]);
lcd_puts(text);
i = 0;
do
{
// lcd_gotoxy(0,1);
// sprintf(text,"%8p",*baud_messages[i]);
// lcd_puts(text);
entprell_status = entprell_d(1);
if (entprell_status == 1)
{
if (i<5) i++;
else i = 0;
lcd_gotoxy(0,1);
sprintf(text,"%10p",*p_baud[i]);
lcd_puts(text);
};
}
while (PIND.4 != 0);
lcd_clear();
lcd_putsf("Paritaet:");
lcd_gotoxy(0,1);
sprintf(text,"%10s",*p_baud[i]);
lcd_puts(text);
i = 0;
do
{
entprell_status = entprell_d(1);
if (entprell_status == 1)
{
if (i<2) i++;
else i = 0;
lcd_gotoxy(0,1);
sprintf(text,"%10p",*p_paritaet[i]);
lcd_puts(text);
};
}
while (PIND.4 != 0);
lcd_clear();
lcd_putsf("Baudrate:");
lcd_gotoxy(0,1);
sprintf(text,"%10s",*baud_messages[i]);
lcd_puts(text);
i = 0;
do
{
// lcd_gotoxy(0,1);
// lcd_puts(text);
entprell_status = entprell_d(1);
if (entprell_status == 1)
{
if (i<5) i++;
else i = 0;
lcd_gotoxy(0,1);
sprintf(text,"%p",*baud_messages[i]);
lcd_puts(text);
};
}
while (PIND.4 != 0);
lcd_clear();
lcd_putsf("Fertig.");
while(1){};
}
unsigned char entprell_d(unsigned char e_bit)
// Unterprogramm zum Entprellen der Taster an PORT D
// gibt "1" zurück, falls Taster noch gedrückt, ansonsten "0"
{
int maske = 0;
maske = ((e_bit << 2) & 0x3C); // ausmaskieren des gewünschten Pin's
delay_ms(250); // 250ms Zeitverzögerung zum Entprellen
if ((PIND & maske) == 0) return 1;
else return 0;
}
Gruß,
Matthias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.