请教:pic24hj的晶振配置与串口通信中的问题;
本人用以下程序 进行pc和24hj256gp210的芯片进行通信, 24h要求对晶振进行设置. 发送与接受的数据个数一致,但是不正确. 本人觉的可能是波特率的问题,但是不清楚具体问题在哪里. 不知道晶振设置的问题还是串口的问题. 24第一次用 ,流程不是很 清楚。 有哪为兄台能指教几招。非常感激。
过程如下: 晶振:7.3728m,想要得到9600的波特率. 进行ppl,分频,倍频, N1=2,N2=2,M=40;
得到器件工作频率FCY=(7.3728*M)/(N1*N2)/2=5*7.3728m.
BRGX=FCY/(16*9600)-1=239.
程序如下: #include "p24hxxxx.h"
#define UART_RX_INT_EN 0xFFFF /*Receive interrupt enabled*/ #define UART_RX_INT_PR6 0xFFFE /*Priority RX interrupt 6*/ #define UART_TX_INT_DIS 0xFF7F /*transmit interrupt disabled*/ #define UART_TX_INT_PR2 0xFFAF /*Priority TX interrupt 2*/
void ConfigIntUART1(unsigned int config) { IFS0bits.U1RXIF = 0;/* clear IF flags */ IFS0bits.U1TXIF = 0;
IPC2bits.U1RXIP = 0x0007 & config;/* set priority */
IEC0bits.U1RXIE = (0x0008 & config) >> 3;/* enable/disable interrupt */ IEC0bits.U1TXIE = (0x0080 & config) >> 7; }
void WriteUART1(unsigned int data) { PORTGbits.RG3=1; { while(U1STAbits.UTXBF); /* wait if the buffer is full */ U1TXREG = data; /* transfer data byte to TX reg */ } }
void main(void) { OSCCON=0x30AB; CLKDIV=0x0300; PLLFBD=0x0026;
InitUrat(); while(1) { WriteUART1(0xFA); asm("nop"); WriteUART1(0x03); asm("nop"); };
}
void CloseUART1(void) { U1MODEbits.UARTEN = 0; IEC0bits.U1RXIE = 0; IEC0bits.U1TXIE = 0; IFS0bits.U1RXIF = 0; IFS0bits.U1TXIF = 0; }
void InitUrat(void) {
CloseUART1();/* Turn off UART1module */ ConfigIntUART1(UART_RX_INT_EN & UART_RX_INT_PR6 & UART_TX_INT_DIS & UART_TX_INT_PR2);/* Configure uart1 receive and transmit interrupt */ U1BRG=239; U1MODE=0x8080; U1STA=0xE75F; } |