完整的单片机控制步进电机程序

上传人:桔**** 文档编号:560127908 上传时间:2023-06-25 格式:DOCX 页数:4 大小:14.59KB
返回 下载 相关 举报
完整的单片机控制步进电机程序_第1页
第1页 / 共4页
完整的单片机控制步进电机程序_第2页
第2页 / 共4页
完整的单片机控制步进电机程序_第3页
第3页 / 共4页
完整的单片机控制步进电机程序_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

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

1、#include reg52.h#include INTRINS.H#include #include #define uint unsigned int#define uchar unsigned charvoid check_addr(void); /* 地址核对 */uchar code slave_addr4=00, 01, 02, 255;/* 从机地址 */ uchar idata T0low, T0high,common_count,input_order,cmd_in_permit,interval; uchar sent_ok,speed_change,start_up,st

2、art_end,address_true,i;uint y1;uint code add100=60006,62771,63693,64154,64430,64614,64746,64845,64922,64983,65033,65075,651 11,65141,65167,65190,65211,65229,65245,65260,65273,65285,65296,65306,65315,65323,65331 , 65339,65345,65352,65358,65363,65368,65373,65378,65382,65387,65390,65394,65398,65401,6 5

3、404,65407,65410,65413,65416,65418,65421,65423,65425,65428,65430,65432,65434,65435,654 37,65439,65441,65442,65444,65445,65447,65448,65450,65451,65452,65453,65455,65456,65457 , 65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65469,65470,6 5471,65472,65472,65473,65474,65475,6547

4、5,65476,65477,65477,65478,65478,65479,65480,654 80,65481;sbit P2_0=P2a0;sbit P2_2=P2A2;sbit P1_0=P1A0;sbit WD=P1A7;/*作输入步进电机的脉冲信号发送口*/*作输入步进电机的旋转方向信号发送口*/*作串口输出信号的使能口,P1_0=0时接通串口,输出信号*/*看门狗*/main()P2_0=0;P2_2=0; /* 步进电机的旋转方向待试验后确定 */P1_0=1; /*开机时需要关断 ,串口发送功能 ,需要时再接通 */ WD=1; /*看门狗先为 1,电平翻转 为喂狗 */ i=

5、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;TL1 = 0xFD;SCON = 0xd0;PCON &= 0x00;SM2=1;TR1 = 1;/ 波特率 9600/ 设定串行口工作方式/ 波特率不倍增/ 启动定时器 1T2MOD=00;T2CON=0x00;RCAP2H =0xEE;20MS,0xCA

6、00 ,15MS,0xDC00 , 10MSRCAP2L =0x00;TR2=1;ET2=1;doif(address_true=1) address_true=0; check_addr(); if(start_up=1&start_end=0)y1=addcommon_count;T0high = (uchar)(y18) ;/赋 T2 的预置值 0xA600,25MS 0xEE00 , 5MS/启动定时器/打开定时器 2 中断/第一次启动OxB8OO ,/*取y1的高8位*/ES=1;/*取y1的低8位*/TOIow = (uchar)(y1 &OxOOff); TR0 = 1;ETO=

7、1; /* 允许 T/CO 中断 */ start_end=1;if(speed_change=1) if(intervaI=O&intervaIcommon_count)common_count=common_count+1; if(intervaIcommon_count)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; whi

8、le(TI=0);TI=0;P1_0=1; for(i=0;i8) ; /* 取 y1 的高 8 位 */ T0low = (uchar)(y1&0x00ff);/* 取 y1 的低 8 位 */ THO=TOhigh; /*高 8 位 TOhigh 送定时器 0 的 TH0*/ TL0=T0low; /*低 8 位 T0low 送定时器 0 的 TL0*/void timer2(void) interrupt 5 using 2TF2=0; /*T2 溢出中断需软件清 0*/ speed_change=1; /速度可以改变标示,以便主程序处理 WD=!WD; /*MAX813 喂狗 */vo

9、id inte_SERIAL() interrupt 4 using 1/*串口 0 中断服务子程序 */uchar key_in ; key_in=0;if(RI) key_in=SBUF;RI=0;if (SM2=1) if(key_in=slave_addr2)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

10、+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;void check_addr(void) /* 地址核对成功,发送从机地址给主机 */TB8=1;RB8=0;P1_0=0;for(i=0;i=25;i+) _nop_();SBUF=slave_addr2; /* 发送地址核对成功,发送从机地址给主机 */ do while(TI=0); TI=0;P1_0=1;for(i=0;i=25;i+) _nop_();TB8=0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号