Subversion Repositories svnkaklik

Rev

Rev 300 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 300 Rev 302
Line 12... Line 12...
12
 
12
 
13
#define POVOLOVAK_LOW	PORTB &= ~(1<<PB3)
13
#define POVOLOVAK_LOW	PORTB &= ~(1<<PB3)
14
#define POVOLOVAK_HIGH  PORTB |= (1<<PB3)
14
#define POVOLOVAK_HIGH  PORTB |= (1<<PB3)
15
#define DATA	(PIND & (1<<PD1))
15
#define DATA	(PIND & (1<<PD1))
16
 
16
 
-
 
17
 
17
// ------------------------------------------------------------------
18
// ------------------------------------------------------------------
18
//	Main
19
//	Main
19
// ------------------------------------------------------------------
20
// ------------------------------------------------------------------
20
int main(void)
21
int main(void)
21
{
22
{
22
int delay;
23
int bit;
23
int spozdeni;
-
 
24
int last;
24
int last;
-
 
25
int preteceni;
-
 
26
long int cas;
25
 
27
 
26
  DDRD |= (1<<DDD5);
28
  DDRD |= (1<<DDD5);
27
  DDRB |= (1<<DDB3);
29
  DDRB |= (1<<DDB3);
28
 
30
 
29
  TCCR1B |= (1 << CS10);  // Set up timer 
31
  TCCR0B |= (1 << CS10);  // Set up timer 
30
 
32
 
31
  while(1)
33
  while(1)
32
  {
34
  {
33
	if(!DATA)   // kdyz je 0 na datech 
35
	if(!DATA)   // kdyz je 0 na datech 
34
	{ 
36
	{ 
35
	  POVOLOVAK_HIGH;    // zapni vysilani
37
	  POVOLOVAK_HIGH;    // zapni vysilani
36
	  	  
38
	  	  
37
	  for (spozdeni=8;spozdeni>=0;spozdeni --) // odpocitej dobu 8mi bitu 
39
	  for (bit=7;bit>=0;bit--) // odpocitej dobu 8mi bitu 
38
	  {
40
	  {
39
		last = DATA;
41
		last = DATA;
40
	    TCNT1 = 0;					// zacni znova merit cas
42
	    TCNT0 = 0;					// zacni znova merit cas
-
 
43
		preteceni =0;
41
	    while (TCNT1 <= delay)		// bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu
44
	    while ((TCNT0+preteceni*0xFF) <= cas) // bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu
42
		{
45
		{
-
 
46
		  if (!(TIFR << TOV0))		// protoze mame jenom 8mi bitovy casovac, zjisti, jestli nepreteka
-
 
47
		  {
-
 
48
		    preteceni++;			// kdyz pretece, poznamenej to.
-
 
49
			TIFR = 1 << TOV0;		// vynuluj flag preteceni
-
 
50
		  }
-
 
51
 
43
		  if(DATA != last)
52
		  if(DATA != last)			// zkontroluj, jestli se nezmenil stav dat.
44
		  {
53
		  {
45
		    if (TCNT1 < delay) delay = TCNT1;
54
		    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 
46
			break;
55
			break;
47
		  }
56
		  }
48
        }
57
        }
49
	  }
58
	  }
50
	  while (!DATA);				// cekani na stop bit
59
	  while (!DATA);				// cekani na stop bit
51
 
60
 
52
	  for (spozdeni=2;spozdeni >= 0;spozdeni --)
61
//	  for (spozdeni=2;spozdeni >= 0;spozdeni --)
53
	  {
62
//	  {
54
	    TCNT1 = 0;					// zacni znova merit cas zacatku stopbitu
63
//	    TCNT0 = 0;					// zacni znova merit cas zacatku stopbitu
55
	    while (TCNT1 <= delay) if(!DATA) break;
64
//	    while (TCNT0 <= delay) if(!DATA) break;
56
	  }
65
//	  }
57
    }
66
    }
58
    else  POVOLOVAK_LOW;  	// kdyz je 1 prepni na prijem 
67
    else  POVOLOVAK_LOW;  	// kdyz je 1 prepni na prijem 
59
	delay = 60000;
68
	cas = 0xFFFF;
60
  }
69
  }
61
  return(0);
70
  return(0);
62
}
71
}