智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1151|回复: 2
打印 上一主题 下一主题

急!急!

[复制链接]

3

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
威望
249
贡献
70
兑换币
30
注册时间
2012-7-12
在线时间
21 小时
毕业学校
吉林大学
跳转到指定楼层
1#
发表于 2012-7-21 13:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠:我的XS128的中断突然全部无效,谁有过类似经历,如何解决?

55

主题

1589

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
24758

优秀会员奖章活跃会员奖章论坛骨干奖章论坛元老奖章资源大师奖章

威望
14177
贡献
8803
兑换币
1162
注册时间
2012-3-4
在线时间
889 小时
毕业学校
2#
发表于 2012-7-21 15:30:16 | 只看该作者
回复 支持 反对

使用道具 举报

3

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
威望
249
贡献
70
兑换币
30
注册时间
2012-7-12
在线时间
21 小时
毕业学校
吉林大学
3#
 楼主| 发表于 2012-7-21 19:49:02 | 只看该作者
初始化程序:
# 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 */
就是进不了中断啊!求教。。。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-24 19:54 , Processed in 0.040927 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表