⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 da.asm

📁 D/A转换(DA)连线: 228-22F端口(数码管上方)->0832的CS(DMA键正上方)
💻 ASM
字号:
;386以上微机适用
;纯dos下才能使用
;tasm4.1或以上编译
;*********************;
;*       0832        *;
;*********************;
 io_plx_device_id	equ 05406h	;TPC卡设备ID
 io_plx_vendor_id	equ 010b5h	;TPC卡厂商ID
 IO_PLX_SUB_ID		EQU 0905410B5H	;TPC卡子设备及厂商ID
 DA	EQU	228H-200H	;0832端口地址
;--------------------------------------
CRLF MACRO
	MOV DL,0DH
	MOV AH,02H
	INT 21H
	MOV DL,0AH
	MOV AH,02H
	INT 21H
ENDM
;--------------------------------------
data segment
 io_base_address	db 4 DUP(0)	;TPC卡I/O基地址暂存空间
 pcicardnotfind		db 0dh,0ah,'TPC pci card not find or address/interrupt error !!!',0dh,0ah,'$'
 iobaseaddress		db 0dh,0ah,'TPC pci card I/O Base Address : ','$'
 enter_return		db 0dh,0ah,'$'
 MESS1 DB 'START D/A--1,press any key to next step !',0DH,0AH,'$'
 MESS2 DB 'START D/A--2,press any key to next step !',0DH,0AH,'$' 
 MESS3 DB 'START D/A--3,press any key to end !',0DH,0AH,'$'
 SINBUF DB 128,88,53,24,6,0,6,24,53,88,128,168,203,232
	DB 250,255,250,232,203,168
data ends
stacks segment
 db 100 dup (?)
 STA DB 20 DUP(?)
 TOP EQU LENGTH STA
stacks ends
code segment
        assume cs:code,ds:data,ss:stacks,es:data
start:
.386
        cli
        mov ax,data
        mov ds,ax
        mov es,ax
        mov ax,stacks
        mov ss,ax
	call	findtpc		;查找TPC卡资源并显示

	MOV AX,TOP
	MOV SP,AX
        MOV DX,OFFSET MESS1
	MOV AH,09H
	INT 21H
A1:
	MOV CX,0FFH
	MOV  DX,word ptr io_base_address
	add  dx,DA
	MOV AL,00H
BBB:
	OUT DX,AL
	INC DX
	OUT DX,AL
        DEC DX
        ADD AL,10H
	CMP AL,00H
	JNZ BBB
        LOOP BBB
        sti
        MOV    AH,01H
        INT    16H
        jz     a1
        mov    ah,00h
        int    16h
	CRLF
	MOV DX,OFFSET MESS2
	MOV AH,09H
	INT 21H
DDD:
	MOV CX,0FFH
	MOV  DX,word ptr io_base_address
	add  dx,DA
	MOV AL,00H
EEE:
	OUT DX,AL
	INC DX
	OUT DX,AL
	DEC DX
	ADD AL,10H
	CMP AL,0F0H
	JNZ EEE
FFF:
	OUT DX,AL
	INC DX
	OUT DX,AL
	DEC DX
	SUB AL,10H
	CMP AL,00H
	JNZ FFF	 	 
	LOOP EEE
	sti
	MOV    AH,01H
	INT    16H
	jz     ddd
	mov    ah,00h
	int    16h

	CRLF
	MOV DX,OFFSET MESS3
	MOV AH,09H
	INT 21H
GGG:
	MOV CX,0FFH
	MOV  DX,word ptr io_base_address
	add  dx,DA
HHH:
	MOV SI,OFFSET SINBUF
	MOV BL,20
III:
	MOV AL,[SI]
	OUT DX,AL
	INC DX
	OUT DX,AL
	DEC DX
	INC SI
	DEC BL
	JNZ III
	LOOP HHH
	sti
	MOV    AH,01H
	INT    16H
	jz     ggg
	mov    ah,00h
	int    16h

	mov ax,4c00h
	int 21h		;退出

findtpc proc near		;查找TPC卡资源并显示
	pushad
	pushfd
	MOV	AX,0B101H
	INT	1AH
	JC	findtpc_notfind		;检查PCI BIOS是否存在

	MOV	AX,0B102H
	MOV	CX,io_plx_device_id
	MOV	DX,io_plx_vendor_id
	MOV	SI,0
	INT	1AH
	JC	findtpc_notfind		;检查TPC卡是否安装,设备号、厂商号

	MOV	AX,0B10AH
	MOV	DI,02CH
	INT	1AH
	JC	findtpc_notfind
	CMP	ECX,IO_PLX_SUB_ID
	JNZ	findtpc_notfind		;检查TPC卡是否安装,子设备号、厂商号

	MOV	AX,0B10AH
	MOV	DI,18H
	INT	1AH
	JC	findtpc_notfind		;读TPC卡I/O基址信息
	mov	dword ptr io_base_address,ecx
	and	ecx,1
	jz	findtpc_notfind		;检查是否为i/o基址信息
	mov	ecx,dword ptr io_base_address
	and	ecx,0fffffffeh
	mov	dword ptr io_base_address,ecx	;去除i/o指示位并保存

	mov	dx,offset iobaseaddress		;显示i/o提示信息
	mov	ah,09h
	int	21h
	mov	ax,word ptr io_base_address
	call	dispword			;显示i/o基地址

	mov	dx,offset enter_return		;加回车符,换行符
	mov	ah,09h
	int	21h
	popfd
	popad
	ret
findtpc_notfind:
	mov dx,offset pcicardnotfind		;显示未找到tpc卡提示信息
	mov ah,09h
	int 21h
	mov ax,4c00h
	int 21h		;退出
findtpc endp

dispword proc near		;显示子程序
	push dx
	push cx
	push bx
	mov cx,4
	mov bx,16
dispword_loop1:
	push ax
	push cx
	sub bx,4
	mov cx,bx
	shr ax,cl
	and al,0fh	;首先取低四位
	mov dl,al
	cmp dl,9	;判断是否<=9
	jle dispword_num		;若是则为'0'-'9',ASCII码加30H
	add dl,7	;否则为'A'-'F',ASCII码加37H
dispword_num:
	add dl,30h
	mov ah,02h	;显示
	int 21h
	pop cx
	pop ax
	loop dispword_loop1
	pop bx
	pop cx
	pop dx
	ret		;子程序返回
dispword endp
code ends
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -