#include <p30f3011.h>
#include "hmi_driver.h"
void UARTIntial()
{
U2BRG = BRGVAL; //Set Baudrate
IPC6bits.U2TXIP2 = 1; //Set Uart TX Interrupt Priority
IPC6bits.U2TXIP1 = 0;
IPC6bits.U2TXIP0 = 0;
IPC6bits.U2RXIP2 = 1; //Set Uart RX Interrupt Priority
IPC6bits.U2RXIP1 = 0;
IPC6bits.U2RXIP0 = 0;
U2STA = 0;
U2MODE = 0x8000; //Enable Uart for 8-bit data
//no parity, 1 STOP bit
IFS1bits.U2RXIF=0;
IFS1bits.U2TXIF=0;
U2STAbits.UTXEN = 1; //Enable Transmit
IEC1bits.U2TXIE = 1; //Enable Transmit Interrupt
IEC1bits.U2RXIE = 1; //Enable Receive Interrupt
}
void __attribute__((__interrupt__)) _U2RXInterrupt()
{
IFS1bits.U2RXIF=0;
receive[reccount]=U2RXREG;
reccount++;
if(DataRigntBit==0&&receive[0]==HEAD) //帧头识别
{
DataRigntBit = 1;
}
if(reccount>30) //处理数据溢出
{
reccount = 0;
DataRigntBit = 0;
}
if(DataRigntBit==1)
{
if(reccount>=5) //接收第六个数后开始识别帧尾
{
if(receive[reccount-4] == TAIL1 && receive[reccount-3]==TAIL2 && //帧尾识别
receive[reccount-2]==TAIL3 && receive[reccount-1]==TAIL4)
{
// U2TXREG = receive[reccount-5];
DataCount = reccount-13; //文本位数
FrameCount = reccount; //帧位数
// U2TXREG = FrameCount;
reccount = 0; //计数清零
DataRigntBit = 0; //接收完成的帧
Fbit_Tab2.DataSusBit = 1; //成功接收一个完成的帧
}
}
}
}
void __attribute__((__interrupt__)) _U2TXInterrupt()
{
while(U2STAbits.TRMT==0); //当为0时,表明移位寄存器没空
IFS1bits.U2TXIF=0;
}
uart.zip_dSpic30f UART_dspic30f_dspic30f uart_dspic30f串口
版权申诉
101 浏览量
2022-09-20
21:27:21
上传
评论
收藏 896B ZIP 举报
御道御小黑
- 粉丝: 58
- 资源: 1万+