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

📄 a20-2.asm

📁 用汇编设计音乐程序
💻 ASM
字号:
STACK SEGMENT STACK
      DW 256 DUP(?)
TOP   LABEL WORD
STACK ENDS

DATA  SEGMENT
TS        DB 64H
SPEC  	  DW 0064H
IBAND     DW 0060H
KPP       DW 1F60H
KII       DW 0010H
KDD       DW 0020H
CH1       DB ?
CH2       DB ?
YK        DW ?
CK        DB ?
TC        DB ?
TKMARK	  DB ?
ADMARK    DB ?
ADVALUE   DB ?
FPWM      DB ?
CK_1      DB ?
EK_1      DW ?
AEK_1     DW ?
BEK       DW ?
AAA       DB ?
VAA       DB ?
BBB       DB ?
VBB       DB ?
R0        DW ?
R1        DW ?
R2        DW ?
R3        DW ?
R4        DW ?
R5        DW ?
R6        DW ?
R7        DB ?
R8        DW ?

TABLE   DB 14H,14H,14H,14H,14H,14H,14H,14H,14H,14H,15H,16H,17H,18H
DB 19H,1AH
DB 1BH,1CH,1DH,1EH,1EH,1FH,20H,21H,23H,24H,25H,26H,27H,28H,29H,2AH
DB 2BH,2CH,2DH,2EH,2FH,31H,32H,32H,33H,34H,35H,36H,37H,38H,39H,3AH
DB 3BH,3CH,3DH,3EH,3FH,40H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH
DB 4CH,4DH,4EH,4FH,50H,4FH,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
DB 5AH,5BH,5CH,5DH,5EH,5FH,60H,61H,62H,63H,64H,64H,65H,65H,66H,66H
DB 67H,68H,69H,6AH,6BH,6CH,6DH,6EH,6EH,6FH,6FH,70H,71H,72H,73H,74H
DB 75H,76H,77H,78H,79H,7AH,7BH,7CH,7DH,7EH,7FH,80H,81H,82H,83H,84H
DB 84H,85H,86H,87H,88H,89H,8AH,8BH,8CH,8EH,8FH,90H,91H,92H,93H,94H
DB 95H,96H,97H,98H,99H,9AH,9BH,9BH,9CH,9CH,9DH,9DH,9EH,9EH,9FH,9FH
DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H,0A8H,0A9H,0AAH,0ABH,0ACH
DB 0ADH,0AEH,0AFH
DB 0B0H,0B0H,0B1H,0B2H,0B3H,0B4H,0B4H,0B5H,0B6H,0B7H,0B8H,0B9H,0BAH
DB 0BBH,0BDH,0BEH
DB 0BEH,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C8H,0CAH,0CCH,0CEH,0CFH,0D0H
DB 0D1H,0D2H,0D4H
DB 0D5H,0D6H,0D7H,0D8H,0D9H,0DAH,0DBH,0DCH,0DDH,0DEH,0E3H,0E6H,0E9H
DB 0ECH,0F0H,0F2H
DB 0F6H,0FAH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH

DATA   ENDS

CODE SEGMENT
     ASSUME  CS:CODE,DS:DATA

START:  MOV     AX,DATA
        MOV     DS,AX
MAIN:   CALL	SYSTEM	      ;Initiate System 
 	CALL    INIT	      ;Initiate 
        STI
M1:     CMP	TKMARK,01H    ;Judge Ts=Tc ?
	JNZ	M1
	MOV	TKMARK,00H
M2:     CMP	ADMARK,01H
	JNZ	M2
	MOV	ADMARK,00H
        MOV     AX,0000H
	MOV	AL,ADVALUE
	MOV	BX,OFFSET TABLE
	ADD	BX,AX
	MOV	AL,[BX]	
        MOV 	YK,AX
        CALL 	PID           ;Count Ck
        MOV 	AL,CK         ;Translate Ck into PWM
        SUB 	AL,80H         
        JC  	IS0
        MOV 	AAA,AL
        JMP 	COU
IS0:    MOV 	AL,00H
        MOV 	AAA,AL        
COU:    MOV 	AL,7FH
        SUB 	AL,AAA
        MOV 	BBB,AL
        MOV 	AX,SPEC         ;SPEC to CH1
        MOV 	CH1,AL
        MOV 	AX,YK           ;YK to CH2
        MOV 	CH2,AL
        CALL 	PUT_COM          ;Display Wave
        JMP 	M1         
