PIC18F Fehler im Code finden (C)

OP #3842088
Lesenswert?
• ▲
▼
Hallo zusammen,

ich suche schon seit ein paar Stunden nach dem fehler im Code.
Was ich rausgefunden habe, dass der Fehler in den unten aufgeführten 
code stecken muss.

Zur Thematik: Ein angeschlossenes Sensor modul am Pic soll die Messwerte 
per UART an den Pc übertragen.
Zum testen nutze ich Putty ein Terminal programm.
Ich habe einen ISR programmiert der beim RX vom UART ausgelöst wird und 
die im code ersichtliche funktionen ausführen soll.

Das bild zeigt was passiert.

In Putty gebe ich eine 1 ein um den interrupt 
auszulösen.(1=temp,2=Feuchtigkeit)

Der interrupt wird ausgelöst und sendet mir das richtige ergebnis + die 
ausgabe die er eignetlich nur machen soll wen weder 1 noch die 2 
gedrückt wurden.

Danach kann ich auch keinen weitern interrupt Auslösen.(z.B. Erst die 1 
für Temp dann die 2 für Feuchtigkeit)
1
void interrupt SerialRxPinInterrupt()
2
{
3
    uint8_t i = 0;
4
    //Prüft ob der interrup von uart empfang kommt
5
    if(PIR1bits.RCIF == 1)
6
    {
7
        while(DataRdyUSART()){
8
            u_buffer[i] = ReadUSART(); //wenn ja lies datein
9
            i++;
10
        }
11
        if(u_buffer[0] == '1'){ //1= temp
12
            Uart_Send_Temp();
13
        }
14
        else if(u_buffer[0] == '2'){ //2 = Feuchtigkeit
15
            Uart_Send_Hum();
16
        }
17
        else if(u_buffer[0]== '\0' || u_buffer[0]== '\r' || u_buffer[0]== '\n' ){
18
            putsUSART("\n");
19
        }        
20
        PIR1bits.RCIF = 0; //Löschend des RX interrupt flag bit
21
    }//end if
22
}//end interrupt

Danke im Vorraus

Tim
Angehängte Dateien:
OP #3842213
Lesenswert?
• ▲
▼
Ich habe ien Konfiguration überschrieben.
1
C-Code
1
void setupUart(void){
2
    //pins auf input setzten, Pic Configuriert sich die pins nach bedarf für USART
3
    asm("BANKSEL TRISC");
4
    asm("MOVLW 0xD8"); //Tris ports auf inputstellen RX TX und SDA SCL
5
    asm("MOVWF TRISC");
6
//    asm("BSF TRISC,7"); !!!HIER DER FEHLER!! standvorher drine
7
//    asm("BSF TRISC,6");
8

9
    uartConfig = USART_RX_INT_ON & USART_TX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_BRGH_HIGH;
10
    baud = 103; // Baudrate 9600 = 51 (8Mhz), 103(16mhz)= 9615
11

12
    //Interrupt
13
    RCIF = 0; //RX pin flag auf 0 setzten (reset)
14
    RCIP = 0; //Keine hohe Priorität für den interrupt
15
    RCIE = 1; //Einschalten für RX Intereuppt
16
    PEIE = 1; //Pheripheral interuppt erlauebn (Uart ist ein Pheripharal)
17
}
1
void initI2C(void){
2
//======================= Rausgenommen da hier eine änderung des TRISC stattgefunden hat.
3
    //    asm("BANKSEL TRISC");
4
    //    asm("MOVLW 0x18"); // SCL (RC3) und SDA (RC4) Auf inputstellen
5
    //    asm("MOVWF TRISC");
6

7
    asm("BANKSEL SSPCON1");
8
    asm("MOVLW 0x28");  // Master Mode Clock einstellung (Master mode clock = FOSC/(4 * (SSPADD + 1)))
9
    asm("MOVWF SSPCON1"); //& SCL &SDA als serialport bestimmen
10

11
    asm("BANKSEL SSPSTAT"); //Slew mode dissable
12
    asm("BSF SSPSTAT,7");
13

14
    //Baudrate von I2C einstellen auf 100khz
15
    asm ("MOVLW 0x27"); // (FOSC/(4*xKhz))-1 = (4Mhz/(4*100Khz))-1 = 9 (8mhz = 19) (16mhz=  0x27)
16
    asm ("BANKSEL SSPADD");
17
    asm ("MOVWF SSPADD");
18

19
    asm("BANKSEL SSPCON2");// ack in master mode
20
    asm("bcf SSPCON2,5");
21
}

ich ahbe in 2 Funktionen eine Änderung am INput des TRISC vorgenommen 
als erste lege ich Die USART config fest wo ich die RX und TX pin auf 
input stelle(R6 & RC7 = 0xC0)

das gleiche muss icha cuuh bei der initialisierung von I2C machen dabi 
habe ich aber andere pin (RC3 & RC4 = 0x18)

Also musste ich RC6, RC7, RC3 und RC4 setzen und das ist = 0xD8

EIn blöder programmier fehler und sehr unübersichtlich das cih alles in 
verschiedenen .c Datein haben.

Gruß

Tim

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.