资源描述
MODEL TINY
PCIBAR3 EQU 1CH ;8位I/O空间基地址(它就是实验仪的基地址, 也为DMA & 32 BIT ;RAM板卡上的8237提供基地址)
Vendor_ID EQU 10EBH ;厂商ID号
Device_ID EQU 8376 ;设备ID号
.STACK 100
.DATA
IO_Bit8_BaseAddress DW ?
msg0 DB 'BIOS不支持访问PCI $'
msg1 DB '找不到Star PCI9052板卡 $'
msg2 DB '读8位I/O空间基地址时出错$'
COM_ADD DW 00F3H ;控制口偏移量
GGG DW ?
HHH DW ?
WWW DW ?
PA_ADD DW 00F0H ;PA口偏移量
PB_ADD DW 00F1H ;PB口偏移量
PC_ADD DW 00F2H ;PC口偏移量
XXX DW ?
LED_Data DB 11001100B ;红灯全亮
DB 01010110B ;东西绿灯,南北红灯。 从高位7到低位0为0则亮,1则灭。排线反接则顺序颠倒亮。
DB 11011110B ;东西绿灯闪烁,南北红灯
DB 10011010B ;东西黄灯亮,南北红灯
DB 01100101B ;东西红灯,南北绿灯
DB 11101101B ;东西红灯,南北绿灯闪烁
DB 10101001B ;东西红灯,南北黄灯亮
SG DB 6fH,7fH,07H,7dH,6dH,66H,4fH,5bH,06H,3fH ;9-0
.CODE
START: MOV AX,@DATA
MOV DS,AX
NOP
CALL InitPCI
CALL ModifyAddress ;根据PCI提供的基地址,将偏移地址转化为实地址
MOV AL,10000000B ;PA、PB、PC为基本输出模式
MOV DX,COM_ADD
OUT DX,AL ;灯全亮
MOV BX,OFFSET LED_Data
MOV DX,PA_ADD
start0: MOV AL,0 ;红灯全亮
XLAT
OUT DX,AL
CALL DL500ms
START1: MOV AL,01111101B ;东西绿灯,南北红灯
OUT DX,AL
CALL DL5S
MOV SI, 3FH
MOV DI, 4FH
CALL DJS
MOV CX,5
START2: MOV AL,01111101B ;东西绿灯闪烁,南北红灯
OUT DX,AL
CALL DL500ms
MOV AL,11111101B
OUT DX,AL
CALL DL500ms
LOOP START2
MOV AL,10111101B ;东西黄灯亮,南北红灯
OUT DX,AL
CALL DL3S
MOV AL,11010111B ;东西红灯,南北绿灯
OUT DX,AL
CALL DL5S
MOV CX,5
MOV SI,3FH
MOV DI,4FH
CALL,DJS
START3: MOV AL,11010111B ;东西红灯,南北绿灯闪烁
OUT DX,AL
CALL DL500ms
MOV AL,11011111B
OUT DX,AL
CALL DL500ms
LOOP START3
MOV AL,11011011B ;东西红灯,南北黄灯亮
OUT DX,AL
CALL DL3S
JMP START1
;倒计时显示程序
DJS PROC NEAR
PUSH DX
PUSH CX
PUSH BX
PUSH AX
PRT:
NUM:
MOV Al, [SI] ;设置段选码,将SI中的内容送入PA口
MOV DX, PA_ADD
OUT DX, Al
MOV Al, 0FcH ;设置位选码,PC0口置0高四位为0
MOV DX, PC_ADD ;其他口为1来选中LED1,显示个位
OUT DX, Al
CALL DELAY
MOV Al, [DI] ;设置段选码,将DI中的内容送入PA口
MOV DX, PA_ADD
OUT DX, Al
MOV Al, 0FDH ;设置位选码,PC1口置0高四位为0
MOV DX, PC_ADD ;其他口为1来选中LED2,显示十位
OUT DX, Al
CALL DELAY
LOOP NUM ;循环到NUM
INC SI ;个位SI自增1
CMP SI, OFFSET SG + 10 ;与表外的第一个偏移地址相比较,如果不
JNZ PRT ;等则显示数据且SI+1,如果相等顺序执
INC DI ;十位DI自增1
MOV SI, OFFSET SG ;将SG即9的偏移地址送给SI
CMP DI, OFFSET SG + 10 ;与表外的第一个偏移地址相比较,如果不
JNZ PRT ;等则显示数据且DI+1,如果相等顺序执行
mov al, 0
out dx, al
POP AX ;结束子程序
POP BX
POP CX
POP DX
RET
DJS ENDP
DL500ms PROC NEAR
PUSH AX
PUSH DX
MOV DX,500 ;延时500ms
MOV AH,0FFH ;星研公司提供的软中断
INT 21H
POP DX
POP AX
RET
DL500ms ENDP
DL3S PROC NEAR
PUSH CX
MOV CX,6
DL3S1: CALL DL500ms
LOOP DL3S1
POP CX
RET
ENDP
DL5S PROC NEAR
PUSH CX
MOV CX,10
DL5S1: CALL DL500ms
LOOP DL5S1
POP CX
RET
ENDP
InitPCI PROC NEAR
MOV AH,00H
MOV AL,03H
INT 10H ;清屏
MOV AH,0B1H
MOV AL,01H
INT 1AH
CMP AH,0
JZ InitPCI2
LEA DX,msg0
InitPCI1: MOV AH,09H
INT 21H
JMP Exit
InitPCI2: MOV AH,0B1H
MOV AL,02H
MOV CX,Device_ID
MOV DX,Vendor_ID
MOV SI,0
INT 1AH
JNC InitPCI3 ;是否存在Star PCI9052板卡
LEA DX,msg1
JMP InitPCI1
InitPCI3: MOV DI,PCIBAR3
MOV AH,0B1H
MOV AL,09H
INT 1AH ;读取该卡PCI9052基地址
JNC InitPCI4
LEA DX,msg2
JMP InitPCI1
InitPCI4: AND CX,0FFFCH
MOV IO_Bit8_BaseAddress,CX
RET
InitPCI ENDP
ModifyAddress PROC NEAR
ADD COM_ADD,CX
ADD PA_ADD,CX
ADD PB_ADD,CX
ADD PC_ADD,CX
RET
ModifyAddress ENDP
Exit: MOV AH,4CH
INT 21H
END START
展开阅读全文