www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18 USART Probleme


Autor: txg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt versuche ich seit längerer Zeit das ans laufen zu bekommen und es 
will einfach nicht...Hilfe wäre klasse!

Konkret handelt es sich um einen PIC18F45K20, der auf dem dem PICKit3 
mitgelieferten Eval-board sitzt und über das PICkit versorgt wird. am 
controller hängt natürlich ein MAX232.

Der Angehängte Code gibt zunächst einen kurzen String vom PIC zum 
Rechner durch, und soll dann vom Rechner empfangene Bytes wieder 
zurückschicken.

ich habe folgendes Problem: die Ausgabe von Zeichen vom PIC zum Rechner 
funktioniert, d.h. Baudrate und MAX232-Schaltung sind einwandfrei. 
Letzteres kann ich auch daran sehen dass der Rechner gesendete Zeichen 
korrekt zurückbekommt wenn ich RX und TX am MAX232 verbinde.

Was aber nicht funktioniert ist das Senden von Zeichen vom Rechner zum 
PIC.

Da das PICkit ja debug-fähig ist, kann ich sehen dass bereits in das 
Empfangsregister RCREG ein falscher Wert geschrieben wird (BSP: schicke 
ich eine Dezimale 10 (kein ascii) hin, kommt eine 61 zurück), außerdem 
ist ersichtlich dass das RCIF-Flag (zeigt an dass Daten im RCREG sind) 
gesetzt ist, selbst nach einem Prozessorreset und mit abgeklemmter 
RX-Leitung. Beides ist mir völlig unverständlich.

So, jetzt aber genug geschwafelt, hier ist der Quellcode:

//************************************************************
//Testing USART
//04.11.09
//************************************************************

/** C O N F I G U R A T I O N   B I T S ******************************/

#pragma config FOSC = INTIO67, FCMEN = OFF, IESO = OFF                       // CONFIG1H
#pragma config PWRT = OFF, BOREN = SBORDIS, BORV = 30                        // CONFIG2L
#pragma config WDTEN = OFF, WDTPS = 32768                                    // CONFIG2H
#pragma config MCLRE = OFF, LPT1OSC = OFF, PBADEN = ON, CCP2MX = PORTC       // CONFIG3H
#pragma config STVREN = ON, LVP = OFF, XINST = OFF                    // CONFIG4L
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF                   // CONFIG5L
#pragma config CPB = OFF, CPD = OFF                                         // CONFIG5H
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF                // CONFIG6L
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF                            // CONFIG6H
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF           // CONFIG7L
#pragma config EBTRB = OFF                                                  // CONFIG7H



#include <p18f45k20.h>
#include "delays.h"

void InterruptServiceHigh(void);
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
  _asm
    goto InterruptServiceHigh //jump to interrupt routine
  _endasm
}


int println(char buf[]) {
  int i;
  for (i = 0; i<20; i++) {
    while(!TXSTAbits.TRMT) {}
    while(!PIR1bits.TXIF){}  
      TXREG = buf[i];  
}
}

void main(void) {

char test[16]= "Ich bin ein PIC!\n";

OSCCON= 0b01010011; //4MHz
OSCTUNEbits.PLLEN = 0;  // x4 PLL disabled

SPBRG = 0b00011001; // für 9600er Baudrate
SPBRGH = 0x00;  
TRISC=0b11000000; // RX and TX enable  
BAUDCON = 0b11100000;

ANSEL = 0b00000000;
ANSELH = 0b00000000;

TXSTAbits.SYNC = 0;
TXSTAbits.BRGH = 1;
TXSTAbits.TX9 = 0;
TXSTAbits.TX9D = 0;
TXSTAbits.TXEN = 1;

RCSTAbits.SPEN = 1;
RCSTAbits.RX9 = 0;
RCSTAbits.CREN = 1;
RCSTAbits.ADDEN = 0;

PIE1bits.RCIE = 1;
      
INTCONbits.GIEL = 1;
INTCONbits.GIEH = 1;
INTCONbits.PEIE = 1;

TRISC=0b10011111; // RX and TX enablen
TRISD=0b00000000;
LATD = 0x00;

println (test);
Delay1KTCYx(30);

 while(1) {

}
}

#pragma interrupt InterruptServiceHigh  
void InterruptServiceHigh(void)
{
  if (PIR1bits.RCIF)
  { 
    int zahl = 0;
  zahl = RCREG;
   while(!PIR1bits.TXIF)
   {}
        Delay1KTCYx(10);
       TXREG = zahl; 
    LATD = zahl;
    PIR1bits.RCIF = 0;
  
  
}
}


Vielen Dank für die Hilfe!

Autor: txg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es funktioniert jetzt...
BAUDCON = 0b11100000;

Diese Zeile hat das Problem erzeugt, ich weiß nicht was mich da geritten 
hat...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.