/* **************************************************************** ** 功能描述: 串行通信程序,立即返回接收到的数据 *************************************************************** */ #include "p30f6014.h" //ds30f6014头文件 unsigned int recdata; // 接收数据寄存器 /* **************************************************************** ** 函 数 名: Uart_Initial() ** 功能描述: 232串行通信初始化子程序,设置低优先级中断接收,使能232收和发 *************************************************************** */ void Uart_Initial() { IFS0bits.U1TXIF=0; ///中断标志位置复位发送 IFS0bits.U1RXIF=0; ///复位接收中断标志 IPC2bits.U1RXIP=1; //收中断优先级:1级 IPC2bits.U1TXIP=1; U1MODE=0x8000; //UART使能,8位数据,无奇偶验证 U1STA=0x0000; //当一个字符被传输到发送移位寄存器(发送缓冲器中至少有一个 ///字符)产生中断,当接收到字符时,中断标志的位置 U1BRG=0X34; //U1BRG=Fcy/(16*波特率)-1,波特率9600 } /* **************************************************************** ** 函 数 名: __attribute__((__interrupt__)) _U1RXInterrupt() ** 功能描述: 中断子程序:232接收中断子程序 *************************************************************** */ void __attribute__((__interrupt__)) _U1TXInterrupt() { while(U1STAbits.TRMT==0); //当0时,表示移位寄存器没有空 IFS0bits.U1TXIF=0; } /* **************************************************************** ** 函 数 名: __attribute__((__interrupt__)) _U1TXInterrupt() ** 功能描述: 中断子程序:232发送中断子程序 *************************************************************** */ void __attribute__((__interrupt__)) _U1RXInterrupt() { while(U1STAbits.URXDA==1) { recdata=U1RXREG; // 接收并存储数据 U1TXREG=recdata; // 返回接收到的数据 } IFS0bits.U1RXIF=0; // 接收中断标志 } main() { Uart_Initial(); // 串行通信初始化子程序 IEC0bits.U1RXIE=1; //UART1收使能 IEC0bits.U1TXIE=1;U1STAbits.UTXEN=1; while(1){ ; // 等待中断,也可以编写其他应用程序 } }