智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1393|回复: 0
打印 上一主题 下一主题

求助,xs128输入捕捉中断出问题了

[复制链接]

3

主题

8

帖子

0

精华

注册会员

Rank: 2

积分
61
威望
40
贡献
13
兑换币
18
注册时间
2013-7-16
在线时间
4 小时
毕业学校
山东科技大学
跳转到指定楼层
1#
发表于 2013-10-4 20:54:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先写上我的程序

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
byte i,j;

/*****************************************
设置总线频率为32Mhz,晶振为16Mhz
*****************************************/
void SetBusClk_32M(void){
  CLKSEL_PLLSEL=0;
  PLLCTL_PLLON=1;
  SYNR=0x41; //0xd8
  REFDV=0xc0;//0x07
  POSTDIV=0x00;
  _asm(nop);
  _asm(nop);
  while(!(CRGFLG_LOCK==1));
  CLKSEL_PLLSEL=1;
}
/*******************************************
pwm初始化
*******************************************/
void PWM_init(void){
  PWME=0x00;
  PWMCTL=0xf0;//通道01、23、45、67级联
  PWMPRCLK=0x11;//总线频率2分频
  PWMSCLA=2;//CLKSA=总线频率/PWMPRCLK/(2*PWMSCLA)=4MHZ
  PWMSCLB=2;//CLKSB=总线频率/PWMPRCLK/(2*PWMSCLA)=4MHZ
  PWMCLK=0xaa;//PWM01选择CLKSA作为时钟、PWM23选择CLKSB作为时钟、PWM45选择CLKSA、PWM67选择CLKSB
  PWMPER01=1000;//周期为1000
  PWMPER23=1000;//周期为1000
  PWMPER45=1000;//周期为1000
  PWMPER67=1000;//周期为1000
  PWMDTY01=0;
  PWMDTY23=0;
  PWMDTY45=0;
  PWMDTY67=0;
  PWMPOL=0xaa;
  PWMCAE=0x00;
  PWME=0xaa;
}

/****************************************
  PT1输入捕捉初始化
******************************************/
void IOC_init(void){
  TIOS_IOS1=0;//通道1输入捕捉
  TCTL4=0x04;//上升沿捕捉
  TSCR2=0x05;
  TIE_C1I=1;  //允许输入捕捉中断
  TSCR1_TEN=1;
}
   
/*******************************************
IO口初始化
*********************************************/
void IO_Init(void){
  DDRP=0xff;
  DDRA=0x00;
  DDRB=0x00;//00001000
  DDRE=0x00;
  DDRJ_DDRJ7=0;
  DDRM_DDRM0=1;
  DDRM_DDRM1=1;
  DDRM_DDRM2=1;
  DDRM_DDRM3=1;
  DDRS_DDRS0=1;
  DDRS_DDRS1=1;
  DDRS_DDRS2=1;
  DDRS_DDRS3=1;
  DDRT_DDRT0=0;
  PORTB_PB3=1;
}
/************************************************
小车行进函数
************************************************/
void drive(int L,int R)   //小车行速,-1000<= L <=1000,-1000<= R <=1000
{     
#define L_IN1 PTS_PTS2               
#define L_IN2 PTS_PTS0
#define L_IN3 PTS_PTS3
#define L_IN4 PTS_PTS1               
#define R_IN1 PTM_PTM2               
#define R_IN2 PTM_PTM0
#define R_IN3 PTM_PTM3
#define R_IN4 PTM_PTM1               
#define L_EN1 PWMDTY01           
#define L_EN2 PWMDTY23            
#define R_EN1 PWMDTY67
#define R_EN2 PWMDTY45
if(L>0 && R>0)
{
  L_IN1=1;   //左右轮均向前转
  L_IN2=0;
  L_IN3=1;   
  L_IN4=0;
  R_IN1=1;
  R_IN2=0;
  R_IN3=1;   
  R_IN4=0;
} else if(L>=0 && R<0)
{
   L_IN1=1;
   L_IN2=0;
  L_IN3=1;   
  L_IN4=0;
  R_IN1=0;   //左轮前转,右轮后转
  R_IN2=1;
  R_IN3=0;
  R_IN4=1;
  R=-R;   
} else if(L<0 && R>=0)
{
   L_IN1=0;
  L_IN2=1;
  L_IN3=0;   
  L_IN4=1;
  R_IN1=1;   //左轮后转,右轮前转
  R_IN2=0;
  R_IN3=1;
  R_IN4=0;
  L=-L;  
}
else if(L==0 && R==0){
   L_IN1=0;
  L_IN2=0;
  L_IN3=0;   
  L_IN4=0;
  R_IN1=0;   //快速停车
  R_IN2=0;
  R_IN3=0;
  R_IN4=0;
}
else if(L<0 &&R<0)
{
   L_IN1=0;
   L_IN2=1;
  L_IN3=0;   
  L_IN4=1;
  R_IN1=0;   //左轮后转,右轮后转
  R_IN2=1;
  R_IN3=0;
  R_IN4=1;
  L=-L;
  R=-R;
}
  L_EN1=L;
  L_EN2=L;
  R_EN1=R;
  R_EN2=R;
}
/***********************************************
延时函数
***********************************************/
void delay(unsigned int ms){  //1ms
  unsigned int i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<32000;j++);
}
/************************************************
小车避障函数
************************************************/
void bizhang1(void){
#define L0   PORTA_PA0   //左方避障
#define R0   PORTA_PA1
#define B    PORTB_PB2
#define F    PORTA_PA2
#define L1   PTT_PTT2
#define R1   PTT_PTT1
if(L0==0 && R0==1)//左前L0有障碍
{
drive(0,0);
while(L0==0 && R0==1)
drive(500,-500);
drive(0,0);
}
else if(L0==1 && R0==0)//右前R0有障碍
{
drive(0,0);
while(L0==1 && R0==0)
drive(-500,500);
drive(0,0);
}
else
drive(700,700);
}
void main(void) {
  /* put your own code here */
SetBusClk_32M();
PWM_init();
IO_Init();
IOC_init();
EnableInterrupts;
for(;;) {
    _FEED_COP(); /*feeds the dog*/
    bizhang1();
  }  /*loop forever
   please make sure that you never leave main */
}
#pragma CODE_SEG NON_BANKED
void interrupt 9 IOC1_IRQ(void){
   TFLG1_C1F=1;
  drive(0,0);
  drive(700,-500);
  delay(80);
}
#pragma CODE_SEG DEFAULT
PWM信号接在L298N电机驱动的ENA、ENB口,一共用了两块驱动板共驱动四个电机,电机为http://item.taobao.com/item.htm?spm=a1z10.1.w4004-2363248704.14.AapI2g&id=9347686392这个淘宝店的180减速电机,PT1孔用于捕捉传感器的上升沿,开输入捕捉中断;现在程序的问题是当不给电机供电时中断没问题,但是当电机运转时传感器未产生输入捕捉中断芯片就进入中断,而且进中断之后就再也没出来。同样的程序在以前的130减速电机上运行没问题,难道中断还受电机影响?实在无解了,哪位大神帮帮忙啊,万分感激!




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

本版积分规则

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

GMT+8, 2024-12-27 15:43 , Processed in 0.050251 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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