PIC18 USART Probleme

Gast #1477966
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:
1
//************************************************************
2
//Testing USART
3
//04.11.09
4
//************************************************************
5

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

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

20

21

22
#include <p18f45k20.h>
23
#include "delays.h"
24

25
void InterruptServiceHigh(void);
26
#pragma code InterruptVectorHigh = 0x08
27
void InterruptVectorHigh (void)
28
{
29
  _asm
30
    goto InterruptServiceHigh //jump to interrupt routine
31
  _endasm
32
}
33

34

35
int println(char buf[]) {
36
  int i;
37
  for (i = 0; i<20; i++) {
38
    while(!TXSTAbits.TRMT) {}
39
    while(!PIR1bits.TXIF){}  
40
      TXREG = buf[i];  
41
}
42
}
43

44
void main(void) {
45

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

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

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

56
ANSEL = 0b00000000;
57
ANSELH = 0b00000000;
58

59
TXSTAbits.SYNC = 0;
60
TXSTAbits.BRGH = 1;
61
TXSTAbits.TX9 = 0;
62
TXSTAbits.TX9D = 0;
63
TXSTAbits.TXEN = 1;
64

65
RCSTAbits.SPEN = 1;
66
RCSTAbits.RX9 = 0;
67
RCSTAbits.CREN = 1;
68
RCSTAbits.ADDEN = 0;
69

70
PIE1bits.RCIE = 1;
71
      
72
INTCONbits.GIEL = 1;
73
INTCONbits.GIEH = 1;
74
INTCONbits.PEIE = 1;
75

76
TRISC=0b10011111; // RX and TX enablen
77
TRISD=0b00000000;
78
LATD = 0x00;
79

80
println (test);
81
Delay1KTCYx(30);
82

83
 while(1) {
84

85
}
86
}
87

88
#pragma interrupt InterruptServiceHigh  
89
void InterruptServiceHigh(void)
90
{
91
  if (PIR1bits.RCIF)
92
  { 
93
    int zahl = 0;
94
  zahl = RCREG;
95
   while(!PIR1bits.TXIF)
96
   {}
97
        Delay1KTCYx(10);
98
       TXREG = zahl; 
99
    LATD = zahl;
100
    PIR1bits.RCIF = 0;
101
  
102
  
103
}
104
}


Vielen Dank für die Hilfe!

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.