PIC - USART Problem

OP #1647810
Lesenswert?

Hallo,

ich habe Probleme beim Senden vom PIC18F4520 an den PC über die serielle 
Schnittstelle.
Beim Debuggen habe ich festgestellt, dass das Bit TRMT nicht wieder auf 
1 gesetzt wird, das Senderegister also immer voll ist. Folglich sende 
ich wohl nicht...

hier mein code:
1
#include "p18cxxx.h"
2

3
/** Configuration
4
********************************************************/
5
#pragma config OSC   =   HS     // 4MHz
6
#pragma config PWRT  =   OFF
7
#pragma config WDT   =   OFF    // Watchdog Timer
8
#pragma config LVP   =   OFF    // Low Voltage ICSP
9

10

11
void wait(void);      
12

13
int main(void)
14
{
15
/** USART Config 
16
/********************************************************************/
17
  /* RCSTA */
18
  RCSTAbits.SPEN  =   1;      // enables single receive
19
//  RCSTAbits.CREN  =  1;
20

21
  /* TXTSA */
22
  TXSTAbits.TX9   =  0;       // 8 bit
23
  TXSTAbits.TXEN  =  1;       // transmit enable
24
  TXSTAbits.SYNC  =  0;       // async
25
  TXSTAbits.BRGH  =   1;      // high speed
26

27

28
  /* BAUDCON */
29
  BAUDCONbits.BRG16   =   1;    // 16-bit BRG
30

31
  /* SPBRG */
32
  SPBRG  =   8;           // baud rate is 111.111
33
  SPBRGH  =   0;          // not necessary
34

35
  
36
/** PORTS Config
37
/********************************************************************/  
38
//  TRISC = 0xFF;          // RC6-Tx, RC7-Rx     
39
  TRISCbits.TRISC6   =  1;
40
  TRISCbits.TRISC7   =  1;
41
  
42

43
/** MAIN
44
/********************************************************************/
45
  
46
  while(1)
47
  {
48
    TXREG  = 0x55;
49
    while(!TXSTAbits.TRMT );
50
  }
51
}

Im Hyperterminal habe ich 115200 als Baud-Rate; keine FS.
Seht ihr den Fehler?

Grüße, Mirco
Gast #1647873
Lesenswert?

Laut Datenblatt hast du mit diesen Einstellungen eine Abweichung von 
-3,55%. Das wäre mir zu hoch. Versuch doch mal mit 19k2 zu senden 
(SPBRG=51). Eventuell liegt da ja schon der Fehler. Betreibst du denn 
den PIC auch mit 4MHz oder steht das nur im Programm?

Sven
OP #1647958
Lesenswert?

Hab grad mal ein Oszi angeschlossen. Demnach liegen an RA7 saubere 4MHz 
und RC7 überträgt kontinuierlich das eigentlich richtige Signal 
(Startbit, 0x55, 2 Stopbits). Hab die Rate auf 9k6 umgestellt, da hab 
ich laut Datenblatt eine Abweichung von 0.16%

Aber TRMT wird im Debug-Mode immernoch nicht zurückgesetzt und im 
Hyperterminal erhalte ich im Flash-Mode auch nicht das erwartete "U" 
sondern ein komisches Sonderzeichen..

Also wenn ich Debugge hänge ich in der Zeile
1
while(!TXSTAbits.TRMT );

Noch eine Idee?

Grüße, Mirco

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