msp430控制步进电机代码.docx

上传人:b****1 文档编号:20148851 上传时间:2023-04-25 格式:DOCX 页数:16 大小:17.80KB
下载 相关 举报
msp430控制步进电机代码.docx_第1页
第1页 / 共16页
msp430控制步进电机代码.docx_第2页
第2页 / 共16页
msp430控制步进电机代码.docx_第3页
第3页 / 共16页
msp430控制步进电机代码.docx_第4页
第4页 / 共16页
msp430控制步进电机代码.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

msp430控制步进电机代码.docx

《msp430控制步进电机代码.docx》由会员分享,可在线阅读,更多相关《msp430控制步进电机代码.docx(16页珍藏版)》请在冰豆网上搜索。

msp430控制步进电机代码.docx

msp430控制步进电机代码

#include

#include

#include

//定义液晶显示笔画

#definea(0x01)

#defineb(0x02)

#definec(0x10)

#defined(0x08)

#definee(0x40)

#definef(0x20)

#defineg(0x04)

//#defineh(0x80)

//显示字符的指针

constunsignedcharLCD_Tab[]={

a+b+c+d+e+f,//显示"0",LCD_Tab[00]

b+c,//显示"1",LCD_Tab[01]

a+b+d+e+g,//显示"2",LCD_Tab[02]

a+b+c+d+g,//显示"3",LCD_Tab[03]

b+c+f+g,//显示"4",LCD_Tab[04]

a+c+d+f+g,//显示"5",LCD_Tab[05]

a+c+d+e+f+g,//显示"6",LCD_Tab[06]

a+b+c,//显示"7",LCD_Tab[07]

a+b+c+d+e+f+g,//显示"8",LCD_Tab[08]

a+b+c+d+f+g,//显示"9",LCD_Tab[09]

a+b+c+e+f+g,//显示"A",LCD_Tab[0A]

c+d+e+f+g,//显示"b",LCD_Tab[0B]

a+d+e+f,//显示"C",LCD_Tab[0C]

b+c+d+e+g,//显示"d",LCD_Tab[0D]

a+d+e+f+g,//显示"E",LCD_Tab[0E]

a+e+f+g,//显示"F",LCD_Tab[0F]

0,//显示"",LCD_Tab[10]

};

//步进电机步状态(4相8拍)

constunsignedcharSTEP_OUT[]={

0x10,//输出"00010000"

0x30,//输出"00110000"

0x20,//输出"00100000"

0x60,//输出"01100000"

0x40,//输出"01000000"

0xc0,//输出"11000000"

0x80,//输出"10000000"

0x90,//输出"10010000"

};

constunsignedcharSTEP_OUTT[]={

0x90,//输出"00010000"

0x80,//输出"00110000"

0xc0,//输出"00100000"

0x40,//输出"01100000"

0x60,//输出"01000000"

0xc0,//输出"11000000"

0x30,//输出"10000000"

0x10,//输出"10010000"

};

//定义时钟

struct{

unsignedcharYear;

unsignedcharMon;

unsignedcharDay;

unsignedcharHour;

unsignedcharMin;

unsignedcharSec;

}Clock;

unsignedintix;

unsignedcharx,p3,Step,key;

unsignedintresults;

doubledx;

intj=800,h,n=410;

//intp=200;

//v//oiddelay(unsignedinti)

//{/intj;

//for(i=0;i<1000;i++)

//{for(j=0;j<1000;j++)}

//};

voidmInitSTDIO()//系统初始化

