打印

【TI 技术资料分享】MSP430单片机控制坦克打靶

[复制链接]
592|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
必胜客A|  楼主 | 2015-3-9 21:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于MSP430单片机控制坦克打靶C语言源程序代码 1基于MSP430单片机控制坦克打靶C语言源程序代码.zip (30.63 KB)
/*************************   Header Files   ***********************************/

#include <msp430x14x.h>
#include "sysconfiger.h"

/****************************  Tab Code ***************************************/

//步进电机驱动编码
unsigned char bjdj[] = {0x10, 0x20, 0x40, 0x80};//P3口高4位驱动

/****************************  Variable ***************************************/

unsigned char miao = 0, m16 = 0;
//Debug
unsigned char test = 0, cish = 0;


/****************************** 服务函数  *************************************/
              
/****************************  Interrupt Function *****************************/

#pragma vector = TIMERB0_VECTOR
__interrupt void Timerb0(void)
{
  unsigned char tP1IN = P1IN & 0x07;//BIT1
  static unsigned char flag = 1;
  
  m16++;
  if((cish < 5) && flag)//Don't finish
  {
    if(m16 == 16)//1/16s(62.5ms) 中断一次
    {
        m16 = 0;
        miao++;
   
        if(miao == 60)//60s 定时
        {
          P1IE = 0x00;//Disable Port1 Interruption
          flag = 0;
          stop();//car stop
        }
     }
  }
  else//cish == 5;
  {
    P6OUT ^= BIT7;
    P2OUT ^= BIT7;
    if(m16 == 32)
    {
      P6OUT = 0xff;//Close Buzzer
      P1IE  = 0x00;//Disable Port1 Interruption
      TBCCTL0 &= ~CCIE;//Disable TimerB
    }
  }
  
  if(tP1IN == 0x02)//转弯成功后P1.1 == 1,直行,每(62.5ms)检测一次
  {
    ahead();//car goon
    test = 0;//
  }
  
  P2OUT ^= BIT0;//LED闪烁灯
}

/*****************************  Interrupt Function ****************************/
//寻迹由端口1接入 进入中断后 查询引脚电平 做出相应动作 实现自动寻迹
//左    中    右
//P1.2  P1.1  P1.0   P1IN    状态
//  0     1    0      0x02   直走
//  1     1    0      0x06   右偏转 左转校正
//  0     1    1      0x03   左偏转 右转校正
//  1     1    1      0x07   射击黑线 根据要求执行
//偏离2cm检测
//  1     0    0      0x04   右偏转2cm 左转校正
//  0     0    1      0x01   左偏转2cm 右转校正
//端口配置
//  P1.0 ~ P1.2
//  P1DIR  = 0xf8;//1111 1000
//  P1IE   = 0x07;//0000 0111
//  P1IES  = 0x02;//0000 0010
//  P2.3  左车轮   
//  P2.4  右车轮
//Debug 状态分配 0 - ahead,  1 - turn right, 2 - turn left, 3 - stop, 4 - others

#pragma vector = PORT1_VECTOR
__interrupt void Port1(void)
{
  unsigned char tPIN = P1IN & 0x07;
  
  switch(tPIN)
  {
      case 0x01:// > 2cm turn right
        turn_right();
        warning();
        test = 1;
        break;
        
      case 0x02://ahead
        ahead();
        test = 0;
        break;
        
      case 0x03://turn right
        turn_right();
        test = 1;
        break;
        
      case 0x04:// > 2cm turn left
        turn_left();
        warning();
        test = 2;
        break;
        
      case 0x06://turn left
        turn_left();
        test = 2;
        break;
        
      case 0x07://black line
        warning();//声光报警
        stop();//停车
        test = 3;
        cish++;
        delay(200);//
        ahead();
        break;
        
      default://others
        warning();
        test = 4;
        break;
  }
  
  P1IFG &= 0x00;//Clear P1IFG
  P2OUT ^= BIT1;//Debug Test
}

/*******************************  Main  ***************************************/
void main()
{
  //Stop WDT
  WDTCTL  = WDTPW + WDTHOLD;

  //端口配置
  IO_cfg();

  //时钟配置
  Timer_cfg();
  
  //Open EA
  _EINT();
  
  while(1)
  {
    disp_LED();
  }
}
/******************************************************************************/


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

176

帖子

2

粉丝