汇编语言——>>步进电机

步进电机控制系统

设计一个开环步进电机控制系统。使得步进电机能够正常运转。并能实现启停、正反转、调速控制。以及显示速度。

2.设计要求如下:
①硬件测试通过。接线完成。三个芯片分别测试通过。步进电机能够正常运转。
②中断方式的转动。
③启停。按KK1+键控制步进电机的启动。按KK2+键控制步进电机的停止。
④正反转。开关K7控制步进电机的正反转。当K7向下拨时,电机正转(顺时针);向上拨时,电机反转(逆时针)。
⑤在LED数码管上显示速度编号。K0对应1挡、K1对应2挡,其余类推。
⑥调速。开关K6~K0分别控制电机的转速:K0向上拨时,得到最低转速,…… K6向上拨时,得到最高转速。步进电机转速分为7级,依次是30 、60、90、120、150、180、210 (r/min)。
1.步进电机工作原理
汇编语言——>>步进电机_第1张图片
汇编语言——>>步进电机_第2张图片
汇编语言——>>步进电机_第3张图片
汇编语言——>>步进电机_第4张图片
注意:步进电机不使用时请断开连接器,以免误操作使电机过热损坏。
2.硬件接线图
①8255与系统总线的接线图
汇编语言——>>步进电机_第5张图片
②8254与系统总线的接线图汇编语言——>>步进电机_第6张图片
③8259的接线图
汇编语言——>>步进电机_第7张图片
上述步骤完成后按以下步骤改线,完成步进电机控制系统的接线。
PA口接8个开关。
PB口接步进电机。
PC口接数码管。数码管的COM端接地。
OUT1接L0的连线,改到MIR6上。
3.端口地址说明
汇编语言——>>步进电机_第8张图片

五、软件设计
1.R变量和M变量说明
定义SWITCH,通过判断k0-k7的输入调用相对应的功能
定义DELAY实现延迟
定义CLKWISE,REVROT实现正反转通过判断语句执行相应代码

2.程序说明
MIR6模块实现中断转动
MIR7模块实现步进电机启动
SIR1模块实现步进电机停止

六、源程序清单
1.参考程序

P8255A 		EQU   	0600H 
P8255B 		EQU   	0602H 
P8255C 		EQU   	0604H 
P8255M	 	EQU   	0606H
DATA 		SEGMENT 
TABLE1		DB      01H,03H,02H,06H,04H,0CH,08H,09H 
TABLE2		DB      01H,03H,02H,06H,04H,0CH,08H,09H 
LEDCODE	DB		3FH,06H,5BH,4FH,66H,6DH,7DH,07H	;0--7的显示代码
			DB		7FH,6FH,77H,7CH,39H,5EH,79H,71H		;8--F的显示代码
TIMEP		DW		03E8H				;延时子程序时间参数
DCODE		DB		3FH					;数码管显示代码
DATA 		ENDS
SSTACK 	SEGMENT STACK
			DW    256 DUP(?) 
SSTACK 	ENDS 	
CODE 		SEGMENT 
		ASSUME	CS:CODE, SS:SSTACK, DS:DATA
START: 	MOV 	AX, DATA 
		MOV 	DS, AX 
MAIN:	MOV 	AL, 90H ; 控制B口工作于方式0,输出 
		MOV 	DX, P8255M 
		OUT 	DX, AL 
A1: 	MOV 	BX, OFFSET  TABLE1 
		MOV 	CX, 0008H 
A2: 	MOV 	AL,[BX] 
		MOV 	DX, P8255B ; 写B口 
		OUT 	DX, AL 
		CALL	DALLY ; 控制步进电机的转速 
		INC 	BX 
		LOOP	A2 
		JMP 	A1 
DALLY: 	PUSH 	CX 
		MOV 	CX,8000H 
A3: 	PUSH 	AX 
		POP 	AX 
		LOOP 	A3
 		POP 	CX 
		RET 
CODE 	ENDS
 		END 	START

