凌阳16位单片机之IRQ6中断


IRQ6是b0和b1位,主要是来控制TIMEB的,b0控制TMB2,b1控制TB1也就是说不控制定时器A,


实现功能:利用IRQ6的两个时基中断,即IRQ6_TMB1IRQ6_TMB2中断,在各自的中断服务程序中对相应的变量进行累加;并通过点亮、熄灭发光二极管来表示相应变量计数器累加的速度。 

实验现象:D4~D7四个发光二极管状态变化周期为4sD8~D11四个发光二极管状态变化周期为2s




#include "SPCE061A.H"
#define sec1 0x00f0
#define sec2 0x000f
unsigned int i,Output,tim1=0,tim2=0;
void IRQ6(void)__attribute__((ISR));
void IRQ6()
{
    if(*P_INT_Ctrl & C_IRQ6_TMB1)
    {
        tim1++;
        if(tim1 >= 64*2)
        {
            tim1=0;
            if((*P_IOA_Data & sec1) == 0)
            {
                *P_IOA_Data += sec1;
            }
            else
            {
                *P_IOA_Data-=sec1;
            }
        }
        *P_INT_Clear = C_IRQ6_TMB1;
    }
    if(*P_INT_Ctrl & C_IRQ6_TMB2)
    {
        tim2++;
        if(tim2 >= 64*2)
        {
            tim2=0;
            if(!(*P_IOA_Data &sec2))
            {
                *P_IOA_Data += sec2;
            }
            else
            {
                *P_IOA_Data-=sec2;
            }
        }
        *P_INT_Clear = C_IRQ6_TMB2;
    }

}

int main()
{
    __asm("FIQ OFF");
    *P_IOA_Dir = 0x00ff;
    *P_IOA_Attrib = 0x00ff;
    *P_IOA_Data = 0x0000;
    
    *P_Timebase_Setup = (C_TMB1_64Hz+C_TMB2_128Hz);
    *P_INT_Ctrl = C_IRQ6_TMB1+C_IRQ6_TMB2; //Tim1是64Hz    Tim2是128Hz
    __asm("INT IRQ");
    while(1)
    {
        *P_Watchdog_Clear = 0x0001;
    }
    
}

你可能感兴趣的:(凌阳16位单片机之IRQ6中断)