PIC C18 erkennt keine Variablen

#952974
Lesenswert?

Hallo Leute,

ich habe ein Problem im folgenden Code:
1
#include <p18f2410.h>
2

3
#pragma config OSC  = INTIO67  // Interner Oszillator, Port function on RA6 u. RA7
4
#pragma config WDT  = OFF    // Watchdog Timer Off
5
#pragma config PWRT = ON
6

7
#pragma code
8

9
// **************************************************************************************
10
// init: Initialisierung des PIC
11
// **************************************************************************************
12

13
void init(void)
14
{
15
  // USART
16
  BRGH = 1;        // 9600 Baud @ 4 Mhz
17
  SPBRG = 25;
18
  SYNC = 0;
19

20
  SPEN = 1;        // Serielles Port Einschalten
21
  CREN = 1;        // Continious Receive Einschalten
22

23
  TXEN = 1;        // Transmit einschalten
24

25
  TRISB = 0x00; 
26
} //init
27

28
// **************************************************************************************
29
// rs232_send: Sendet ein Zeichen über die Serielle Schnittstelle
30
// **************************************************************************************
31

32
void rs232_send(char x)
33
{
34
  while (!TXIF);      // warten bis Senderegister frei ist
35
  TXREG = x;
36
} //init
37

38
// **************************************************************************************
39
// main: Hauptprogramm
40
// **************************************************************************************
41

42
void main(void)
43
{
44
  init();
45
}

Das Problem ist jetzt das die ganzen Variablen nicht erkannt werden.

1
main.c:33:Error [1105] symbol 'BRGH' has not been defined
2
main.c:33:Error [1101] lvalue required
3
main.c:35:Error [1105] symbol 'SYNC' has not been defined
4
main.c:35:Error [1101] lvalue required
5
main.c:37:Error [1105] symbol 'SPEN' has not been defined
6
main.c:37:Error [1101] lvalue required
7
main.c:38:Error [1105] symbol 'CREN' has not been defined
8
main.c:38:Error [1101] lvalue required
9
main.c:40:Error [1105] symbol 'TXEN' has not been defined
10
main.c:40:Error [1101] lvalue required
11
main.c:51:Error [1105] symbol 'TXIF' has not been defined

In dem Headerfile stehen keine Definitionen. Aber woher bekomme ich die?

LG
Andreas
#953028
Lesenswert?

@Micha R.
Ja der Pfad stimmt. Wenn ich die Datei umbenenne in dem Verzeichnis 
meldet er einen Fehler das die Datei nicht gefunden werden kann.

a.riegebauer_at_nacs.at


@holger
Mit TXSTAbits.BRGH = 1; funktioniert es. Ist aber nicht annehmbar finde 
ich weil ich ja nicht weiß in welchem Register die Bits liegen.
Gast #953033
Lesenswert?

>Mit TXSTAbits.BRGH = 1; funktioniert es. Ist aber nicht annehmbar finde
>ich weil ich ja nicht weiß in welchem Register die Bits liegen.

Dann bleibt dir wohl nichts anderes über als ins
Datenblatt zu sehen ;)
#953249
Lesenswert?

Andreas Riegebauer wrote:
> In der Datei ist schon was drinnen aber nicht sowas das die "kurzen
> Variablen" funktionieren.

Sowas gibts auch nicht.
Entweder du schreibst die union davor, oder aber du definierst dir das 
was du willst selber.
Eine einfache Suche nach dem gewünschten Bit-Name in der Header-Datei 
bringt dich zu dem Register in dem es steht.
#953361
Lesenswert?

So jetzt hab ich mich mal damit abgefunden das die Sachen unter C18 ganz 
anders ist als bei cc5x.

Jetzt frage ich gleich ob das so funktionieren kann. Ich möchte nur mal 
ein Zeichen an den PC Senden und das in einer Schleife. Hab auch schon 
bei Google gesucht aber ich finde kein brauchbares Beispiel für UART für 
C18.
1
#include <p18f2410.h>
2

3
#pragma config OSC  = INTIO67  // Interner Oszillator, Port function on RA6 u. RA7
4
#pragma config WDT  = OFF    // Watchdog Timer Off
5
#pragma config PWRT = ON
6

7
//#pragma code
8

9
// **************************************************************************************
10
// init: Initialisierung des PIC
11
// **************************************************************************************
12

13
void init(void)
14
{
15
  // USART
16
  TXSTAbits.BRGH=1;    // 9600 Baud @ 4 Mhz
17
  SPBRG = 25;
18
  TXSTAbits.SYNC = 0;
19

20
  RCSTAbits.SPEN = 1;        // Serielles Port Einschalten
21
  RCSTAbits.CREN = 1;        // Continious Receive Einschalten
22

23
  TXSTAbits.TXEN = 1;        // Transmit einschalten
24

25
  TRISC = 0b11111111; 
26
} //init
27

28
// **************************************************************************************
29
// rs232_send: Sendet ein Zeichen über die Serielle Schnittstelle
30
// **************************************************************************************
31

32
void rs232_send(char x)
33
{
34
  while (!PIR1bits.TXIF);      // warten bis Senderegister frei ist
35
  TXREG = x;
36
} //init
37

38
// **************************************************************************************
39
// main: Hauptprogramm
40
// **************************************************************************************
41

42
void main(void)
43
{
44
  init();
45
  while(1) {
46
    rs232_send('X');
47
  }
48
}

LG
Andreas
Gast #953366
Lesenswert?

geht im c18 einfacher wenn du die mitgelieferten libs verwendest:
1
#include <usart.h>
2
void main(void)
3
{
4
  OpenUSART (USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 129);
5
  while(1)
6
  {
7
          putcUSART('X');
8
  }
9
}

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