方法一程序:
IO3 EQU 30H
IO4 EQU 40H
DATA SEGMENT
TABLE DB 01H,03H,02H,06H,04H,0CH,08H,09H;
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,36H ;8253初始化
MOV DX,46H
OUT DX,AL
MOV AX,40000
MOV DX,40H
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,76H
MOV DX,46H
OUT DX,AL
MOV AL,76H ;8253初始化
MOV DX,46H
OUT DX,AL
MOV AX,10000
MOV DX,42H
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,0B6H ;8253初始化
MOV DX,46H
OUT DX,AL
MOV AX,5000
MOV DX,42H
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV AL,90H ;8255初始化
MOV DX,36H
OUT DX,AL
AGAIN: IN AL,30H
TEST AL,01H
JZ RUN1 ;逆时针旋转
JNZ RUN2 ;顺时针旋转
RUN1: MOV BX,OFFSET TABLE
MOV CX,0008H
A: MOV AL,[BX]
OUT 32H,AL
CALL DELAY
IN AL,30H
TEST AL,01H
JNZ AGAIN
INC BX
LOOP A
JMP RUN1
RUN2: MOV BX,OFFSET TABLE
MOV CX,0008H
MOV AX,0007H
ADD BX,AX
B: MOV AL,[BX]
OUT 32H,AL
CALL DELAY
DEC BX
IN AL,30H
TEST AL,01H
JZ AGAIN
LOOP B
JMP RUN2
DELAY PROC
PUSH CX
MOV CX,4000
AGAIN1: PUSH AX
POP AX
LOOP AGAIN1
POP CX
RET
DELAY ENDP
EXIT: RET
CODE ENDS
END START
方法二程序:
IO3 EQU 30H
IO4 EQU 40H
IO2 EQU 20h
DATA SEGMENT
TABLE DB 01H,03H,02H,06H,04H,0CH,08H,09H;
SEGDATA DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,91H ;8255初始化
MOV DX,36H
OUT DX,AL
MOV AL,92H ;8255初始化
MOV DX,26H
OUT DX,AL
MOV DX,20H ;选择档位
in al,dx
MOV cl,al
DANGSU1:TEST CL,00000001B
JZ YIDANG
DANGSU2:TEST CL,00000010B
JZ ERDANG
DANGSU3:TEST CL,00000100B
JZ SANDANG
DANGSU4:TEST CL,00001000B
JZ SIDANG
DANGSU5:TEST CL,00010000B
JZ WUDANG
DANGSU6:TEST CL,00100000B
JZ LIUDANG
YIDANG: MOV AL,36H ;8253初始化
MOV DX,46H
OUT DX,AL
MOV AX,60000 ;第一挡
MOV DX,40H
OUT DX,AL
MOV AL,AH
OUT DX,AL
mov cl,01h
JMP AGAIN
ERDANG:MOV AL,36H
MOV DX,46H
OUT DX,AL
MOV AX,40000 ;第二挡
MOV DX,40H
OUT DX,AL
MOV AL,AH
OUT DX,AL
mov cl,02h
JMP AGAIN
SANDANG:MOV AL,36H
MOV DX,46H
OUT DX,AL
MOV AX,30000 ;第三挡
MOV DX,40H
OUT DX,AL
MOV AL,AH
OUT DX,AL
mov cl,03h
JMP AGAIN
SIDANG: MOV AL,36H ;8253初始化
MOV DX,46H
OUT DX,AL
MOV AX,20000 ;第四挡
MOV DX,40H
OUT DX,AL
MOV AL,AH
OUT DX,AL
mov cl,04h
JMP AGAIN
WUDANG:MOV AL,36H
MOV DX,46H
OUT DX,AL
MOV AX,10000 ;第五挡
MOV DX,40H
OUT DX,AL
MOV AL,AH
OUT DX,AL
mov cl,05h
JMP AGAIN
LIUDANG:MOV AL,36H
MOV DX,46H
OUT DX,AL
MOV AX,5000 ;第六挡
MOV DX,40H
OUT DX,AL
MOV AL,AH
OUT DX,AL
mov cl,06h
JMP AGAIN
AGAIN:
mov al,cl
MOV BX,OFFSET SEGDATA; 数码管显示
XLAT
MOV DX,24H
OUT DX,AL
IN AL,30H
TEST AL,80H
JZ RUN1 ;逆时针旋转
JNZ RUN2 ;顺时针旋转
RUN1:
MOV BX,OFFSET TABLE
MOV CX,0008H
A: MOV AL,[BX]
OUT 32H,AL
CALL DELAY
IN AL,30H
TEST AL,80H
JNZ again
INC BX
IN al,34H ;判断复位开关是否闭合
test al,01h
JZ start
LOOP A
JMP RUN1
RUN2:
MOV BX,OFFSET TABLE
MOV CX,0008H
MOV AX,0007H
ADD BX,AX
B: MOV AL,[BX]
OUT 32H,AL
CALL DELAY
DEC BX
IN AL,30H
TEST AL,80H
JZ again ;判断复位开关是否闭合
IN al,34H
test al,01h
JZ start
LOOP B
JMP RUN2
DELAY PROC
PUSH CX
MOV CX,4000
AGAIN2:
PUSH AX
POP AX
LOOP AGAIN2
POP CX
RET
DELAY ENDP
EXIT: RET
CODE ENDS
END START