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