{

unsignedchari;

//主时钟初始化

WDTCTL=WDTPW+WDTHOLD;//stopwatchdogtimer

FLL_CTL0|=XCAP14PF;//Configureloadcaps

//定时器A初始化

TACTL=TASSEL0+TACLR;//ACLK,clearTAR

TACCTL0=CCIE;//CCR0interruptenabled

TACCR0=32768;//定时器常数(1秒)

TACTL|=MC0;//StartTimer_ainupmode

//定时器B初始化

TBCTL=TASSEL0+TACLR;//ACLK,clearTAR

TBCCTL0=CCIE;//CCR0interruptenabled

TBCCR0=328;//定时器常数(1/100秒)

TBCTL|=MC0;

//P1口初始化

P1DIR=0;//设置P1.0~P1.7为输入方式

P1IFG=0;//清除P1的中断标志

P1IE=0xFF;//设置P1.0~P1.7中断

P1IES=0xFF;//设置P1.0~P1.7下降沿中断

//P2口初始化

P2DIR|=0xCF;//设置P2.0~P2.3,P2.6,P2.7为输出方式

//P3口初始化

P3DIR=0xFF;//设置P3.0~P3.7为输出方式

//P4口初始化

P4DIR|=0xFC;//设置P4.2~P4.7为输出方式

//P5口初始化

P5SEL=0xFF;//P5用于LCD显示

//P6口初始化

P6SEL=1;//P6.0用于ADC

P3DIR|=0xFE;//设置P6.1~P6.7为输出方式(临时)

//ADC12初始化

ADC12CTL0=ADC12ON+REFON+REF2_5V+SHT0_6;//打开ADC12,2.5V参考电压,设置SHT0=4*ADC12CLK*32

ADC12CTL1=SHS_0+SHP+CONSEQ_0;//SHS_0:

采样输入信号源选用ADC12SC

//SHP:

采样输入信号上升沿触发采样定时器,

//CONSEQ_0:

单通道单次模式,

ADC12MCTL0=INCH_8+SREF_1+EOS;//ref+=AVcc,channel=A3,endseq.

ADC12IE=0x01;//ADC12.0通道中断使能

ADC12CTL0|=ENC;//ADC12转换允许

//初始化LCD

LCDCTL=LCDON+LCD4MUX+LCDP0;//4-MuxLCD,segmentsS0-S15

BTCTL=BTFRFQ1;

for(i=0;i<8;i++)LCDMEM[i]=0;//清除显示

//串行口0(RS-485)初始化

UTCTL0=SSEL1;//UCLK=SMCLK

UBR00=0x6D;//1048576Hz/9600bps=109.2266=006Dh

UBR10=0x00;//1048576Hz9600bps

UMCTL0=0x03;//03modulation

UCTL0=CHAR;//8-bitcharacter*SWRST*

ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD

P2SEL|=0x30;//P2.4,P2.5用于串行口0(RS-232)

P2DIR|=0x10;//P2.4outputdirection

IE1|=URXIE0;//EnableUSART0RXinterrupt

//串行口1(RS-232)初始化

UTCTL1=SSEL1;//UCLK=SMCLK

UBR01=0x6D;//1048576Hz/9600bps=109.2266=006Dh

UBR11=0x00;//1048576Hz9600bps

UMCTL1=0x03;//03modulation

UCTL1=CHAR;//8-bitcharacter*SWRST*

ME2|=UTXE1+URXE1;//EnableUSART1TXD/RXD

P4SEL|=0x03;//P4.0,P4.1用于串行口1(RS-485)

P4DIR|=0x01;//P4.0,outputdirection

IE2|=URXIE1;//EnableUSART1RXinterrupt

}

intputchar(intchar_c)//通过串口输出监控信息

{

while((IFG2&UTXIFG1)==0);//USART0TXbufferready?

TXBUF1=char_c;//chartoTXBUF0

return(char_c);

}

voidDisplayInt(unsignedintData)//显示数据

{

unsignedcharx;

unsignedintdiv_val;

div_val=10000;

x=4;

do

{

LCDMEM[x]=LCD_Tab[Data/div_val];

x--;

Data%=div_val;

div_val/=10;

}while(div_val);

return;

}

voiddelay(intw)

{w=(w*10000)/32768;}

//主程序

main()

{

mInitSTDIO();//系统初始化

_EINT();//开启中断

for(dx=0;dx<1000;dx++);

printf("Start\n");

while

(1)

{

dx=dx*0.6857;

results=(unsignedint)dx;

DisplayInt(results);

switch(key)

{

case0x0:

TBCCR0=328-82*3;key=0x16;break;

case0x01:

TBCCR0=328-82*2;key=0x16;break;

case0x02:

TBCCR0=328-82*1;key=0x16;break;

case0x03:

TBCCR0=328;key=0x16;break;

case0x04:

TBCCR0=328+82*1;key=0x16;break;

case0x05:

TBCCR0=328+82*2;key=0x16;break;

case0x06:

TBCCR0=328+82*3;key=0x16;break;

case0x0a:

h=2;n=410/h;break;

case0x0b:

h=1;n=410*h;break;

case0x0c:

h=2;n=410*h;break;

case0x14:

TBCCTL0=CCIE;break;

case0x15:

TBCCTL0=0;break;

default:

break;

}

/*if(key==0x10)

{

TBCCR0=TBCCR0-82;

key=0x16;}

elseif(key==0x11)

{

TBCCR0=TBCCR0+82;

key=0x16;}

/*elseif(key==0x02)

{h=2;

TBCCR0=328+82*h;

}

elseif(key==0x03)

{h=3;

TBCCR0=328+82*h;

}

elseif(key==0x04)

{h=4;

TBCCR0=328+82*h;

}*/

/*elseif(key==0x0a)

{h=1;

n=200*h;

}

elseif(key==0x0b)

{h=2;

n=200*h;

}

elseif(key==0x0c)

{h=4;

n=200*h;

}

elseif(key==0x15)

{TBCCR0=0;

key=0x16;

}

elseif(key==0x14)

{TBCCR0=328;

key=0x16;

}

/*elseif(key==3)

{h=4;

n=200*h;

}

elseif(key==4)

{h=5;

n=200*h;

}*/

ADC12CTL0|=ADC12SC;//Startconversion

//_BIS_SR(LPM3_bits);//EnterLPM3

_BIS_SR(LPM0_bits);//EnterLPM0

}

}

