初级会员

- 积分
- 196
- 金钱
- 196
- 注册时间
- 2014-12-13
- 在线时间
- 6 小时
|
5金钱
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD //????OS_CRITICAL_METHOD?¨????,???÷????ucosII??.
OSIntEnter();
#endif
if(USART1->SR&(1<<5))//??????????
{
res=USART1->DR;
if((USART_RX_STA&0x8000)==0)//???????ê??
{
if(USART_RX_STA&0x4000)//????????0x0d
{
if(res!=0x0a)USART_RX_STA=0;//?????í?ó,????????
else USART_RX_STA|=0x8000; //?????ê????
}else //????????0X0D
{
if(res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//?????????í?ó,????????????
}
}
}
}
#ifdef OS_CRITICAL_METHOD //????OS_CRITICAL_METHOD?¨????,???÷????ucosII??.
OSIntExit();
#endif
}
为什么要判断res=0x0d;整体上不是很理解 好心人讲下吧
|
最佳答案
查看完整内容[请看2#楼]
这是要把两个字节做整体判断;
假如串口可以一次发16位,只要判断一次“0x0d0a”或者“0x0a0d”就够了。但情况不是这样,所以要做标志、分次判断。
至于两个字节,那是人为规定的协议:必须整体出现,才表示某件事情。
|