|
Сразу скажу - только написал,ещё не проверял.Для меги8.
void ComparatorIsr()
{
ACSR &= ~(1 << ACIE);
TCCR1B = 0;
TCNT1H = 0;
TCNT1L = 0;
OCR1AH = high_byte(Delay1Timer1A);
OCR1AL = low_byte(Delay1Timer1A);
TCCR1B = 0x1;
TIFR |= 0x18;
}void IsrCOMPA()
{
static uchar StateReceiv;
static uchar nbit,nbyte,ReceivByte;
BitIn = ACSR & (1 << ACO);
ReceivByte = ((ReceivByte << 1) | BitIn);
switch (StateReceiv)
{
case 0://маркер ещё не обнаружен
if (ReceivByte == 0xc1)
{//Стартовый маркер обнаружен
StateReceiv++;
crc16h = 0;
crc16l = 0;
nbit = 0;
nbyte = 0;
}
break;
case 1://маркер обнаружен
if (++nbit == 8)
{
nbit = 0;
BuferRF[nbyte++] = ReceivByte;
if (nbyte == 5)
{
nbyte = 0;
StateReceiv = 0;;
DecoderCommand();
}
}
break;
}
ACSR |= (1 << ACIE);
ACSR |= (1 << ACI);
TCCR1B = 0;
}void DecoderCommand()
{
CalcCrc();
if ((crc16h | crc16l) == 0)
{
if ((uint)BuferRF[0] | ((uint)BuferRF[1] << 8) == Address)
{
SetPin();
}
}
}
E-mail: info@telesys.ru