波形发生器汇编语言程序:
;T0832-5.asm
IOY0 EQU 0DA00H ;片选IOY0对应的端口始地址
DA0832 EQU IOY0+00H*4 ;DA0832的端口地址
DANUM EQU 0FFH
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
STR1 DB '1. Triangle SQUARE Wave ',0AH,0DH,'$' ;定义显示的字符串方波STR2 DB '2. Triangle DELTA Wave ', 0AH,0DH,'$' ;定义显示的字符串三角波STR3 DB '3. Triangle SAWTOOTH Wave ', 0AH,0DH,'$' ;定义显示的字符串锯齿波STR4 DB '4. Triangle SINE Wave ', 0AH,0DH,'$' ;定义显示的字符串正弦波STR5 DB '5. EXIT ',0AH,0DH,'$' ;定义显示的字符串退出FLAG DB 0
SIN DB 00H,02H,05H,09H,0FH,15H,1DH,25H
DB 2EH,38H,43H,4FH,5AH,67H,73H,7FH
DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H
DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH
DB 0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH
DB 0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H
DB 7FH,73H,67H,5AH,4FH,43H,38H,2EH
DB 25H,1DH,15H,0Fh,09H,05H,02H,00H
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK1
MOV SS,AX
MOV DX,OFFSET STR1 ;显示字符串1
MOV AH,9
INT 21H
MOV DX,OFFSET STR2 ;显示字符串2
MOV AH,9
INT 21H
MOV DX,OFFSET STR3 ;显示字符串3
MOV AH,9
INT 21H
MOV DX,OFFSET STR4 ;显示字符串4
MOV AH,9
INT 21H
MOV DX,OFFSET STR5 ;显示字符串5
MOV AH,9
INT 21H
LOOP1:
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ LOOP2 ;无按键则跳回继续循环,有则退出
MOV AH,0 ;读键盘
INT 16H
CMP AL,31H
JZ SQUARE
CMP AL,32H
JZ DELTA
CMP AL,33H
JZ SAWTOOTH
CMP AL,34H
JNZ L05
JMP SINE
L05: CMP AL,35H
JNZ LOOP2
JMP QUIT
LOOP2:
CMP FLAG,1
JZ SQUARE
CMP FLAG,2
JZ DELTA
CMP FLAG,3
JZ SAWTOOTH
CMP FLAG,4
JZ SINE
JMP LOOP1
SQUARE:
MOV FLAG,1
MOV DX,DA0832 ;写00H,输出低电平
MOV AL,00H
OUT DX,AL
MOV CX,DANUM
L03: CALL DALLY
LOOP L03
MOV DX,DA0832 ;写0FH,输出高电平 MOV AL,DANUM
OUT DX,AL
MOV CX,DANUM
L04: CALL DALLY
LOOP L04
JMP LOOP1
DELTA:
MOV FLAG,2
MOV AL,00H ;D/A转换起始值UP: MOV DX,DA0832 ;启动D/A转换
OUT DX,AL
CALL DALLY
INC AL
CMP AL,DANUM
JNE UP
DOWN: MOV DX,DA0832
OUT DX,AL
CALL DALLY
DEC AL
CMP AL,00H
JNE DOWN
JMP LOOP1
SAWTOOTH:
MOV FLAG,3
MOV AL,00H ;D/A转换起始值
L01: MOV DX,DA0832 ;启动D/A转换
OUT DX,AL
CALL DALLY
INC AL
CMP AL,DANUM
JNE L01
JMP LOOP1
SINE:
MOV FLAG,4
MOV SI,OFFSET SIN ;SI指向SIN
MOV CL,64 ;数据数为64个
L02: MOV AL,[SI]
MOV DX,DA0832 ;输入0832数据口 OUT DX,AL
CALL DALLY
INC SI ;指向下一个数据 DEC CL ;数据数减1
JNZ L02
JMP LOOP1
QUIT: MOV AX,4C00H ;返回到DOS
INT 21H
DALLY PROC NEAR ;软件延时子程序 PUSH CX
PUSH AX
MOV CX,0010H
D1: MOV AX,0100H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START。