打印

如何在C51中强制退出串行口中断

[复制链接]
7723|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
addisonqhd|  楼主 | 2008-1-31 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
接收数据超时,则说明数据传输错误,退出串口中断,等待下次中断接收,在C51中强制退出串行口中断需要在中断函数中如何处理:
void serial_isr(void) interrupt 4 using 0   
    {bit chaoshi=0;   //超时标志位
     j=0; RI=0;           
     receive[0]=SBUF;      //接收机器号,响应串口中断后撤除接收中断          
     if (receive[0]==ID)   //判断机器号,对号则接收
        { for (i=1;i<8;i++)       
           { 
             while(j<100)  //?????超时退出的处理问题
             {if(RI==1){receive=SBUF;RI=0;chaoshi=0;break;}
              j++;chaoshi=1;

             }
             if(chaoshi==1)goto tuichu;
           }
.............
.........    ....     
tuichu:chaoshi=0; 
  }

我的意思是如果中断接收数据两个字节之间的时间超时(这个时间很短零点几毫秒不会影响主程序),立即停止接收,到中断函数末尾,退出中断。

相关帖子

沙发
dai_weis| | 2008-1-31 11:36 | 只看该作者

使用第九个数据位发送地址多好

ID对则接收数据,不对则不接收
中断中怎么还要循环等待?

使用特权

评论回复
板凳
icecut| | 2008-1-31 11:51 | 只看该作者

这样

while(j<1000);  //?????超时退出的处理问题
             {if(RI==1){receive=SBUF;RI=0;chaoshi=0;j=0break;}else{
              j++;;}

             }chaoshi=1;break

使用特权

评论回复
地板
xwj| | 2008-1-31 12:34 | 只看该作者

唉...

使用特权

评论回复
5
why_buaa| | 2008-1-31 13:05 | 只看该作者

在中断里面循环等数据?!

   你完全没有理解中断的思想。
   你在中断里置一个静态状态标记,每次收到数了,同时按照收到的数和当前的标记状态来判断处理方式不就行了。
   中断就应该尽快的返回,怎么可以在中断里等待,那还要中断干什么。

使用特权

评论回复
6
gyt| | 2008-1-31 13:11 | 只看该作者

书没读好

使用特权

评论回复
7
fsaok| | 2008-1-31 13:25 | 只看该作者

中断程序不是这样用的

中断是用于紧急状态,所以应该尽快退出中断,

正确的做法是中断程序中把收到的数据放进缓存区,马上退出!

然后主程序去处理数据,记录收到信息的是否超时等

一声叹息

使用特权

评论回复
8
ayb_ice| | 2008-2-2 13:53 | 只看该作者

一声叹息

使用特权

评论回复
9
mohanwei| | 2008-2-2 13:57 | 只看该作者

改改接收算法比较好

使用特权

评论回复
10
lbx_00| | 2008-2-2 18:56 | 只看该作者

设置一个通信缓冲队列,和一个8位缓冲

每次收到的数据送入8位缓冲,并给出收到数据的标志,出中断,由其他程序将这个数据压入缓冲队列,并具体处理

使用特权

评论回复
11
happystar| | 2008-2-2 20:13 | 只看该作者

LZ弄清楚查询方式和中断方式的优缺点就明白了

你这个程序严重的不合格

使用特权

评论回复
12
AIRWILL| | 2008-2-3 13:45 | 只看该作者

强制退出中断?

直接 return() 可以啊(不要给什么参数) 

使用特权

评论回复
13
xhtxzxw| | 2008-2-3 21:11 | 只看该作者

嘿嘿

哎呀我的娘啊!你老师是谁?打他屁股吧,串口中断就想咋退出就咋退出了!

使用特权

评论回复
14
qinyp| | 2008-2-5 18:45 | 只看该作者

严重叹息

使用特权

评论回复
15
救火车| | 2008-2-6 12:40 | 只看该作者

不要在中断里面等数据

使用特权

评论回复
16
睡睡| | 2008-2-7 21:39 | 只看该作者

用汇编行么?

使用特权

评论回复
17
睡睡| | 2008-2-7 21:43 | 只看该作者

用汇编行么?

    我用汇编搞 的,接受一桢数据后连续等待两桢的时间,若没有接到合法的结束标志则退出.实际使用中,对于BAUD RATE有误差的情况很有效.

使用特权

评论回复
18
yongzai| | 2011-5-2 09:21 | 只看该作者
水平太低看不懂

使用特权

评论回复
19
playjian| | 2011-5-2 13:18 | 只看该作者
12# AIRWILL 中断的返回值是void~~不能有return的吧~

使用特权

评论回复
20
playjian| | 2011-5-2 13:19 | 只看该作者
设置一个标志~~再主程序中查询标志吧~~~再中断里面等待~~那还要中断干什么~

使用特权

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

本版积分规则

51

主题

78

帖子

1

粉丝