智能车制作
标题:
急!急!
[打印本页]
作者:
侠意
时间:
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