#include //////////////////////////////////////////////////////////////////////////////////////////// // ATmega8: // RC - 8 МHz; фьюзы: Low E4; Higt D9; // начальное: RC - 1 МHz; фьюзы: Low E1; Higt D9; // кварц - 8 МHz; фьюзы: Low EF; Higt C9 (CKOPT -on); XTAL2 – выход ----V // кварц - 8 МHz; фьюзы: Low EF; Higt D9 (CKOPT -off); // XTAL1 – вход; фьюзы: Low E0; Higt D9 //////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// fcrc: unsigned long crc; // crc unsigned long bcrc; // crc буфер unsigned int a; // a - счёт unsigned int b; // b - счёт unsigned char x; // x - счёт //////////////////////////////////////////////// unsigned char reflected; // reflected (отражённый) 0x01 > 0x80 unsigned char b_reflected; // буфер reflected (отражённый) 0x01 > 0x80 //////////////////////////////////////////////// void fcrc(void) { crc ^= bcrc; for( a = 0; a < 32; a++ ){ if (crc & 0x80000000) crc = ( crc << 1 ) ^ 0x04C11DB7; // Ethernet else crc = crc << 1; }; } //////////////////////////////////////////////// буфер пульт unsigned char bufer[64]={ // 0...59 Data // 60,61,62,63 CRC_32 0x00, 0x10, 0xA4, 0x7B, 0xEA, 0x80, 0x00, 0x12, 0x34, 0x56, 0x78, 0x90, 0x08, 0x00, 0x45, 0x00, 0x00, 0x2E, 0xB3, 0xFE, 0x00, 0x00, 0x80, 0x11, 0x05, 0x40, 0xC0, 0xA8, 0x00, 0x2C, 0xC0, 0xA8, 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x1A, 0x2D, 0xE8, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00 //Ethernet checksum: 0xB3, 0x31, 0x88, 0x1B }; ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// void main(void) { //////////////////////////////////////////////////////////////////////////////////////////// PORTB=0x00; DDRB=0xFF; //////////////////////////// PORTD=0x00; DDRD=0xFF; //////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// //0. Initial Value crc=0xFFFFFFFF; //////////////////////////////////////////////////////////////////////////////////////////// //1. Data // 0...59 Data // 60,61,62,63 CRC_32 // Input reflected (отражённый) 0x01 > 0x80 for (b=0; b<60; b=b+4) { //////////////////////////// 0 b_reflected = bufer[b]; // Data > breflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1< breflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1< breflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1< breflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1< 0x01 //////////////////////////// 0 b_reflected = crc>>24; // crc > b_reflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1<>16; // crc > b_reflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1<>8; // crc > b_reflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1< b_reflected reflected = 0; // сброс reflected for (x=0; x<8; x++) { if ( b_reflected & (1<<(7-x)) ) { reflected |= (1<