📄 send1.asm
字号:
;*******************************;
; cs0<->cs0809,AN0<->ADIN0,CS1<->CS244,EOC<->IN0
; 调节电位器V.ARJ可以调整AN0处的电压
; 模数转换,前端数码管显示,后端在屏幕上显示
;*******************************;
;1: allowiio 0xdc80 0xdc82 0xdc84 0xdc86 0xdc88 0xdc8A 0xdc8C 0xdc90 0xdc92 0xdca0 0xdcb0
;2: send1.exe
;------数据段---------------------
DATA SEGMENT
IOPORT EQU 0DC00H
IO0809A EQU IOPORT+0A0H ;0809
CS244 EQU IOPORT+0B0H
DAT8279 EQU IOPORT+090H ;8279
CON8279 EQU IOPORT+092H
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
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
;---------8279初始化--------------------
MOV DI,OFFSET LED
MOV AX,08H ;work mode 16bit ,left in
MOV DX,CON8279
OUT DX,AX
CALL BLACK
START1: MOV BX,80H ;set the fisrt led
DISP: MOV AX,BX
MOV DX,CON8279 ;write command of display ram,address inc
OUT DX,AX
MOV DX,DAT8279
PUSH DX
MOV DX,IO0809A ;启动A/D转换器
OUT DX,AX
WAITE: MOV DX,CS244
IN AX,DX
AND AX,1
CMP AX,1
JNE WAITE ;如果EOC=0,waiting....
MOV DX,IO0809A
IN AX,DX ;从A/D转换器输入数据 转换结束
call DELAY
CALL SEND
MOV CX,AX
PUSH CX
AND AX,0F0H
MOV CL,4
SAR AX,CL
POP CX
MOV DI,AX
MOV AX,DS:[DI]
POP DX
OUT DX,AX
CALL ADDRESS_INC
MOV AX,CX
AND AX,0FH
MOV DI,AX
MOV AX,DS:[DI]
OUT DX,AX
MOV AH,06H ;判断是否有键按下
MOV DL,0FFH
INT 21H
;POP DX
JE START1
JMP EXIT
EXIT: MOV AX,4C00H
INT 21H
;----负责将8279RAM清零-------------------------------
BLACK PROC
B1: MOV DX,CON8279
MOV AX,0D1H
OUT DX,AX ;显示RAM全部清零
WAITE2: IN AL,DX
AND AL,80H
JNZ WAITE2 ;waite for clear command
RET
BLACK ENDP
;----------负责数码管地址修改----------
ADDRESS_INC PROC
PUSH AX
PUSH DX
INC BX
MOV AX,BX
MOV DX,CON8279 ;write command of display ram,address inc
OUT DX,AX
POP DX
POP AX
RET
ADDRESS_INC 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
DELAY PROC NEAR
PUSH AX
PUSH CX
MOV AX,0500H
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 + -