华中科技大学2013年TI杯电子设计竞赛总结报告
#include
unsigned int mode_flag=0xffff;
void Init_PWM_Driver() // 初始化电机驱动电路 {
P4DIR |=BIT0+BIT1+BIT2+BIT3; //IN1~IN4
P2DIR |=BIT0+BIT1;//复用p2.0为使能端ENA,复用p2.1为使能端ENB P2SEL |=BIT0+BIT1;
TA1CTL |=MC_1+TASSEL_1+ID_0; TA1CCTL1=OUTMOD_7; TA1CCTL2=OUTMOD_7; TA1CCR0=1024; TA1CCR1=512; TA1CCR2=512; }
/*转弯部分*/
void Turn_Left() //左转函数 {
//TA1CCTL1=OUTMOD_7; //TA1CCTL2=OUTMOD_7; //TA1CCR0=1024; //TA1CCR1=0; //TA1CCR2=512;
P4OUT &=~(BIT0+BIT1+BIT2); P4OUT |=BIT3; }
void Turn_Right()//右转函数 {
//TA1CCTL1=OUTMOD_7; //TA1CCTL2=OUTMOD_7; //TA1CCR0=1024; //TA1CCR1=512; //TA1CCR2=0;
P4OUT &=~(BIT0+BIT2+BIT3);
华中科技大学2013年TI杯电子设计竞赛总结报告
P4OUT |=BIT1; }
void Turn_Normal()//直行函数 {
//TA1CCTL1=OUTMOD_7; //TA1CCTL2=OUTMOD_7; //TA1CCR0=1024; //TA1CCR1=768; //TA1CCR2=768;
P4OUT &=~(BIT0+BIT2); P4OUT |=BIT1+BIT3; }
void Turn_Back()//直退函数 {
//TA1CCTL1=OUTMOD_7; //TA1CCTL2=OUTMOD_7; //TA1CCR0=1024; //TA1CCR1=768; //TA1CCR2=768;
P4OUT |=(BIT0+BIT2); P4OUT &=~(BIT1+BIT3); }
void Stop()//刹停函数 {
P4OUT |=BIT0+BIT1+BIT2+BIT3;
}
void wuxian(void) {
P4DIR&=~(BIT4+BIT5+BIT6+BIT7);//p4.4、p4.5、p4.6、p4.7输入 P2DIR&=~BIT6; P2REN|=BIT6;
P2IES&=~BIT6;//设p1.0——上升沿触发
华中科技大学2013年TI杯电子设计竞赛总结报告
P2IE|=BIT6;//允许中断 P2IFG&=0x00; }
long int count; long int i;
void bizhang() {
P7DIR|=BIT7; P7OUT&=~BIT7;
//P1DIR&=~BIT0; //P1IES&=~BIT0; //P1IE|=BIT0; P2DIR &=~BIT4; P2IES&=~BIT4; P2IE|=BIT4;
TB0CTL|=MC_1+TASSEL_2+ID_0+TBIE;//定时器TB0设置为增量计数模式,SMCLK为时钟,无分频
TB0CCR0=65536-1; TB0CCR1=60000; TB0CCTL1|=CCIE;
TA2CTL|=MC_1+TASSEL_2+ID_0;//定时器TB0设置为增量计数模式,SMCLK为时钟,无分频
TA2CCR0=65536-1; while(!mode_flag)
{
//Turn_Normal(); } }
#pragma vector=TIMER0_B1_VECTOR __interrupt void TB_ISR(void){ switch(TB0IV){
华中科技大学2013年TI杯电子设计竞赛总结报告
case 2:
P7OUT|=BIT7;
for(i=0;i<10;i++){ }
P7OUT&=~BIT7; break; case 10: break; }
}
/*#pragma vector=PORT1_VECTOR __interrupt void P1_ISR(void){ if(P1IFG&BIT0){ TA2R=0;
TA2CTL|=MC_1+TASSEL_2+ID_0; while(P1IN&BIT0){ }
TA2CTL&=~(MC0+MC1);//定时器暂停 count=TA2R; if(count>1470){ Turn_Normal();
}
else{
Turn_Left(); }
}
P1IFG=0; return; }*/
#pragma vector=PORT2_VECTOR __interrupt void P2_ISR(void) {
if(P2IFG&BIT6)
华中科技大学2013年TI杯电子设计竞赛总结报告
{
switch(P4IN&0xE0) {
case 0x00:
while(!(P4IN&(BIT5+BIT6+BIT7))) {
Turn_Normal(); } }
case 0x20:
while(P4IN&BIT5) {
Turn_Right(); }
break; case 0x40:
while(P4IN&BIT6) {
Turn_Left(); }
break; case 0x80:
while(P4IN&BIT7) {
Stop();
}
mode_flag=~mode_flag; break;