Forum: Mikrocontroller und Digitale Elektronik Problem: CodeVision AVR, Pointer, String & LCD


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von MatthiasS (Gast)


Lesenswert?

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.