Ports benutzen (Windows)
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Allgemein
Achtung — veraltet!
Keinesfalls sollte giveio.sys eingesetzt werden, da diese Lösung unter 64-Bit-Windows nicht (mehr) funktioniert. Vorzuziehen ist inpout32.dll bzw. inpoutx64.dll. Jene Bibliothek kümmert sich selbständig um das Installieren des Treibers, auch unter 64 Bit. Assembler-Anweisungen sind nicht erforderlich, und davon ist dringend abzuraten. DLL-Einsprünge erlauben die einfache DLL-seitige Anpassung auf USB-Geräte, welche auch immer.
Beispiel
Nach einem Forenbeitrag von Feadi aus Frankreich.
// v 1.3
// GCC Compiler wg. Inline-ASM
// Installiertes giveio.sys erforderlich (s. Weblinks)
//
#include <windows.h>
#include <stdint.h>
#include <stdio.h>
#ifndef __cplusplus
typedef enum {false,true} bool; // gibt's nicht in C!
#endif
uint8_t inb( uint16_t portaddr )
{
uint8_t value;
asm volatile
(
"in %1, %0" :
"=a" (value) :
"d" (portaddr)
);
return value;
}
void outb( uint8_t value, uint16_t portaddr )
{
asm volatile
(
"out %1, %0" ::
"d" (portaddr), "a" (value)
);
}
bool iopl()
{
bool ret;
HANDLE h;
h = CreateFile("\\\\.\\giveio", GENERIC_READ,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
ret = h != INVALID_HANDLE_VALUE;
CloseHandle(h);
return ret;
}
int main (void)
{
uint8_t u8=0;
if ( !iopl() )
{
// giveio.sys ist auf diesem system nicht installiert
error( "giveio.sys nicht installiert!" );
return -1;
}
u8 = inb(888); // read from the parallel port
fprintf(stdout, "Read %hu from port 888.\n", u8 );
return 0;
}
Serielle Schnittstelle (RS232)
- Creating a Serial communication on Win32 by konchat auf www.codeprojects.com (Visual C++, Tutorial)
- Non Overlapped (Synchronous) Serial Port Communication using Win32 by Eshwar auf www.codeprojects.com (Visual C++, Tutorial)
- Serial communication for Win32 with modem support By Thierry Schneider auf www.codeprojects.com (Visual C++, Library)
- Programmieren der seriellen Schnittstelle - Online-Seite aus dem Lehrbuch Programmieren lernen mit C von Karlheinz Zeiner (4. Auflage, HANSER, ISBN 3-446-21596-4)
- Polling Methode (DOS, auch WIN 95/98, kompiliert mit Visual C++/6.0, LCC-Win32)
- Interrupt Methode (DOS, auch WIN 95/98, kompiliert mit Turbo C 2.0)
- Windows API Funktionen (WIN 95/98, Windows NT/2000, kompiliert mit Visual C++/6.0, LCC-Win32)
Siehe auch
- Ports benutzen (GCC) unter Linux
- Ports benutzen (PHP)
Weblinks
- Port-Zugriff auf PCs mit Hilfe von giveio.sys (FH Nürnberg, Fachbereich efi)
- Anwendungsbeispiel in ppwin.c des AVRDUDE Quellcodes
- Digital Thermometer using c# and a microcontroller by HiteshSharma at www.codeproject.com (Atmega16, LM35)