Forum: PC-Programmierung fragen zum code SPI-Sample und AVR-CDC-SPI


von kluski (Gast)


Lesenswert?

Hy zusammen,
habe bezüglich den code ein paar fragen bzw.brauch ich tipps wie ich das 
umsetzten kann.

zum Code er empfängt werte Binär werte vom Controller und wandelt die um 
in hexadecimal um.

Ich wollte das er sie mir in decimal ausgibt (geschaft), aber er soll 
mit dem code rechnen da es werte eines AD-wandler sind.
Das programm wird mit cmd-befehl gestartet und wenn ich was sende werden 
mir 32 Byte jedes Byte einzelnt angezeigt.
1
#define  _CRT_SECURE_NO_WARNINGS
2
#include <windows.h>
3
#include <stdio.h>
4
5
static const char  *title = "\n\tSPI-tester \n";
6
static const char  *usage =   "\t\tusage: spitest port_number";
7
8
9
static int hex2bin( unsigned char *bin, char *hex )
10
{
11
  int        n;
12
13
  for( n=0; *hex; ) {
14
    if( *hex>' ' )
15
      bin[n++]  = (unsigned char)strtol( hex, &hex, 16 );
16
    else
17
      hex++;
18
  }
19
  return n;
20
}
21
22
static void bin2hex( char *hex, unsigned char *bin, int n )//bin2dec wandlung
23
{
24
25
  for( ; n>0; n-- )
26
    hex  += sprintf( hex, " %04i", *bin++ );  //"%02X"  X in Hex  "%03i" für Intiger als 4 stelle
27
28
  *hex  = 0;
29
}
30
31
int main(int argc, char *argv[])
32
{
33
  HANDLE      hCom;
34
  DWORD      rwlen;
35
  int        n, v, quit;
36
  char      *ptr, text[1024]; // war auf auf 256 eingestellt
37
  unsigned char  data[1]; //war auf 32 gestellt
38
39
  puts( title );
40
41
  if( argc!=2 ) {
42
    puts( usage );
43
    return -1;
44
  }
45
46
  /*  Open COM device  */
47
  sprintf( text, "\\\\.\\COM%s", argv[1] );
48
  hCom = CreateFile( text, GENERIC_READ|GENERIC_WRITE,
49
          0, 0, OPEN_EXISTING, 0, 0 );
50
  if( hCom==INVALID_HANDLE_VALUE ) {
51
    printf( "\terror: COM%s is not available.", argv[1] );
52
    return -2;
53
  }
54
55
  for( quit=0; !quit; ) {
56
57
    printf( " com%s < ", argv[1] );
58
    gets( text );
59
60
    for( ptr=text; *ptr<=' '; ptr++ )
61
    ;
62
63
    switch( *ptr ) {
64
      case 'Q':
65
      case 'q':  quit  = 1;
66
            break;
67
      case 'S':
68
      case 's':  for( ptr++; *ptr && *ptr!='0' && *ptr!='1'; ptr++ )
69
            ;
70
            if( *ptr ) {
71
              n  = *ptr - '0';
72
              for( ptr++; *ptr && *ptr!='0' && *ptr!='1'; ptr++ )
73
              ;
74
              if( *ptr ) {
75
                v  = *ptr - '0';
76
                EscapeCommFunction( hCom,
77
                  n? (v? SETDTR:CLRDTR):(v? SETBREAK:CLRBREAK) );
78
              }
79
            }
80
            break;
81
      default:
82
            n  = hex2bin( data, text );
83
            WriteFile( hCom, data, n, &rwlen, 0 );
84
            Sleep(100 );
85
            ReadFile( hCom, data, rwlen, &rwlen, 0 );
86
87
            bin2hex( text, data, n );
88
            printf( " com%s >%s\n", argv[1], text );
89
    }
90
  }
91
92
  CloseHandle( hCom );
93
  return 0;
94
}

Danke für Tipps und hilfe stellungen

MfG
Kluski

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.