Forum: Mikrocontroller und Digitale Elektronik Linux MPLABX XC8 usart.h nicht gefunden/vorhanden


von Joachim (Gast)


Lesenswert?

Hallo.

Ich bin gerade dabei von PIC16 auf PIC18 umzusteigen. Habe mich zunächst 
für den PIC18F45K22 entschieden. Programmiert wird unter Linux mit 
MPLABX/XC8. Im Groben und Ganzen klappt das auch.

Wollte etwas über die serielle Schnittstelle ausgeben und habe das 
Beispiel von der Microchip Seite geladen. Leider kann der Compiler die 
usart.h nicht finden. Das manuelle Durchsuchen von /opt/microchip (und 
aller Unterordner) brachte keine Ergebnisse. Geht das nur mir so oder 
fehlt die Bibliothek tatsächlich?

von Joachim (Gast)


Lesenswert?

Habe XC8 noch mal neu installiert und siehe da, die Datei ist da, wenn 
auch versteckta.

Habe das Beispiel an folgende Gegebenheiten angepasst:

Quartz: extern 4 MHz
USART: RC6/RC7 (USART1)

Das Testbrett habe ich zuvor mit erfolgreich mit einem PIC16F874 
betrieben, also nur den pinkompatiblen Prozessor getauscht.

Funktioniert leider nur im Simulator. Hat jemand eine Idee woran das 
liegen könnte?

Hier mein zusammengefrickelter Quelltext:

1
// CONFIG1H
2
#pragma config FOSC = XT   // Oscillator Selection bits (Internal oscillator block)
3
#pragma config PLLCFG = OFF     // 4X PLL Enable (Oscillator used directly)
4
#pragma config PRICLKEN = ON    // Primary clock enable bit (Primary clock is always enabled)
5
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
6
#pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)
7
8
// CONFIG2L
9
#pragma config PWRTEN = OFF     // Power-up Timer Enable bit (Power up timer disabled)
10
#pragma config BOREN = SBORDIS  // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
11
#pragma config BORV = 190       // Brown Out Reset Voltage bits (VBOR set to 1.90 V nominal)
12
13
// CONFIG2H
14
#pragma config WDTEN = OFF      // Watchdog Timer Enable bits (Watch dog timer is always disabled. SWDTEN has no effect.)
15
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)
16
17
// CONFIG3H
18
#pragma config CCP2MX = PORTC1  // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
19
#pragma config PBADEN = ON      // PORTB A/D Enable bit (PORTB<5:0> pins are configured as analog input channels on Reset)
20
#pragma config CCP3MX = PORTB5  // P3A/CCP3 Mux bit (P3A/CCP3 input/output is multiplexed with RB5)
21
#pragma config HFOFST = OFF     // HFINTOSC Fast Start-up (HFINTOSC output and ready status are delayed by the oscillator stable status)
22
#pragma config T3CMX = PORTC0   // Timer3 Clock input mux bit (T3CKI is on RC0)
23
#pragma config P2BMX = PORTD2   // ECCP2 B output mux bit (P2B is on RD2)
24
#pragma config MCLRE = EXTMCLR  // MCLR Pin Enable bit (MCLR pin enabled, RE3 input pin disabled)
25
26
// CONFIG4L
27
#pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
28
#pragma config LVP = OFF         // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled if MCLRE is also 1)
29
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))
30
31
// CONFIG5L
32
#pragma config CP0 = OFF        // Code Protection Block 0 (Block 0 (000800-001FFFh) not code-protected)
33
#pragma config CP1 = OFF        // Code Protection Block 1 (Block 1 (002000-003FFFh) not code-protected)
34
#pragma config CP2 = OFF        // Code Protection Block 2 (Block 2 (004000-005FFFh) not code-protected)
35
#pragma config CP3 = OFF        // Code Protection Block 3 (Block 3 (006000-007FFFh) not code-protected)
36
37
// CONFIG5H
38
#pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block (000000-0007FFh) not code-protected)
39
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)
40
41
// CONFIG6L
42
#pragma config WRT0 = OFF       // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
43
#pragma config WRT1 = OFF       // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)
44
#pragma config WRT2 = OFF       // Write Protection Block 2 (Block 2 (004000-005FFFh) not write-protected)
45
#pragma config WRT3 = OFF       // Write Protection Block 3 (Block 3 (006000-007FFFh) not write-protected)
46
47
// CONFIG6H
48
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)
49
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
50
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
51
52
// CONFIG7L
53
#pragma config EBTR0 = OFF      // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
54
#pragma config EBTR1 = OFF      // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)
55
#pragma config EBTR2 = OFF      // Table Read Protection Block 2 (Block 2 (004000-005FFFh) not protected from table reads executed in other blocks)
56
#pragma config EBTR3 = OFF      // Table Read Protection Block 3 (Block 3 (006000-007FFFh) not protected from table reads executed in other blocks)
57
58
// CONFIG7H
59
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)
60
61
62
63
64
65
66
#include <p18f45k22.h>
67
#define USE_OR_MASKS
68
#include <plib/usart.h>
69
70
unsigned char Rxdata[25];
71
unsigned char Txdata[] = "MICROCHIP_USART";
72
73
74
75
76
void main(void)
77
{
78
    unsigned char config=0,spbrg=0,baudconfig=0,i=0;
79
    Close1USART(); //turn off usart if was previously on
80
//-----configure USART -----
81
    config = USART_TX_INT_OFF | USART_RX_INT_OFF | USART_ASYNCH_MODE | USART_EIGHT_BIT | USART_CONT_RX | USART_BRGH_HIGH;
82
//-----SPBRG needs to be changed depending upon oscillator frequency-------
83
    spbrg = 25; //At 4Mhz of oscillator frequency & baud rate of 9600.
84
    Open1USART(config, spbrg); //API configures USART for desired parameters
85
    baudconfig = BAUD_8_BIT_RATE | BAUD_AUTO_OFF;
86
    baud1USART (baudconfig);
87
//------USART Transmission ----
88
    while(Busy1USART()); //Check if Usart is busy or not
89
90
    puts1USART((char *)Txdata); //transmit the string
91
    //---USART Reception ---
92
    gets1USART((char *)Rxdata,24); //Recieve data upto 24 bytes
93
94
    while(Busy1USART()); //Check if Usart is busy or not
95
    puts1USART((char *)Rxdata); //echo back the data recieved back to host
96
97
    Close1USART();
98
99
    while(1); //end of program
100
}

