打印

关于中断问题

[复制链接]
2414|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qirch|  楼主 | 2008-2-1 17:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用PIC16F630,A口的电平中断,在中断服务程序中,中断标志不能清除,导致重复中断,软件调试时,是这样,将程序下载后,还是这样!请高手指点!
沙发
chen3bing| | 2008-2-1 17:48 | 只看该作者

re

程序贴出来看看。

使用特权

评论回复
板凳
qirch|  楼主 | 2008-2-2 08:17 | 只看该作者

程序

void interrupt TRANSIT_INTER(void)
{
    if(RAIE&&RAIF)
    {
        IOCA=0x00;
        GIE=0;
        RAIE=0;
        RAIF=0;
        INTCON=0;
        temp=TMR0;                                                //关闭所有中断,清除所有中断标志
        TMR0=0;
        PORTC=0xFF;
        if(INT_time==0)
        {
            INT_time++;
            TRANSIT.b0=1;
        }
        else
        {
                INT_time++;
                if((temp>30)&&(temp<50))
                {
                    T_data=T_data&0xFE;
                    T_data=T_data<<1;
                    COUNTER++;
                }
                if((temp>70)&&(temp<90))
                {
                    T_data=T_data|0x01;
                    T_data=T_data<<1;
                    COUNTER++;
                }
                else
                    INT_time=0;
                if(COUNTER==8)
                {
                    eeprom_write(SIZE++,T_data);
                    COUNTER=0;
                    T_data=0xAA;
                }
            }
        //if((SIZE==1)&&(T_data!=0xFF))                            //判断是否收到同步码0xFF
            //TRANSIT.b3=1;
        //if((SIZE==2)&&(T_data!=0xFE))                            //判断是否收到同步码0xFE
        TRANSIT.b3=0;        
        INTCON=0x80;
        if(TRANSIT.b3||SIZE==26)
        {
            SIZE=0;
            INT_time=0;
            TRANSIT.b0=0;
            INTCON=0x00;
        }
    }
    RAIE=1;
}
以上是中断服务程序

使用特权

评论回复
地板
chen3bing| | 2008-2-2 17:07 | 只看该作者

re

你可以在中断里处理完后禁止中断,
在别的程序里再使能中断。

使用特权

评论回复
5
xieyuanbin| | 2008-2-2 18:50 | 只看该作者

没有读A口

进入中断后马上读一下A口以消除失配条件,看来LZ没有仔细看数据手册

使用特权

评论回复
6
兰天白云| | 2008-2-3 16:13 | 只看该作者

有点不理解了

手册上说清标志位和读端口都可以,为什么光清标志位不行呢?

本人没注意这个问题,本人都是双管齐下.

使用特权

评论回复
7
xieyuanbin| | 2008-2-3 16:27 | 只看该作者

电平改变中断必须读端口

大概楼上没有仔细看数据手册所致,两个必须一起实行
在电平改变中断中,单片机在读操作时才能将旧值保存,并不断与新值比较,如果不匹配,则会立中断标志,如果中断允许,就会进入中断。进入中断后如果没有读端口,则仍然不匹配,所以还会引发中断,读一次端口值将会导致新值被保存,这样才不会导致重复进入中断。并且在顺序上,应先读端口,然后再清中断标志

使用特权

评论回复
8
hotpower| | 2008-2-8 02:07 | 只看该作者

电平变化中断肯定要读端口,这个结果将是电平变化产生中断

使用特权

评论回复
9
qirch|  楼主 | 2008-2-14 13:00 | 只看该作者

赞一个

5楼说对了!读了之后,通过了!手册还要苦读啊!

使用特权

评论回复
10
l0p0c| | 2008-2-21 13:14 | 只看该作者

不可能清除不掉标志位的!

你再仔细看看数据手册!
看看中断是如何实现的!

使用特权

评论回复
11
萝卜秧子| | 2008-2-21 22:50 | 只看该作者

..

中断里面搞那么长程序啊。

使用特权

评论回复
12
qirch|  楼主 | 2008-2-22 14:44 | 只看该作者

re

没办法!无线通信!还没想出实时行更好的方法!进入中断后根据相应的标志位进行相应的中断服务!

使用特权

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

本版积分规则

7

主题

12

帖子

0

粉丝