打印

请教while(1)这样写出错是什么原因?

[复制链接]
2346|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
子竹|  楼主 | 2007-6-9 20:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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;放在前面也不行啊

使用特权

评论回复
5
computer00| | 2007-6-9 21:40 | 只看该作者

改成这样试试:

while(1)
{
if(flag==1)//接收到数据中断置位
 {
  txmit('a');//发送字符a
  flag=0;
 }
}

使用特权

评论回复
6
mohanwei| | 2007-6-9 21:41 | 只看该作者

把串口相关的代码都贴出来吧。

使用特权

评论回复
7
mohanwei| | 2007-6-9 21:44 | 只看该作者

5楼的方法比较可靠,收到数了才清零。

不然就有可能被你先清零了再判断有没有收到数哈哈

使用特权

评论回复
8
ayb_ice| | 2007-6-10 08:14 | 只看该作者

用JBC指令。。。

用JBC指令。。。

if(_testbit_(flag)){

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

}

使用特权

评论回复
9
平常人| | 2007-6-10 09:33 | 只看该作者

改成这样试试:

while(1)
{
  if(flag==1)//接收到数据中断置位
  {
     flag=0;  <= 搬到这里
     txmit('a');//发送字符a
  }
}


使用特权

评论回复
10
gyt| | 2007-6-10 10:10 | 只看该作者

7楼对

7楼的判断应该是正确的

使用特权

评论回复
11
jhx19807| | 2007-6-10 20:34 | 只看该作者

是你if语句的问题,写程序要规范

使用特权

评论回复
12
雨夜未央| | 2007-6-11 11:01 | 只看该作者

同意5楼的改法

使用特权

评论回复
13
blitzero| | 2007-6-11 11:22 | 只看该作者

同意5楼的

使用特权

评论回复
14
lenglx| | 2007-6-11 12:57 | 只看该作者

虽然楼主的程序有问题,

也最多不过丢失数据而已,不是导致中断停止反应的原因.
最大的可能是:中断服务程序中没有清RI标志.

使用特权

评论回复
15
lh_gliet| | 2007-6-11 13:34 | 只看该作者

没有清除中断标志吧

C51中定时中断标志是自动清除的
串口中断是要人工清除的

使用特权

评论回复
16
ba.ma.me| | 2007-6-11 18:05 | 只看该作者

这个试试

while(1)
{
  while(TI == 1) //接收到数据中断置位
  {
     txmit('a');//发送字符a  
     TI=0;
      
  }
  
}

使用特权

评论回复
17
ba.ma.me| | 2007-6-11 18:12 | 只看该作者

刚才发错了,这个试试看行不行

while(1)
{
  while(TI == 1) //接收到数据中断置位
  {
     TI=0;
     txmit('a');//发送字符a  
          
  }
  
}

使用特权

评论回复
18
子竹|  楼主 | 2007-6-11 19:51 | 只看该作者

问题解决了!

14,15楼提醒了我。是FLAG置位置后就直接执行了while(1)中的程序,在中断函数中后面的中断标志清除语句没有执行。呵呵谢谢大家的热心帮忙。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

12

帖子

0

粉丝