Hallo Leute,
ich habe einen Master (PIC16F886) und einen Slave (PIC18F44K22). Das
Senden sowie das Empfangen von Master funktioniert. Empfangen wird aber
nur etwas wenn ich die Variable direkt im Slave MSSP Interrupt setze
bevor sie in den Buffer gelesen wird. Wenn ich die Variable in der
main-loop setzt geht der Wert verloren. Das Problem hatte ich mit
anderen Prozessoren bisher noch nicht. Weis jemand woran das liegt?
MfG Lukas
1 | void interrupt ISR(void)
|
2 | {
|
3 | if(SSP1IF)
|
4 | {
|
5 | SSP1IF = 0;
|
6 | if(SSP1STATbits.S == 1 && RW1 == 0 && DA1 == 0 && BF1 == 1) //STATE 1: Master write, last byte was an adress
|
7 | {
|
8 | dLED1 = 1;
|
9 | vCLEAR = SSP1BUF;
|
10 | CKP1 = 1;
|
11 | }
|
12 |
|
13 | if(SSP1STATbits.S == 1 && RW1 == 0 && DA1 == 1 && BF1 == 1) //STATE 2: Master write, last byte was data
|
14 | {
|
15 | dLED2 = 1;
|
16 | vWRITEDATA = SSP1BUF;
|
17 | CKP1 = 1;
|
18 | vCLEAR = SSP1BUF;
|
19 | }
|
20 |
|
21 | if(SSP1STATbits.S == 1 && RW1 == 1 && DA1 == 0) //STATE 3: Master read, last byte was an adress
|
22 | {
|
23 | dLED3 = 1;
|
24 | CKP1 = 0;
|
25 | // vREADDATA[0] = 0x41; <- setzen der Variable, dann läuft!
|
26 | SSP1BUF = vREADDATA[0]; //Rücksetzen wenn Daten in Buffer eingelesen
|
27 | CKP1 = 1;
|
28 | }
|
29 |
|
30 | if(SSP1STATbits.S == 1 && DA1 == 1 && BF1 == 0 && CKP1 == 1) //STATE 5: Master NACK
|
31 | {
|
32 | dLED5 = 1;
|
33 | CKP1 = 1;
|
34 | vCLEAR = SSP1BUF;
|
35 | }
|
36 | }
|
37 | }
|
38 |
|
39 | void main(void)
|
40 | {
|
41 | Init();
|
42 |
|
43 | fSTARTUP();
|
44 | fSELBSTTEST();
|
45 |
|
46 | while(1)
|
47 | {
|
48 |
|
49 | if(vWRITEDATA == 0x66)
|
50 | {
|
51 | dLED8 = 1;
|
52 | }
|
53 |
|
54 | vREADDATA[0] == 0x41;
|
55 | }
|
56 | }
|