von Pjotr (Gast)


Lesenswert?

Da wirst Du hier wohl Niemanden finden, der etwas Brauchbares beitragen 
kann. Dieses Forum ist leider sehr AVR-lastig.

von PIC Gott (Gast)


Lesenswert?

Ich frage mich, warum Ihr immer stundenlang versucht, die Beispiele aus 
dem Netz zum Laufen zu bringen? Alles Mist. Handbuch und los geht es:
1
#include <p18f45k22.h>
2
3
// CONFIG1H
4
#pragma config FOSC = XT
5
#pragma config PLLCFG = OFF
6
#pragma config PRICLKEN = OFF
7
#pragma config FCMEN = OFF
8
#pragma config IESO = OFF
9
10
// CONFIG2L
11
#pragma config PWRTEN = OFF
12
#pragma config BOREN = SBORDIS
13
#pragma config BORV = 190 
14
15
// CONFIG2H
16
#pragma config WDTEN = OFF
17
#pragma config WDTPS = 32768
18
19
// CONFIG3H
20
#pragma config CCP2MX = PORTC1
21
#pragma config PBADEN = ON
22
#pragma config CCP3MX = PORTB5
23
#pragma config HFOFST = OFF
24
#pragma config T3CMX = PORTC0
25
#pragma config P2BMX = PORTD2
26
#pragma config MCLRE = EXTMCLR
27
28
// CONFIG4L
29
#pragma config STVREN = ON  
30
#pragma config LVP = OFF    
31
#pragma config XINST = OFF  
32
33
// CONFIG5L
34
#pragma config CP0 = OFF
35
#pragma config CP1 = OFF
36
#pragma config CP2 = OFF
37
#pragma config CP3 = OFF
38
39
// CONFIG5H
40
#pragma config CPB = OFF
41
#pragma config CPD = OFF
42
43
// CONFIG6L
44
#pragma config WRT0 = OFF
45
#pragma config WRT1 = OFF
46
#pragma config WRT2 = OFF
47
#pragma config WRT3 = OFF
48
49
// CONFIG6H
50
#pragma config WRTC = OFF
51
#pragma config WRTB = OFF
52
#pragma config WRTD = OFF
53
54
// CONFIG7L
55
#pragma config EBTR0 = OFF
56
#pragma config EBTR1 = OFF
57
#pragma config EBTR2 = OFF
58
#pragma config EBTR3 = OFF
59
60
// CONFIG7H
61
#pragma config EBTRB = OFF
62
63
64
void USART_Setup();
65
void USART_Rein();
66
void USART_Raus();
67
68
69
unsigned char Daten;
70
71
72
void main(void)
73
{
74
    USART_Setup();
75
    while(1)
76
    {
77
    USART_Rein();
78
    USART_Raus();
79
    }
80
}
81
82
83
void USART_Setup(void)
84
    {
85
    // PORT's initialisieren
86
    TRISCbits.TRISC6=1;
87
    TRISCbits.TRISC7=1;
88
    ANSELCbits.ANSC6=0;
89
    ANSELCbits.ANSC7=0;
90
91
    // USART initialisieren
92
    TXSTA1=0b00100100;
93
    RCSTA1=0b10010000;
94
    BAUDCON1bits.BRG16=0;
95
96
    // USART Baudrate einstellen
97
    SPBRGH1=0;
98
    SPBRG1=25;
99
    }
100
101
void USART_Rein(void)
102
    {
103
    while(PIR1bits.RC1IF==0)
104
    {
105
    }
106
    Daten=RCREG1;
107
    }
108
109
void USART_Raus(void)
110
    {
111
    while(PIR1bits.TX1IF==0)
112
    {
113
    }
114
    TXREG1=Daten;
115
    }

Ist zwar nur ein Echo-Progrämmchen, sollte Dir aber erstmal 
weiterhelfen. Hat keine 10 Minuten gedauert.

von Joachim (Gast)


Lesenswert?

Danke. Läuft.

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.