智能车制作

标题: 急!急! [打印本页]

作者: 侠意    时间: 2012-7-21 13:42
标题: 急!急!
各位大侠:我的XS128的中断突然全部无效,谁有过类似经历,如何解决?


作者: Smile_Sun    时间: 2012-7-21 15:30

作者: 侠意    时间: 2012-7-21 19:49
初始化程序:
# define Init.h
/*=================================================================*\
|函数名:  Init_PLL
|返回:无
\*==================================================
|功能描述:锁相环设置
|参数:无 ===============*/
void  Init_PLL() {
  CLKSEL=0X7F;
  PLLCTL=0XBF;
  SYNR=0X53;     //01010011  80MHZ,总线40MHZ
  REFDV=0X07;   
  PLLCTL=0X60;
  while(( CRGFLG&0x08)==0);  //等待锁相环稳定
  CLKSEL=0X80;      //使用PLL
}
  /*=================================================================*\
|函数名:  Init_PIT
|功能描述:PIT模块初始化
|参数:无
|返回:无
\*=================================================================*/
void Init_PIT(void)
{
PITCFLMT_PITE=0;   //定时中断关闭
PITCE_PCE0=1;          //定时器通道0使能
PITCE_PCE1=1;          //定时器通道1使能
PITMUX_PMUX0=0;  //定时器通道0使用微计数器0
PITMUX_PMUX1=1;  //定时器通道1使用微计数器1
PITMTLD0=199;         
PITLD0=39999;
  //中断时间为200ms,采集脉冲数达到76个,即600r/min,则控制电机
PITMTLD1=199;         
PITLD1=39999;   //通道1用于定时5秒
PITINTE_PINTE0=1;//定时器通道0中断时能
PITINTE_PINTE1=1; //定时器通道1中断时能
PITCFLMT_PITE=1;    //定时中断开启
}
//--------------------------------------
    /*=================================================================*\
|函数名:  Init_PT7
|功能描述:脉冲累加器模块初始化
|参数:无
|返回:无
\*=================================================================*/
/*void  Init_PT7(){
PACTL=0X80;//事件计数方式,检测下降沿,使用定时时钟,不允许中断
PAFLG=0X00; //不产生中断
}      */
/*=================================================================*\
|函数名:  Init_PWM
|功能描述:PWM模块初始化
|参数:无
|返回:无
\*=================================================================*/
void Init_PWM() {
PWME_PWME5=0;  //通道禁止
PWMCTL_CON45=1; //通道4、5级联
PWMPOL_PPOL5=1;   //开始输出高电平
PWMCLK_PCLK5=1;  //选择SA时钟
PWMCAE_CAE5=0;  //左对齐
PWMPRCLK=0X01; //预分频 40/2^3=5MHZ
PWMSCLA=0X01;  //再分频为2
PWMPER45=250; //脉冲频率为5MHZ/2/250=10KHZ
PWMDTY45=150;  //占空比为10%
PWME_PWME5=1;    //通道允许
}  

主程序:
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "Init.h"
//unsigned char sign1=1;
unsigned char i;
void forword() {
  PTM=0X01; //PM0=1, PM2=0,电机正转
}
void backword() {
  PTM=0X04;    //PM0=0, PM2=1,电机反转
  PWMDTY45=250;  //反转为1
  //sign1=1;
}
void stop() {
  PTM=0X00;      //电机使能关
}
void interrupt 67 PIT1(){
PITTF_PTF1=1; //清除中断标志
i++;
if(i==25)    //中断25次达到五秒
{
  PITCE_PCE1=0;   //定时器通道1使能关
  stop();
}
}  /*
void interrupt 66 PIT0() {
  PITTF_PTF0=1; //清除中断标志
  PITCE_PCE0=0;   //定时器通道0使能关
  PACTL_PAEN=0;    //脉冲累加器使能关
  if(PACNT>=76&&sign1)
  {           //当转速达到600r/min时,开始控制柱塞
    TSCR1_TEN=1; //主定时器开
    PORTE=0X00; //同时关闭启动电机
    forword();
    sign1=0;
  }
  else
  {
  PACNT=0;
  PACTL_PAEN=1;    //脉冲累加器使能开
  PITCE_PCE0=1;   //定时器通道0使能开
  }
}  */
void main(void) {
  /* put your own code here */
  Init_PLL();  //总线时钟为40MHZ
  Init_PWM();  //PWM5输出电机占空比控制信号
  //Init_PT7();   //脉冲累加器用于采集转速
  Init_PIT();
  //PIT通道0用于定时检测脉冲数,通道1用于定时5秒
  DDRM=0XFF;   //M端口PM0使能,PM2输出控制正反转信号
DDRB=0X00;  //PB0口用于检测熄火信号,熄火后,电机快速反转
  DDRA=0X00;  //PA0口用于检测启动信号
DDRE=0XFF;  //PE0口用于输出继电器控制信号,接通启动电机
PORTE=0X00;
PTM=0X00;
EnableInterrupts;
forword();
while(1) {
if(PORTA&0X01)
PORTE=0X01;
// if(PORTB&0X01)
// backword();
}
  } /* loop forever */
  /* please make sure that you never leave main */
就是进不了中断啊!求教。。。






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