mark一下。回去看。谢谢楼上的高人。 |
etxuxu 发表于 2018-4-10 17:15 中断里面只完成接收,判断与执行放在中断外面,这样更合理 int i=0; void serial() interrupt 4 { uchar temp; if(RI) { RI = 0; //清除串行接受标志位 temp = SBUF; if((temp==0xff) || (i>3)) // 收到 0xff 重新开始 i=0; if((temp!=0xfc) && (i==1)) // 第2个不是 0xfc,放弃 i=0; CN[i++]=temp; } } ....... if(i==3) { if(CN[2] == 0x00) { switch(CN[3]) { case(0x30):led1=0;delay(200);led1=1;break; case(0x20):led1=0;delay(200);led1=1;break; default: break; } } else if(CN[2] == 0x01) { switch(CN[3]) { case(0x30):led2=0;delay(200);led2=1;break; case(0x20):led2=0;delay(200);led2=1;break; default: break; } } } |
谢谢分享。 |
我草,我也是同样的问题呀。高人,有下文了吗? |
QIANLILI 发表于 2018-4-8 22:05 这样写是对的吗?求前辈帮我指点一下,最近串口这块一直在学习:
|
QIANLILI 发表于 2018-4-8 22:05 那应该如何把收到的字符存入CN[ ]呢? 要怎么去判断帧尾?比如FF FC 00 01,得怎么判断才能精确的把FF存入CN[0],FC存入CN[1],如此类推呢? |