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?
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 | }
|
Da wirst Du hier wohl Niemanden finden, der etwas Brauchbares beitragen kann. Dieses Forum ist leider sehr AVR-lastig.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.