智能车制作

标题: xs128输入捕捉中断出问题了,帮帮忙啊,万分感谢! [打印本页]

作者: 炫宇xuanyu    时间: 2013-10-5 09:29
标题: xs128输入捕捉中断出问题了,帮帮忙啊,万分感谢!
先写上我的程序
#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? ... g&id=9347686392这个淘宝店的180减速电机,PT1孔用于捕捉传感器的上升沿,开输入捕捉中断;现在程序的问题是当不给电机供电时中断没问题,但是当电机运转时传感器未产生输入捕捉中断芯片就进入中断,而且一直在运行中断程序。同样的程序在以前的130减速电机上运行没问题,难道中断还受电机影响?实在无解了,哪位大神帮帮忙啊,万分感谢!






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