您的位置 首页 产品

凌阳16位单片机之IRQ6中止

IRQ6是b0和b1位,主要是来控制TIMEB的,b0控制TMB2,b1控制TB1也就是说不控制定时器A,实现功能:利用IRQ6的两个时基中断,即IRQ6_TMB1和IR…

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

完成功用:使用IRQ6的两个时基中止,即IRQ6_TMB1和IRQ6_TMB2中止,在各自的中止服务程序中对相应的变量进行累加;并经过点亮、平息发光二极管来一共相应变量计数器累加的速度。

试验现象:D4~D7四个发光二极管状况改变周期为4s,D8~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;
}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/263963.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部