void UART_init(void)
{
U2MODEbits.ALTIO=0; //使用引脚U2Tx和U2RX
U2MODEbits.PDSEL=0; //8位数据 无奇偶校验位
U2MODEbits.STSEL=0; //1位停止位
U2BRG=436; //波特率设为1000
U2STAbits.UTXISEL=0; //当一个字符被传送到发送移位寄存器 产生中断
U2STAbits.URXISEL=0; //接收完一个字符产生一次中断
IEC1bits.U2RXIE=1; //接收中断允许
IEC1bits.U2TXIE=1; //发送中断允许
IFS1bits.U2TXIF=0;
IFS1bits.U2RXIF=0; //清中断标志
IPC6bits.U2RXIP=2; //接收中断优先级为2
IPC6bits.U2TXIP=2; //发送中断优先级为2
U2MODEbits.UARTEN=1; //使能UART模块
U2STAbits.UTXEN=1; // 使能UART发送
U2TXREG=0xff; //启动发送 发送0xff
}
void __attribute__((__interrupt__))_U2TXInterrupt(void) //发送中断
{
IFS1bits.U2TXIF=0; // 清中断标志位
while(U2STAbits.TRMT==0); //等待发送完成
U2TXREG =data1[TX_n]; // 写发送寄存器
TX_n++;
}
为什么 程序总是在发送中断中while(U2STAbit.TRMT==0)中一直循环,出不来呢? |