搜索
bottom↓
回复: 5

菜鸟求助 AVR外部中断问题

[复制链接]

出0入0汤圆

发表于 2011-9-16 00:44:32 | 显示全部楼层 |阅读模式
闲来无事 拿起书本学习AVR 用M16做关于中断的实验时 有个问题需要请教一下大家
void interrupt_init(void)
{
GICR|=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;
}

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: Off
SIGNAL(SIG_INTERRUPT0)
{
int m;
for(m=0;m<8;m++)
{
  PORTD=~(0x01<<m);
  delay_ms(500);
    }
}

main()
{
DDRD=0xff;
PORTD=0xff;
SREG|=0x80;
……}

现象是PORTD的LED一直处于流水状态 一直在执行中断程序 是不是因为中断程序使用了PD2做输出 触发INT0导致死循环  不过这样也解释不通 中断我用的是SIGNAL  
资料说宏INTERRUPT 的用法与SIGNAL 类似,区别在于SIGNAL 执行时全局中断触发位被清除、其他中断被禁止,INTERRUPT 执行时全局中断触发位被置位、其他中断可嵌套执行。

而当我在中断程序中不使用PD2时 就不会出现这个情况 请教高手们这到底是神马情况呢

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-9-16 15:43:07 | 显示全部楼层
仔细看手册:

(原文件名:未标题-1 拷贝.jpg)

出0入0汤圆

 楼主| 发表于 2011-9-16 19:05:26 | 显示全部楼层
哦 原来如此 还是要仔细看看手册 谢谢马老师 顺便赞一下你的书 里面的问题很有意思

出0入0汤圆

 楼主| 发表于 2011-9-16 19:14:32 | 显示全部楼层
不过马老师 这个我理解 不管PD2是输出或者输入 只要引脚电平发生变化就能触发INT0 但是在中断服务程序中 我使用了SIGNAL来写中断服务程序 那么在执行终端服务程序的时候 全局中断触发标志是被清0的呀 应该是在程序一进入中断时 MCU自动完成程序的跳转 应该也包括自动把全局中断触发标志清0的过程呀

出0入0汤圆

发表于 2011-9-16 20:17:52 | 显示全部楼层
进入中断把全局中断允许(叫触发不太合适)标志清0,同时也把INT0的中断标志位清0,注意,标志位是第1次的。

你在中断中,把I/O输出从0为1,改变了一次,因此产生了又一次的INT0中断标志位,这个标志位是不会清除的,但此时不会响应,因为全局中断允许标志还是0

当第1次中断完成后,退出中断,程序会把全局中断允许标志置1,保证后面可以响应中断。

此时由于INT0的中断标志已经为1,所以再一次进入INT0的中断,然后又..........

建议你参考我的教程认真学习。

出0入0汤圆

 楼主| 发表于 2011-9-16 22:36:52 | 显示全部楼层
哟西 明白了 谢谢你的解答
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 03:59

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

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