基于单片机的步进电机控制器的设计 下载本文

INC R0 ;调整数据指针 DJNZ R7,LP ; RET

键盘中断子程序如下:

KEY:PUSH PSW PUSH DPL PUSH DPH PUSH ACC PUSH B SETB PSW.3

MOV DPTR,#7FFFH ;置状态口地址 MOVX A,@DPTR ;读FIFO状态 ANL A,#0FH ; JZ PKYR ;

MOV A,#40H ;置读FIFO命令 MOVX @DPTR,A ;送读FIFO命令 MOV DPTR,#7FFEH ;置数据口地址 MOVX A,@DPTR ;读数据

LJMP KEY1 ;转键值处理程序PKYR: POP B POP ACC POP DPH POP DPL POP PSW

RETI ; 驱动电路子程序的设计

49

PUSH:MOV R3 , # NUM

PUSH A PUSH PSW LOOP: SETB P1.0 ACALL DELAY1 CLR P1.0 ACALL DELAY2 DJNZ R3,LOOP POP PSW POP A RET 延时子程序的设计 MOV R2,#18H LCALL 7FEBH RET

ORG 7FEBH 序(07EBH & 0FEBH & ...)

L7FEB: PUSH 02H 02H)存放时间常数,进栈保护

L7FED: PUSH 02H L7FEF: PUSH 02H L7FF1: DJNZ R2,$ POP 02H DJNZ R2,L7FEF POP 02H

;通用延时子程复位后R2即为R2进栈保护 进栈 ;R2不为零等待 ;出栈 ; R2不为零转 ; 出栈

50

;R2( ; ;

DJNZ R2,L7FED ; R2不为零转 POP 02H ; 出栈 DJNZ R2,L7FEB ; R2不为零转 RET ;子程序返回

END

图6-4-1 主程序流程图

主程序如下:

CON: MOV R3, # N MOV TMOD , # 10H MOV TL1 , # LOW MOV TH1 , # H IGH JNB FLAG ,LEFT MOV R0 , RM AJMP TIME - S LEFT: MOV R0 , LM TIME: SETB EA SETB ET1 SETB TR1

步进电机控制程序p3.2正转,p3.3反转,p3.4停止 步进电机接p1.0p1.1p1.2p1.3

org 00h

stop: orl p1,#0ffh ; 步进电机停止 loop:jnB p3.2,for2 ; 如果p3.2按下正转

51

jnB p3.3,rev2 ; 如果p3.3按下反转 jnB p3.4,stop1 ; 如果p3.4按下停止 jmp loop ;反复监测键盘 for: mov r0,#00h ;正转到tAB取码指针初值

for1:mov A,r0 mov dptr,#tABle movC A,@A+dptr

jz for 结束码00h

Cpl A 向

mov p1,A 始正转

jnB p3.4,stop1 止

jnB p3.3,rev2 反转

CAll delAy inC r0 码

jmp for1 rev:mov r0,#05h 初值

rev1:mov A,r0

mov dptr,#tABle

;取码 ; ;是否到了 ;把ACC反 ;输出到p1开 ; 如果p3.4按下停 ; 如果p3.3按下 ;转动的速度 ;取下一个 ;继续正转 ;反转到tAB取码指针 ;取码

52

movC A,@A+tABle

jz rev ;是否到了结束码00h

Cpl A ;把ACC反向

mov p1,A 始反转

jnB p3.4,stop1 止

jnB p3.3,rev2 反转

CAll delAy inC r0 码

jmp rev1 stop1:CAll delAy 动

jnB p3.4,$ CAll delAy jmp stop

for2:CAll delAy 除抖动

jnB p3.2,$ CAll delAy jmp for

rev2:CAll delAy

;输出到p1开 如果p3.4按下停 ; 如果p3.3按下 ;转动的速度 ;取下一个 ;继续反转 按p3.4的消除抖 ; p3.4放开否? ;放开消除抖动 ; 按p3.2的消 ; p3.2放开否? ;放开消除抖动 ; 按p3.3的消

53

; ;