Programmieren Seriller Schnittstellen

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Krüsty, Marwin

Programmieren Seriller Schnittstellen

Beitragvon Sebastiandankt » Montag 25. Februar 2008, 20:26

Hallo

ich beschäftige mich nun schon seit einiger Zeit damit die Serielle Schnittstelle zu programmieren jedoch nicht mit wenig Erfolg.

Daher lautet meine Frage: wie erhält man Daten aus der Serillen Schnittstelle (mit Assembler). Falls es mit C eine einfache Lösung gibt würde ich mich auch dafür Interessieren.

Was ich bis jetzt alles Probiert habe:
Ich habe versucht mit meinem Oszilloskop die Daten am Ausgang zu messen. Bei den Brücken am seriellen anschluß bin ich mir ziemlich sicher das sie richtig gesteckt sind.

Die Programme:
Mit DOS Interupt:

mov ah, 4
mov dl, 'E'
int 21h

es passierte leider nichts am Ausgang

Mit BIOS Interupt:

mov dx, 0
mov ah, 01h
mov al, 'x'
int 14h

unter DOS passierte auch hier nichts und unter windows98 ging das DTR Signal an jedoch lies es sich dann nur wieder Abschalten wenn ich Windows beendet hatte.

Ich freue mich über jeden Tipp und möcht euch im vorraus schon mal danken.
Sebastiandankt
Newbie
 
Beiträge: 6
Registriert: Montag 25. Februar 2008, 19:37

Beitragvon crack » Dienstag 26. Februar 2008, 02:22

Du musst sowohl unter DOS, alsauch unter Windows die Schnittstelle vorher initialisieren, also Übertragungsprotokoll (Hard- oder Softwarehandshake) und Baudrate festlegen und leeren der Empfangs- bzw. Sendepuffer.
Wenn Du die Daten mit dem Oszi sichtbarmachen willst, musst Du natürlich die X-Ablenkzeit der Baudrate anpassen, am besten verwendest Du ein Delay Oszilloskop.
Die Befehle für Windows die Schnittstelle zu steuern findest Du in der Win API, diese sind normalerweise sogar einfacher in der Handhabung wie die DOS Interrupts.
Tip: Sowohl unter Win alsauch unter DOS wird die Ein- / Ausgabe von Daten über die RS232 Schnittstelle genauso wie das Schreiben/Lesen einer Datei behandelt, also mit Create-, Open-, Read-, Write-, und Close- Befehlen, das Bedeutet in der Praxis Das Du nur eine 'Datei' mit dem reservierten Handle der Schnittstelle öffnen musst und dann Lesende oder Schreibende Zugriffe auf die Schnittstelle tätigen kannst, diese Methode müsste äquivalent auch unter C funktionieren. Zum Schluss musst Du die Schnittstelle wieder schliessen, damit die Ressourcen freigegeben werden können. Und unter DOS kannst Du natürlich auch die In/Out bzw. Inb/Outb Anweisungen auf die Register der Schnittstelle anwenden, um herauszufinden mit welchem Wert im Statusregister das Senden der Daten im Sendepuffer erfolgt müsstest Du Dir einmal eine technische Beschreibung des Schnittstellenbausteins anschauen.
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon Sebastiandankt » Freitag 7. März 2008, 18:23

also ich hab das noch mal Versucht.
Also hab ich die Schnittstelle Initialisiert
aber die Schnittstelle leeren das kann ich leider nicht was für Befehl nimmt man denn da?

Mit WinAPI hab ich noch gar kein erfahrungen könnte mir jemand da die Befehl nennen und ich weis nicht genau kann man die WinAPI-Funktionen auch über Assembler Programmieren?

wäre nett wenn ich mir jemand die Fragen beantworten kann.

mfg Sebastian
Sebastiandankt
Newbie
 
Beiträge: 6
Registriert: Montag 25. Februar 2008, 19:37

Beitragvon crack » Samstag 8. März 2008, 16:32

Sebastiandankt hat geschrieben:also ich hab das noch mal Versucht.
Also hab ich die Schnittstelle Initialisiert
aber die Schnittstelle leeren das kann ich leider nicht was für Befehl nimmt man denn da?


Also wenn die Schnittstelle initialisiert ist, dann sind die Empfangs und Sendepuffer normalerweise geleert worden, also keine weiter Massnahme erforderlich. Also wenn Du die Schnittstelle unter MS-Dos wirklich 'low-levelig' ansprichst gibt es überhaupt keine 'Befehle' im herkömmlichen Sinn, die 'Befehle' sind die Bytes die Du in das Kontrollregister des Schnittstellenbausteins schreibst, die Referenz dafür findest Du auf dem Datenblatt des Herstellers, oder in einem entsprechenden Datenbuch, das Du z.B. bei Conrad Elektronik oder RS Components oder aus dem Franzis. oder VogelVerlag beziehst.

Sebastiandankt hat geschrieben:Mit WinAPI hab ich noch gar kein erfahrungen könnte mir jemand da die Befehl nennen und ich weis nicht genau kann man die WinAPI-Funktionen auch über Assembler Programmieren?

wäre nett wenn ich mir jemand die Fragen beantworten kann.

mfg Sebastian


Nun, die WinAPI ist eine Unterprogrammbibliothek auf die Compilersprachen und auch einige Interpretersprachen drauf zugreifen können, diese Funktionen stecken in einigen DLLs. (z.B. User32.dll)
Wenn Du eine der Funktionen brauchst, musst Du eine Include Datei (z.B. User32.inc) und eine Library (User32.lib) mittels Include Direktive in dein Programm einbinden, der Aufruf selbst erfolgt dann per Call (Parameter werden vorher auf den Stapel gelegt) oder per komfortablerem Invoke Befehl. Den Funktionsumfang der Win32 API findest Du in der Win32 SDK Hilfe Datei, eine Version davon findest Du auf der Codingcrew Homepage.
Um evtl. noch gute Beispiele zu finden empfehle ich Dir doch mal unser WinAPI Unterforum zu besuchen und dort ein wenig zu stöbern.
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf


Zurück zu Assembler

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron