📄 send3.asm
字号:
;*******************************;
;*******273********cs0<->cs273,D0~D7依次接LED1~LED8*
;*****A/D转换******cs1<->cs0809,AN0<->ADIN0,CS2<->CS244,EOC<->IN0
;*****D/A转换******cs3<->cs0832,DAOUT<->示波器,DS跳线1<->2
;*******244********cs2<->cs244,IN0~IN7依次接k1~k8 *;
; 调节电位器V.ARJ可以调整AN0处的电压
; 模数转换,前端数码管显示,后端在屏幕上显示
;*******************************;
;1: allowio 0xdc80 0xdc82 0xdc84 0xdc86 0xdc88 0xdc8A 0xdc8C 0xdc90 0xdc92 0xdca0 0xdcb0 0xdcd0 0xdcd2 0xdcc0
;2: send1.exe
;------数据段---------------------
DATA SEGMENT
IOPORT EQU 0DC00H
LS273 EQU IOPORT+0A0H ;273
IO0809A EQU IOPORT+0B0H ;0809
; CS259 EQU IOPORT+0C0H
;0832
IO0832L EQU IOPORT+0D0H ;LATCH DATA ADDRESS
IO0832S EQU IOPORT+0D2H ;START TRANSLATE ADDRESS
CS244 EQU IOPORT+0C0H ;244
ADDR1 EQU IOPORT+80H ;8250
ADDR2 EQU IOPORT+82H ;interrupt enable register/ LOW BYTE OF DIVI
INTFR EQU IOPORT+84H ;interrupt flag register
LCR EQU IOPORT+86H ;line control register
MCR EQU IOPORT+88H ;modem control register
LSR EQU IOPORT+8AH ;line status register
MSR EQU IOPORT+8CH ;modem status register
DAT8279 EQU IOPORT+090H ;8279
CON8279 EQU IOPORT+092H
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH
DATA ENDS
;---------代码段-----------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,LCR
MOV AX,80H
OUT DX,AX ;SET THE DLAB,ACCESS THE DIVI REGISTER
MOV DX,ADDR1
MOV AX,0CH
OUT DX,AX ;9600,SET divisor gene
MOV DX,ADDR2
MOV AX,0H
OUT DX,AX ;no interupt
MOV DX,LCR
MOV AX,07H ;no pe,8 bit, 1 stop
OUT DX,AX
MOV DX,ADDR2
MOV AX,0
OUT DX,AX ;no interupt
MOV DX,MCR
MOV AX,03H
OUT DX,AX ;双机通讯
MOV DX,LSR
IN AX,DX
MOV DX,ADDR1
IN AX,DX
MOV AX,0012H ;设屏幕显示方式为VGA 640X480模示
INT 10H
START1:
MOV AX,0600H
INT 10H ;清屏
AND CX,0 ;cx为横坐标
PUSH CX
AGAINX:
MOV DX,400
MOV AL,07H
MOV AH,0CH ;画点
INT 10H
CMP CX,639 ;一行是否满
JE START2 ;是则转start1
INC CX ;继续画点
JMP AGAINX
START2: ; CALL DELAY
;///// 作 Y 轴
MOV DX,0
AGAINY: MOV CX,0
MOV AL,07H
MOV AH,0CH
INT 10H
INC DX
CMP DX,400
JE START3
JMP AGAINY
START3:
; CALL DELAY
POP CX
;--------A/D转换------------------------
DRAW: MOV DX,IO0809A ;启动A/D转换器
OUT DX,AX
PUSH CX
MOV CX,100
WAITE: LOOP WAITE
POP CX
MOV DX,IO0809A
IN AX,DX ;从A/D转换器输入数据 转换结束\
push cx
mov cx,0
mov dx,4880
mov ah,86h
int 15h
pop cx
PUSH AX ;保护模拟量
;------从244读入逻辑开关状态----------------
MOV DX,CS244
IN AX,DX
CALL DISP0
CALL SEND ;发送数字量
POP AX
CALL DISP3
CALL SEND ;发送模拟量
CALL RECV
CALL DISP4
MOV DX,LS273
OUT DX,AX ;从273输出读到的数据
CALL RECV
AND AH,0
MOV DX,400 ;dx为纵坐标
SUB DX,AX
MOV AL,05H ;设置颜色
MOV AH,0CH ;画点
INT 10H
;CALL DELAY
CMP CX,639 ;一行是否满
JZ START1 ;是则转start1
INC CX ;继续画点
PUSH DX
MOV AH,06H ;是否有键按下
MOV DL,0FFH
INT 21H
POP DX
JE DRAW ;无,则继续画点
MOV AX,0003 ;有恢复屏幕为字符方式
INT 10H
EXIT: MOV AX,4C00H
INT 21H
;---------子程序部分--------------------------
;-----------输出子程序--------------
DISP0 PROC
PUSH BX
PUSH CX
;PUSH AX
;MOV DX,0101H
;MOV AH,02H
;INT 10H
;POP AX
;PUSH AX
;MOV DX,410
;MOV CX,40
;MOV AH,0CH
;INT 10H
;POP AX
PUSH AX
MOV DX,0128H
MOV AH,02H
INT 10H
POP AX
MOV BX,AX
MOV CL,4
SHR AL,CL
CMP AL,9
JLE DISP1
ADD AL,37H
MOV DL,AL
MOV AH,02H
INT 21H
JMP JS0
DISP1: ADD AL,30H
MOV AH,02H
MOV DL,AL
INT 21H
JS0: MOV AX,BX
AND AL,0FH
CMP AL,9
JLE DISP2
ADD AL,37H
MOV AH,02H
MOV DL,AL
INT 21H
JMP JS1
DISP2: ADD AL,30H
MOV AH,02H
MOV DL,AL
INT 21H
JS1: MOV AX,BX
POP CX
POP BX
RET
DISP0 ENDP
;-----------输出子程序--------------
DISP3 PROC
PUSH BX
PUSH CX
PUSH AX
MOV DX,0228H
MOV AH,02H
INT 10H
POP AX
MOV BX,AX
MOV CL,4
SHR AL,CL
CMP AL,9
JLE DISP13
ADD AL,37H
MOV DL,AL
MOV AH,02H
INT 21H
JMP JS3
DISP13: ADD AL,30H
MOV AH,02H
MOV DL,AL
INT 21H
JS3: MOV AX,BX
AND AL,0FH
CMP AL,9
JLE DISP23
ADD AL,37H
MOV AH,02H
MOV DL,AL
INT 21H
JMP JS13
DISP23: ADD AL,30H
MOV AH,02H
MOV DL,AL
INT 21H
JS13: MOV AX,BX
POP CX
POP BX
RET
DISP3 ENDP
;-----------输出子程序--------------
DISP4 PROC
PUSH BX
PUSH CX
;PUSH AX
;MOV DX,0101H
;MOV AH,02H
;INT 10H
;POP AX
;PUSH AX
;MOV DX,410
;MOV CX,40
;MOV AH,0CH
;INT 10H
;POP AX
PUSH AX
MOV DX,0328H
MOV AH,02H
INT 10H
POP AX
MOV BX,AX
MOV CL,4
SHR AL,CL
CMP AL,9
JLE DISP14
ADD AL,37H
MOV DL,AL
MOV AH,02H
INT 21H
JMP JS04
DISP14: ADD AL,30H
MOV AH,02H
MOV DL,AL
INT 21H
JS04: MOV AX,BX
AND AL,0FH
CMP AL,9
JLE DISP24
ADD AL,37H
MOV AH,02H
MOV DL,AL
INT 21H
JMP JS14
DISP24: ADD AL,30H
MOV AH,02H
MOV DL,AL
INT 21H
JS14: MOV AX,BX
POP CX
POP BX
RET
DISP4 ENDP
;-----------发送-----------------------------
SEND PROC
PUSH BX
MOV BX,AX ;将待发送值存到BX中
PUSH AX
PUSH DX
SEND1: MOV DX,LSR
IN AX,DX
TEST AX,20H
JNZ SEND2
JMP SEND1
SEND2: MOV AL,BL
MOV DX,ADDR1
OUT DX,AL
POP DX
POP AX
POP BX
RET
SEND ENDP
;--------接收子程序--------------------------
RECV PROC
MOV DX,LSR
IN AX,DX
TEST AX,01H ;TEST THE FLAG OF RECIEVE
JNZ RECV1
JMP RECV
RECV1: MOV DX,ADDR1
IN AL,DX
RET
RECV ENDP
;---------延时子程序--------------------------------
DELAY PROC NEAR
; PUSH AX
PUSH CX
; MOV AX,50H
DELAY1:
MOV CX,60000
LOOP1: LOOP LOOP1
; DEC AX
; JNZ DELAY1
POP CX
; POP AX
RET
DELAY ENDP
;------代码段结束-----------------
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -