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

[复制链接]
 楼主| 子竹 发表于 2007-6-9 20:16 | 显示全部楼层 |阅读模式
主函数中:
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)中的程序,在中断函数中后面的中断标志清除语句没有执行。呵呵谢谢大家的热心帮忙。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部