|
本帖最后由 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 uchar unsigned 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};
- }
复制代码
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|