Forum: Mikrocontroller und Digitale Elektronik pic cc5x rs232 problem


von Andreas R. (blackpuma)


Lesenswert?

Hallo!

Ihr seid meine letzte Hoffnung. Ich habe hier im Internet ein 
Beispielprogramm gefunden um ein Zeichen vom PC zu empfangen und zum PC 
zu senden. Das Programm will aber irgendwie nicht.

1
// **************************************************************************************
2
// Programm:    Serial.c
3
// Funktion:    Misst einen Analogen Wert an Port AN2, wertet diesen Aus und sendet
4
//              ihn über das Serielle Port an den PC.
5
//
6
// Controller:  PIC16F690
7
// Konfig:      RA2 Analog Input
8
// **************************************************************************************
9
// Autor:       A. Riegebauer
10
// Datum:       20080709
11
// **************************************************************************************
12
13
#pragma config PWRTE = on, WDTE = off , FOSC = 4
14
15
// **************************************************************************************
16
// init: Initialisiert das USART Port und den A/D - Wandler
17
// **************************************************************************************
18
19
void init()
20
{
21
  // USART
22
  BRGH = 1;        // 9600 Baud @ 4 Mhz
23
  SPBRG = 25;
24
  SYNC = 0;
25
26
  SPEN = 1;        // Serielles Port Einschalten
27
  CREN = 1;        // Continious Receive Einschalten
28
29
  TXEN = 1;        // Transmit einschalten
30
} //init
31
32
// **************************************************************************************
33
// pause: Pause in ms
34
// **************************************************************************************
35
36
void pause(uns16 ms)
37
{
38
  while(ms)        // Schleife wird verlassen wenn ms Null ist
39
  {
40
    OPTION = 2;      // Vorteiler auf 8 einstellen
41
    TMR0 = 131;  
42
    while (TMR0);    // Abwarten einer Millisekunde
43
    ms--;        // ms mit jeser Millisekunde verringern
44
  }
45
}
46
47
// **************************************************************************************
48
// send_char: Unterprogramm zum senden eines Zeichens
49
// **************************************************************************************
50
51
void RS232_send(char z)
52
{
53
  while (!TXIF);      // warten bis Senderegister frei ist
54
  TXREG = z;
55
}
56
57
// **************************************************************************************
58
// main: Hauptprogrammm. 
59
// **************************************************************************************
60
61
void main()
62
{
63
  char kommand;
64
  init();
65
66
  while (1) {        // Endlosschleife
67
68
    if (RCIF)
69
    {
70
      kommand = RCREG;
71
      kommand++;
72
      RS232_send(kommand);  
73
    }
74
//    RS232_send('X');
75
  } //while
76
} //main


Wenn ich das Programm umschreibe und nur sende kommen die Zeichen auch 
am PC an. Aber wenn ich ein Zeichen empfangen möchte, es ändern und 
wieder zurücksenden dann passiert nichts.

Mein Oszi zeigt an das was am RX ankommt aber das anscheinend nicht 
ausgewertet wird.

Standardmäsig ist das Port B am PIC 16F690 auf Eingang geschaltet. Habe 
auch schon TRISB = 0b01110000; versucht aber ohne Erfolg.

Ich weiß nicht woran es noch liegen kann.

Danke euch schon mal
Andreas

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Füge mal in deiner init() noch den Befehl:

ANSELH = 0;

ein.
Der deaktiviert die analog-input-Funktion des RX-Pins. Und natürlich 
weiterhin im TRISB-Register den entsprechenden Pin auf Output schalten.

Sollte dann funktionieren.

Schöne Grüße,
Alex

von Andreas R. (blackpuma)


Lesenswert?

Yupidupidoooooo!!!!

Danke das hat geholfen!

LG
Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.