2.最终程序清单
TIMER0      EQU     06C0H       ;IOY3
TIMER1      EQU     06C2H 
TIMER2      EQU     06C4H 
TIMERM      EQU     06C6H
P8255A      EQU     0600H       ;IOY0
P8255B      EQU     0602H 
P8255C      EQU     0604H 
P8255M      EQU     0606H
;---------------------------------------------------------------
DATA        SEGMENT 
DISCODE     DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H     ;0--7的显示代码
            DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H     ;8--F的显示代码
DECIMAL     DB      00H,00H,00H,00H,00H,00H,0CCH,0CCH	;十进制数,查表用下标
VRAM	    DB      00H,00H,00H,00H,00H,00H,00H,00H     ;动态显示代码缓冲
LOCATN      DB      00H,00H,00H,00H,00H,00H,00H,00H     ;动态显示位置控制
TIMEP		DW		03E8H								;延时子程序时间参数
DCODE		DB		3FH									;数码管显示代码
HOUR        DB      12          ;小时
MINUTE      DB      34          ;分钟
SECOND      DB      50          ;秒
			
COUNT       DB      100

CLKSTA      DB      00000001B	;步进电机节拍状态
DATA        ENDS
SSTACK      SEGMENT PARA    STACK   'STACK'
            DW      32  DUP(?)
SSTACK      ENDS
CODE        SEGMENT 
            ASSUME  CS:CODE, DS:DATA,SS: SSTACK			
START:      MOV     AX,DATA	
            MOV     DS,AX
;---------------------
;8255初始化
;---------------------
INITA:      MOV     DX, P8255M 
            MOV     AL, 90H 
            OUT     DX, AL 
            MOV     DX, P8255B 
            MOV     AL, 0FFH		;防止步进电机过热 
            OUT     DX, AL 
;--------------------- 
;中断芯片
;---------------------
INITB:      PUSH    DS
            MOV     AX,0000H	
            MOV     DS,AX		
            MOV     AX,OFFSET	 MIR7
            MOV     SI,003CH
            MOV     [SI],AX
            MOV     AX,CS
            MOV     SI,003EH
            MOV     [SI],AX
            MOV     AX,OFFSET	 MIR6
            MOV     SI,0038H
            MOV     [SI],AX
            MOV     AX,CS
            MOV     SI,003AH
            MOV     [SI],AX
            MOV     AX, OFFSET	 SIR1 
            MOV     SI, 00C4H 
            MOV     [SI], AX 
            MOV     AX, CS 
            MOV     SI, 00C6H 
            MOV     [SI], AX 
            CLI	
            POP     DS		
;---------------------
;主片
;---------------------
            MOV     AL,11H
            OUT     20H,AL          ;ICW1
            MOV     AL,08H
            OUT     21H,AL          ;ICW2
            MOV     AL,04H
            OUT     21H,AL          ;ICW3
            MOV     AL,01H
            OUT     21H,AL          ;ICW4
;---------------------
;初始化从片8259 
;---------------------
            MOV     AL, 11H 
            OUT     0A0H, AL        ;ICW1 
            MOV     AL, 30H 
            OUT     0A1H, AL        ;ICW2 
            MOV     AL, 02H 
            OUT     0A1H, AL        ;ICW3 
            MOV     AL, 01H 
            OUT     0A1H, AL        ;ICW4
;--------------------------------------------------------------- 
            MOV     AL, 0FDH        ;OCW1 = 1111 1101B
            OUT     0A1H,AL 		
            MOV     AL,2BH          ;OCW1 = 00101011B
            OUT     21H,AL	
            STI	
;---------------------
;定时器芯片
;---------------------
INITC:      MOV     DX, TIMERM      ;8254控制字 
            MOV     AL, 36H         ;计数器0,方式3 
            OUT     DX, AL 
            MOV     DX, TIMER0
            MOV     AX, 500 
            OUT     DX, AL 
            MOV     AL, AH
            OUT     DX, AL 
            MOV     AL, 76H         ;计数器1,方式3 
            OUT     DX, AL
            MOV     DX, TIMER1
            MOV     AX, 500 
            OUT     DX, AL 
            MOV     AL, AH 
            OUT     DX, AL 
