打印

请教:串口中断优先级

[复制链接]
3654|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhbwgh|  楼主 | 2008-7-24 20:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的PIC16F873A,中断程序中用了 串口和定时器1中断,
中断结构如下:
void interrupt service(void)
{
   GIE=0;
   if(RCIF)
   {.....}
   if(TMR1IF)
   {...}

}
    如果我把定时器的中断放到串口的前面,就是两个if顺序调换一下,那么程序就出错了, 而且PIC的中断优先级 这两个不是同级的吗? 为什么是这样的顺序?请教高手
    还有个问题是 我串口一次接收10字节,如果每次发送一字节的话,接收10字节后,会刷一次定时(我显示在定时中),可是这时候我不发送了, 定时也不会刷了,想不通 请教各位 有没有遇到这样的问题。


沙发
yewuyi| | 2008-7-25 08:49 | 只看该作者

错误百出~~,不需要GIE=0

void                 interrupt ISR(void)
{
if(T0IE&&T0IF){
              }
if(RCIE&&RCIF){
              }
}

使用特权

评论回复
板凳
zhbwgh|  楼主 | 2008-7-25 12:02 | 只看该作者

re

楼上的说的GIE不需要,我看过资料,知道它是自动关闭的,习惯了就保留下来了,这应该不影响吧?
至于下面的程序结构,我在初始化的时候 ,就允许了T1 和串口中断,那么在中断程序里 不是直接查 标志位 就可以了吗?

使用特权

评论回复
地板
yewuyi| | 2008-7-25 12:30 | 只看该作者

有多个中断,必须结合中断容许位才能确保正确

使用特权

评论回复
5
zhbwgh|  楼主 | 2008-7-25 22:21 | 只看该作者

re

请教版主 , 中断允许位 我置1后,在中断程序中 只要查它是否置位就可以了?并不需要在重新置位了吧?

使用特权

评论回复
6
zhaoyu2005| | 2008-7-26 14:23 | 只看该作者

还是看一下自己程序的问题吧

如果换个顺序就出错应该是中断子函数太长,或者定时中断周期太短,或者清错了标志位

使用特权

评论回复
7
兰天白云| | 2008-7-26 14:45 | 只看该作者

基本上是程序问题

两个if里只有NOP和清标志 就没那么多问题了

使用特权

评论回复
8
zhbwgh|  楼主 | 2008-7-27 20:29 | 只看该作者

re

回楼上的 
   我的定时中断中 有显示和按键查询 时间是比较长的,定时中断4ms ,能在4ms内执行完的,就是想问下 这两个中断 现在是谁先来谁执行的, 有没有设定他的优先级别

使用特权

评论回复
9
兰天白云| | 2008-7-28 08:54 | 只看该作者

16F系列没优先级设置

中断运行处理要4ms太长了,还是改改程序流程吧

使用特权

评论回复
10
HZWCG| | 2013-4-10 17:32 | 只看该作者
同意2、6楼。楼主,873是没有中断优先级的(除非自己软件设置)。看看你是不是清除错了标志位。

使用特权

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

本版积分规则

17

主题

51

帖子

0

粉丝