完整的单片机控制步进电机程序文档格式.doc

上传人:wj 文档编号:8431425 上传时间:2023-05-11 格式:DOC 页数:4 大小:35.50KB
下载 相关 举报
完整的单片机控制步进电机程序文档格式.doc_第1页
第1页 / 共4页
完整的单片机控制步进电机程序文档格式.doc_第2页
第2页 / 共4页
完整的单片机控制步进电机程序文档格式.doc_第3页
第3页 / 共4页
完整的单片机控制步进电机程序文档格式.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

完整的单片机控制步进电机程序文档格式.doc

《完整的单片机控制步进电机程序文档格式.doc》由会员分享,可在线阅读,更多相关《完整的单片机控制步进电机程序文档格式.doc(4页珍藏版)》请在冰点文库上搜索。

完整的单片机控制步进电机程序文档格式.doc

/*作输入步进电机的旋转方向信号发送口*/

sbitP1_0=P1^0;

/*作串口输出信号的使能口,P1_0=0时接通串口,输出信号*/

sbitWD=P1^7;

/*看门狗*/

main()

{

P2_0=0;

P2_2=0;

/*步进电机的旋转方向待试验后确定*/

P1_0=1;

/*开机时需要关断,串口发送功能,需要时再接通*/

WD=1;

/*看门狗先为1,电平翻转为喂狗*/

i=0;

common_count=0;

cmd_in_permit=0;

input_order=0;

interval=0;

address_true=1;

speed_change=0;

start_up=0;

start_end=0;

sent_ok=0;

//允许发送

EA=1;

/*开放总中断*/

TMOD=0x21;

TH1=0xFD;

//波特率9600

TL1=0xFD;

SCON=0xd0;

//设定串行口工作方式

PCON&

=0x00;

//波特率不倍增

SM2=1;

TR1=1;

ES=1;

//启动定时器1

T2MOD=00;

T2CON=0x00;

RCAP2H=0xEE;

//赋T2的预置值0xA600,25MS,0xB800,20MS,0xCA00,15MS,0xDC00,10MS,0xEE00,5MS

RCAP2L=0x00;

TR2=1;

//启动定时器

ET2=1;

//打开定时器2中断

do

{

if(address_true==1)

{

address_true=0;

check_addr();

}

if(start_up==1&

&

start_end==0)//第一次启动

{

y1=add[common_count];

T0high=(uchar)(y1>

>

8);

/*取y1的高8位*/

T0low=(uchar)(y1&

0x00ff);

/*取y1的低8位*/

TR0=1;

ET0=1;

/*允许T/C0中断*/

start_end=1;

}

if(speed_change==1)

{

if(interval>

=0&

interval<

=0x63)

{

if(interval>

common_count)

{common_count=common_count+1;

}

if(interval<

{common_count=common_count-1;

speed_change=0;

if(sent_ok==1)

sent_ok=0;

P1_0=0;

for(i=0;

i<

=20;

i++){_nop_();

}

TI=0;

SBUF=T0high;

while(TI==0);

TI=0;

TI=0;

SBUF=T0low;

P1_0=1;

}

SM2=1;

}

while

(1);

voidtimer0(void)interrupt1using3

P2_0=~P2_0;

y1=add[common_count];

TH0=T0high;

/*高8位T0high送定时器0的TH0*/

TL0=T0low;

/*低8位T0low送定时器0的TL0*/

voidtimer2(void)interrupt5using2

{

TF2=0;

/*T2溢出中断需软件清0*/

speed_change=1;

//速度可以改变标示,以便主程序处理

WD=!

WD;

/*MAX813喂狗*/

voidinte_SERIAL()interrupt4using1/*串口0中断服务子程序*/

ucharkey_in;

key_in=0;

if(RI)

key_in=SBUF;

RI=0;

if(SM2==1)

if(key_in==slave_addr[2])

{

SM2=0;

address_true=1;

}

if((SM2==0)&

(RB8==0))

{if(key_in==0xff){SM2=1;

if(key_in==0xfe)

{/*接收主机命令引导字节,准备接收主机命令*/

cmd_in_permit=1;

}

if(cmd_in_permit==1)

{

input_order=input_order+1;

}

if(input_order==2)

{/*接收主机命令,使从机开始调节电机*/

cmd_in_permit=0;

input_order=0;

/*interval代表控制器发给电机的转速期望值*/

interval=key_in;

sent_ok=1;

if(start_up==0){start_up=1;

}

}

}

voidcheck_addr(void)

{ /*地址核对成功,发送从机地址给主机*/

TB8=1;

RB8=0;

P1_0=0;

for(i=0;

=25;

SBUF=slave_addr[2];

/*发送地址核对成功,发送从机地址给主机*/

do{}while(TI==0);

TI=0;

}

TB8=0;

4

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2