Um es ganz banal auszudrücken:
du fängst einfach wieder bei 0 an, wenn du über 255 kommst.
;)
1 | unsigned char calc_bcc (const char *string)
|
2 | {
|
3 | bcc = 0;
|
4 | while (*string)
|
5 | {
|
6 | bcc += *string;
|
7 | string++;
|
8 | }
|
9 | return bcc;
|
10 | }
|
und die Berechnung des Befehls:
1 | //--- Geraden und Punkte zeichnen (zwei Koordinaten) -------------------------------------------
|
2 | void draw_2coord (unsigned char DC, char *String, unsigned char X1, unsigned char Y1, unsigned char X2, unsigned char Y2)
|
3 | {
|
4 | sprintf(Nutzdaten,"%c%s%c%c%c%c",esc,String,X1,Y1,X2,Y2); // String zuweisen
|
5 | Length = strlen (Nutzdaten); // Länge ermitteln, esc dazuzählen
|
6 | sprintf(Nutzdaten,"%c%c%c%s%c%c%c%c",DC,Length,esc,String,X1,Y1,X2,Y2);
|
7 | calc_bcc (Nutzdaten);
|
8 | Nutzdaten[strlen(Nutzdaten)] = bcc;
|
9 | PORTD |= _BV(RS485_FG);
|
10 | for (unsigned char i=0;i<(strlen(Nutzdaten));i++)
|
11 | {
|
12 | uart_out (Nutzdaten[i]);
|
13 | }
|
14 | loop_until_bit_is_set(UCSR1A, UDRE1);
|
15 | PORTD &= ~_BV(RS485_FG);
|
16 | }
|
Ich hoffe, man kann 'was erkennen. ;)