PIC C18 erkennt keine Variablen

OP #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
OP #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.
OP #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

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.