Board logo

标题: 这里有个PIT中断程序,想请教大虾们一个问题谢谢! [打印本页]

作者: mcu2007    时间: 2010-1-21 13:20     标题: 这里有个PIT中断程序,想请教大虾们一个问题谢谢!

下面的程序里有一句void interrupt 66 PIT0(void) ,我想了解下这个入口66是在哪儿可以查到的,谢谢回复者!

  1. #include <hidef.h>      /* common defines and macros */
  2. #include <MC9S12XS128.h>     /* derivative information */
  3. #pragma LINK_INFO DERIVATIVE "mc9s12xs128"
  4. //==================================================
  5. //定时中断函数
  6. //定时中断0实现500MS定时
  7. //author:yangtze
  8. //time:2009/5/2
  9. //==================================================
  10. #define PITTIME  5000//设定为50MS定时
  11. unsigned int vTmpPIT=0;
  12. void pllclk(void)//24MHz,外部时钟为16MHz
  13. {
  14.        CLKSEL=0X00;
  15.        PLLCTL=0xe1;
  16.        SYNR=2;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
  17.        REFDV=1;
  18.        PLLCTL=0X60;
  19.        asm  NOP;
  20.        asm  NOP;
  21.        asm  NOP;
  22.        while((CRGFLG&0X08)==0);//时钟校正同步
  23.        CLKSEL=0X80;
  24. }
  25. void initIOBoutput(void)//IO口初始化,B口为输出
  26. {
  27.     DDRB=0XFF;
  28.     PORTB=0XFF;
  29. }
  30. void initPIT(void)//定时中断初始化函数 50MS定时中断设置
  31. {
  32.     PITCFLMT_PITE=0; //定时中断通道0关
  33.     PITCE_PCE0=1;//定时器通道0使能
  34.     PITMTLD0=240-1;//8位定时器初值设定。240分频,在24MHzBusClock下,为0.1MHz。即
  35. 10us.
  36.     PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
  37.     PITINTE_PINTE0=1;//定时器中断通道0中断使能
  38.     PITCFLMT_PITE=1;//定时器通道0使能
  39. }
  40. void main(void)
  41. {
  42.   pllclk();
  43.   initIOBoutput();
  44.   initPIT();
  45.   EnableInterrupts;
  46.   for(;;) {} /* wait forever */
  47.   /* please make sure that you never leave this function */
  48. }
  49. #pragma CODE_SEG __NEAR_SEG NON_BANKED
  50. void interrupt 66 PIT0(void)
  51. {
  52.     vTmpPIT++;
  53.     if(vTmpPIT==10)
  54.     {  
  55.          PORTB=~PORTB;//输出取反
  56.          vTmpPIT=0;
  57.     }
  58.      PITTF_PTF0=1;//清中断标志位
  59. }
复制代码

作者: mcu2007    时间: 2010-1-21 13:58

找到了,在头文件里面有定义,另外个问题:
这段程序
  1. #pragma CODE_SEG __NEAR_SEG NON_BANKED

  2. void interrupt 66 PIT0(void)

  3. {

  4.     vTmpPIT++;

  5.     if(vTmpPIT==10)

  6.     {  

  7.          PORTB=~PORTB;//输出取反

  8.          vTmpPIT=0;

  9.     }

  10.      PITTF_PTF0=1;//清中断标志位

  11. }
复制代码
是不是可以直接这样写:
  1. //#pragma CODE_SEG __NEAR_SEG NON_BANKED

  2. void interrupt 66 PIT0(void)

  3. {

  4.     vTmpPIT++;

  5.     if(vTmpPIT==10)

  6.     {  

  7.          PORTB=~PORTB;//输出取反

  8.          vTmpPIT=0;

  9.     }

  10.      PITTF_PTF0=1;//清中断标志位

  11. }
复制代码
开始的#program 可以省的吧
作者: whc1223    时间: 2010-1-21 15:02

不能
中断服务程序要放固定液




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0