Bonjour,
Je suis un peu nouveau dans la programmation des PIC. Je souhaite réaliser une liaison Uart avec le Pic 18F45K20 compilateur C18.
J'ai lu la doc technique et je l'ai suivit pour l'initialisation des registre pour l'uart : http://ww1.microchip.com/downloads/e...doc/41303g.pdf
Et la doc du compilateur C18 : http://ww1.microchip.com/downloads/e...lib_51297d.pdf
Et je suis arrivé ce programme de test :
Avec un Ft230X je lit par usb et le logiciel Docklight la valeur que me sort le TX. Mais je n'ai strictement rien. Avec la liaison USART, j'arrive a recevoir des choses mais pas les bonnes! (Pour dire que le FT230X fonctionne). J'ai changé les pin's de RX et TX dans les fichiers de C18Code:#pragma config FOSC = HS #pragma config WDTEN = OFF, LVP = OFF, MCLRE = OFF /** I N C L U D E S **************************************************/ #include <p18f45k20.h> #include <delays.h> #include <sw_uart.h> /** D E C L A R A T I O N S ******************************************/ #define BAUD 9600 #define CLK 20000000 char data; //Delay Functions //=============== void DelayTXBitUART(void) { char delay_time = (((((2*CLK)/(4*BAUD))+1)/2)-12); Delay10TCYx (delay_time); return; } void DelayRXHalfBitUART(void) { char delay_time = (((((2*CLK)/(8*BAUD))+1)/2)-9); Delay10TCYx (delay_time); return; } void DelayRXBitUART(void) { char delay_time = (((((2*CLK)/(4*BAUD))+1)/2)-14); Delay10TCYx (delay_time); return; } char x = 'H'; int y; void main (void) { // Initialisation des PORTS TRISA = 1; TRISD = 0b11110000; //Configuration Debugging TRISBbits.TRISB6 = 0; TRISBbits.TRISB7 = 0; LATBbits.LATB6 = 0; LATBbits.LATB7 = 0; ANSELH = 0x00; //initialisation du port analogique B en port numérique ANSEL = 0x00; //initialisation du port analogique A en port numérique //Configuration UART SPBRG=12; //Calcul Vitesse de Transmission TXSTAbits.BRGH = 1; //Rate Select High Speed TXSTAbits.SYNC = 0; //EUSART Mode Select Bit (Asynchronous Mode 0) TXSTAbits.TXEN = 1; //Transmit Enable Bit TXSTAbits.TX9 = 0; //9-bit Transmit Enable bit RCSTAbits.SPEN = 1; //Serial Port Enable bit RCSTAbits.CREN = 1; //Continuous Receive Enable bit RCSTAbits.SREN = 0; // Single Receveive Enable bit RCSTAbits.RX9 = 0; //9-bit Receive Enable bit PIE1bits.TXIE = 0; //EUSSART Transmit interrupt Enable bit PIE1bits.RCIE = 0; //EUSSART Receive interrupt Enable bit BAUDCONbits.ABDOVF = 0; //Auto-Baud Detect Overflow bit BAUDCONbits.BRG16 = 0; //16-bit Baud rate Generator bit TRISCbits.TRISC6 = 1; TRISCbits.TRISC7 = 1; OpenUART(); //initialisation de l'UART while( 1 ) { WriteUART( x ); } }
Quelqu'un a une idée?
-----