billbot501 发表于 2010-8-1 19:40:54

第8章 N分频程序 求助

#include <mega16.h>

// Timer 0 溢出中断服务
interrupt void timer0_ovf_isr(void)
{
    TCNT0=0xFB;               // 重新设置TCNT0的初值
   PORTA = ~PORTA;          // PA0取反输出
}

// Timer 0 比较匹配中断服务
interrupt void timer0_comp_isr(void)
{
   PORTA = ~PORTA;          // PA0取反输出
}

void main(void)
{
    PORTA=0x00;
    DDRA=0x01;

    PORTB=0x01;
    DDRB=0x00;

// T/C0 初始化
    TCCR0=0x07;               // T/C0工作于普通模式,T0上升沿触发
    TCNT0=0xFB;
    OCR0=0xFD;               // 设置OCR0的比较值,>TCNT0的初始值,<0xFF

    TIMSK=0x03;               // 允许T/C0的溢出和比较匹配中断
    #asm("sei")               // 开放全局中断

    while (1)
    {
         // Place your code here
    }
}
程序设置T/C0工作在普通模式,并且结合比较匹配,在比较匹配和溢出中断都会改变PA0的输出,程序是5分频,仿真结果如图所示
我的理解是两个中断的优先级来看,应该是先溢出中断,然后再是比较匹配中断,原理还是不懂
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_572280.JPG
(原文件名:仿真.JPG)

billbot501 发表于 2010-8-4 15:41:56

自己琢磨明白了
页: [1]
查看完整版本: 第8章 N分频程序 求助