义隆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};
}
就是保存ACC还有bank切换的寄存器看看数据手册 ,也知道了。 中断现场ACC备份(保护).
你那个实际程序void _intcall ALLInt(void) @ int 这个做就没有处理.
页:
[1]