搜索
bottom↓
回复: 2

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

[复制链接]

出0入0汤圆

发表于 2016-5-20 21:01:23 | 显示全部楼层 |阅读模式
本帖最后由 1125526801 于 2016-5-20 21:05 编辑

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

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

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

  1. void _intcall interrupt_l(void) @ 0x08:low_int 0
  2. {
  3.         _asm{
  4.                         //backup acc, don't remove
  5.                         mov 0x1F , a
  6.         }       
  7. }
复制代码


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

  1. void _intcall TCC_l(void) @ 0x09:low_int 2
  2. {
  3. _asm{MOV A,0x20};
  4. }
复制代码


还有这样的:
  1. void _intcall PWM1P_l(void) @ 0x12:low_int 5
  2. {
  3. _asm{MOV A,0x2};
  4. }
复制代码


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

  9. #include "EM78P372N.H"       //EM78P372N的头文件
  10. #define DISI()  _asm{disi}
  11. #define WDTC()  _asm{wdtc}
  12. #define NOP()   _asm{nop}
  13. #define ENI()   _asm{eni}
  14. #define SLEP()   _asm{slep}
  15. #define uchar  unsigned char
  16. extern int IntVecIdx; //occupied 0x10:rpage 0
  17. void main()
  18. {
  19.   WDTC();
  20.   DISI();
  21.   SCR=0X7F;    //选择4MHz
  22.   P5CR=0x00; //P5端口全设置为输出
  23.   PORT5=0xff;//初始化P5,全部为低电平
  24.   TMRCON=0X04;    //预分频比设为1:16
  25.   PWMCON=0X00;    //禁止PWM2
  26.   PRD1=124;    //周期=1/4*(249+1)*16*2=1ms
  27.   IMR=0X08;    //使能PWM1中断
  28.   T1EN=1;     //PWM1定时开始
  29.   P50=1;
  30.   ENI();
  31.   while(1)
  32.   {
  33.          P51=1;
  34.   }
  35. }
  36. void _intcall ALLInt(void) @ int  
  37. {      
  38.   switch(IntVecIdx)
  39.   {
  40.     case 0x13:
  41.               if(PWM1IF==1)
  42.             {
  43.                            PWM1IF=0;  //清PWM1中断标志位
  44.                     PORT5^=1;  //P50输出取反
  45.             }
  46.     break;
  47.   }   
  48. }
  49. void _intcall PWM1P_l(void) @ 0x12:low_int 5
  50. {
  51. _asm{MOV A,0x2};
  52. }
复制代码


出0入8汤圆

发表于 2016-5-20 21:08:47 | 显示全部楼层
就是保存ACC  还有bank切换的寄存器  看看数据手册 ,也知道了。

出0入0汤圆

发表于 2016-5-20 22:52:59 | 显示全部楼层
中断现场ACC备份(保护).
你那个实际程序void _intcall ALLInt(void) @ int 这个做就没有处理.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 20:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表