(Andere Comp...) serielle schnittstelle zum x-ten mal!!!



  • Hallo alle zusammen!

    Mein Problem ist folgend:

    Programmierung erfolgt im Borland C 4.0 C
    Ich habe ein einfaches Programm wo zwei Rechner mit einander kommunizieren über die COM 1 Schnittstelle;

    #include <stdio.h>
    #include <conio.h>

    #define PORT 0x3F8 /* COM1 */

    /* Defines Serial Ports Base Address
    COM1 0x3F8
    COM2 0x2F8
    COM3 0x3E8
    COM4 0x2E8
    */

    int main(void)
    {
    int checkBuffer;
    int c;
    _outp(PORT + 1 , 0); /* Turn off interrupts */
    /* PORT - Communication Settings /
    _outp(PORT + 3 , 0x80); /
    SET DLAB ON /
    _outp(PORT + 0 , 0x0C); /
    Set Baud rate - Divisor Latch Low Byte */
    /* Default 0x03 = 38,400 BPS */
    /* 0x01 = 115,200 BPS */
    /* 0x02 = 56,700 BPS */
    /* 0x06 = 19,200 BPS */
    /* 0x0C = 9,600 BPS */
    /* 0x18 = 4,800 BPS */
    /* 0x30 = 2,400 BPS /
    _outp(PORT + 1 , 0x00); /
    Set Baud rate - Divisor Latch High Byte /
    _outp(PORT + 3 , 0x03); /
    8 Bits, No Parity, 1 Stop Bit /
    _outp(PORT + 2 , 0xC7); /
    Configure FIFO Control Register /
    _outp(PORT + 4 , 0x0B); /
    Turn on DTR, RTS, and OUT2 */
    printf("\nSample Comm's Program. Press ESC to quit \n");

    do {

    checkBuffer = _inp(PORT + 5);
    if (checkBuffer & 1) {
    c = _inp(PORT);
    printf("%c", c);
    if (c == 13) printf("\n");
    _outp(PORT, c);
    }
    if (kbhit()) {
    c = getch();
    _outp(PORT, c);
    }
    } while (c !=27);

    return 0;
    }

    Hier ist die Schnittstelle schon vorgegeben mit allen Einstellungen;
    #define PORT 0x3F8 /* COM1 /
    _outp(PORT + 1 , 0); /
    Turn off interrupts */
    /* PORT - Communication Settings /
    _outp(PORT + 3 , 0x80); /
    SET DLAB ON /
    _outp(PORT + 0 , 0x0C); /
    Set Baud rate - Divisor Latch Low Byte */
    /* Default 0x03 = 38,400 BPS */
    /* 0x01 = 115,200 BPS */
    /* 0x02 = 56,700 BPS */
    /* 0x06 = 19,200 BPS */
    /* 0x0C = 9,600 BPS */
    /* 0x18 = 4,800 BPS */
    /* 0x30 = 2,400 BPS /
    _outp(PORT + 1 , 0x00); /
    Set Baud rate - Divisor Latch High Byte /
    _outp(PORT + 3 , 0x03); /
    8 Bits, No Parity, 1 Stop Bit /
    _outp(PORT + 2 , 0xC7); /
    Configure FIFO Control Register /
    _outp(PORT + 4 , 0x0B); /
    Turn on DTR, RTS, and OUT2 */

    Eigentlich sollte ich eine Funktion dazu schreiben die eine INI Datei öffnet -> komm.ini
    und die Werte ausliest, entsprechen den Variablen übergibt und weiterverarbeitet in dem Programm;

    Die komm.ini Datei Sieht so aus:

    Aktuelleschnitstelle=COM1
    Baudrate=9600
    Datenbits=8
    Parität=Keine
    Stopbits=1
    Datenfluss=ON

    Dazu habe ich diese stück Programm geschrieben, aber ich komme nicht weiter, d.h. ich kriege es hin nur denn ersten Wert auszulesen:

    int ini(void)

    {

    FILE *File;
    char msg[50];
    char wert[50];
    int i;
    int PORT;

    File = fopen("c:\\Projekt\\komm.ini","r");
    if (File != NULL)
    {
    fgets(msg,LINESIZE,File);

    for (i=0;i<4;i++)
    {
    wert[i] = msg[strlen(msg)-4+i];
    }
    wert[4]='\0';

    if (strcmp(wert,"COM1")==0) {PORT=0x3F8;}
    printf("\n Der Port ist: %s", wert);

    fclose(File);
    }
    else
    {
    printf("Datei nicht vorhanden!");
    }

    return 0;
    }

    Die Idee ist das man die Änderungen nur in der ini Datei vornimmt, ohne jedes mal das Programm übersetzen zu müssen;

    Ich wäre schon glücklich wenn ich die einzelne Werte bekommen werde, die weitere Bearbeitung kriege ich schon hin (glaube ich)!

    Kann mir jemand weiter helfen oder sagen ob es so was schon gibt (bestimmt, oder?);

    Danke im voraus!



  • mmh wenn du nicht den Builder benutzt bist du glaub ich im falschen Forum ... im Builder geht sowas mit TMemIniFile oder TIniFile. Vielleicht hilft es aber trotzdem weiter.

    mfg
    Steffen



  • Wir sind hier das Borland C++ Builder Forum. Das hat nix mit Borland C zu tun... => Verschoben

    -junix


Anmelden zum Antworten