打印

ATmage16 int0中断

[复制链接]
2958|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xufengjuan|  楼主 | 2010-1-1 12:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我只几天在做mage16INT0中断程序时,给外部中断后,程序不进入中断子程序而是跳出循环,从主程序开始执行,这是怎么回事?多多指教!试验程序:
#include "iom16v.h"      //;icc avr  ATmega16 头文件
#define    uchar   unsigned char      
#define    uint    unsigned int
#define     LED      6    //PORTD6     
              
          //延时子程序
void delay_us(unsigned int time)     // us级延时子程序
{     
                           do
                            {
                            time--;
                            }   
                           while (time>1);
}   
  
void delay_ms(unsigned int time)    //ms 级延时子程序
{
                       while(time!=0)
                         {        
                       delay_us(1000);
                       time--;
                        }
}
           //中断服务程序
#pragma interrupt_handler EXT_INT0_ISR:iv_INT0   
void EXT_INT0_ISR (void)    //INT0 中断
{
uchar   temp;
temp=SREG;
delay_ms(20);
  PORTD ^= (1<<LED);               //取反,LED
SREG=temp;
}
void main(void)                       //主程序
{
SREG=0x00;                       //禁止总中断
DDRD=0x40;                       //PORTD,LED 输出
PORTD &=~(1<<LED);               //低电平点亮LED
MCUCR=0x83;                      //INT0  上升沿
GICR =0x40;                      //INT0  中断使能
SREG=0x80;                       //总中断允许
//
while(1)                        //循环等待中断
  {
              }
}

相关帖子

沙发
原野之狼| | 2010-1-1 12:34 | 只看该作者
在中断中延时这么久 不妥
关于执行错误 建议从汇编级跟踪调试

使用特权

评论回复
板凳
kegaank| | 2010-1-2 18:17 | 只看该作者
本帖最后由 kegaank 于 2010-1-2 18:28 编辑

把RST脚加一个10K的上拉电阻,如果INT0触发方式选为脉冲触发或低电位触发,给INT0加一个10K的上拉电阻,如INT0触发方式选高电平触发或脉冲触发,加一个10K的下拉电阻即可

使用特权

评论回复
地板
ljhtj| | 2010-1-3 11:09 | 只看该作者
熔丝位设置对吗?

使用特权

评论回复
5
kegaank| | 2010-1-3 21:37 | 只看该作者
中断的初始化设置

使用特权

评论回复
6
勤劳的狼| | 2010-1-3 21:49 | 只看该作者
是否是电路有问题,外部中断影响到了rst脚

使用特权

评论回复
7
huangqi412| | 2010-1-4 08:57 | 只看该作者
中断入口不对跑飞?

使用特权

评论回复
8
qe123| | 2010-1-4 09:22 | 只看该作者
中断响亮号没写吧

使用特权

评论回复
9
kegaank| | 2010-1-4 19:59 | 只看该作者
rst脚状态不稳定,造成CPU不断地复位

使用特权

评论回复
10
救火车| | 2010-1-4 20:14 | 只看该作者
检查一下是否开错了中断。
中断函数默认指向地址0000  如果中断配置有误,没有给定中断服务地址。中断后就跳到0000

建议:重点检查这里  #pragma interrupt_handler EXT_INT0_ISR:iv_INT0   

我对ICC不熟。

使用特权

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

本版积分规则

2

主题

4

帖子

1

粉丝