Hi,
ich möchte meine zu sendenden Daten über eine CRC16 absichern. Die 
crc16.h bietet mir für meinen Atmega ja schon mal einen guten 
Anhaltspunkt:
| 1 | uint16_t U16crc;
 | 
| 2 | 
 | 
| 3 | void crc_fInit( void )
 | 
| 4 | {
 | 
| 5 |   U16crc = 0xffff;
 | 
| 6 | }
 | 
| 7 | 
 | 
| 8 | void crc_fUpdate(uint8_t value)
 | 
| 9 | {
 | 
| 10 |   uint8_t i;
 | 
| 11 | 
 | 
| 12 |   U16crc ^= value;
 | 
| 13 |   for (i = 0; i < 8; ++i)
 | 
| 14 |   {
 | 
| 15 |     if (U16crc & 1)
 | 
| 16 |     {
 | 
| 17 |       U16crc = (U16crc >> 1) ^ 0xA001;
 | 
| 18 |     }
 | 
| 19 |     else
 | 
| 20 |     {
 | 
| 21 |       U16crc = (U16crc >> 1);
 | 
| 22 |     }
 | 
| 23 |   }
 | 
| 24 | }
 | 
Allerdings will das ganze bei mir nicht klappen.
Also, angenommen ich habe diese Nachricht:
| 1 | unsigned char message[9] = {'M','e','s','s','a','g','e',0,0};
 | 
Dann lasse ich die CRC16 mit den Polynom 0xA001 rüberlaufen:
| 1 |     crc_fInit();
 | 
| 2 |     for (i=0; i<9; i++)
 | 
| 3 |     {
 | 
| 4 |       crc_fUpdate(message[i]);
 | 
| 5 |     }
 | 
Als Ergebnis erhalte ich hier "54110".
Nun kopiere ich dieses Ergebnis in die letzten beiden "Zeichen"
| 1 |     message[7] = (U16crc>>8);
 | 
| 2 |     message[8] = (U16crc & 0xFF);
 | 
und lasse den Algorithmus erneut über die Nachricht laufen (was ja nun 
die Empfängerseite wäre):
| 1 |     crc_fInit();
 | 
| 2 |     for (i=0; i<9; i++)
 | 
| 3 |     {
 | 
| 4 |       crc_fUpdate(message[i]);
 | 
| 5 |     }
 | 
Allerdings bekomme ich hier nicht die erwartete "0", sondern eine "7042" 
als Ausgabe.
Sehr Ihr vielleicht, wo hier der Fehler stecken könnte?
Vielen Dank im Voraus für Eure Hilfe!!!