凌阳16位单片机之用时基中断定时

P_INT_Ctrl有读写两个功能,写可以控制中断源允许和禁止中断,读可以判断产生中断请求的中断源,当某单元中的某位为一时,说明该位代表的中断允许开放,如果是0,就算有中断申请,CPU也不会相应。

当作为读操作的时候,P_INT_Ctrl主要作为中断标志,因每一位均代表一个中断,当CPU相应某个中断的时候,便将该中断标识值=置为1


清楚标志控制单元P_INT_Clear只具有写的功能,当CPU响应中断后,会将中断标志为1;当进入中断服务的时候,会将中断标志位0,否则CPU将会总进行这个中断;

P_INT_Ctr_New与P_INT_Ctrl功能相似。


首先在打开中断的情况下,有多少Hz一秒钟就进入多少次中断,

所以要定时0.5秒钟的话,只需要有2Hz就可以了 ,没进入一次就是0.5秒,所以就不用在计算了,

如果要是用更高频率的话也是可以的,比如说用16Hz的话,那就是8Hz为0.5秒,这样就可以提前定义一个变量叫做n,这个n在中断内,当n==8才真正的进入相应的中断,



#include "SPCE061A.H"
unsigned int g_uioutput = 0x0001,n=0;
void IRQ5(void)__attribute__((ISR));


int main()
{
    asm("INT OFF");
    *P_IOA_Dir = 0x00ff;
    *P_IOA_Attrib = 0x00ff;
    *P_IOA_Data = 0x0000;
    *P_INT_Ctrl = C_IRQ5_2Hz;
    asm("INT IRQ");
    while(1)
        *P_Watchdog_Clear = 0x0001;
}

void IRQ5(void)
{
    if(*P_INT_Ctrl&C_IRQ5_2Hz)
    {
        if(++n == 4)//两秒的时候回正真的进入一次中断,n就作为一个标记
        
            n=0;//设置n为0;为了下一次重新开始
            *P_IOA_Data = g_uioutput;
            g_uioutput&=0x0000;    
        }
        *P_INT_Clear = 0x0004;//清楚中断标志位
    }
    else
    {
        *P_INT_Clear = 0x0008;//C_IRQ5_2Hz控制的有两个频率如果进入的4Hz的频率的话
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值