PUT_COM:
        MOV 	AL,31H
        OUT	0C1H,AL
        MOV     AL,CH1
        OUT     0C0H,AL
WAIT1:  IN	AL,0C1H
        TEST	AL,01H
        JZ	WAIT1        
	MOV	AL,CH2
        OUT	0C0H,AL
WAIT2:  IN	AL,0C1H
        TEST	AL,01H
        JZ      WAIT2        
        MOV 	AL,34H
        OUT 	0C1H,AL
        RET

INIT:   NOP
        PUSH 	DS
	XOR 	AX,AX
	MOV 	DS,AX
	MOV 	AX,OFFSET IRQ6   ;8259 IRQ6(T0:10ms)
        ADD     AX,2000H         ;LOAD IP adress=2000H
        MOV 	SI,0038H            
        MOV 	[SI],AX
        MOV 	AX,0000H
        MOV 	SI,003AH
        MOV 	[SI],AX
        MOV 	AX,OFFSET IRQ7    ;8259 IRQ7(INT0:Get ADvalue)
        ADD     AX,2000H                ;LOAD IP adress=2000H
        MOV 	SI,003CH
        MOV 	[SI],AX
        MOV 	AX,0000H
        MOV 	SI,003EH
        MOV 	[SI],AX
        CLI
        POP 	DS
        IN 	AL,21H	
        AND 	AL,3FH	      ;allow  IRQ6,IRQ7
        OUT 	21H,AL
	MOV 	CK,00H
	MOV 	YK,0000H
	MOV 	CK_1,00H
	MOV 	EK_1,0000H
	MOV 	AEK_1,0000H
	MOV 	BEK,0000H
	MOV 	BBB,00H
	MOV 	VBB,00H
	MOV 	R0,0000H
	MOV 	R1,0000H
	MOV 	R2,0000H
	MOV 	R3,0000H
	MOV 	R4,0000H
	MOV 	R5,0000H
	MOV 	R6,0000H
	MOV 	R7,00H
	MOV	R8,0000H
        MOV 	TKMARK,00H
        MOV 	FPWM,01H
	MOV	ADMARK,00H
	MOV	ADVALUE,00H
        MOV 	AAA,7FH
        MOV 	VAA,7FH
        MOV 	TC,00H
        MOV 	AL,80H         	;Initiate 8255-B(out)
        OUT 	63H,AL
        OUT 	1FH,AL		; START ADC0809  	
        MOV 	AL,0B6H        	;8253-OUT2
        OUT 	43H,AL            
        MOV 	AL,69H         	;10ms
        OUT 	42H,AL
        MOV 	AL,2DH
        OUT 	42H,AL
        RET

SYSTEM: MOV 	AL,76H         
        OUT 	43H,AL              
        MOV 	AL,0CH
        OUT 	41H,AL
        MOV 	AL,00H
        OUT 	41H,AL
        MOV 	AL,00H         
        OUT 	0C1H,AL
        CALL 	DALLY
        OUT 	0C1H,AL
        CALL 	DALLY
        OUT 	0C1H,AL
        CALL 	DALLY
        OUT 	0C0H,AL
        CALL 	DALLY
        OUT 	0C0H,AL
        CALL 	DALLY
        MOV 	AL,40H
        OUT 	0C1H,AL
        CALL 	DALLY 
        MOV 	AL,7EH         
        OUT 	0C1H,AL        
        CALL 	DALLY
        MOV 	AL,34H         
        OUT	0C1H,AL
        CALL    DALLY
        IN 	AL,21H         
	OR 	AL,01H
	OUT	21H,AL
	RET

DALLY:   NOP
        PUSH 	CX
        MOV     CX,3000H
B2:     PUSH 	AX
        POP 	AX
        LOOP 	B2
        POP 	CX
        RET

IRQ7:  NOP
       PUSH 	AX
       IN	AL,1FH		;READ ADC0809
       MOV   	ADVALUE,AL
       MOV 	ADMARK,01H  
       MOV 	AL,20H        	;Close IRQ7
       OUT 	20H,AL
       POP 	AX
       IRET


IRQ6:  NOP 
       PUSH 	AX
       OUT      1FH,AL
       MOV	AL,TC
       CMP	AL,TS
       JNC	TT2
       INC 	TC
