标题: 定时器控制步进电机正转反转 [打印本页]

作者: admin    时间: 2009-11-8 01:34
标题: 定时器控制步进电机正转反转

http://www.51hei.com/ziliao/51hei-5/精准控制步进电机.rar

 

/*******************51hei************************
硬件结构框架:
1,MCU  STC89C52
2,步进电机驱动芯片ULN2003
显示效果:
1,电机的方向可改变
************************************************/
#include"AT89x52.h"
#define uint unsigned int
#define uchar unsigned char

uchar plus[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x00};   //电机正转
uchar minu[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09,0x00};   //电机反转

sbit key1=P3^1;
bit flag;
uchar idata *x;

void control(bit cf,uchar n)        //电机控制函数,返回变量为方向和步数
{
 uchar i;
 if(cf==0)x=plus;     //改变电机方向
 else x=minu;
 for(i=0;i<n;i++)     //记录电机的步数
 {
  while(flag==0);
  flag=0;
 }
}

void init()    //初始化,开定时器0
{
  TMOD=0x01;
  TCON=0x10;  
  TH0=(65536-5000)/256;    
  TL0=(65536-5000)%256;
  IE=0x82;
}

void timer0() interrupt 1
{
 static uchar i;
 if(i++>1)         //改变电机的速度
 {
  i=0;
      flag=1;                  //设置中断标志
  P1=*x++;                 //数组地址加1
  if(*x==0)x=x-8;       //判断8个控制字后恢复初值
 }
 TH0=(65536-5000)/256;
 TL0=(65536-5000)%256;
}

void main()
{
init();
while(1)
{
 control(0,200);     //电机正转
 control(1,200);     //电机反转
}
}


作者: hjd32333    时间: 2010-3-14 23:48
好好学习了~~~~~~~~~~~~~~~
作者: oyh499    时间: 2010-8-28 16:06

学习,谢谢


作者: kxm2008    时间: 2013-7-21 09:47
谢谢分享
作者: Fucks    时间: 2015-2-21 19:20
学习了,好东西
作者: 耶雨1    时间: 2016-5-19 10:23
谢谢 楼主  学习下
作者: WFX777888    时间: 2016-5-19 19:56
谢谢分享资料
作者: xlls    时间: 2016-5-19 20:57

 
学习,谢谢
作者: 林嗳莫    时间: 2016-6-29 15:07
谢谢分享....
作者: xiaoxiaoza555    时间: 2016-12-2 20:25
中断里改变电机速度那一步看不懂,i++>1,什么鬼?求讲解
作者: em78447    时间: 2016-12-15 16:50
定时器方式。学习了
作者: 初学者--++    时间: 2017-5-8 16:28
为什么电机只朝一个方向转动

作者: xymiss    时间: 2017-7-9 20:29
有没有像我一样的初学者。写到单片机上。该怎么接开关呢
作者: 伊特    时间: 2019-7-23 12:21
有没有仿真图
作者: 伊特    时间: 2019-7-25 21:14
oyh499 发表于 2010-8-28 16:06
学习,谢谢

有没有这个程序的仿真图
作者: 伊特    时间: 2019-7-25 21:21
有没有仿真图




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1