登录
首页 单片机论坛
回帖 发帖
正文

主题:单片机通讯程序请教

点击:726 回复:6

void serial () interrupt 4 using 3
 {
 if(RI)
 {
  unsigned char ch;
  RI=0;
  ch=SBUF;
  if (ch>127)
  {
  count3=0;
  inbuf1[count3]=ch;
  checksum=ch-128;
  }
  else
  {
  count3++;
  inbuf1[count3]=ch;
  checksum^=ch;
  if ((count3==(INBUF_LEN-1))&&(!checksum))
  {
  read_flag=1;
  }
  }
 }
 }
20-10-17 10:11
if ((count3==(INBUF_LEN-1))&&(!checksum))     这一句(!checksum)理解不了, checksum异或效验和的值,应该不为0,取反的话,就一直为假;那这IF怎么成立呢
20-10-17 10:15
最后读取的是校验和,应该为0.
20-10-17 12:21
看图,标记部分很重要:
附件 image.jpg
最后修改:2020/10/17 15:02:49
20-10-17 15:02

引用 429408792 在 2020/10/17 10:15:44 发言【内容省略】

看图:
附件 image.jpg
20-10-17 15:04
明白了,谢谢
20-10-19 11:26
成立的条件是checksum为假,inbuf_len大于1,语法没有错
20-10-20 09:18

工控新闻

更多新闻资讯