找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5365|回复: 3
收起左侧

msp430f5529小车源代码 交流一下

[复制链接]
ID:370666 发表于 2018-7-19 17:34 | 显示全部楼层 |阅读模式
#include<msp430f5529.h>
?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;
?}
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);
?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);
}
vodi Stop()//刹停函数
{P4OUT?|=BIT0+BIT1+BIT2+BIT3;
}
void wuxian(void)
{P4DIR&=~(BIT4+BIT5+BIT6+BIT7);//p4.4、 p4.5、p4.6、p4.7、  输入
P2DIR&=~BIT6;
P4REN|=BIT6;
P2IES&=~BIT6;//设p1.0--上升沿触发
P2IE|=BIT6;//允许中断
P2IFG&=0x00;
}
long int count;
long int i;
void bizhang()
{
P7DIR|=BIT7;
P7OUT&=~BIT7;
//P1DIR&=~BIT0;
//P1IES&=~BIT0;
//P1IE|=BIT0;
P2DIR&=~BIT0;
P2IES&=~BIT4;
P2IE|=BIT4;
TBOCTL|=MC_1+TASSEL_2+ID_0+TBIE;//
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)
{
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
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)
{
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;
P2IFG=0;
//P2REN|=BIT6; return; }
else if(P2IFG&BIT4) {
} }
TA2R=0;
TA2CTL|=MC_1+TASSEL_2+ID_0; i=0;
while((P2IN&BIT4)&&i++<1000) { }
if(i>=1000) {
P4OUT |=BIT1+BIT3; P4OUT &=~(BIT0+BIT2); } else {
TA2CTL&=~(MC0+MC1);//定时器暂停 count=TA2R; if(count>1470) {

P4OUT |=BIT1+BIT3; P4OUT &=~(BIT0+BIT2); } else {
P4OUT |=BIT4;
P4OUT &=~(BIT0+BIT1+BIT2); } }
P2IFG=0; return;
void xunji() {
while(mode_flag) {
switch(P7IN&0x07) Turn_Normal(); break; Turn_Right(); break; Turn_Left(); break;
}
{
case 0x05:
case 0x01:

case 0x03:
Turn_Right(); break; case 0x04:
case 0x06:
Turn_Left(); break; case 0x07:
//Turn_Normal(); break; case 0x00: }
void main() {
WDTCTL = WDTPW | WDTHOLD; Init_PWM_Driver(); wuxian(); _EINT(); while(1) {
if(mode_flag) }
// 关闭看门狗计时器
}
{
//P1IE&=~BIT0; TB0CCTL1&=~CCIE; xunji(); } else {
bizhang(); }

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:821231 发表于 2020-9-20 20:03 | 显示全部楼层
请问,为什么前边几行好多问号?
回复

使用道具 举报

ID:827871 发表于 2020-10-10 16:53 | 显示全部楼层
同问,为啥这么多问号?
回复

使用道具 举报

ID:388717 发表于 2020-10-11 17:18 | 显示全部楼层
请教一下G2553在MSPFET中怎么没有?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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