Habe das Programm hier
1 | while(U1STAbits.UTXBF==1)
|
2 | ;
|
3 | U1TXREG='a';
|
4 |
|
5 | while(U1STAbits.UTXBF==1)
|
6 | ;
|
7 | U1TXREG='b';
|
mal am Oszilloskop nachgeschaut. Kommt alles richtig an.
LCD benötigt laut Datenblatt: 9600 Baudrate, 1 Stop bit, 1 Startbit, no
parity, 8 bit Datenbreite
Uart Konfig:
1 | // 9600baud; 8 bits; 1 stop; no parity. //
|
2 | U1MODEbits.UARTEN=0; // disable Uart 1
|
3 | U1MODEbits.USIDL=0; // stop operation when Idle mode
|
4 | U1MODEbits.UEN=0b00; // only UxTX& UxRX used. UxCTS, UxRTS are I/O.
|
5 | U1MODEbits.WAKE=0; // Wake disabled
|
6 | U1MODEbits.ABAUD=0; // BaudRate Measurement disabled
|
7 | U1MODEbits.URXINV=0; // Idle State = 1
|
8 | U1MODEbits.BRGH=0; // 16 clocks per bit period ; Standard Speed mode
|
9 | U1MODEbits.PDSEL=0b00; // 8 bit Data, no Parity
|
10 | U1MODEbits.STSEL=0; // 1 Stop Bit
|
11 | U1BRG=259;
|
12 | U1MODEbits.UARTEN=1; // enable Uart 1
|
13 | U1STAbits.UTXEN=1; // Enable Transmit
|
14 |
|
15 | __delay_us(105); // 1/9600
|
Der Pic ist extern getaktet und mittels PLL auf 80Mhz hochgeregelt.
Zyklustakt ist 40Mhz.
Für die Baudrate habe ich die Formel aus dem Uart Datenblatt entnommen:
(40Mhz/9600/16) -1 = 259,41=259