搜索
bottom↓
回复: 9

菜鸟求助:关于GCC编译的中断程序没有反应

[复制链接]

出0入0汤圆

发表于 2012-11-15 20:12:01 | 显示全部楼层 |阅读模式
使用的是mega8的芯片,编译软件是winavr,这个程序我的目的是要通过控制INT0,INT1来实现共阳极的数码管从0~F的显示数字增大或减小,不过不知道为什么,中断没反应:
#include<avr/io.h>
#include <avr/interrupt.h>
unsigned char counter;
unsigned char led_7[16]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//段码数组

//中断服务程序
ISR(INT0_vect)
{
if(++counter>=16)        counter=0;//函数体
}
ISR(INT1_vect)
{
        if(counter)  --counter;
        else counter=15; //函数体
}
int main()
{   PORTB=0xFF;
    DDRB=0xFF;
        PORTD=0x0F;
        DDRD=0xFF;
        counter=15;       
    cli(); //关中断后进行中断源初始化
    GICR |= 0xC0; //INT0,INT1开中断
    MCUCR = 0x00; //低电平触发方式
    GIFR |= 0xC0; //清INT0,INT1标志位
    sei(); //全局中断使能
        while(1)
        {
            PORTB=led_7[counter];
        }

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-12-17 18:09:40 | 显示全部楼层
看了好半天没发现楼主说的定时器在哪里。。。建议从datesheet  67页一直看到95页

出0入0汤圆

发表于 2012-12-25 23:06:24 | 显示全部楼层
首先外部中断和内部定时器你还不清楚。。。。

出0入0汤圆

发表于 2013-1-2 07:40:09 | 显示全部楼层
我是凑热闹的 呵呵 不好意思

出0入0汤圆

发表于 2013-1-3 11:54:24 | 显示全部楼层
简单修改了一下,将显示的代码部分放到中断里面去
#include<avr/io.h>
#include <avr/interrupt.h>
unsigned char counter;
unsigned char led_7[16]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//段码数组

//中断服务程序
ISR(INT0_vect)
{
        if(++counter>=16)        
        counter=0;//函数体
        PORTB=led_7[counter];

}
ISR(INT1_vect)
{
    if(counter)  --counter;
    else counter=15; //函数体
        PORTB=led_7[counter];
}
int main(void)
{   PORTB=0xFF;
    DDRB=0xFF;
    PORTD=0x0F;
    DDRD=0xff;
    counter=15;
               
    cli(); //关中断后进行中断源初始化
     GICR |= 0xC0; //INT0,INT1开中断
     MCUCR = 0x00; //低电平触发方式
     GIFR |= 0xC0; //清INT0,INT1标志位
     sei(); //全局中断使能
         while(1)
         {
            
         }

}

出0入0汤圆

发表于 2013-1-3 11:58:24 | 显示全部楼层
上面程序我是用这个仿真实验了一下,LZ有条件不妨硬件实验一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-3 15:24:55 | 显示全部楼层
counter没有volatile修饰可以么?

出0入0汤圆

发表于 2013-1-15 22:38:47 | 显示全部楼层
可能是一直在处理中断,可以换成下降沿触发试试

出0入0汤圆

发表于 2013-1-26 23:33:43 | 显示全部楼层
proteus 处理实时事件可能会计算不过来,我也曾遇到过,但是搭实际电路没出现故障,在proteus中就不行,还有就是你要设置proteus的执行时间,有可能是执行1s就停止了,但是这个时候你的中断还没被触发.我也是就知道的说说,作为参考但是不保证正确.

出0入0汤圆

发表于 2013-9-26 11:53:28 | 显示全部楼层
变量名counter需要加volatile关键字,如果不加编译器优化后不会执行加减动作
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-27 00:18

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

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