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

📄 a20-1.asm

📁 汇编语言的设计
💻 ASM
字号:
STACK SEGMENT STACK
      DW 64 DUP(?)
TOP   LABEL WORD
STACK ENDS

DATA  SEGMENT
TS        DB 14H
SPEC  	  DW 0030H
IBAND     DW 0060H
KPP       DW 1060H
KII       DW 0010H
KDD       DW 0020H
CH1       DB ?
CH2       DB ?
YK        DW ?
CK        DB ?
VADD      DW ?
ZV        DB ?
ZVV       DB ?
TC        DB ?
FPWM      DB ?
CK_1      DB ?
EK_1      DW ?
AEK_1     DW ?
BEK       DW ?
AAA       DB ?
VAA       DB ?
BBB       DB ?
VBB       DB ?
MARK      DB ?
R0        DW ?
R1        DW ?
R2        DW ?
R3        DW ?
R4        DW ?
R5        DW ?
R6        DW ?
R7        DB ?
R8        DW ?
DATA   ENDS

CODE SEGMENT
     ASSUME  CS:CODE,DS:DATA

START:  MOV     AX,DATA
        MOV     DS,AX
MAIN:   CALL	SYSTEM	      ;Initiate System 
 	CALL    INIT	      ;Initiate Varable
        STI
M1:     MOV 	AL,TS         ;Judge Ts=Tc ?
        SUB 	AL,TC
        JNC 	M1
        MOV 	TC,00H	      ;Get Yk
        MOV 	AL,ZVV
        MOV 	AH,00H
        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,10H
        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:1ms)
        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:HR-OUT,COUNT-VVV)
        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 	VADD,0000H         
	MOV 	ZV,00H              
	MOV 	ZVV,00H
	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 	MARK,00H
        MOV 	FPWM,01H
        MOV 	AAA,7FH
        MOV 	VAA,7FH
        MOV 	TC,00H
        MOV 	AL,80H            ;Initiate 8255-B
        OUT 	63H,AL
        MOV 	AL,00H
        OUT 	61H,AL
        MOV 	AL,0B6H        ;8253-OUT2
        OUT 	43H,AL            
        MOV 	AL,8FH         ;1ms
        OUT 	42H,AL
        MOV 	AL,04H
        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
       PUSH 	BX
       PUSH	CX
       PUSH 	DX
       PUSHF
       MOV 	AL,MARK  
       CMP 	AL,01H
       JZ 	IN1
       MOV 	MARK,01H 
IN2:   NOP
       MOV 	AL,20H        ;Close IRQ7
       OUT 	20H,AL
       POPF
       POP 	DX
       POP 	CX 
       POP 	BX
       POP 	AX
       IRET

IN1:   MOV 	MARK,00H
       CALL 	VV
       MOV 	AL,ZV
       MOV 	ZVV,AL
       JMP 	IN2
VV:    MOV 	DX,0000H
       MOV 	AX,03E8H
       MOV 	CX,VADD
       CMP 	CX,0000H
       JZ  	MM1     
       DIV 	CX
MM:    MOV 	ZV,AL
       MOV 	VADD,0000H     
MM1:   RET

IRQ6:  NOP 
       PUSH 	AX
       PUSHF
       INC 	TC
       CALL 	KJ
       CLC
       CMP 	MARK,01H
       JC 	TT1
       INC 	VADD
       CMP 	VADD,0700H
       JC 	TT1
       MOV 	VADD,0700H
       MOV 	MARK,00H
TT1:   NOP
       MOV 	AL,20H          ;Close IRQ6
       OUT 	20H,AL       
       POPF
       POP 	AX
       IRET

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 + -