Salut!
Voila je suis en train de configurer une liaison RS232 entre mon PC et mon PIC et j'ai un souci pour initialiser mon oscillateur. Dans la doc je vois qu'il faut initialiser les bits "POSCMD1:POSCMD0" et les bits "FNOSC2:FNOSC0" du registre "configuration world 2".
Mon souci est que le registre configuration world 2 se modifie avec une commande Config2 que je ne comprend pas trop.
Du coup pour le moment j'essaie d'initialiser ma liaison sans configurer l'ocsillateur interne (car il normalement il est définit par défaut !!) mais impossible de calibrer un baud rate correct.
Voici mon code :
Si quelqu'un peut m'aider merci.Code:#include <p24FJ256GB110.h> void init_uart(); void PutByte(unsigned char byte); unsigned char GetByte(void); main() { unsigned char reception; unsigned char envoie; //************************************************* // Unlock Registers "__builtin_write_OSCCONL(OSCCON & 0xbf);" //************************************************* asm volatile ( "MOV #OSCCON, w1 \n" "MOV #0x46, w2 \n" "MOV #0x57, w3 \n" "MOV.b w2, [w1] \n" "MOV.b w3, [w1] \n" "BCLR OSCCON,#6"); //************************************************* // Configure Input Functions ********************** //************************************************* RPINR18bits.U1RXR = 7; // Assign UART1RX To Pin RP7 //************************************************* // Configure Output Functions ********************* //************************************************* RPOR3bits.RP6R = 3; // Assign UART1TX To Pin RP6 //************************************************* // Lock Registers "__builtin_write_OSCCONL(OSCCON | 0x40);" //************************************************* asm volatile ( "MOV #OSCCON, w1 \n" "MOV #0x46, w2 \n" "MOV #0x57, w3 \n" "MOV.b w2, [w1] \n" "MOV.b w3, [w1] \n" "BSET OSCCON, #6" ); TRISBbits.TRISB6 = 0; //RB6 configuré en sortie correspond à Tx TRISBbits.TRISB7 = 1; //RB7 configuré en entree correspond à Rx init_uart(); while(1) { for(envoie=0;envoie<=255;envoie++) // envoie de chaque caractère de 0 à 255 { PutByte(envoie); } } } void init_uart() { U1BRG = 207; // configuration pour une horloge de 8Mhz et une transmission de 9600 bauds 13 U1MODE = 0x8008; // UARTEN = 1 -- BRGH = 1 U1STA = 0x0400; // UTXEN = 1 IFS0bits.U1RXIF = 0; //effaçage du flag d'interruption RX de l'uart } void PutByte(unsigned char byte) { while(!IFS0bits.U1TXIF); /* set when register is empty */ U1TXREG = byte; return; } unsigned char GetByte(void) { unsigned char recep; while(!IFS0bits.U1RXIF); /* set when register is not empty */ recep = U1RXREG; return recep; }
-----