- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 3 von 3

Thema: Verständnisproblem eines Programms

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52

    Verständnisproblem eines Programms

    Anzeige

    Powerstation Test
    Hallo,

    ich habe von einem Bekannten eine modulare Steuerung für einen Robotor bekommen. Diese Steuerung arbeitet mit mehreren PIC Microkontrollern (16f873a).
    Diese sind über einen RS485-Bus miteinander verbunden.
    Von einem dieser Kontroller wird ein PIC 18F45J10 angesteuert, der wiederum ein kleines TFT-Display ansteuert.
    Der PIC18F45J10 übernimmt die gesamte Arbeit des Ansteuerns des Displays und er empfängt über den Bus bestimmte Kommandos, damit bestimmte Bilder auf dem Display dargestellt werden.

    Ich habe auch den Quelltext der entsprechenden Programme der Microkontroller. Leider habe ich von C so gut wie keine Ahnung und verstehe einen Teil des Programms zum senden der Daten nicht.

    Im Programmkopf sind folgende Variablen definiert:


    Code:
    #define ATTN 0x11
    #define ADR 0x21
    #define token  0x23
    dann kommt der Aufruf, der die Daten über den BUS (die UART) versenden soll:

    Code:
    		chksum = 0;
    		xputch(ATTN);
    		puthex(ADR);
    		puthex(token);
    //===================================================
    battstat = 0;			// Batterie-Status ausblenden
    //===================================================
    		puthex(battstat);
    		chksori = chksum;
    		puthex(chksori);
    und dann gibt es da noch die entsprechenden Unterprogramme zum senden der Daten:

    Code:
    //======================================================================
    //                     void xputch(char c)
    // --------------------------------------------------------------------
    // Eingang   :  char c --> Zeichen welches gesendet werden soll
    // Bemerkung :  es wird ein Zeichen an consol-output ausgegeben
    //======================================================================
    void xputch(byte c)
    {  unsigned char tonne;
     	if(OERR){CREN=0;CREN=1;}
    	if(FERR) tonne = RCREG;
    	while(!TXIF) asm("NOP");
    	TXREG   = c;
    	chksum += c;
    }
    
    //======================================================================
    //                 	   void puthex(unsigned char n )
    // --------------------------------------------------------------------
    // Eingang   : unsigned char n --> Zeichen welches gesendet werden soll
    // Bemerkung : es wird ein Zeichen als HEX-Wert an consol-output ausgegeben
    //======================================================================
    void puthex(byte n )
    {  if(( n / 16 )<10) xputch(( n / 16 )+'0');
       else     xputch(( n / 16 )+0x37);
       if(( n % 16 )<10) xputch(( n % 16 )+'0');
       else     xputch(( n % 16 )+0x37);
    }
    Das xputch-Unterprogramm checkt, so wie ich das verstehe, nur ein paar
    Register der UART und sendet dann das Zeichen c. Danach wird das
    Zeichen wohl noch zur chksum dazu addiert.

    Was die puthex-Routine genau macht, verstehe ich nicht ganz.
    Da wird überprüft, ob das Ergebnis der Division von n/16 kleiner als 10 ist
    und dann wenn dem so ist, dann wird n/16 + '0' ausgegeben.

    Was bedeutet hier die + '0'? Ist das eine Stringverarbeitung und an den
    ganzzahligen Ergebniswert wird eine 0 angehängt (z.B. 10 + '0' -> 100)??

    Kann mir mal jemand die puthex-Routine ein wenig erklären?


    Vielen Dank,
    Thorsten

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    Code:
    0 => 48(0)48(0)
    1 => 48(0)49(1)
    2 => 48(0)50(2)
    3 => 48(0)51(3)
    4 => 48(0)52(4)
    5 => 48(0)53(5)
    6 => 48(0)54(6)
    7 => 48(0)55(7)
    8 => 48(0)56(8)
    9 => 48(0)57(9)
    10 => 48(0)65(A)
    11 => 48(0)66(B)
    12 => 48(0)67(C)
    13 => 48(0)68(D)
    14 => 48(0)69(E)
    15 => 48(0)70(F)
    16 => 49(1)48(0)
    17 => 49(1)49(1)
    18 => 49(1)50(2)
    19 => 49(1)51(3)
    20 => 49(1)52(4)
    21 => 49(1)53(5)
    22 => 49(1)54(6)
    23 => 49(1)55(7)
    24 => 49(1)56(8)
    25 => 49(1)57(9)
    26 => 49(1)65(A)
    27 => 49(1)66(B)
    28 => 49(1)67(C)
    29 => 49(1)68(D)
    30 => 49(1)69(E)
    31 => 49(1)70(F)
    32 => 50(2)48(0)
    33 => 50(2)49(1)
    34 => 50(2)50(2)
    35 => 50(2)51(3)
    36 => 50(2)52(4)
    37 => 50(2)53(5)
    38 => 50(2)54(6)
    39 => 50(2)55(7)
    40 => 50(2)56(8)
    41 => 50(2)57(9)
    42 => 50(2)65(A)
    43 => 50(2)66(B)
    44 => 50(2)67(C)
    45 => 50(2)68(D)
    46 => 50(2)69(E)
    47 => 50(2)70(F)
    48 => 51(3)48(0)
    49 => 51(3)49(1)
    50 => 51(3)50(2)
    51 => 51(3)51(3)
    52 => 51(3)52(4)
    53 => 51(3)53(5)
    54 => 51(3)54(6)
    55 => 51(3)55(7)
    56 => 51(3)56(8)
    57 => 51(3)57(9)
    58 => 51(3)65(A)
    59 => 51(3)66(B)
    60 => 51(3)67(C)
    61 => 51(3)68(D)
    62 => 51(3)69(E)
    63 => 51(3)70(F)
    64 => 52(4)48(0)
    65 => 52(4)49(1)
    66 => 52(4)50(2)
    67 => 52(4)51(3)
    68 => 52(4)52(4)
    69 => 52(4)53(5)
    70 => 52(4)54(6)
    71 => 52(4)55(7)
    72 => 52(4)56(8)
    73 => 52(4)57(9)
    74 => 52(4)65(A)
    75 => 52(4)66(B)
    76 => 52(4)67(C)
    77 => 52(4)68(D)
    78 => 52(4)69(E)
    79 => 52(4)70(F)
    80 => 53(5)48(0)
    81 => 53(5)49(1)
    82 => 53(5)50(2)
    83 => 53(5)51(3)
    84 => 53(5)52(4)
    85 => 53(5)53(5)
    86 => 53(5)54(6)
    87 => 53(5)55(7)
    88 => 53(5)56(8)
    89 => 53(5)57(9)
    90 => 53(5)65(A)
    91 => 53(5)66(B)
    92 => 53(5)67(C)
    93 => 53(5)68(D)
    94 => 53(5)69(E)
    95 => 53(5)70(F)
    96 => 54(6)48(0)
    97 => 54(6)49(1)
    98 => 54(6)50(2)
    99 => 54(6)51(3)
    100 => 54(6)52(4)
    101 => 54(6)53(5)
    102 => 54(6)54(6)
    103 => 54(6)55(7)
    104 => 54(6)56(8)
    105 => 54(6)57(9)
    106 => 54(6)65(A)
    107 => 54(6)66(B)
    108 => 54(6)67(C)
    109 => 54(6)68(D)
    110 => 54(6)69(E)
    111 => 54(6)70(F)
    112 => 55(7)48(0)
    113 => 55(7)49(1)
    114 => 55(7)50(2)
    115 => 55(7)51(3)
    116 => 55(7)52(4)
    117 => 55(7)53(5)
    118 => 55(7)54(6)
    119 => 55(7)55(7)
    120 => 55(7)56(8)
    121 => 55(7)57(9)
    122 => 55(7)65(A)
    123 => 55(7)66(B)
    124 => 55(7)67(C)
    125 => 55(7)68(D)
    126 => 55(7)69(E)
    127 => 55(7)70(F)
    128 => 56(8)48(0)
    129 => 56(8)49(1)
    130 => 56(8)50(2)
    131 => 56(8)51(3)
    132 => 56(8)52(4)
    133 => 56(8)53(5)
    134 => 56(8)54(6)
    135 => 56(8)55(7)
    136 => 56(8)56(8)
    137 => 56(8)57(9)
    138 => 56(8)65(A)
    139 => 56(8)66(B)
    140 => 56(8)67(C)
    141 => 56(8)68(D)
    142 => 56(8)69(E)
    143 => 56(8)70(F)
    144 => 57(9)48(0)
    145 => 57(9)49(1)
    146 => 57(9)50(2)
    147 => 57(9)51(3)
    148 => 57(9)52(4)
    149 => 57(9)53(5)
    150 => 57(9)54(6)
    151 => 57(9)55(7)
    152 => 57(9)56(8)
    153 => 57(9)57(9)
    154 => 57(9)65(A)
    155 => 57(9)66(B)
    156 => 57(9)67(C)
    157 => 57(9)68(D)
    158 => 57(9)69(E)
    159 => 57(9)70(F)
    160 => 65(A)48(0)
    161 => 65(A)49(1)
    162 => 65(A)50(2)
    163 => 65(A)51(3)
    164 => 65(A)52(4)
    165 => 65(A)53(5)
    166 => 65(A)54(6)
    167 => 65(A)55(7)
    168 => 65(A)56(8)
    169 => 65(A)57(9)
    170 => 65(A)65(A)
    171 => 65(A)66(B)
    172 => 65(A)67(C)
    173 => 65(A)68(D)
    174 => 65(A)69(E)
    175 => 65(A)70(F)
    176 => 66(B)48(0)
    177 => 66(B)49(1)
    178 => 66(B)50(2)
    179 => 66(B)51(3)
    180 => 66(B)52(4)
    181 => 66(B)53(5)
    182 => 66(B)54(6)
    183 => 66(B)55(7)
    184 => 66(B)56(8)
    185 => 66(B)57(9)
    186 => 66(B)65(A)
    187 => 66(B)66(B)
    188 => 66(B)67(C)
    189 => 66(B)68(D)
    190 => 66(B)69(E)
    191 => 66(B)70(F)
    192 => 67(C)48(0)
    193 => 67(C)49(1)
    194 => 67(C)50(2)
    195 => 67(C)51(3)
    196 => 67(C)52(4)
    197 => 67(C)53(5)
    198 => 67(C)54(6)
    199 => 67(C)55(7)
    200 => 67(C)56(8)
    201 => 67(C)57(9)
    202 => 67(C)65(A)
    203 => 67(C)66(B)
    204 => 67(C)67(C)
    205 => 67(C)68(D)
    206 => 67(C)69(E)
    207 => 67(C)70(F)
    208 => 68(D)48(0)
    209 => 68(D)49(1)
    210 => 68(D)50(2)
    211 => 68(D)51(3)
    212 => 68(D)52(4)
    213 => 68(D)53(5)
    214 => 68(D)54(6)
    215 => 68(D)55(7)
    216 => 68(D)56(8)
    217 => 68(D)57(9)
    218 => 68(D)65(A)
    219 => 68(D)66(B)
    220 => 68(D)67(C)
    221 => 68(D)68(D)
    222 => 68(D)69(E)
    223 => 68(D)70(F)
    224 => 69(E)48(0)
    225 => 69(E)49(1)
    226 => 69(E)50(2)
    227 => 69(E)51(3)
    228 => 69(E)52(4)
    229 => 69(E)53(5)
    230 => 69(E)54(6)
    231 => 69(E)55(7)
    232 => 69(E)56(8)
    233 => 69(E)57(9)
    234 => 69(E)65(A)
    235 => 69(E)66(B)
    236 => 69(E)67(C)
    237 => 69(E)68(D)
    238 => 69(E)69(E)
    239 => 69(E)70(F)
    240 => 70(F)48(0)
    241 => 70(F)49(1)
    242 => 70(F)50(2)
    243 => 70(F)51(3)
    244 => 70(F)52(4)
    245 => 70(F)53(5)
    246 => 70(F)54(6)
    247 => 70(F)55(7)
    248 => 70(F)56(8)
    249 => 70(F)57(9)
    250 => 70(F)65(A)
    251 => 70(F)66(B)
    252 => 70(F)67(C)
    253 => 70(F)68(D)
    254 => 70(F)69(E)
    255 => 70(F)70(F)
    jetzt klar was die Funktion macht ?
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52
    ja, ich denke, dass ich das jetzt verstanden habe. ich muss mich auf jeden fall mal näher mit c befassen.

    vielen dank für die schnelle antwort.

    mfg,
    thorsten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad