/*************************************
*
Keskeytysrutiini CK signaalille
*
*************************************/
ISR(TIMER1_OVF_vect)
{
static
uint16_t
i;
TCNT1H = 0xFF;
TCNT1L = 0xEA; //noin 47kHz
// lasketaan riittävä määrä keskeytyksiä CK muutokseen ja kunnes askelia on riittävästi
// tai askeleet 0 eli ajetaan aina
if((i++ >= Count_CK) && ((Step_Count < Steps) || !Steps))
{
i
=
1; //
alustetaan
Ste+; //
askel
laskuri
DATA_PORT ^= CK;
// vaihdetaan CK tila
}
}
/*************************
* Vastaanottokeskeytys
*
*************************/
ISR(USART_RX_vect)
{
uint8_t
data=0; //
paikalliset
muutujat
data
=
UDR0;
//
luetaan
rekisteri
if(data
==
0x3F)
//
"?",
laitekysely
USART_Transmit(0x21); //
"!",
vastataan että ollaan "langan" päässä
else
{
Rx_Buf[Index] = data;
// merkki bufferiin
if(Index >= 5)
// saatu 5 tavua eli koko data
{
Data_Ready=1; //
lippu
ylös
Index=0;
//
nollataan
indeksi
}
}
}
/*************************
* Lähetysfunktio
*
*************************/
void USART_Transmit(char data)
{
while (!( UCSR0A & (1<<UDRE0))); // odota kunnes lähtöpuskuri tyhjä
UDR0 = data;
// lähtevä merkki datarekisteriin
}