;==============================================
;微机接口
;多功能数据采集系统综合设计实验
;BY 20052025 DiaoMin(刁民www.diaomin.org) 07-12-24
;================================================
TIME EQU 0FFFH
INT00 EQU 200H
INT01 EQU 201H
Z8279 EQU 212H
D8279 EQU 210H
LEDMODE EQU 00
LEDFEQ EQU 38H
STACK SEGMENT
STACK ENDS
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS
ATA ,SS:STACK ,ES
ATA
START: CLI ;关中断
MOV AX,8000H
MOV ES,AX
MOV DI,0020H ;设置中断向量号8
MOV AX,OFFSET INT_PROC ;偏移地址
STOSW
MOV AX,8100H ;段地址
STOSW
;********************8259初始化*********************
MOV AL,13H
MOV DX,INT00
OUT DX,AL ;设置ICW1
MOV AL,08H ;设置中断向量号为8
MOV DX,INT01
OUT DX,AL ;设置ICW2
MOV CX,TIME
L00:LOOP L00
MOV AL,01H
MOV DX,INT01
OUT DX,AL ;设置ICW4
MOV CX,TIME
L01:LOOP L01
;********************8279初始化*********************
MOV DX,Z8279
MOV AL,LEDMODE
OUT DX,AL ;设置8279工作方式
MOV AL,LEDFEQ
OUT DX,AL
MOV DX,INT01
MOV AL,00H
OUT DX,AL ;设置OCW1,使8位中断请求全部开放
MOV CX,TIME
L02:LOOP L02
MOV DX,Z8279
MOV AL,0D0H
OUT DX,AL ;设置8279工作在清除方式,将显示RAM全部清零
MOV CX,TIME
L05:LOOP L05
;*************8253初始化,计数器0,1工作在方式3*********************
MOV DX,21BH ;设置8253控制寄存器口地址
MOV AL,36H
OUT DX,AL
MOV DX,218H
MOV AX,200 ; 设置计数初值为200
OUT DX,AL ;低字节送计数器
MOV AL,AH
OUT DX,AL ;高字节
MOV DX,21BH
MOV AL,36H
OUT DX,AL
MOV DX,219H
MOV AX,200 ; 设置计数初值为200
OUT DX,AL
MOV AL,AH
OUT DX,AL
;********************8255初始化*********************
MOV DX,223H
MOV AL,80H
OUT DX,AL ;B口方式0输出
NEXT: MOV DX,208H
MOV AL,00H
OUT DX,AL
CALL DELAY
STI ;开中断
HLT ;等待外部中断
JMP NEXT
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H
DB 7CH,39H,5EH,79H,71H
;中断处理程序部分
INT_PROC PROC FAR
PUSH AX
PUSH CX
PUSH DX
MOV CX,TIME
L1: LOOP L1
;----------------------发光二极管显示
IN AL,DX
MOV CX,TIME
L2: LOOP L2
NOT AL
MOV DX,221H
OUT DX,AL
;---------------------数码管显示
IN AL,DX
PUSH AX
MOV DX,Z8279
MOV AL,80H
OUT DX,AL ;在指定位置的数码管上输出数据
POP AX
PUSH AX
AND AL,0FH
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;低位换码显示
POP AX
PUSH AX
MOV DX,Z8279
MOV AL,81H
OUT DX,AL ;在指定位置的数码管上输出数据
POP AX
PUSH AX
MOV CL,4H
SHR AL,CL
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;高位换码显示
POP AX
MOV DX,INT00
MOV AL,20H
OUT DX,AL ;设置OCW2,发中断结束命令
MOV CX,TIME
L03:LOOP L03
POP DX
POP CX
POP AX
IRET
INT_PROC ENDP
;延时
DELAY PROC NEAR
PUSH CX
MOV CX,0F00H
LOOP $
POP CX
RET
DELAY ENDP
CODE ENDS
END START
快速链接:http://www.diaomin.org/go/18175.html
随机文章:
Tags:




没人甩我?!
到此一游