;---------------------
; 8255初始化
;---------------------
INITD:      NOP
;--------------------------------------------------------------- 
BEGIN:      NOP
AA2:        CALL SWITCH
			CALL TIMEP1
			CALL DISPLY
			JMP     AA2	


;--------------------------------------------------------------- 
MIR7        PROC    NEAR
            PUSH    AX
            PUSH    DX
            MOV     AX,0137H
            INT     10H             ;显示字符7
            MOV     AX,0120H
            INT     10H

			MOV     AL, 2BH          ;OCW1 = 00101011B
            OUT     21H,AL
            
            MOV     AL,20H
            OUT     20H,AL
            POP     DX
            POP     AX			
            IRET
MIR7        ENDP
;--------------------------------------------------------------- 
MIR6        PROC    NEAR
            PUSH    AX
            PUSH    DX
            MOV     AX,0136H
            INT     10H             ;显示字符6
            MOV     AX,0120H
            INT     10H
			
			MOV 	DX, 0600H 		;PA
			IN 		AL, DX 
			TEST    AL,80H
			JZ	    ABCD
			CALL    FCLKWISE	
			JMP 	FINE		
	ABCD:	CALL CLKWISE
		
	FINE: MOV     AL,20H
			
            MOV     AL,20H
            OUT     20H,AL
            POP     DX
            POP     AX			
            IRET
MIR6        ENDP	

SIR1        PROC    NEAR
            PUSH    AX
            PUSH    DX
            MOV     AX,0131H
            INT     10H             ;显示字符1
            MOV     AX,0120H
            INT     10H

			MOV     AL,6BH          ;OCW1 = 01101011B
            OUT     21H,AL			

            MOV     AL, 20H 
            OUT     0A0H, AL 
            OUT     20H, AL
            POP     DX
            POP     AX			
            IRET
SIR1        ENDP
;---------------------
;子程序
;---------------------
DELAY:      PUSH    SI
            PUSH    CX
            MOV     SI,	00FFH
D11:        MOV     CX,	00FFH
D22:        LOOP    D22
            DEC     SI
            JNZ     D11             ;延时结束
            POP     CX              
            POP     SI
            RET


DISPLY0      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,01H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY0     ENDP
DISPLY1      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,03H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY1     ENDP
DISPLY2      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,02H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY2     ENDP
DISPLY3      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,06H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY3      ENDP
DISPLY4     PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,04H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY4     ENDP
DISPLY5      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,0CH
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY5    ENDP
DISPLY6     PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,08H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY6     ENDP
DISPLY7      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
         
            MOV     DX,P8255B
            MOV     AL,09H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY7      ENDP 


SWITCH 		PROC  	NEAR				;开关控制档位
			PUSH		AX
			PUSH		DX
			PUSH 		CX

			MOV	DX,P8255A
			IN	AL,DX
			
			TEST AL,00000001B
			JNZ	K1
			TEST AL,00000010B
			JNZ	K2
			TEST AL,00000100B
			JNZ	K3
			TEST AL,00001000B
			JNZ	K4
			TEST AL,00010001B
			JNZ	K5
			TEST AL,00100001B
			JNZ	K6
			TEST AL,01000001B
			JNZ	K7
			
K1:			MOV AX,00E0H
			MOV CX,06H
			JMP DONE2
K2:			MOV AX,0070H
			MOV CX,5BH
			JMP DONE2
K3:			MOV AX,003AH
			MOV CX,4FH
			JMP DONE2
K4:			MOV AX,001DH
			MOV CX,66H
			JMP DONE2
K5:			MOV AX,000EH
			MOV CX,6DH
			JMP DONE2
