21ic电子技术开发论坛

标题: 请教while(1)这样写出错是什么原因? [打印本页]

作者: 子竹    时间: 2007-6-9 20:16
标题: 请教while(1)这样写出错是什么原因?
主函数中:
while(1)
{
if(flag==1)//接收到数据中断置位
txmit('a');//发送字符a
flag=0;
}
问题是:单片机只能中断一次,再向单片机发送数据,就没有反应了。
请问这是什么原因?谢谢
作者: mohanwei    时间: 2007-6-9 20:39
标题: 看看你是不是在接收中断里先关了中断,然后忘了打开……

作者: dreambird    时间: 2007-6-9 20:44
标题: 把flag=0放到发送前面吧

作者: 子竹    时间: 2007-6-9 20:49
标题: 中断没关
如果这样写:
while(1);
在while(1);中不加任何的判断。就没有问题。
中断没有关。
把FLAG=0;放在前面也不行啊
作者: computer00    时间: 2007-6-9 21:40
标题: 改成这样试试:
while(1)
{
if(flag==1)//接收到数据中断置位
 {
  txmit('a');//发送字符a
  flag=0;
 }
}

作者: mohanwei    时间: 2007-6-9 21:41
标题: 把串口相关的代码都贴出来吧。

作者: mohanwei    时间: 2007-6-9 21:44
标题: 5楼的方法比较可靠,收到数了才清零。
不然就有可能被你先清零了再判断有没有收到数哈哈
作者: ayb_ice    时间: 2007-6-10 08:14
标题: 用JBC指令。。。
用JBC指令。。。

if(_testbit_(flag)){

  txmit('a');//发送字符a

}

作者: 平常人    时间: 2007-6-10 09:33
标题: 改成这样试试:
while(1)
{
  if(flag==1)//接收到数据中断置位
  {
     flag=0;  <= 搬到这里
     txmit('a');//发送字符a
  }
}



作者: gyt    时间: 2007-6-10 10:10
标题: 7楼对
7楼的判断应该是正确的

作者: jhx19807    时间: 2007-6-10 20:34
标题: 是你if语句的问题,写程序要规范

作者: 雨夜未央    时间: 2007-6-11 11:01
标题: 同意5楼的改法

作者: blitzero    时间: 2007-6-11 11:22
标题: 同意5楼的

作者: lenglx    时间: 2007-6-11 12:57
标题: 虽然楼主的程序有问题,
也最多不过丢失数据而已,不是导致中断停止反应的原因.
最大的可能是:中断服务程序中没有清RI标志.
作者: lh_gliet    时间: 2007-6-11 13:34
标题: 没有清除中断标志吧
C51中定时中断标志是自动清除的
串口中断是要人工清除的
作者: ba.ma.me    时间: 2007-6-11 18:05
标题: 这个试试
while(1)
{
  while(TI == 1) //接收到数据中断置位
  {
     txmit('a');//发送字符a  
     TI=0;
      
  }
  
}

作者: ba.ma.me    时间: 2007-6-11 18:12
标题: 刚才发错了,这个试试看行不行
while(1)
{
  while(TI == 1) //接收到数据中断置位
  {
     TI=0;
     txmit('a');//发送字符a  
          
  }
  
}

作者: 子竹    时间: 2007-6-11 19:51
标题: 问题解决了!
14,15楼提醒了我。是FLAG置位置后就直接执行了while(1)中的程序,在中断函数中后面的中断标志清除语句没有执行。呵呵谢谢大家的热心帮忙。




欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/) Powered by Discuz! X3.5