搜索
bottom↓
回复: 3

马老师的音乐播放例程中,外部中断和比较中断执行顺序...

[复制链接]

出0入0汤圆

发表于 2013-8-4 10:52:24 | 显示全部楼层 |阅读模式
本帖最后由 hongkong 于 2013-8-4 11:10 编辑

马老师的音乐播放例程中,外部中断和比较中断执行顺序...
外部中断优先级高于定时器
画了流程图,外部中断响应后开启了定时器,但是计数器要加到溢出才会执行比较中断吧?
而这个时候按键应该是松开了对吗?然后执行--int_n,那不就成了-1?条件不成立就退出了,怎么会可以播放音乐呢?

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

prog_uint16_t t[]  = {0,956,865,759,638,568,506,470};
prog_uchar d[] = {0,105,116,132,140,157,176,198,209};
#define Max_note 32
prog_uchar music[] = {5,2,8,2,5,2,4,2,3,2,2,2,1,4,1,2,1,2,2,2,3,2,3,2,1,2,3,2,4,2,5,8};
unsigned char note_n;
unsigned int int_n;
unsigned char  play_on;

int main(void)
{
        PORTD = 0x08;
        DDRD = 0x02;
        TCCR1A = 0x40;
        TCCR1B = 0x08;
        TIMSK = 0x10;
        GICR |= 0x80;
        MCUCR = 0x08;
        MCUCSR = 0x00;
        GIFR = 0x80;
        sei();

        while(1)
        {
       
        }
}


ISR(INT1_vect)
{
        if(!play_on)
        {
                TCCR1B = 0x09;
        }
}


ISR(TIMER1_COMPA_vect)
{
        if(!play_on)
        {
                note_n = 0;
                int_n = 1;
                play_on  = 1;
        }
        else
        {
                if(--int_n == 0)
                {
                        TCCR1B = 0x08;
                        if(note_n < Max_note)
                        {
                                OCR1A = t[music[note_n]];
                                int_n = d[music[note_n]];
                                note_n++;
                                int_n = int_n * music[note_n];
                                note_n++;
                                TCCR1B = 0x09;
                        }
                        else
                                play_on = 0;
                }
        }
}

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2013-8-4 16:27:38 | 显示全部楼层
没人回答吗,我为了这买了个仿真器 希望弄明白

出0入0汤圆

 楼主| 发表于 2013-8-7 11:30:04 | 显示全部楼层
还是自己弄明白了,上面流程图不对,play_on是标志,不是按键检测引脚,按键接在了外部中断1上

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-19 06:26

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

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