mikrocontroller.net

Forum: PC-Programmierung UART unter DOS


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute wisst Ihr vielleicht wie ich unter DOS eine Serielle
Schnittstelle in C anprechen kann ?
Wie das mit Interrupts gehandelt wird usw. ich habe bereits im Internet
gesucht aber mir ist das noch nicht so ganz klar...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such dir einen sogenannten FOSSIL Driver. Wurden damals für Modems unter
BBS Software benutzt und erledigte den ganze hässlichen Interrupt-Kram.
Sieht dem entsprechenden aber untauglichen BIOS-Interrupt recht
ähnlich.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hallo Leute wisst Ihr vielleicht wie ich unter DOS eine Serielle
>Schnittstelle in C anprechen kann

1. fopen
funktioniert auch unter windows/unix
nimm es wenn du einfach etwas übertragen willst

2. outp, inp
als Adresse die Adresse der seriellen Schnittstelle
dazu sollte man die Portbeschreibung des 16550 haben
funktioniert mit Sicherheit nicht in einem Programm unter Windows

3. int 14
zur Verwendung ist eine Interruptliste recht nützlich
verwendung unter windows fraglich

4. Falls dein "Dos" eine Windowsumgebung unter sich hat Createfile;
üblicher Weg in Windows seit mehr als 10 Jahren

Möglichkeit 2 und 3 kann man hervorragend dazu verwenden, um seine
Lernresistenz und totale Ablehnung neuerer Betriebssysteme zu
demonstrieren...

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe einen kleinen embedded Rechner (ETX Board).
Darauf wollte ich MSDOS installieren und beim Start eine C-Routine
aufrufen,welche über die Serielle Schnittstelle Dateinamen von Bitmaps
empfängt und diese dann auf dem VGA (Monitor) ausgibt...

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir den FOSSIL Treiber angeschaut iss ganz cool das Teil... Damit
kann ich die Einstellungen unsw. machen damit dass Ding grundsätzlich
läuft, aber wie bekomm ich dann den Zugriff auf die Schnittstelle mit
einem C Progr.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
INT13.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, 0x14 natürlich.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du mir das vllt. in ein kleines Beispiel verpacken ????
Ich habe bis jetzt nur Mikrocontroller programmiert.

sollte das etwa so aussehen:

_interrupt(0x14)
{

  DATEN ABHOLEN ;)

}

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andersrum. Ein BIOS-Interrupt ist sowas ähnliches wie ein
Betriebssystem-Aufruf. Sieht also je nach Compiler sinngemäss ungefähr
so aus:

int
get_char(void)
{
    union REGS r;
    r.a.xx = 1;      // Parameter für den BIOS-Aufruf
    r.b.yy = 2;
    int(0x14, &r);   // hier wird das BIOS aufgerufen
    return r.c.zz;
}

Das sich der FOSSIL-Treiber als BIOS-Erweiterung tarnt, funktioniert
einfacher serieller Code sowohl mit als auch ohne FOSSIL.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
union REGS sind dann wohl die einstellungen für den UART und dass
Ergebniss steht dann in r.c.zz und hier jetzt ein Byte....? Welche
Headers braucht man hierzu ?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
REGS sind die Maschinenregister (x86) und Parameter für den
Interruptaufruf. Da brauchst du keine Header sondern die
Interruptliste.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, aber ein Tutorial für deinen Compiler schreib ich hier nicht
rein. Ein C Compiler für DOS hat sowas üblichweise in der Doku.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nee iss j auch klar ;)  Ich habe gerade mal im Datenblatt meines
Rechners geschaut... COM 1 Hat IRQ 3... Wie die Parameter des Bios
Aufrufes aussehen steht dann wohl auch in der Compiler Beschreibung
oder ?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie BIOS-Aufrufe generell aussehen, siehe Compiler-Doku.
Wie so ein FOSSIL-Aufruf genau aussieht, siehe FOSSIL Doku.
Das musst du dann nur noch zusammenbringen.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du einen Tipp für mich ... Compilermäßig

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Alfred Penninger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

ich habe mal einige Progrmme in C, C++ unter DOS geschrieben.
Vielleicht kannst du was damit anfangen. Die Programme funktionieren
seit Jahren einwandfrei mit dieser Art der Interruptgetriebenen
Schnittstelle. Falls du mehrere Schnittstellen hast, hab ich auch noch
was. Damals hatte ich 2 RS232 mit Interrupt und 2 mit polling. Das ist
mit DOS kein Problem. Wer weiß, wie das mit Windows geht ;-).

Hab da auch noch Code zur Interruptgetriebenen Erfassung der Tastatur.

mfg Alfred

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte da noch einen Tip:

Öffne doch einfach ein File mit dem Dateinamen "COM1" oder "COM2"
oder "LPT1"! Lese- und Schreibzugriffe gehen dann direkt auf die
entsprechende Schnittstelle, das ganze funktioniert sogar unter Windows
3.0 bis WinXP...

Gruss Peter

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.