Keiner der beiden Ports ist an aktuellen PCs für eine derartige Aufgabe
geeignet. Es ist zwar technisch möglich (das Stichwort lautet
"bit-banging"), aber prinzipbedingt langsam, da jeder Zustandswechsel,
der von Deinem Programm ausgelöst wird, durch das Devicetreibermodell
des Betriebssystems hindurchgereicht werden muss.
Beim Parallelport (sofern das ein echter Parallelport ist, also keine
USB-Schnittstelle!) lässt sich die Frickellösung "giveio.sys" verwenden,
um am Devicetreiberzugriff vorbeizukommen, bei der seriellen
Schnittstelle aber verbietet sich das.
Und ja, die serielle Schnittstelle arbeitet mit V.24-Pegel, also (bis
zu) +/- 12V mit einem resultierenden Spannungshub von 24V.
Sofern die Performance des ganzen nicht wichtig ist (also nur ein paar
Hertz Blinkfrequenz), dann lässt sich die serielle Schnittstelle recht
einfach missbrauchen, Port öffnen und mit der Win32-API-Funktion
EscapeCommFunction
(http://msdn.microsoft.com/en-us/library/aa363254(v=VS.85).aspx) an den
Handshakeleitungen wackeln.
Das geht auch mit USB-Seriell-Adaptern, aber auch hier natürlich nur mit
ein paar Hertz (deutlich unter 500).