51单片机用433模块通信时在接收到指令在很多的情况下偶尔会死机,是不是接收中断处理程序有问题啊?

voidser_com()interrupt4{if(RI){RI=0;re_num=re_num%7;rbuf[re_num]=SBUF;if(rbuf[re_num]... void ser_com()interrupt 4
{
if(RI)
{
RI=0;
re_num = re_num % 7;
rbuf[re_num]=SBUF;
if(rbuf[re_num]==0xaa)
{
if(rbuf[(re_num+7+1)%7]==0x55)//re_num=0;
{
s_flag=1;
}
}
re_num++;
}
}
这是接收中断处理程序,帮忙看看,如果不是程序问题是不是无线对单片机有干扰啊?对了,这个433无线模块是3.3V供电,是5V通过HT7533芯片转换来的,和5V共地,电平上会不会有问题啊?或者有没有其他的可能?
忘记注视了,无线接收规定为7个字节,rbuf为7字节的接受缓存区
展开
 我来答
entersunleodd
2013-11-03 · 超过14用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:29.9万
展开全部
死机是程序的问题,绝对的。
不过问题不在这个中断程序内,可能是没达到某些条件所以一直做死循环去了,可能是循环检验等待的程序条件没考虑好
追问
不是的,我处理程序没有做死循环,而且死机经常出现,但不是一直都有,如果是死循环就不可能出现不死机的情况了啊
追答
死循环不是这样的意思,是指在做循环,但有一定条件时退出循环的那种,也就是说可以认真留意一下程序中有用循环的地方,特别是检测接收的那一部分
因为通信这方面是有很大的几率会出现传输错误的,如果你设置的条件没考虑到那些传送错误的情况,那就很有可能使程序停在那里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2013-11-04 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
re_num++;没有上限限制,你看看你的缓冲区是不是会溢出,会不会和SP发生冲突等等,特别是SP冲突的话不死机都不可能。
追问
我在处理接收if(s_flag==1){  ...........;s_flag=0;re_num=0;}如果满足s_flag==1,处理完接收数据后我都会对re_num清零,你看看,是不是我接收处理存在问题啊?这个接收数据格式是:起始符0x55,主叫地址,被叫地址,操作码,参数,校验和,结束符0xaa
追答
我感觉出现死机的可能出在数据丢失的情况下,这样你的判据就可能出现移位而偏离7的倍数使s_flag=1不能成立。所以出现结束符后不能什么情况都强制使re_num为0,重新开始接受新一组数据,这样才能避免死机情况出现。
数据丢失或错误在串行通讯中是常出现的,比如波特率的误差、跳变等都可能造成。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiansr
2013-11-04 · TA获得超过278个赞
知道小有建树答主
回答量:313
采纳率:100%
帮助的人:263万
展开全部
串口波特率多大?
追问
9600
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式