K6:			MOV AX,0006H
			MOV CX,7DH
			JMP DONE2
K7:			MOV AX,0002H
			MOV CX,07H
			JMP DONE2

DONE2:		MOV 	TIMEP,AX
			MOV 	DCODE,CL
			POP		CX	
			POP		DX
       		POP		AX
       		RET
SWITCH		ENDP

TIMEP1		PROC	NEAR
			PUSH	AX
			PUSH	DX
			MOV 	AX,TIMEP
			MOV 	DX,TIMER0
			OUT 	DX,AL
			MOV 	AL,AH
			OUT 	DX,AL
			POP		DX
			POP		AX			
			RET
TIMEP1	ENDP

DISPLY		PROC  	NEAR				;数码管显示
			PUSH	AX
			PUSH	DX
			MOV 	AL,DCODE
			MOV	 	DX,P8255C
			OUT 	DX,AL
			POP		DX
       		POP		AX
       		RET
DISPLY 		ENDP



;---------------------
;正转
;---------------------
CLKWISE     PROC    NEAR	
            PUSH    AX
            PUSH    DX
            MOV     AL,CLKSTA
            TEST    AL,01H			
            JNZ     CK0
            TEST    AL,02H			
            JNZ     CK1
            TEST    AL,04H			
            JNZ     CK2
            TEST    AL,08H			
            JNZ     CK3
            TEST    AL,10H			
            JNZ     CK4
            TEST    AL,20H			
            JNZ     CK5
            TEST    AL,40H			
            JNZ     CK6
            TEST    AL,80H			
            JNZ     CK7
            MOV     AL,01H
            JMP     CLKDONE
CK0:        CALL	 DISPLY0
            JMP     CLKDONE
CK1:        CALL   DISPLY1
            JMP     CLKDONE
CK2:        CALL   DISPLY2
            JMP     CLKDONE
CK3:        CALL   DISPLY3
            JMP     CLKDONE
CK4:        CALL   DISPLY4
            JMP     CLKDONE
CK5:        CALL   DISPLY5
            JMP     CLKDONE
CK6:        CALL   DISPLY6
            JMP     CLKDONE
CK7:        CALL	 DISPLY7
            JMP     CLKDONE
CLKDONE:    NOP
			NOP
			ROL     CLKSTA,1
            POP     DX
            POP     AX
            RET
CLKWISE     ENDP

;---------------------
;反转
;---------------------


FCLKWISE     PROC    NEAR	
            PUSH    AX
            PUSH    DX
            MOV     AL,CLKSTA
            TEST    AL,01H			
            JNZ     FCK7
            TEST    AL,02H			
            JNZ     FCK6
            TEST    AL,04H			
            JNZ     FCK5
            TEST    AL,08H			
            JNZ     FCK4
            TEST    AL,10H			
            JNZ     FCK3
            TEST    AL,20H			
            JNZ     FCK2
            TEST    AL,40H			
            JNZ     FCK1
            TEST    AL,80H			
            JNZ     FCK0
            MOV     AL,01H
            JMP     FCLKDONE
FCK0:        CALL	 DISPLY0
            JMP     FCLKDONE
FCK1:        CALL   DISPLY1
            JMP     FCLKDONE
FCK2:        CALL   DISPLY2
            JMP     FCLKDONE
FCK3:        CALL   DISPLY3
            JMP     FCLKDONE
FCK4:        CALL   DISPLY4
            JMP     FCLKDONE
FCK5:        CALL   DISPLY5
            JMP     FCLKDONE
FCK6:        CALL   DISPLY6
            JMP     FCLKDONE
FCK7:        CALL	 DISPLY7
            JMP     FCLKDONE
FCLKDONE:    NOP
			NOP
			ROL     CLKSTA,1
            POP     DX
            POP     AX
            RET
FCLKWISE     ENDP
;---------------------------------------------------------------         	
CODE        ENDS
            END     START

你可能感兴趣的:(汇编语言)