1125526801 发表于 2016-5-20 21:01:23

义隆C语言,中断服务函数的后面那个函数是中断保护吗?

本帖最后由 1125526801 于 2016-5-20 21:05 编辑

义隆单片机新手,汇编文盲。
这几天在用义隆单片机做个小玩意,用到定时中断。
发现义隆eUIDE建立C工程时,中断子程序里面最后有这么一个函数,不知道怎么去理解它在程序中的作用,请大家指点一下。

之前接触过STC,海尔,STM8等单片机,但好像都没有类似这样的。

在用到中断时,没有这段还不能正常运行。

void _intcall interrupt_l(void) @ 0x08:low_int 0
{
        _asm{
                        //backup acc, don't remove
                        mov 0x1F , a
        }       
}

另外,我在看别人的例程时,发现还有下面这样的:

void _intcall TCC_l(void) @ 0x09:low_int 2
{
_asm{MOV A,0x20};
}

还有这样的:
void _intcall PWM1P_l(void) @ 0x12:low_int 5
{
_asm{MOV A,0x2};
}

下面是个完整的小程序:
//**********************************************************************
//利用Timer1定时,采用中断方式P50输出1KHz的方波,
//**********************************************************************
//MCU:EM78P372N
//Oscillator:IRC 4MHz
//Clock:2
//WDT: Disable
//编译软件:eUIDE version 1.02.09.07

#include "EM78P372N.H"       //EM78P372N的头文件
#define DISI()_asm{disi}
#define WDTC()_asm{wdtc}
#define NOP()   _asm{nop}
#define ENI()   _asm{eni}
#define SLEP()   _asm{slep}
#define ucharunsigned char
extern int IntVecIdx; //occupied 0x10:rpage 0
void main()
{
WDTC();
DISI();
SCR=0X7F;    //选择4MHz
P5CR=0x00; //P5端口全设置为输出
PORT5=0xff;//初始化P5,全部为低电平
TMRCON=0X04;    //预分频比设为1:16
PWMCON=0X00;    //禁止PWM2
PRD1=124;    //周期=1/4*(249+1)*16*2=1ms
IMR=0X08;    //使能PWM1中断
T1EN=1;   //PWM1定时开始
P50=1;
ENI();
while(1)
{
       P51=1;
}
}
void _intcall ALLInt(void) @ int
{      
switch(IntVecIdx)
{
    case 0x13:
              if(PWM1IF==1)
          {
                           PWM1IF=0;//清PWM1中断标志位
                  PORT5^=1;//P50输出取反
          }
    break;
}   
}
void _intcall PWM1P_l(void) @ 0x12:low_int 5
{
_asm{MOV A,0x2};
}

kebaojun305 发表于 2016-5-20 21:08:47

就是保存ACC还有bank切换的寄存器看看数据手册 ,也知道了。

liufabing 发表于 2016-5-20 22:52:59

中断现场ACC备份(保护).
你那个实际程序void _intcall ALLInt(void) @ int 这个做就没有处理.
页: [1]
查看完整版本: 义隆C语言,中断服务函数的后面那个函数是中断保护吗?