搜索
bottom↓
回复: 10

pic16f676 TIMER0中断不返回 请求帮助!!

[复制链接]

出0入0汤圆

发表于 2009-11-6 16:58:10 | 显示全部楼层 |阅读模式
程序跑到  PORTC&=~(1<<5)  语句之后没反映了????  PICC18编译器   谢谢名位啦!
不是自动返回的吗?

void interrupt isr (void)
{        if(T0IF)
                {
                        T0IF=0;
                Flag++;
                TMR0=0;
                if(Flag>10)
                        {PORTC&=~(1<<4);
                        PORTC|=(1<<5);}                       
                else
                        {PORTC|=(1<<4);
                        PORTC&=~(1<<5);}
                }
}

出0入0汤圆

 楼主| 发表于 2009-11-6 17:21:59 | 显示全部楼层
各位指点一下小弟  感激不尽!

出0入0汤圆

发表于 2009-11-6 19:28:59 | 显示全部楼层
think about what will happen so you end up in that branch of the "if" statement and what you have to do to get out of it.

出0入0汤圆

发表于 2009-11-6 19:48:10 | 显示全部楼层
PORTC&=~(1<<5)之后 程序不就退出了吗 另外可以观察堆栈 看返回地址

出0入0汤圆

发表于 2009-11-6 20:29:51 | 显示全部楼层
是不是你的定时太快了又进入中断了,在仿真的时候

出0入0汤圆

 楼主| 发表于 2009-11-6 20:42:14 | 显示全部楼层
只要将 GIE置1 程序就不行!  不使能全局中断  PORC端口_交替输出高低电平。

GIE置1  就不行了?!

void        Port_init();
void        Time_int();

/* Definitions for Flag variable */
static volatile       unsigned char Flag  @ 0x06;
static volatile       bit Flag0 @((unsigned)&Flag*8)+0;
static volatile       bit Flag1 @((unsigned)&Flag*8)+1;
static volatile       bit Flag2 @((unsigned)&Flag*8)+2;
static volatile       bit Flag3 @((unsigned)&Flag*8)+3;
static volatile       bit Flag4 @((unsigned)&Flag*8)+4;
static volatile       bit Flag5 @((unsigned)&Flag*8)+5;
void        main()
{
               
                int i,temp;
                asm("nop");asm("nop");
                 Flag=0;
               
                Port_init();
                Time_int();
                //GIE=0;///////////////////////////??????????????????????
                while(1)
                        {
                        for(i=5;i>=0;i--)
                     {
                        delay_50MS();
                           PORTC|=(1<<4);
                           delay_50MS();
                            PORTC&=~(1<<4);
                        }
               
                        }
}

void interrupt isr (void)
{        if((T0IE) && (T0IF))
                {
                        T0IF=0;
                Flag++;
                TMR0=0;
                if(Flag>10)
                        {PORTC&=~(1<<4);
                        PORTC|=(1<<5);
                        asm("RETFIE");}                       
                else
                        {PORTC|=(1<<4);
                        PORTC&=~(1<<5);
                        asm("RETFIE");}
                }
}

//TMR0初始化子程序
void        Time_int()
{
        //INTCON=0xA0;
        PSA=0;                            //128分频后
    PS2=1;
    PS1=1;
    PS0=0;
        T0IF=0;                            //清除TMR0的中断标志
        T0IE=1;                                //TMR0中断允许
  TMR0=0;             //定时1ms
        T0CS=0;                                //TMR0工作于定时器方式
}

void        Port_init()
{
        //ANSEL=0x00;
        //CMCON=0X07;
                TRISA=0xFF;
                TRISC=0x00;//输出
                PORTA=0xFF;
                PORTC=0xCF;
}

出0入0汤圆

 楼主| 发表于 2009-11-6 21:16:19 | 显示全部楼层
GIE=1 之后  FOR 语句都没有进去

出0入0汤圆

发表于 2009-11-6 23:41:23 | 显示全部楼层
"只要将 GIE置1 程序就不行!"

don't focus on what you can do to fix the error.

focus on why there is an error and then the fix will come to you.

出0入0汤圆

发表于 2009-11-7 00:34:58 | 显示全部楼层
注意理解【2楼】和【7楼】millwood0 的回复。

出0入0汤圆

发表于 2009-11-7 01:55:46 | 显示全部楼层
把那2句 asm("RETFIE"); 去掉。
那2句 asm("nop"); 也没有什么意义。

注意,能不用汇编就尽量别用。

“for(i=5;i>=0;i--)” 不太漂亮。可改为:

"for (i = 6; i; i--)" 或 "for (i = 6; i--;)"

int i; 可改为:unsigned char i; 无符号变量运算经常会快一些.

出0入0汤圆

 楼主| 发表于 2009-11-7 09:11:37 | 显示全部楼层
感谢各位积极发言!
注意,能不用汇编就尽量别用。!!!!!!!!!!!!
  这句话提醒了我!
    延时函数是用汇编写的,并且较长,如果在执行嵌入式汇编语句时正好发生了中断,那么此时的状态就不能很好的得到保存,中断返回就不能得以正确执行!
  不知是不是可以这样理解。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 12:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表