DATA SEGMENT P8255A DW 0600H P8255B DW 0602H P8255C DW 0604H P8255M DW 0606H TABDT1 DB 31H,33H,32H,36H,34H,3CH,38H,39H ;顺时针旋转 TABDT DB 29H,28H,2CH,24H,26H,22H,23H,21H ;逆时针旋转 TIMEP DW 100H ;时间参数 DCODE DW 3FH ;显示代码 DATA ENDS
CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS,AX ;装填数据段
;-------------------------------------------------------------------------------------------------------- FIRST: MOV DI,100H ; 初始化都是转100H次 MOV DX,P8255M MOV AL,90H ;pc3---pc0 OUT 工作方式0 OUT DX,AL A1: MOV DX, P8255A IN AL,DX ;get k6 data TEST AL,40H ;K6=PA6 JZ A2; MOV BX,OFFSET TABDT1 ;顺时针 jmp A3 A2: MOV BX,OFFSET TABDT ;逆时针 A3: MOV CX,0008H ; NEW: MOV DX, P8255A IN AL,DX ;get k7 data TEST AL,80H ;K8=PA7 JNZ THIRD ; k7 shang kai
;----------------------------------------------------------------------------------------------- SECOND: MOV DX, P8255B MOV AL,00H ;停止步进电机 OUT DX,AL JMP NEW
;--------------------------------------------------------------------------------------------- THIRD:
MOV DX,P8255B MOV CX, 0008H A4:
CALL DELAY ;delay 延迟来控制电机速度 MOV AL,[BX] ; get 逆时针 MOV DX, P8255B ; 写B口 OUT DX, AL
CALL SWITCH ; 控制步进电机的转速 CALL DISPLY INC BX LOOP A4 ; loop 8 times get all data JMP A1 ;check user need S or L
;----------------------------------------------------------------------------------------------- FORTH: INC BX LOOP NEW ;again get K7 data check off or no DONE: JMP A1 ;again get k6 data check L or S EXIT1: MOV AX,4C00H ;over exit INT 21H
;------------------------------------------------------------------------------------------------- DELAY PROC NEAR ;延时程序 PUSH CX ;0008H PUSH SI DELO: MOV SI,DI ;DI=100H DL1: NOP MOV CX,TIMEP ;get the space data DL2: LOOP DL2
DEC SI JNZ DL1 POP SI POP CX RET DELAY ENDP
DISPLY PROC NEAR ;显示程序 NOP
PUSH AX
PUSH DX
MOV DX, P8255C; 写C口 MOV AX,DCODE OUT DX, AL POP AX POP DX RET DISPLY ENDP
;----------------------------------------------------------------------------------------- SWITCH PROC NEAR ;速度子程序 PUSH AX PUSH BX PUSH DX MOV DX,P8255A IN AL,DX TEST AL,01H JNZ K0 TEST AL,02H JNZ K1 TEST AL,04H JNZ K2 TEST AL,08H JNZ K3 TEST AL,10H JNZ K4 TEST AL,20H JNZ K5 MOV BX, 3FH JMP K8 K0: MOV AX, 1500H MOV BX, 06H jmp K8 K1: MOV AX, 400H ;设置时间大小 MOV BX,5BH ;设置灯的显示 jmp K8
K2: MOV AX, 100H MOV BX,4FH jmp K8 K3: MOV AX, 20H MOV BX,66H JMP K8 K4: MOV AX, 10H MOV BX,6DH JMP K8 K5: MOV AX, 08H MOV BX,7DH JMP K8 K8: MOV TIMEP,AX ;The Time is more short is will MOV DCODE,BX ;display code POP DX POP BX RET SWITCH ENDP CODE ENDS END START /////////////////////////////////////////////////
fast