智能车制作

标题: MC9s12xs128mal PIT中断进不了 [打印本页]

作者: kevinwon1819    时间: 2014-8-21 20:06
标题: MC9s12xs128mal PIT中断进不了
我在网上看过很多程序都运行不了,难道是128跟128mal寄存器有差别?

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define uint unsigned int
#define uchar unsigned char

void pit_init(void)
{
  PITCFLMT=0;     //关闭PIT
  PITCE_PCE0=1;        //打开定时器通道0
  PITMUX_PMUX0=0;       //定时通道0使用微计数器0
  PITMTLD0=(80-1);  //设置微计数器0的加载寄存器N
  PITLD0=(50000-1);  //设置16位计数器0的加载寄存器M
                  //定时周期=(N+1)*(M+1)/BusClk=(0x4f+1)*(0xc34f+1)/(16M/2)=0.5s
  PITINTE |= (1<<0); //使能定时通道0的中断
  PITCFLMT=0x80;  //使能PIT
}

/*主函数*/
void main(void)
{
  DDRB=0xff;
  PORTB=0xfe;
  pit_init();
  EnableInterrupts;
  for(;;)
  {
    _FEED_COP(); /* feeds the dog */  
  }
}

void interrupt 66 PIT0(void)
{
  PITCFLMT=0;     //只用一个通道时,关闭PIT,稳定,清超时标志位
  PORTB=~PORTB;   //反转电平
//  PITTF=(1<<0);   //清超时标志位
  PITCFLMT=0x80;  //使能PIT
}


作者: kevinwon1819    时间: 2014-8-21 20:30
用的是128mal,程序是128的,怀疑是中断号问题,不知道怀疑正不正确。用查询PITTF值判断时间到没到是可以运行的。
void main(void)
{
  DDRB=0xff;
  PORTB=0xff;
  pit_init();
  for(;;)
  {
    //查询法
    if(PITTF&0x01)  //检查是否超时
    {
      PORTB=~PORTB; //PB口反转电平
      PITTF=(1<<0); //清超时标志位
    }
    //循环,不必再初始化加载寄存器
    _FEED_COP(); /* feeds the dog */  
  }
}





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2