我在发送程序中,写了条指令发送给电脑,数据一致,但我在用电脑的串口工具发送数据时,在接收中断程序中数据不一致?不知道为什么,求大神指教。
@far @interrupt void UART1_Recv_IRQHandler (void)//接收中断服务函数
{
u8 static Checksum,Lencnt=0;
if(UartState == UartStart)
{
if(UART1_DR == RxHeader)
{
UartState = UartWorking;
Checksum = UART1_DR;
UART_Header = RxHeader;
}
else if(UART1_DR == RxHeader1)
{
UartState = UartWorking;
Checksum = UART1_DR;
UART_Header = RxHeader1;
}
else
{
UartState = UartStart;
Lencnt = 0;
Checksum = 0;
}
}
else if(UartState == UartWorking)
{
if(++Lencnt<14)
{
Checksum += UART1_DR;
rxControllerInfobuf[Lencnt] = UART1_DR;
if(Lencnt == 13)
UartState = UartCheck;
else
UartState = UartWorking;
}
}
else if(UartState == UartCheck)
{
if(Checksum == UART1_DR)
{
rxControllerInfobuf[14] = UART1_DR;
UartState = UartOver;
}
else
{
UartState = UartReset;
}
}
else if(UartState == UartOver)
{
if(UART1_DR == Enterkey)
{
UARTREADREADY = 1;
UartState = UartReset;
}
else
{
UartState = UartReset;
}
}
else if(UartState == UartReset)
{
Checksum = 0;
Lencnt = 0;
UARTREADREADY = 0;
UartState = UartStart;
}
else
{
Checksum = 0;
Lencnt = 0;
UARTREADREADY = 0;
UartState = UartStart;
}
}
此帖出自
小平头技术问答
建议是
//系统的中断服务函数
- void UART1_Recv_IRQHandler (void)
- {
- //Flag 置位
- uart_IRQ_handle();//中断处理函数
- //执行完成清标志位或者怎样
- }
- //在系统的中断服务函数外,单独写uart_IRQ_handle()的函数体
- void uart_IRQ_handle(void)
- {
- //函数体
- }
复制代码这样的写法,不显得混乱,而且我个人觉得程序的可读性更强一些。
你的片子没有用过,不好意思,其他地方没有仔细看。
一周热门 更多>