#include "aSPISlave.h" #include ISR(SPI_STC_vect) { char received = SPDR; data[index] = received; index++; } void SPI_SlaveInit(void) { DDR_SPI = (1 << DD_MISO); SPCR = (1 << SPE); } char CRC8(char *data, int length) { char crc = 0x00; char poly = 0x07; // полином для CRC8 for (int i = 0; i < length - 2; i++) { crc ^= data[i]; // XOR текущего байта с crc for (int j = 0; j < length; j++) { if (crc & 0x80) { // если старший бит crc равен 1 crc = (crc << 1) ^ poly; // сдвигаем crc на 1 бит влево и XOR с полиномом } else { crc <<= 1; // иначе просто сдвигаем на 1 бит влево } } } return crc; }