微机原理课设2016loop

.MODEL TINY
EXTRN InitKeyDisplay:NEAR, Display8:NEAR
IO8259_0 EQU 0250H
IO8259_1 EQU 0251H
CON_8255 EQU 0273H
PA_8255 EQU 0270H
PB_8255 EQU 0271H
PC_8255 EQU 0272H
.STACK 100
.DATA

BUFFER DB 8 DUP(?)
BUFFER1 DB 0,1,2,3,4,5,6,7
SEG_TAB DB 0A4H,0C0H,0F9H,82H,0C7H,0C0H,0C0H ,8CH
LEDCON DB 0FFH
Counter DB ?
ReDisplayFlag DB 0
.CODE
START:
MOV DX,Con_8255
MOV AL,80H
OUT DX,AL
MOV AX,@DATA
MOV DS,AX
MOV ES,AX
NOP
CALL InitKeyDisplay ;对键盘、数码管控制器8255初始化
CALL Init8259
CALL WriIntver
MOV Counter,0 ;中断次数
MOV ReDisplayFlag,0
STI ;开中断
START1:
LEA SI,Buffer
CALL LedDisplay5
CMP ReDisplayFlag,0
JNZ START2
CALL delay
CALL LedDisplay4
CMP ReDisplayFlag,0
JNZ START2
CALL delay
CALL LedDisplay3
CMP ReDisplayFlag,0
JNZ START2
CALL delay
CALL LedDisplay2
CMP ReDisplayFlag,0
JNZ START2
CALL delay
CALL LedDisplay
CMP ReDisplayFlag,0

JZ START1
START2:
mov dx,con_8255
mov al,80h
out dx,al
mov dx,pc_8255
mov al,0ffh
out dx,al
mov cx,10
CALL LedDisplay_a
again111:

CALL DISPLAY8
loop again111

mov ReDisplayFlag,0
LEA SI,Buffer



MOV CL,COUNTER
SHL LEDCON,CL
mov dx,con_8255
mov al,80h
out dx,al
mov dx,pc_8255

mov al,LEDCON
out dx,al
mov cx ,10
CALL LedDisplay_a
again222:

CALL DISPLAY8
loop again222
MOV LEDCON,0FFH
CALL LedDisplay_a
CALL DISPLAY8

CMP Counter,7
JNZ START2


START3:
LEA SI,Buffer


mov dx,con_8255
mov al,80h
out dx,al
mov dx,pc_8255
mov al,0ffh
out dx,al
mov cx,10

again333:
CALL LedDisplay_b

loop again333

mov ReDisplayFlag,0
LEA SI,Buffer



; MOV CL,COUNTER
mov ledcon,0b3h

mov dx,con_8255
mov al,80h
out dx,al
mov dx,pc_8255

mov al,LEDCON
out dx,al
mov cx ,10

again444:
CALL LedDisplay_b

loop again444
MOV LEDCON,0FFH



CMP Counter,8
JNZ START3
START4:
MOV Counter,1
JMP START2
Delay PROC NEAR ;延时
PUSH cx
MOV CX,60000
DL500ms1: LOOP DL500ms1
POP CX
RET
Delay ENDP
Delay2 PROC NEAR
PUSH CX

MOV CX,60000
CALL DISPLAY8
LOOP DELAY2
pop cx
ret
delay2 endp

Init8259 PROC NEAR
MOV DX,IO8259_0
MOV AL,13H
OUT DX,AL
MOV DX,IO8259_1
MOV AL,08H
OUT DX,AL
MOV AL,09H

OUT DX,AL
MOV AL,0FbH
OUT DX,AL
RET
Init8259 ENDP
WriIntver PROC NEAR
PUSH ES
MOV AX,0
MOV ES,AX
MOV DI,28H
LEA AX,INT_2
STOSW
MOV AX,CS
STOSW
POP ES
RET
WriIntver ENDP
LedDisplay_a PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AL,Counter

MOV Buffer,AL

MOV Buffer+1,AL

MOV Buffer+2,AL

MOV Buffer+3,AL

MOV Buffer+4,AL

MOV Buffer+5,AL

MOV Buffer+6,AL

MOV Buffer+7,AL
POP DX
POP CX
POP BX
POP AX
RET
LedDisplay_a ENDP
LedDisplay_b PROC NEAR
PUSH AX
PUSH BX
PUSH DX
LEA SI,buffer1 ;置显示缓冲器初值
MOV AH,7FH
LEA BX,SEG_TAB

