The DMX software protocol is described here: http://www.theater-technisch-lab.nl/dmxen.htm RS-485 is not actually a protocol but a hardware interface. It transmits data as the voltage difference between two data lines, rather than the absolute voltage on a single data line. Software wise, it is exactly like RS-232 but its maximum cable length is much further (roughly 1000M vs 12M). In other words, for DMX you cannot use your serial port, have to spend money on hardware. The cheapest I have found is the Enttec Open DMX controller. (USD) $60. If you are writing your own code this guy, Hippy, is a great start. http://members.westnet.com.au/rowanmac/opendmx.html He has an open source VB that shows how to write to the controller. One thing to watch out for is installing the driver for the controller. The included driver did not work for me on WinXP. But the following did: http://www.enttec.com/dmx\_usb/d2xx\_setup.exe Here is a quick and dirty C# class to run the Enttec OpenDmx usb controller: using System; using System.Runtime.InteropServices; using System.IO; using System.Threading; namespace Test { public class OpenDMX { public static byte[] buffer; public static uint handle; public static bool done = false; public static int bytesWritten = 0; public static FT_STATUS status; public const byte BITS_8 = 8; public const byte STOP_BITS_2 = 2; public const byte PARITY_NONE = 0; public const UInt16 FLOW_NONE = 0; public const byte PURGE_RX = 1; public const byte PURGE_TX = 2; [DllImport("FTD2XX.dll")] public static extern FT_STATUS FT_Open(UInt32 uiPort, ref uint ftHandle); [DllImport("FTD2XX.dll")] public static extern FT_STATUS FT_Close(uint ftHandle); [DllImport("FTD2XX.dll")] public static extern FT_STATUS FT_Read(uint ftHandle, IntPtr lpBuffer, UInt32 dwBytesToRead, ref UInt32 lpdwBytesReturned); [DllImport("FTD2XX.dll")] public static extern FT_STATUS FT_Write(uint ftHandle, IntPtr lpBuffer, UInt32 dwBytesToRead, ref UInt32 lpdwBytesWritten); [DllImport("FTD2XX.dll")] public static extern FT_STATUS FT_SetDataCharacteristics(uint ftHandle, byte uWordLength, byte uStopBits, byte uParity); [DllImport("FTD2XX.dll")] public static extern FT_STATUS FT_SetFlowControl(uint ftHandle, char usFlowControl, byte uXon, byte uXoff); [DllImport("