Subversion Repositories svnkaklik

Compare Revisions

Regard whitespace Rev 301 → Rev 302

/programy/Atmel_C/RS232toRS485/P232.c
14,19 → 14,21
#define POVOLOVAK_HIGH PORTB |= (1<<PB3)
#define DATA (PIND & (1<<PD1))
 
 
// ------------------------------------------------------------------
// Main
// ------------------------------------------------------------------
int main(void)
{
int delay;
int spozdeni;
int bit;
int last;
int preteceni;
long int cas;
 
DDRD |= (1<<DDD5);
DDRB |= (1<<DDB3);
 
TCCR1B |= (1 << CS10); // Set up timer
TCCR0B |= (1 << CS10); // Set up timer
 
while(1)
{
34,15 → 36,22
{
POVOLOVAK_HIGH; // zapni vysilani
for (spozdeni=8;spozdeni>=0;spozdeni --) // odpocitej dobu 8mi bitu
for (bit=7;bit>=0;bit--) // odpocitej dobu 8mi bitu
{
last = DATA;
TCNT1 = 0; // zacni znova merit cas
while (TCNT1 <= delay) // bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu
TCNT0 = 0; // zacni znova merit cas
preteceni =0;
while ((TCNT0+preteceni*0xFF) <= cas) // bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu
{
if(DATA != last)
if (!(TIFR << TOV0)) // protoze mame jenom 8mi bitovy casovac, zjisti, jestli nepreteka
{
if (TCNT1 < delay) delay = TCNT1;
preteceni++; // kdyz pretece, poznamenej to.
TIFR = 1 << TOV0; // vynuluj flag preteceni
}
 
if(DATA != last) // zkontroluj, jestli se nezmenil stav dat.
{
if ((TCNT0+preteceni*0xFF) < cas) cas = TCNT0+preteceni*0xFF; //kdyz se zmenil a trvalo to kratsi dobu nez pred tim poznemenej, jak dlouho to trvalo
break;
}
}
49,14 → 58,14
}
while (!DATA); // cekani na stop bit
 
for (spozdeni=2;spozdeni >= 0;spozdeni --)
{
TCNT1 = 0; // zacni znova merit cas zacatku stopbitu
while (TCNT1 <= delay) if(!DATA) break;
// for (spozdeni=2;spozdeni >= 0;spozdeni --)
// {
// TCNT0 = 0; // zacni znova merit cas zacatku stopbitu
// while (TCNT0 <= delay) if(!DATA) break;
// }
}
}
else POVOLOVAK_LOW; // kdyz je 1 prepni na prijem
delay = 60000;
cas = 0xFFFF;
}
return(0);
}