Ok noch mal langsam:

Der Schaltplan ist keine normal RS232 über tragung sondern was getrickste wo die Steuerleitung als daten leitungen misbraucht werden. das ist aber nicht schlimm.

Code:
Private Sub Form_Load()
    On Error Resume Next
    MSComm1.Settings = "9600,N,8,1"
    MSComm1.CommPort = 1
    MSComm1.PortOpen = True
    MSComm1.DTREnable = False
    MSComm1.RTSEnable = True

End Sub
Öffnet der Comport 1 und stellt die Übertragungsrate auf 9600 Baud bei deien Schlatung aber föllig egal

Code:
DCB          CommDCB;
  COMMTIMEOUTS timeout;
  long         ret;
  char         s[100];

  sprintf(s, "COM%d", ComPort);
  hdCOMM = CreateFile(s, 
                      (GENERIC_READ | GENERIC_WRITE), 0, NULL, 
                      OPEN_EXISTING, 
                      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING, 
                      NULL);
  
  if ( hdCOMM != INVALID_HANDLE_VALUE )
    {
      ret = SetupComm(hdCOMM, 1024, 1024);
    
      sprintf(s, "COM%d: baud=38400 parity=N data=8 stop=1", ComPort);
      memset(&CommDCB, 0, sizeof(DCB));
      CommDCB.DCBlength         =  sizeof(DCB);

      ret = BuildCommDCB(s, &CommDCB);
      
      CommDCB.DCBlength         =  sizeof(DCB);
      CommDCB.fBinary           =   1;  // Binary Mode
      CommDCB.fParity           =   0;  // No Parity Check
      CommDCB.fOutxCtsFlow      =   0;  // CTS ignored
      CommDCB.fOutxDsrFlow      =   0;  // DSR ignored
//      CommDCB.fDtrControl       = ; // DTR ignored
      CommDCB.fDsrSensitivity   =   0;  // 
      CommDCB.fTXContinueOnXoff =   1;
      CommDCB.fOutX             =   1;
      CommDCB.fInX              =   1;
      CommDCB.fAbortOnError     =   0;  // Ignore Errors
      CommDCB.XoffLim           = 100;
      CommDCB.XonLim            = 500;
      CommDCB.XonChar           =  17;
      CommDCB.XoffChar          =  19;
      ret = SetCommState(hdCOMM, &CommDCB);
  
      timeout.ReadIntervalTimeout         = MAXDWORD;   // Read returns if no chars available
      timeout.ReadTotalTimeoutMultiplier  =  0;         //   "
      timeout.ReadTotalTimeoutConstant    =  0;         //   "
      timeout.WriteTotalTimeoutMultiplier =  3;
      timeout.WriteTotalTimeoutConstant   = 20;
      ret = SetCommTimeouts(hdCOMM, &timeout);
Das Selbe in C++

Code:
Private Function TLC548_GetData() As Byte
Dim i As Integer, temp As Byte

temp = 0
MSComm1.RTSEnable = False   'Setze Chip Select low
For i = 7 To 0 Step -1

MSComm1.DTREnable = True    'Steigende Taktflanke

    If MSComm1.CTSHolding = True Then       'Datenbit einlesen
        temp = temp + 2 ^ i
    End If

MSComm1.DTREnable = False   'fallende Taktflanke

Next

MSComm1.RTSEnable = False 'Setze Chip Select wieder hi

TLC548_GetData = temp
End Function
damit wird der Chip gelesen
RTSEnable = false / Steueer leitung aus low stellen damit der weiß das ich jetzt daten holen will.

DTREnable = true Takt auf High dann kannst du das erste bit lesen
mit MSComm1.CTSHolding wenn das wahr ist dann sende der chip eine 1
wenn false dann eine 0 dann takt wieder aus. und das ganze von vorne

bis wir 8 bit zusammen haben dann hast du den wert den der AD gemessen hast. Die schaltung ist meines erachtes so da man damit 0 bis 5V messen kann. Aber da müssen dir die Hardwar jung noch mal helfen / drüber gucken. Also wenn meine Annahme stimmt und du an den ein gang 5 V legst sollte der Chip 8 mal eine 1 bringen. also 255 als zahl.
8 bit bei 5v macht eine Auflösung von 0,01 Volt.

Gruß