Slave verliert Daten wenn in Interrupt springt

OP #3383258
Lesenswert?
• ▲
▼
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.