blob: a02aaf32be34d99bd44c2c3ab2c97250d9575b9f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#include <avr/io.h>
#include "defines.h"
#include "ibutton.h"
#include "bits.h"
#include "metacom.h"
#include "onewire.h"
inline void metacom_send_byte(uint8_t data)
{
uint8_t b;
for (b = 0; b < 8; b++)
{
if (data & (1UL<<b))
{
ONEWIRE_MASTER_TX_OFF;
ONEWIRE_WAIT(METACOM_T*2/3); // 1
ONEWIRE_MASTER_TX_ON;
ONEWIRE_WAIT(METACOM_T/3);
} else {
ONEWIRE_MASTER_TX_OFF;
ONEWIRE_WAIT(METACOM_T/3); // 0
ONEWIRE_MASTER_TX_ON;
ONEWIRE_WAIT(METACOM_T*2/3);
// Тут не надо отпускать TX перед посылкой следующего пакета
}
}
}
void metacom_send(unsigned char* key)
{
ONEWIRE_MASTER_TX(METACOM_T); // Синхронизирующий бит
ONEWIRE_WAIT(METACOM_T/3); // 0
ONEWIRE_MASTER_TX(METACOM_T*2/3);
ONEWIRE_WAIT(METACOM_T*2/3); // 1
ONEWIRE_MASTER_TX(METACOM_T/3);
ONEWIRE_WAIT(METACOM_T/3); // 0
ONEWIRE_MASTER_TX(METACOM_T*2/3);
int b;
for (b = 0; b < 4; b++)
{
/*
speedup_leds();
*/
update_leds();
metacom_send_byte(key[b]);
}
}
|