📄 wjks.asm
字号:
ADPORT EQU 2A8H
DAPORT EQU 2A0H
PORT8253 EQU 288H
PORT8255A EQU 280H
CLKPORT EQU PORT8255A ;8255A D7为CLK输入
DATA SEGMENT
MESS DB 'THIS IS FUNCTION SOURCE EXPERIMENT!',0DH,0AH,'$'
MESS1 DB 'PRESS [Z] OR [F] OR [S] KEYWORDS WILL OUTPUT FUNCTION!',0DH,0AH,'$'
MESS2 DB 0DH,0AH,'THIS IS FUNCTION Z',0DH,0AH,'$'
MESS3 DB 0DH,0AH,'THIS IS FUNCTION F',0DH,0AH,'$'
MESS4 DB 0DH,0AH,'THIS IS FUNCTION S',0DH,0AH,'$'
SIN DB 07FH ,089H ,093H ,09DH ,0A6H ,0B0H ,0B9H ,0C2H ,0CAH ,0D2H ,0D9H ,0E0H ,0E6H ,0ECH ,0F1H ,0F5H
DB 0F8H ,0FBH ,0FDH ,0FEH ,0FEH ,0FEH ,0FDH ,0FBH ,0F8H ,0F5H ,0F1H ,0ECH ,0E6H ,0E0H ,0D9H ,0D2H
DB 0CAH ,0C2H ,0B9H ,0B0H ,0A6H ,09DH ,093H ,089H ,07FH ,075H ,06BH ,061H ,058H ,04EH ,045H ,03CH
DB 034H ,02CH ,025H ,01EH ,018H ,012H ,00DH ,009H ,006H ,003H ,001H ,000H ,000H ,000H ,001H ,003H
DB 006H ,009H ,00DH ,012H ,018H ,01EH ,025H ,02CH ,034H ,03CH ,045H ,04EH ,058H ,061H ,06BH ,075H ;正弦数据表
N EQU 79;80个正弦数据
DATA ENDS
STACK SEGMENT STACK
DB 100H DUP(0);初始化堆栈大小为100
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN PROC ;主程序入口
MOV AX,DATA
MOV DS,AX
LEA DX,MESS
MOV AH,09H
INT 21H
LEA DX,MESS1
MOV AH,09H
INT 21H
MOV DX,PORT8253+3
MOV AL,01110110B ;8253 1工作方式3
OUT DX,AL
MOV DX,PORT8253+1
MOV BX,100 ;计数初值100
MOV AL,BL
OUT DX,AL
MOV AL,BH
OUT DX,AL
MOV DX,PORT8255A+3
MOV AL,10011011B
OUT DX,AL
CALL KEYTEST
MAIN ENDP
KEYTEST PROC
NXT:
MOV DX,ADPORT
OUT DX,AL
MOV CX,1
CALL CLKTEST
MOV AL,0
MOV AH,0BH
INT 21H
TEST AL,1
JNZ NXT1
JMP NXT2
NXT1:
POP AX
MOV AH,01H
INT 21H
PUSH AX
NXT2:
POP AX
PUSH AX
CMP AL,'Z'
JNZ F
CALL SINF
F: CMP AL,'F'
JNZ S
CALL FF
S: CMP AL,'S'
JNZ EXIT
CALL SF
EXIT:CMP AL,'Q'
JNZ NXT
MOV AX, 4C00H ;程序结束,返回到操作系统系统
INT 21H
RET
KEYTEST ENDP
SINF PROC ;正弦波产生
PUSH AX
;LEA DX,MESS2
;MOV AH,09H
;INT 21H
MOV BX,0
CALL ADCHK
MOV DX,DAPORT
SIN1:
MOV AL,SIN[BX]
OUT DX,AL
AND AL,0FH
ADD AL,30H
MOV AH,2
MOV DL,AL
INT 21H
MOV DL,7CH
INT 21H
CALL CLKTEST
INC BX
CMP BX,N
JLE SIN1
POP AX
RET
SINF ENDP
FF PROC ;方波产生
PUSH AX
;LEA DX,MESS3
;MOV AH,09H
;INT 21H
CALL ADCHK
MOV DX,DAPORT
MOV AL,0
OUT DX,AL
PUSH AX ;数据测试
AND AL,0FH
ADD AL,30H
MOV AH,2
MOV DL,AL
INT 21H
MOV DL,7CH
INT 21H
POP AX ;数据测试
PUSH AX
MOV AX,40
FX: CALL CLKTEST
DEC AX
JNZ FX
POP AX
MOV DX,DAPORT
MOV AL,0FEH
OUT DX,AL
PUSH AX ;数据测试
AND AL,0FH
ADD AL,30H
MOV AH,2
MOV DL,AL
INT 21H
MOV DL,7CH
INT 21H
POP AX ;数据测试
PUSH AX
MOV AX,40
FZ: CALL CLKTEST
DEC AX
JNZ FZ
POP AX
POP AX
RET
FF ENDP
SF PROC ;三角波产生
PUSH AX
;LEA DX,MESS4
;MOV AH,09H
;INT 21H
CALL ADCHK
MOV AL,0
MOV DX,DAPORT
SFN: OUT DX,AL
PUSH AX ;数据测试
AND AL,0FH
ADD AL,30H
MOV AH,2
MOV DL,AL
INT 21H
MOV DL,7CH
INT 21H
POP AX ;数据测试
INC AL
CALL CLKTEST
CMP AL,41
JB SFN
SFN1:DEC AL
CALL CLKTEST
OUT DX,AL
PUSH AX ;数据测试
AND AL,0FH
ADD AL,30H
MOV AH,2
MOV DL,AL
INT 21H
MOV DL,7CH
INT 21H
POP AX ;数据测试
CMP AL,1
JA SFN1
POP AX
RET
SF ENDP
CLKTEST PROC ;脉冲检测D7
PUSH DX
PUSH AX
PUSH CX
PUSH BX
MOV DX,CLKPORT
RO: IN AL,DX
TEST AL,80H
JNZ R1
JMP RO
R1: IN AL,DX
TEST AL,80H
JZ NET1
JMP R1
NET1:LOOP RO
POP BX
POP CX
POP AX
POP DX
RET
CLKTEST ENDP
ADCHK PROC ;模拟量检测
PUSH BX
MOV DX,ADPORT
IN AL,DX
CMP AL,0
JNZ ADN
INC AL
ADN: MOV AH,0
MOV CX,AX
POP BX
RET
ADCHK ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -