单片机怎样实现步进电机的正反转c程序

要实现的是单片机正转一步然后再反转一步再正转,一直这样循环,不用按键控制的

太简单了,要汇编的还是原要C语言的,
;---------------------------------------------------------------------------------------------
;程序功能:以2相激磁法使步进电动机正转1圈,再反转1圈,再正转……,正反转之间的间隔时间为5 s。
;---------------------------------------------------------------------------------------------

;---------------------------------- 主程序 ----------------------------------------

MAIN: ;主程序
ACALL ZY_DJ ;调用正转模块
MOV R5, #250 ;将R5赋值为250
ACALL DELAY20ms_R5 ;调用延时模块,延时5s
ACALL YY_DJ ;调用反转模块
MOV R5, #250 ;将R5赋值为250
ACALL DELAY20ms_R5 ;调用延时模块,延时5s
JMP MAIN ;跳转至MAIN处。循环

;-------------------------------- 正转模块ZY_DJ ------------------------------------

ZY_DJ: ;正转子程序
MOV R0, #20 ;重复20次,即20步,1圈
MOV A, #11001100B ;左移初始值
LOOP: MOV P0, A ;输出
MOV R5, #50 ;将延时计数器R5赋值为50
ACALL DELAY20ms_R5 ;调用延时模块,延时1s
RL A ;左移
DJNZ R0, LOOP ;判断是否循环20次
RET ;子程序返回

;-------------------------------- 反转模块YY_DJ ------------------------------------

YY_DJ: ;反转子程序
MOV R1, #20 ;重复20次,即20步,1圈
MOV A, #00110011B ;右移初始值
LOOP1: MOV P0, A ;输出
MOV R5, #50 ;将延时计数器R5赋值为50
ACALL DELAY20ms_R5 ;调用延时模块,延时1s
RR A ;右移
DJNZ R1, LOOP1 ;判断是否循环20次
RET ;子程序返回

;--------------------------------- 延时模块 ----------------------------------------

DELAY20ms_R5: ;延时子程序,
DLY1: MOV R6, #200
DLY2: MOV R7, #50
DJNZ R7, $
DJNZ R6, DLY2
DJNZ R5, DLY1
RET
;-------------------------------
END ;程序结束
;-------------------------------------------------------------------------------------------------
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-06
不用按键的话,用个简单的延时程序,时间到了然后取反就可以了。这个主要是对51端口的控制,很简单的,自己试着写一下。写出来的东西才是自己的!
第2个回答  2010-08-06
好好了解一下步进电机的工作原理,这个在单片机里面用C语言不难实现的。本回答被提问者采纳
第3个回答  2010-08-05
具体的自己上 soiseek 搜索一下吧。全中文的datasheet搜索网站。
单片机怎样实现步进电机的正反转c程序

单片机C语音控制步进电机正反转程序
首先,定义步进电机的四相绕组为A、B、C、D,通过脉冲控制其正反转。正转控制代码示例:c include define DELAY_1 0.001s void delay(int n){ int i;for (i = 0; i < n; i++);} void main(){ while (1){ \/\/ AB→BC→CD→DA→AB顺序脉冲输入 \/\/ 步进电机正转 P1 = 0x01; ...

用单片机控制步进电机正反转,简单易懂的C语言程序,最好带注释,步进电机...
第1行设置由输入端X1作为启动,Y1输出3万个脉冲,脉冲频率600赫兹(每秒600个脉冲的频率),由于只有Y1输出脉冲,没有设置方向输出端,所以电机正转。第3、4行由X2同时启动两行作为反转,Y1输出3万个脉冲,频率为800赫兹,Y1输出脉冲的同时方向输出端Y2同时输出方向信号,因此,电机反转。反转的3万个...

51单片机控制步进电机正反转、加减速
我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了 (经测试上下限都是可以正常速度运转的) 求各位路过的大侠指点#include<reg51.h>sbit k1=P1^1; \/\/启动sbit k2=P1^0; \/\/正反转sbit k3=P1^2; \/\/加速sbit k4=P1^3; \/\/减速unsigned...

单片机控制电机正反转动的c语言程序
首先要看你的电机是直流电机还是步进电机。直流电机就简单了,只有两根线,电机两端电压正负极改变就可以实现正转反转。不过要加电机驱动芯片,或者H桥电路,电机驱动芯片可以选择L298N,加上适当的外围电路就可以直接用单片机控制电机了。比如让单片机P1.0 = 0,P1.1 = 1;(单片机I\/0口要与电机驱动...

如何用单片机来控制步进电机,并用两盏灯分别来表示其正反转! 大侠可以...
程序名称: 按键控制电机正反转 p1.0键为反转 p1.1键为停止 p1.2键为正转 \/ \/*头文件*\/ include <reg52.h> include <intrins.h> define uint unsigned int define uchar unsigned char define _Nop() _nop_()\/*端口定义*\/ define motor P0 \/*步进电机接口*\/ sbit P12 = P1^2;...

51单片机步进电机正反转程序
\/\/正向 else P0=step[3-i]; \/\/反向 delay(x); \/\/x大小决定电机速度。根据电机相数买个驱动器。然后用单片机产生脉冲来控制电机的转动以及正反转。单片机产生脉冲的方法和单片机控制流水灯是一样的。ULN2003D 是驱动步进电机的驱动芯片,主要是匹配电机所需的电流。 由于是四相电机,步进电机之所以可...

单片机控制步进电机要求:有加速、减速、停止、正转、反转按钮,电机是四...
我用的是控制一个步进电机的,这个是我以前写的,你的要求在下面的程序做修改就行了;程序如下:include <reg52.h> define uchar unsigned char define uint unsigned int \/\/uchar table[]={0x18,0x30,0x60,0x48,0x48,0x60,0x30,0x18}; \/\/二相励磁 uchar table[]={0x08,0x10,0x20,0x...

怎样用单片机控制步进电机转速
那我们让电机正转一圈,反转半圈,在正传1\/4圈,反转一圈,试试。include <reg51.h> typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;define P_DIR0 define N_DIR1 code uint8 FFW[8]={0xF1,0xF3,0xF2,0xF6,0xF4,0xFc,0xF8,0xF9};void delay...

求单片机AT89C52控制步进电机的程序 谢谢! 要C语言的
{ while(--i);} main(){ while(1){ unsigned char i;unsigned int j;for(j=0;j<512;j++){ for(i=0;i<4;i++) \/\/4相 { P1=B_Rotation[i]; \/\/输出对应的相 可以自行换成反转表格 Delay(500); \/\/改变这个参数可以调整电机转速 } } for(j=0;j<512;j++){ for(i=...

...程序,驱动用ULN2803,四个按键分别控制两个步进电机的正反转...
(P2IN&BIT3)==0))\/\/控制上面的步进电机 { if((P2IN&BIT2)==0)\/\/P2.2按下 { delay_ms(1);if(!(P2IN&BIT2)){ while(!(P2IN&BIT2));for(bujinjiao=0;bujinjiao<=7;bujinjiao++){ P1OUT = FFW_shang[bujinjiao]; \/\/取数据正转波形 delay_ms(tiaosu);...

相似回答