⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wjks.asm

📁 该程序实现了微机控制的可以产生正弦波、三角波、方波,并可以使用键盘对其操作
💻 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 + -