//TimerA0中断服务程序

#pragmavector=TIMERA0_VECTOR

__interruptvoidTimer_A0(void)

{

p3<<=1;

if(p3==0)p3=1;

P3OUT=p3;

//_BIC_SR_IRQ(LPM3_bits);//ClearLPM3bitsfrom0(SR)

_BIC_SR_IRQ(LPM0_bits);//ClearLPM0,SETBREAKPOINTHERE

}

//TimerB0中断服务程序

#pragmavector=TIMERB0_VECTOR

__interruptvoidTimer_B0(void)

{

x<<=1;//键盘扫描

if((x&0x07)==0)x=1;

P2OUT=(~x)&0x07;

if(j>0)

{

Step++;//步进电机旋转

if(Step>7)Step=0;

P4OUT=STEP_OUT[Step];

j--;

}

if(j<=0)

{

Step++;//步进电机旋转

if(Step>7)Step=0;

P4OUT=STEP_OUT[7-Step];

j--;

if(j<-n){j=n;}

}

//if(k==0x13)

//Step++;//步进电机旋转

//if(Step>7)Step=0;

//P4OUT=STEP_OUT[7-Step];}

//_BIC_SR_IRQ(LPM3_bits);//ClearLPM3bitsfrom0(SR)

_BIC_SR_IRQ(LPM0_bits);//ClearLPM0,SETBREAKPOINTHERE

}

//ADC12中断服务程序

#pragmavector=ADC_VECTOR

__interruptvoidADC12ISR(void)

{

dx=(double)ADC12MEM0;//Moveresults,IFGiscleared

//_BIC_SR_IRQ(LPM3_bits);//ClearLPM3bitsfrom0(SR)

_BIC_SR_IRQ(LPM0_bits);//ClearLPM0,SETBREAKPOINTHERE

}

//P1中断服务程序

#pragmavector=PORT1_VECTOR

__interruptvoidP1INT(void)

{

unsignedintscan;

//unsignedcharkey;

scan=~P2IN;

scan&=0x0007;

scan<<=8;

scan|=P1IFG;

switch(scan)

{

case0x0101:

//"0"键键值

key=0x00;

break;

case0x0102:

//"1"键键值

key=0x01;

break;

case0x0104:

//"2"键键值

key=0x02;

break;

case0x0108:

//"3"键键值

key=0x03;

break;

case0x0110:

//"4"键键值

key=0x04;

break;

case0x0120:

//"5"键键值

key=0x05;

break;

case0x0140:

//"6"键键值

key=0x06;

break;

case0x0180:

//"7"键键值

key=7;

break;

case0x0201:

//"8"键键值

key=8;

break;

case0x0202:

//"9"键键值

key=9;

break;

case0x0204:

//"A"键键值

key=0x0a;

break;

case0x0208:

//"B"键键值

key=0x0b;

break;

case0x0210:

//"C"键键值

key=0x0c;

break;

case0x0220:

//"D"键键值

key=0x0d;

break;

case0x0240:

//"E"键键值

key=0x0e;

break;

case0x0280:

//"F"键键值

key=0x0f;

break;

case0x0401:

//"UP"键键值

key=0x10;

break;

case0x0402:

//"DN"键键值

key=0x11;

break;

case0x0404:

//"L"键键值

key=0x12;

break;

case0x0408:

//"R"键键值

key=0x13;

break;

case0x0410:

//"STRAT"键键值

key=0x14;

break;

case0x0420:

//"STOP"键键值

key=0x15;

break;

case0x0440:

//"ESC"键键值

key=0x16;

break;

case0x0480:

//"ENTER"键键值

key=0x17;

break;

default:

//其它情况

LCDMEM[6]=0;

break;

}

//delay(40);

if(key<0x10)LCDMEM[6]=LCD_Tab[key];

elseLCDMEM[6]=0;

P1IFG=0;

_BIC_SR_IRQ(LPM0_bits);//ClearLPM3bitsfrom0(SR)

}

//串行口0中断服务程序

#pragmavector=USART0RX_VECTOR

__interruptvoidusart0_rx(void)

{

}

//串行口1中断服务程序

#pragmavector=USART1RX_VECTOR

__interruptvoidusart1_rx(void)

{

putchar(RXBUF1);//将接收到的字符方送出去

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1