макросы для упрощения define begin_transmission LE CLK define transmit

 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
// макросы для упрощения
#define begin_transmission() LE = 0; CLK = 0
#define transmit(a) DATA = a; CLK = 1; CLK = 0
#define end_transmission() LE = 1; LE = 0; LE = 1
#define transmit_DW(b23,b22,b21,b20,b19,b18,b17,b16,b15,b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1,b0)\
transmit(b23); transmit(b22); transmit(b21); transmit(b20); transmit(b19); transmit(b18); transmit(b17); transmit(b16);\
transmit(b15); transmit(b14); transmit(b13); transmit(b12); transmit(b11); transmit(b10); transmit(b9); transmit(b8);\
transmit(b7); transmit(b6); transmit(b5); transmit(b4); transmit(b3); transmit(b2); transmit(b1); transmit(b0);
/**
В четырёх функциях transmit_data_* передаваемые данные записываются в
little endian порядке.
*/
void transmit_data_functional(void) {
begin_transmission();
transmit_DW(Ps1, Ps0, 0, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 0, 0, 1, 0);
end_transmission();
}
void transmit_data_R(void) {
begin_transmission();
transmit_DW(0, 0, 0, 0, 0, 0, 0, 0,
R13, R12, R11, R10, R9, R8, R7, R6,
R5, R4, R3, R2, R1, R0, 0, 0);
end_transmission();
}
void transmit_data_AB(void) {
begin_transmission();
transmit_DW(0, 0, 0, B12, B11, B10, B9, B8,
B7, B6, B5, B4, B3, B2, B1, B0,
A5, A4, A3, A2, A1, A0, 0, 1);
end_transmission();
}
void transmit_data_initialization(void) {
begin_transmission();
transmit_DW(Ps1, Ps0, 0, 1, 1, 1, 1, 1,
1, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 0, 0, 1, 1);
end_transmission();
}