首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

这里有个PIT中断程序,想请教大虾们一个问题谢谢!

这里有个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. }
复制代码
找到了,在头文件里面有定义,另外个问题:
这段程序
  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 可以省的吧
不能
中断服务程序要放固定液
返回列表