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

📄 bjmd.c

📁 步进电机驱动,单步驱动,完整代码,用keil c51编写的.
💻 C
字号:
#include <STC89C51RC.h>
#include <intrins.h>
// ******************************************************* 
// 管脚定义
// 由P1输出驱动信息
// ******************************************************* 
// 变量定义
unsigned char temes; // 定时器 定时时间延长变量 
unsigned char phase; // 马达驱动方式 
unsigned char steps; // 设定步数
unsigned char dw;    // 定位开始变量
unsigned char lr;    //	定位正转或反转变量
unsigned char dw_no;  // 定位时执行多少个驱动信号

// ******************************************************* 
// 函数声明
void init_mcu (void);

// *******************************************************
// 主函数
void main (void)
{   
	init_mcu ();
	while (1)
	{     
		//程序是在 定时器中断中完成的
	}
}

// *******************************************************
// 单片机初始化 子函数 
// 设定 寄存器、变量初值

void init_mcu (void)
{
	TMOD = 0x01;    //T0 工作在方式1 16位计数器
	TH0 = 0x3C;   // 预先 设定定时器 初值50ms
	TL0 = 0xB0;
	EA = 1;     // 开启 总中断
	ET0 = 1;    // 开启定时器0的中断功能 
	TR0 = 1;    // 启动定时器0 
 
	temes = 0;  // 时间计数初值从0开始
	phase=0x33; // 电机驱动方式为2相
	P1=phase;	// 初始化P1接口数据
	steps=200;    // 设定走200步为一个周期
	dw=0;       // dw=0表示定位处理,dw=1表示非定位处理
	lr=0;       // lr=0表示正转,lr=1表示反转
	dw_no=4;    // dw_no=4表示定位时先送出4个驱动信号
}

// *******************************************************
// 定时器0中断 子函数,产生50ms定时
void timer0 (void)  interrupt 1    
{  
	TH0 =0x3C; //重新设置定时器初值为50ms
	TL0 =0xB0; 
 
	if (++temes==10)  //够了500ms就开始处理过程
	{
		TR0=0;  //关闭定时器0
		temes = 0;   //计数器 清零
		
		if (dw == 0)   //程序开始先执行定位程序
		{
			if (dw_no-->0)
			{		
				phase=_crol_(phase,1); //循环左移一位转到下一个信号
				P1=phase;   //输出驱动信号
			}
			else
			{
			 	dw=1;  //设为非定位处理
			}
		}
		else  //开始正转或反转
		{
			if (lr==0)	//	开始正转处理
			{
				if (steps-->0)	//正转200步
				{	
					phase=_crol_(phase,1); //循环左移一位转到下一个信号	
					P1=phase;  //输出驱动信号					
				}
				else
				{
					lr=1;   // 设为反转处理
					steps=200;  // 重设步数
				}				
			}
			else		// 开始反转处理
			{
				if (steps-->0)	//反转200步
				{			
					phase=_cror_(phase,1); //循环右移一位转到下一个信号
					P1=phase;  //输出驱动信号				
				}
				else
				{
					lr=0;  // 设为正转处理
					steps=200;  // 重设步数
				}										
			}
		}	
		TR0=1; //启动定时器0
	}
}

// *******************************************************

⌨️ 快捷键说明

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