TT1:   CALL 	KJ
       MOV 	AL,20H          ;Close IRQ6
       OUT 	20H,AL
       POP 	AX
       IRET
TT2:   MOV	TKMARK,01H
       MOV	TC,00H
       JMP	TT1

KJ:    NOP  
       PUSH 	AX
       CMP 	FPWM,01H
       JNZ 	TEST2
       CMP 	VAA,00H
       JNZ 	ANOT0
       MOV 	FPWM,02H
       MOV 	AL,BBB
       CLC
       RCR 	AL,01H
       MOV 	VBB,AL
       JMP 	TEST2
ANOT0: DEC 	VAA
       MOV 	AL,01H
       OUT 	61H,AL
TEST2: CMP 	FPWM,02H
       JNZ 	OUTT
       CMP 	VBB,00H
       JNZ 	BNOT0
       MOV 	FPWM,01H
       MOV 	AL,AAA
       CLC
       RCR 	AL,01H
       MOV 	VAA,AL
       JMP 	OUTT
BNOT0: DEC 	VBB
       MOV 	AL,00H
       OUT 	61H,AL  
OUTT:  POP 	AX
       RET       
      
PID:  MOV 	AX,SPEC
      SUB 	AX,YK
      MOV 	R0,AX
      MOV 	R1,AX	
      SUB 	AX,EK_1
      MOV 	R2,AX
      SUB 	AX,AEK_1
      MOV	BEK,AX
      MOV 	R8,AX
      MOV 	AX,R1
      MOV 	EK_1,AX
      MOV 	AX,R2
      MOV 	AEK_1,AX
      TEST 	R1,8000H
      JZ 	EK1
      NEG 	R1  
EK1:  MOV 	AX,R1
      SUB 	AX,IBAND
      JC 	II 
      MOV 	R3,00H
      JMP 	DDD
II:   MOV 	AL,TS
      MOV 	AH,00H
      MOV 	CX,R1
      MUL 	CX
      MOV 	CX,KII
      DIV 	CX
      MOV 	R3,AX
      TEST 	R0,8000H
      JZ 	DDD
      NEG 	R3
DDD:  TEST 	BEK,8000H
      JZ 	DDD1
      NEG 	BEK
DDD1: MOV 	AX,BEK
      MOV 	CX,KDD
      MUL	CX
      PUSH 	AX
      PUSH 	DX
      MOV 	AL,TS
      MOV 	AH,00H
      MOV 	CX,0008H
      MUL 	CX
      MOV 	CX,AX
      POP 	DX
      POP 	AX
      DIV 	CX
      MOV 	R4,AX
      TEST 	R8,8000H
      JZ 	DD1
      NEG 	R4
DD1:  MOV 	AX,R3
      ADD 	AX,R4
      MOV 	R5,AX
      JO 	L9
L2:   MOV 	AX,R5
      ADD 	AX,R2
      MOV 	R6,AX
      JO 	L3 
L5:   MOV 	AX,R6
      MOV 	CX,KPP
      IMUL 	CX
      MOV 	CX,1000H
      IDIV 	CX
      MOV	CX,AX
      RCL	AH,01H
      PUSHF
      RCR	AL,01H
      POPF
      JC	LLL1
      CMP	CH,00H
      JZ	LLL2
      MOV	AL,7FH
      JMP	LLL2
LLL1: CMP	CH,0FFH
      JZ	LLL2
      MOV	AL,80H
LLL2: MOV	R7,AL      
      ADD 	AL,CK_1
      JO 	L8
L18:  MOV 	CK_1,AL
      ADD 	AL,80H
      MOV 	CK,AL
      RET

L8:   TEST 	R7,80H
      JNZ 	L17
      MOV 	AL,7FH
      JMP 	L18
L17:  MOV 	AL,80H
      JMP 	L18               	
L9:   TEST 	R3,8000H
      JNZ 	L1
      MOV	R5,7FFFH
      JMP 	L2
L1:   MOV 	R5,8000H
      JMP 	L2
L3:   TEST 	R2,8000H
      JNZ 	L4
      MOV 	R6,7FFFH
      JMP 	L5
L4:   MOV 	R6,8000H
      JMP 	L5

CODE  ENDS
      END START
      	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -