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