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