LD0: MOV DX,PA_8255
LODSB
XLAT ;取显示数据
OUT DX,AL ;段数据->8255 PA 口;PA指示LED显示什么数据
INC DX ;扫描模式->8255 PB 口;PB哪个LED显示
MOV AL,AH
OUT DX,AL
CALL DL1 ;延迟1ms
MOV DX,PB_8255
MOV AL,0FFH
OUT DX,AL
TEST AH,01H
JZ LD1
ROR AH,01H
JMP LD0

LD1: POP DX
POP BX
POP AX
RET

LedDisplay_b ENDP
DL1 PROC NEAR ;延迟子程序
PUSH CX
MOV CX,500
LOOP $
POP CX
RET
DL1 ENDP

LedDisplay PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AL,6
MOV AH,AL
AND AL,0FH
MOV Buffer,AL
MOV AL,1
MOV AH,AL
AND AL,0FH
MOV Buffer + 1,AL
MOV AL,0
MOV AH,AL
AND AL,0FH
MOV Buffer + 2,AL
MOV AL,2
MOV AH,AL
AND AL,0FH
MOV Buffer + 3,AL
MOV Buffer + 4,10H
MOV Buffer + 5,10H
MOV Buffer + 6,10H
MOV Buffer + 7,10H
MOV CX , 20
AGAIN: CALL Display8
loop AGAIN
POP DX
POP CX
POP BX
POP AX
RET
LedDisplay ENDP
LedDisplay2 PROC NEAR
push ax
push bx
push cx
push dx
MOV BUFFER,10H
MOV AL,6
MOV AH,AL
AND AL,0FH
MOV Buffer+1,AL
MOV AL,1
MOV AH,AL
AND AL,0FH
MOV Buffer + 2,AL
MOV AL,0
MOV AH,AL
AND AL,0FH
MOV Buffer + 3,AL
MOV AL,2
MOV AH,AL
AND AL,0FH
MOV Buffer + 4,AL
MOV Buffer + 5,10H
MOV Buffer + 6,10H
MOV Buffer + 7,10H
mov cx , 20
again0: CALL Display8
loop again0
pop dx
pop cx
pop bx
pop ax
RET
LedDisplay2 ENDP
LedDisplay3 PROC NEAR
push ax
push bx
push cx
push dx
MOV BUFFER,10H
MOV BUFFER+1,10H
MOV AL,6
MOV AH,AL
AND AL,0FH
MOV Buffer+2,AL
MOV AL,1
MOV AH,AL
AND AL,0FH
MOV Buffer

+ 3,AL
MOV AL,0
MOV AH,AL
AND AL,0FH
MOV Buffer + 4,AL
MOV AL,2
MOV AH,AL
AND AL,0FH
MOV Buffer + 5,AL
MOV Buffer + 6,10H
MOV Buffer + 7,10H
mov cx , 20
again1: CALL Display8
loop again1
pop dx
pop cx
pop bx
pop ax
RET
LedDisplay3 ENDP
LedDisplay4 PROC NEAR
push ax
push bx
push cx
push dx
MOV BUFFER,10H
MOV BUFFER+1,10H
MOV BUFFER+2,10H
MOV AL,6
MOV AH,AL
AND AL,0FH
MOV Buffer+3,AL
MOV AL,1
MOV AH,AL
AND AL,0FH
MOV Buffer + 4,AL
MOV AL,0
MOV AH,AL
AND AL,0FH
MOV Buffer + 5,AL
MOV AL,2
MOV AH,AL
AND AL,0FH
MOV Buffer + 6,AL
MOV Buffer + 7,10H
mov cx , 20
again2: CALL Display8
loop again2
pop dx
pop cx
pop bx
pop ax
RET
LedDisplay4 ENDP
LedDisplay5 PROC NEAR
push ax
push bx
push cx
push dx
MOV BUFFER,10H
MOV BUFFER+1,10H
MOV BUFFER+2,10H
MOV BUFFER+3,10H
MOV AL,6
MOV AH,AL
AND AL,0FH
MOV Buffer+4,AL
MOV AL,1
MOV AH,AL
AND AL,0FH
MOV Buffer + 5,AL
MOV AL,0
MOV AH,AL
AND AL,0FH
MOV Buffer + 6,AL
MOV AL,2
MOV AH,AL
AND AL,0FH
MOV Buffer +7 ,AL
mov cx , 20
again3: CALL Display8
loop again3
pop dx
pop cx
pop bx
pop ax
RET
LedDisplay5 ENDP
INT_2: PUSH DX
PUSH AX
MOV AL,Counter
ADD AL,1
DAA
MOV Counter,AL
MOV ReDisplayFlag,1
MOV DX,IO8259_0
MOV AL,20H
OUT DX,AL
POP AX
POP DX
IRET
END START










相关文档
最新文档