Subversion Repositories svnkaklik

Rev

Rev 6 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 6 Rev 410
1
// Modul pro komunikaci s Mysi
1
// Modul pro komunikaci s Mysi
2
 
2
 
3
void send(byte command)
3
void send(byte command)
4
{
4
{
5
   int n;
5
   int n;
6
   int parity=0;
6
   int parity=0;
7
 
7
 
8
   //Request-to-send
8
   //Request-to-send
9
//   output_float(DATA);
9
//   output_float(DATA);
10
   output_low(CLK);
10
   output_low(CLK);
11
   delay_us(100);
11
   delay_us(100);
12
   // start bit
12
   // start bit
13
   output_low(DATA);
13
   output_low(DATA);
14
   delay_us(20);
14
   delay_us(20);
15
   while(!input(CLK));
15
   while(!input(CLK));
16
   // 8 bitu
16
   // 8 bitu
17
   for(n=0; n<8; n++)
17
   for(n=0; n<8; n++)
18
   {
18
   {
19
      while(input(CLK));
19
      while(input(CLK));
20
      output_bit(DATA, command & 1);
20
      output_bit(DATA, command & 1);
21
      parity += command & 1;
21
      parity += command & 1;
22
      command>>=1;
22
      command>>=1;
23
      while(!input(CLK));
23
      while(!input(CLK));
24
   };
24
   };
25
   // parita
25
   // parita
26
   while(input(CLK));
26
   while(input(CLK));
27
   output_bit(DATA, ~parity & 1);
27
   output_bit(DATA, ~parity & 1);
28
   while(!input(CLK));
28
   while(!input(CLK));
29
   // stop bit
29
   // stop bit
30
   while(input(CLK));
30
   while(input(CLK));
31
   output_bit(DATA, 1);
31
   output_bit(DATA, 1);
32
   while(!input(CLK));
32
   while(!input(CLK));
33
   output_float(DATA);
33
   output_float(DATA);
34
}
34
}
35
 
35
 
36
 
36
 
37
int8 read_byte(int8 const poradi)
37
int8 read_byte(int8 const poradi)
38
{
38
{
39
int8 bajt;
39
int8 bajt;
40
int8 i;
40
int8 i;
41
 
41
 
42
   // cekani na komunikacni klid
42
   // cekani na komunikacni klid
43
   for (i=0; i<poradi; i++)
43
   for (i=0; i<poradi; i++)
44
   {
44
   {
45
      if (!input(CLK) || !input(DATA)) i=0;
45
      if (!input(CLK) || !input(DATA)) i=0;
46
   };
46
   };
47
 
47
 
48
   // cekani na startbit
48
   // cekani na startbit
49
   while(input(CLK) || input(DATA));
49
   while(input(CLK) || input(DATA));
50
   while(!input(CLK));
50
   while(!input(CLK));
51
 
51
 
52
   bajt = 0;
52
   bajt = 0;
53
   for(i=0; i<8; i++)
53
   for(i=0; i<8; i++)
54
   {
54
   {
55
      while(input(CLK));   // ceka na nulu hodin
55
      while(input(CLK));   // ceka na nulu hodin
56
 
56
 
57
      bajt >>= 1;
57
      bajt >>= 1;
58
      bajt |= input(DATA) << 7;
58
      bajt |= input(DATA) << 7;
59
 
59
 
60
      while(!input(CLK));  // ceka na jednicku hodin
60
      while(!input(CLK));  // ceka na jednicku hodin
61
   };
61
   };
62
   return (bajt);
62
   return (bajt);
63
}
63
}
64
 
64
 
65
 
65
 
66
/*void read_all_byte(int8*st,*nd,*rd)           // precte 3 bajty
66
/*void read_all_byte(int8*st,*nd,*rd)           // precte 3 bajty
67
{
67
{
68
int8 i;
68
int8 i;
69
 
69
 
70
//   *st=read_byte(1st);
70
//   *st=read_byte(1st);
71
 
71
 
72
   // cekani na startbit
72
   // cekani na startbit
73
   while(input(CLK) || input(DATA));
73
   while(input(CLK) || input(DATA));
74
   while(!input(CLK));
74
   while(!input(CLK));
75
   *nd = 0;
75
   *nd = 0;
76
   for(i=0; i<8; i++)
76
   for(i=0; i<8; i++)
77
   {
77
   {
78
      while(input(CLK));   // ceka na nulu hodin
78
      while(input(CLK));   // ceka na nulu hodin
79
 
79
 
80
      *nd |= input(DATA) << 7;
80
      *nd |= input(DATA) << 7;
81
      *nd >>= 1;
81
      *nd >>= 1;
82
 
82
 
83
      while(!input(CLK));  // ceka na jednicku hodin
83
      while(!input(CLK));  // ceka na jednicku hodin
84
   };
84
   };
85
 
85
 
86
   // cekani na startbit
86
   // cekani na startbit
87
   while(input(CLK) || input(DATA));
87
   while(input(CLK) || input(DATA));
88
   while(!input(CLK));
88
   while(!input(CLK));
89
   *rd = 0;
89
   *rd = 0;
90
   for(i=0; i<8; i++)
90
   for(i=0; i<8; i++)
91
   {
91
   {
92
      while(input(CLK));   // ceka na nulu hodin
92
      while(input(CLK));   // ceka na nulu hodin
93
 
93
 
94
      *rd |= input(DATA) << 7;
94
      *rd |= input(DATA) << 7;
95
      *rd >>= 1;
95
      *rd >>= 1;
96
 
96
 
97
      while(!input(CLK));  // ceka na jednicku hodin
97
      while(!input(CLK));  // ceka na jednicku hodin
98
   };
98
   };
99
}*/
99
}*/