- 程序算法 总框图
程序设计总思路 方法与算法
程序设计结果
写一个实验报告
2.
****
-
#include <msp430f5529.h>
#define CPU_F ((double)1000000)
#define delay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0)) //定义延时函数
unsigned int DC_motor=142; //初始化车速值
unsigned int i=100;
unsigned int j=50;
unsigned int i_20=20;
void Duoji_init() //初始化舵机函数
{
P2DIR |= BIT0; // P2.0 output
P2SEL |= BIT0; // P2.0 options select
TA1CCR0 = 13000; // PWM Period = 20ms
TA1CCTL1 = OUTMOD_7; // 选择复位/置位模式
TA1CCR1 = 1300; // CCR1 PWM duty cycle
TA1CTL = TASSEL_2 + MC_1 + TACLR ; // SMCLK, up mode, clear TAR.
}
void DC_Motor_init() //初始化电机函数
{
P2DIR |= BIT4 + BIT5; // P2.4,P2.5 output.
P2SEL |= BIT4 + BIT5; // P2.4,P2.5 options select
TA2CCR0 = 200; // PWM Period = 0.2ms
TA2CCTL1 = OUTMOD_7; // CCR1 reset/set
TA2CCR1 = 0; // CCR1 PWM duty cycle
TA2CCTL2 = OUTMOD_7; // CCR2 reset/set
TA2CCR2 = 0; // CCR2 PWM duty cycle
TA2CTL = TASSEL_2 + MC_1 + TACLR ; // SMCLK, up mode, clear TAR.
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
delay_ms(1000);
Duoji_init(); //调用初始化舵机和电机的函数
DC_Motor_init();
TA0CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CCR0 = 1000; //设置定时时间
TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, upmode, clear TAR
TA2CCR1 = DC_motor;
TA2CCR2 = DC_motor; //设置小车初始化速度
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts
__no_operation(); // For debugger
}
#pragma vector=TIMER0_A0_VECTOR // Timer0 A0 interrupt service routine
__interrupt void TIMER0_A0_ISR(void)
{
switch(P6IN&0x1f)
{
case 0x0f: //右1传感器识别到黑线,大右转
TA1CCR1 = 1570+4*j+3*i_20;
TA2CCR1 = 157;
TA2CCR2 = 122;
break;
case 0x17: //右2传感器识别到黑线,小右转
TA1CCR1 = 1490+2*j+2*i_20;
TA2CCR1 = 152;
TA2CCR2 = 142;
break;
case 0x1b: //中间传感器识别到黑线,直行
TA1CCR1 = 1450;
TA2CCR1 = 161;
TA2CCR2 = 161;
break;
case 0x1d: //左2传感器识别到黑线,小左转
TA1CCR1 = 1330-3*j-5*i_20;
TA2CCR1 = 152;
TA2CCR2 = 182;
break;
case 0x1e:
TA1CCR1 = 1260-6*j-10*i_20; //左1传感器识别到黑线,大左转
TA2CCR1 = 162;
TA2CCR2 = 197;
break;
case 0: //进入十字时,所有传感器都检测到黑线,继续直行
TA1CCR1 = 1450;
TA2CCR1 = 161;
TA2CCR2 = 161;
default:
break;
}
}