📄 pcda.asm
字号:
; FILENAME: PCDA.ASM
; 内容: 数模转换
PAGE 60,78
DATA SEGMENT
MESS DB 0DH,0AH,'PLEASE SELECT: ',0DH,0AH
DB ' TOOTHED WAVE: 1',0DH,0AH
DB ' TRIANGLE WAVE: 2',0DH,0AH
DB ' SINE WAVE: 3',0DH,0AH
DB ' BACK TO DOS: Q',0DH,0AH,'$'
MESS1 DB 'NOW, OUTPUT TOOTHED WAVE, QUIT WITH ANY KEY!', 0DH,0AH,'$'
MESS2 DB 'NOW, OUTPUT TRIANGLE WAVE, QUIT WITH ANY KEY!', 0DH,0AH,'$'
MESS3 DB 'NOW, OUTPUT SINE WAVE,QUIT WITH ANY KEY!' ,0DH,0AH,'$'
SINBF DB 128,88,53,24,6,0,6,24,53,88,128,168,203,232,250
DB 255,250,232,203,168
DLTA DB 10H
DATA ENDS
STACK SEGMENT STACK 'STACK'
DB 50 DUP('S')
STACK ENDS
CODE SEGMENT
ASSUME CS : CODE, DS: DATA, SS : STACK
START: MOV AX,DATA
MOV DS,AX
STA: MOV DX,OFFSET MESS ;显示MESS
MOV AH, 09H
INT 21H
STT: MOV AH,7 ;等待键入,分支转移
INT 21H
CMP AL,'1'
JZ TOOTH
CMP AL,121
JZ TRGL
CMP AL,13
JZ SINE
CMP AL ,'Q'
JNZ STT
MOV AX, 4C00H
INT 21H ;返回DOS
TRGL : JMP TRGL1
SINE : JMP SINE1
TOOTH: MOV DX,OFFSET MESS1 ;显示MESS1
MOV AH, 9
INT 21H
MOV AL, 00H
BBB1: MOV DX,228H ;输出锯齿波
BBB: OUT DX, AL
INC DX
OUT DX,AL ;输出一个数据
ADD AL, DLTA
PUSH AX
MOV DL, 0FFH ; 查键盘
MOV AH, 6
INT 21H
POP AX
JZ BBB1 ;无键按下则继续输出
JMP STA ;有键按下则重新选择
TRGL1:MOV DX,OFFSET MESS2 ;显示MESS2
MOV AH, 9
INT 21H
MOV AL,00H
DDD: MOV DX,228H ;输出三角波
OUT DX, AL
INC DX
OUT DX,AL ;输出一个数据
PUSH AX
MOV DL, 0FFH
MOV AH, 06H
INT 21H
JNZ STA1
POP AX
ADD AL, DLTA
CMP AL, 0F0H
JNZ DDD ;输出上升沿
EEE: MOV DX, 228H
FFF: OUT DX, AL
INC DX
OUT DX,AL ;输出一个数据
PUSH AX
MOV DL, 0FFH ;查键盘
MOV AH, 6
INT 21H
JNZ STA1
POP AX
SUB AL, DLTA
CMP AL, 00H
JNZ EEE ;输出下降沿
JZ DDD ;无键按下则继续输出
STA1: JMP STA
SINE1: MOV DX,OFFSET MESS3 ;显示MESS3
MOV AH, 9
INT 21H
HHH: MOV SI,OFFSET SINBF ;SI指向缓冲区
MOV BL, 20 ;一周20点
III: MOV DX, 228H
MOV AL, [SI] ;输出一个点
OUT DX, AL
INC DX
OUT DX,AL ;输出一个数据
MOV DL, 0FFH ;查键盘
MOV AH, 06
INT 21H
JNZ STA2 ;有键按下转菜单
INC SI
DEC BL
JNZ III ;一周末完继续输出
JMP HHH ;无键按下则继续输出
STA2: JMP STA ;有键按下则重新选择
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -