1 | void fI2CSEND2SLAVE(char vADRESSE, char vMODUL , char vZIFFER1 ,char vZIFFER2,char vZIFFER3,char vZIFFER4)
|
2 | {
|
3 | while (( SSPCON2 & 0x1F ) || (SSPSTATbits.RW) );
|
4 | SEN =1; //Initialisiere Start bedingung SDA -und SCLLine
|
5 | while (!SSPIF);
|
6 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
7 |
|
8 | SSPBUF = vADRESSE; //Adresse wird in BUFFER geschrieben
|
9 | while (!SSPIF || SSPSTATbits.RW );
|
10 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
11 |
|
12 | SSPBUF = vMODUL; //Modul wird in BUFFER geschrieben
|
13 | while (!SSPIF || SSPSTATbits.RW );
|
14 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
15 |
|
16 | SSPBUF = vZIFFER1; //Ziffer/Buchstabe wird in BUFFER geschrieben
|
17 | while (!SSPIF || SSPSTATbits.RW );
|
18 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
19 |
|
20 | SSPBUF = vZIFFER2; //Ziffer/Buchstabe wird in BUFFER geschrieben
|
21 | while (!SSPIF || SSPSTATbits.RW );
|
22 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
23 |
|
24 | SSPBUF = vZIFFER3; //Ziffer/Buchstabe wird in BUFFER geschrieben
|
25 | while (!SSPIF || SSPSTATbits.RW );
|
26 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
27 |
|
28 | SSPBUF = vZIFFER4; //Ziffer/Buchstabe wird in BUFFER geschrieben
|
29 | while (!SSPIF || SSPSTATbits.RW );
|
30 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
31 |
|
32 | PEN = 1; //Initialisiere Stopbedingung auf SDA- und SCLLine
|
33 | while ( !SSPIF );
|
34 | SSPIF = 0; //Rücksetzen des SSP Interrupt Flag
|
35 | }
|
36 |
|
37 |
|
38 | void fI2CRECIVEFROMSLAVES(char vADRESSE)
|
39 | {
|
40 | dLED6 = WCOL;
|
41 |
|
42 | if(WCOL) //Wrtie collision detect
|
43 | {
|
44 | PEN = 1;
|
45 | SEN = 0;
|
46 | SSPIF = 0;
|
47 | WCOL = 0;
|
48 | }
|
49 |
|
50 | while (( SSPCON2 & 0x1F ) || (SSPSTATbits.RW) ); //I2C IDLE
|
51 | SEN = 1;
|
52 | while(SEN);
|
53 |
|
54 | SSPBUF = vADRESSE;
|
55 | while(BF)
|
56 |
|
57 | if(vADRESSE == 0x91)
|
58 | {
|
59 | while (( SSPCON2 & 0x1F ) || (SSPSTATbits.RW) ); //I2C IDLE
|
60 | RCEN = 1;
|
61 | while (!BF);
|
62 | vRECDATEN1[0] = SSPBUF;
|
63 | while (( SSPCON2 & 0x1F ) || (SSPSTATbits.RW) ); //I2C IDLE
|
64 |
|
65 | ACKDT = 0;
|
66 | ACKEN = 1;
|
67 | while (ACKEN);
|
68 | ACKDT = 0;
|
69 | }
|
70 | while (( SSPCON2 & 0x1F ) || (SSPSTATbits.RW) );
|
71 | RCEN = 1;
|
72 | while (!BF);
|
73 | vRECDATEN1[1] = SSPBUF;
|
74 | while (( SSPCON2 & 0x1F ) || (SSPSTATbits.RW) );
|
75 |
|
76 | ACKDT = 1;
|
77 | ACKEN = 1;
|
78 | while (ACKEN);
|
79 | ACKDT = 0;
|
80 |
|
81 | PEN = 1;
|
82 | while (PEN);
|
83 | }
|