Subversion Repositories svnkaklik

Rev

Rev 302 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 302 Rev 303
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
volatile unsigned int preteceni;
-
 
18
unsigned int bit;
-
 
19
unsigned int bitdelay;
-
 
20
unsigned int last;
-
 
21
unsigned int cas;
-
 
22
 
-
 
23
ISR(TIMER0_OVF_vect)   // interrupt od preteceni casovace
-
 
24
{
-
 
25
  preteceni++;			// kdyz pretece, poznamenej to.
-
 
26
}
-
 
27
 
17
 
28
 
18
// ------------------------------------------------------------------
29
// ------------------------------------------------------------------
19
//	Main
30
//	Main
20
// ------------------------------------------------------------------
31
// ------------------------------------------------------------------
21
int main(void)
32
int main(void)
22
{
33
{
23
int bit;
-
 
24
int last;
-
 
25
int preteceni;
-
 
26
long int cas;
-
 
27
 
34
 
28
  DDRD |= (1<<DDD5);
35
  DDRD |= (1<<DDD5);
29
  DDRB |= (1<<DDB3);
36
  DDRB |= (1<<DDB3);
30
 
37
 
-
 
38
  TIMSK |= (1 << TOIE0); // Enable timer overflow interrupt 
31
  TCCR0B |= (1 << CS10);  // Set up timer 
39
  TCCR0B |= (1 << CS10);  // Set up timer 
-
 
40
  sei();   // enable interrupts
32
 
41
 
33
  while(1)
42
  while(1)
34
  {
43
  {
35
	if(!DATA)   // kdyz je 0 na datech 
44
	if(!DATA)   // kdyz je 0 na datech 
36
	{ 
45
	{ 
37
	  POVOLOVAK_HIGH;    // zapni vysilani
46
	  POVOLOVAK_HIGH;    // zapni vysilani
-
 
47
 
-
 
48
	  cas = 0xFFFF;
-
 
49
	  bitdelay = 0;
38
	  	  
50
	  	  	  
39
	  for (bit=7;bit>=0;bit--) // odpocitej dobu 8mi bitu 
51
	  for (bit=0;bit<=7;bit++) // odpocitej dobu 8mi bitu 
40
	  {
52
	  {
41
		last = DATA;
53
		last = DATA;
42
	    TCNT0 = 0;					// zacni znova merit cas
54
	    TCNT0 = 0;					// vynuluj citac pred tim, než smazes preteceni, protoze jinak by se mohlo stat, ze se nastavi preteceni driv, nez ma
43
		preteceni =0;
55
	    preteceni = 0;
44
	    while ((TCNT0+preteceni*0xFF) <= cas) // bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu
-
 
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
 
56
 
-
 
57
	    while ((TCNT0+preteceni*0x0100) <= cas) // bit poznas tak, ze je to nejmensi nalezena delka trvaleho stavu
-
 
58
		{
-
 
59
		  bitdelay=TCNT0+preteceni*0x0100;
52
		  if(DATA != last)			// zkontroluj, jestli se nezmenil stav dat.
60
		  if(DATA != last)			// zkontroluj, jestli se nezmenil stav dat.
53
		  {
61
		  {
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 
62
		    if (bitdelay < cas) cas = bitdelay; //kdyz se zmenil a trvalo to kratsi dobu nez pred tim poznemenej, jak dlouho to trvalo 
55
			break;
63
			break;
56
		  }
64
		  }
57
        }
65
        }
58
	  }
66
	  }
59
	  while (!DATA);				// cekani na stop bit
67
//	  while (!DATA);				// cekani na stop bit
-
 
68
 
-
 
69
/*	  for (bit=2;bit >= 0;bit--)    // odpocitej dva stopbity
-
 
70
	  {
-
 
71
	    TCNT0 = 0;					// zacni znova merit cas zacatku stopbitu
-
 
72
		preteceni=0;
60
 
73
 
61
//	  for (spozdeni=2;spozdeni >= 0;spozdeni --)
74
	    while ((TCNT0+preteceni*0x0100) <= cas) 
62
//	  {
75
		{
63
//	    TCNT0 = 0;					// zacni znova merit cas zacatku stopbitu
-
 
64
//	    while (TCNT0 <= delay) if(!DATA) break;
76
		  if(!DATA) break;
-
 
77
        }
65
//	  }
78
	  }*/
66
    }
79
    }
67
    else  POVOLOVAK_LOW;  	// kdyz je 1 prepni na prijem 
80
    else  POVOLOVAK_LOW;  	// kdyz je 1 prepni na prijem 
68
	cas = 0xFFFF;
-
 
69
  }
81
  }
70
  return(0);
82
  return(0);
71
}
83
}