现在用这个芯片作串口通信时,发送正常,但接收不正常,不知是何原因,代码如下: <br /><br /><br />#include <p24fxxxx.h> <br /><br />_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx3 & BKBUG_ON) <br />_CONFIG2(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRIPLL & IOL1WAY_OFF & FNOSC_PRIPLL) <br /><br /><br />void UART1_put(unsigned char dat) <br />{ <br /> U1TXREG = dat; <br /> while (!U1STAbits.TRMT); <br />} <br /><br /><br /><br />int main(void) <br />{ <br /> unsigned char dat = 0xAA; <br /> <br /> // Unlock Registers <br /> asm volatile ( " MOV #OSCCON, w1
" <br /> " MOV #0x46, w2
" <br /> " MOV #0x57, w3
" <br /> " MOV.b w2, [w1]
" <br /> " MOV.b w3, [w1]
" <br /> " BCLR OSCCON, #6 " ); <br /><br /><br /> RPOR4bits.RP9R = 3; //RP9 设置成 U1TXD 外设编号=3 <br /> RPINR18bits.U1RXR = 8; //RP8 设置成 U1RXD <br /><br /> // Lock Registers <br /> asm volatile ( " MOV #OSCCON, w1
" <br /> " MOV #0x46, w2
" <br /> " MOV #0x57, w3
" <br /> " MOV.b w2, [w1]
" <br /> " MOV.b w3, [w1]
" <br /> " BSET OSCCON, #6 " ); <br /><br /><br /> TRISBbits.TRISB8 = 1; //输入 <br /> TRISBbits.TRISB9 = 0; //输出 <br /><br /><br /> U1BRG = ( 16000000 + 8ul * 9600 ) / 16 / 9600 - 1; <br /> U1MODEbits.UARTEN = 1; <br /> U1STAbits.UTXEN = 1; <br /><br /> //UART1_put(0x55); //发送测试是OK的 <br /> <br /> while(1) <br /> { <br /> if(_U1RXIF) // 如果接收到数据 <br /> { <br /> _U1RXIF = 0; <br /> dat = U1RXREG; <br /> UART1_put(dat); //问题在这里,一直会发送 0 <br /> } <br /> } <br />} <br /><br /> 程序的本意是收1个字符,然后发送回去 <br /> 发送是没有问题的,但无法正确接收 <br /> 怀疑串口的IO配置有问题,但看不出有什么问题,硬件电路绝对OK,可以排除,郁闷了好久了,大家有没有碰到过这样的情况? <br /><br /><br /><br /> 还有2个线索,1是 那两段解锁和加锁的汇编代码,不管有或没有,串口的发送都是正常的,难道不需要解锁? <br /> 2是设置成环回模式时,可以收到自己发出的字符 <br />现在主要是设置IO重定义的那2句是不是有问题,但看数据手册上的代码也是这样操作的 <br /><br /> RPOR4bits.RP9R = 3; //RP9 设置成 U1TXD 外设编号=3 <br /> RPINR18bits.U1RXR = 8; //RP8 设置成 U1RXD |
|