DTR einschalten
-
Hallo zusammen,
trotz FAQ komm ich nicht weiter:
ich möchte das eigentlich nur das einfachste realisieren, und mit einem kleinen Assemblercode in meinem Robotersteuerungsprogramm ein "Hi" und ein "Lo" auf der seriellen Schnittstelle - COM1 , DTR-Pin realisieren, um unserem Messrechner die nächste Messung anzukündigen.
Dazu hab ich folgenden Code in ein kleines Prog geschrieben:
#include "dos.h"
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
#include <io.h>main()
{__asm { //DTR einschalten: in al, 0x3fc or al, 1 out 0x3fc, al //DTR ausschalten: in al, 0x3fc xor al, 1 out 0x3fc, al } return (0); }
soweit sollte alles richtig sein, nur weiß ich nicht, ob mein Assembler die selbe Sprache spricht, wie ich denke, dass er spricht...
Ich programmiere unter WIN 3.11 mir Microsoft Visual C++ in C
Fehlermeldungen sind:
C2415: improper operand type - bei jeweils jeder in und out -Anweisung.
Mit Google bin ich auch nicht weiter gekommen, nunja falls Ihr Hilfe geben könnt, her damit.
Vielen Dank,
oscorp
-
in/out akzeptieren nur 8Bit Direktoperanden fuer die Portnummern.
Wenn deine Portnummer 16Bit breit ist, musst du sie zuerst in dx schieben und dann darueber adressieren, also zB.:mov dx, 0x3fc in al, dx
usw.
-
Hallo und Danke für die Antwort, war lange nicht mehr hier, und am Programm habe ich auch nichts mehr gemacht...
Nun war ich dankbar, dass beim Compilieren durch Deine Hilfe der Code fehlerfrei übersetzt wurde, jedoch kein Spannungsunterschied beim Ausführen des Programms stattfand.
Hier mal der komplette Code. Nach meinem - jedoch kleinen - Verständnis sollten do einmal eine pos. und einmal eine negative Spannung anliegen
/* Prozedurkopf */ //#include "dos.h" #include <stdio.h> #include <stdlib.h> #include <direct.h> #include <io.h> #include <conio.h> #include <decl.h> /* Programm */ main() { /* DTR einschalten */ __asm { mov dx, 0x3fc in al, dx or al, 1 out dx, al } printf("warte..."); getch(); /* DTR ausschalten */ __asm { mov dx, 0x3fc in al, dx xor al, 1 out dx, al } printf("warte auf ENDE"); getch();
Danke an alle Auskenner.