PIC18F Fehler im Code finden (C)

#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:
#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren