/*****************************
*
Käsitellään tullut data
*
*****************************/
void Process_Data(void)
{
uint8_t
Sets=0,
MASK=DISABLE;
// 0.tavu asetukset,
// 1.tavu nopeuden L bitit,
// 2.tavu nopeuden H bitit
// 3.tavu askeleiden L bitit
// 4.tavu askeleiden H bitit
Sets
=
Rx_Buf[0];
//
käsitellään
ensimmäinen
tavu
if(Sets & 0x40)
MASK |= M1 | M2;
// 1/8 askel
if(Sets & 0x20)
MASK |= M2;
// 1/4 askel
if(Sets & 0x10)
MASK |= M1;
// 1/2 askel
if(Sets
&
0x08) ; //
1/1
askel
if(Sets & 0x04)
MASK &= ~DISABLE; // ~on/ off
if(Sets & 0x02)
MASK |= CW_CCW;
// eteen
if(Sets & 0x01)
MASK |= REF_IN;
// 100% tehosta
DATA_PORT = MASK;
// asetukset porttiin
Speed
=
Rx_Buf[1]; //
0000|0000|xxxx|xxxx
Speed |= Rx_Buf[2] << 8;
// xxxx|xxxx|0000|0000
Count_CK = 20000/Speed;
// määritetään montako kierrosta lasketaan keskeytyksessä
if(!Speed) //
0-nopeudella
annetaan
prioriteetti
ulkoiselle
oskillaattorille
{
TIMSK1
&=
~(1<<TOIE1);
//
kielletään
ylivuotokeskeytys
DATA_PORT
&=
~CK;
//
CK
ylösveto
pois
DATA_DDR
&=
~CK;
//
suurimpedanssitilaan
}
else
{
TIMSK1
|=
1<<TOIE1;
//
sallitaan
ylivuotokeskeytys
DATA_DDR |= CK;
// muuten CK lähdöksi
}
Step_Count=0;
Steps
=
Rx_Buf[3];
//
0000|0000|xxxx|xxxx
Steps |= Rx_Buf[4] << 8;
// xxxx|xxxx|0000|0000
Steps
*=
2;
//
lasketaan
puoliaallon
tarkkuudella
//
2x
puoli
==
kokoaalto
USART_Transmit(0x80);
// kuitataan tietokoneelle data käsitellyksi
Data_Ready=0;
//merkkijono käsitelty, valmis uuteen dataan
}