⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 可用于控制步进电机正反转的51单片机汇编程序
💻 TXT
字号:
/******************************************************************/
/*****************************************************************/ 
/*                                                                                                                               
/*                 步进电机加减速运行程序                                                                                                                                                                            
/*               步进电机启动时,转速由慢到快逐步加速。                                                                      
/*               步进电机匀速运行                                                                                                       
/*               步进电机由快到慢逐步减速到停止 
/*                                                                                                                                                                                                                                                    
/******************************************************************/
    
#include <reg52.h>       
#include <string.h>    

#define uchar unsigned char
#define uint  unsigned int



uchar code FFW[8]={0x03,0x09,0x0c,0x06};//正转数组
uchar code REV[8]={0x06,0x0c,0x09,0x03};//反转数组
uchar  rate=0x40; 				
bit    StartFlag=0; 
sbit  photoelectric_switch=P3^2;

       
/********************************************************/
/*                                                  
/* 延时
/* 11.0592MHz时钟,                                    
/*                                                      
/********************************************************/
void delay()
 {                           
   uchar k;
   uint s;
   k = rate;
   do
    {
       for(s = 0 ; s <100 ; s++) ;  
    }while(--k);
 }



/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
{ 
   uchar i;
 
    for (i=0; i<4; i++)      //一个周期转30度
    {  if(StartFlag==1)break;
       P1 = FFW[i];//取数据
       delay();                 //调节转速
    }
}

/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{ 
   uchar i;
 
    for (i=0; i<4; i++)      //一个周期转30度
    {  if(StartFlag==1)break;
       P1 = REV[i]; //取数据
       delay();                 //调节转速
    }
}


/********************************************************
*                                                       
*  主程序                                               
*                                                      
*********************************************************/
main()
{   


  
   


	EA=1;EX0=1;					//外部0中断开
	PX0=1;IT0=1;				//高优先级脉冲触发


   while(1)
  {
       

       do{	motor_ffw();
	    } while(StartFlag==0) ;
		
		
		StartFlag=0;



		 do{	motor_rev();
	    } while(StartFlag==0) ;
		

	 	StartFlag=0;


  } 
}



int0_srv() interrupt 0 using 0			//电机起始定位ISP
 { uint m;
    
	    EX0=0;							 //关中断0
	     
		  StartFlag=1;
		 				
		  EX0=1 ;                       //开中断
		 for(m=0;m<10;m++);
	  									   //延时
   }




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -