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

📄 zhiliu.asm

📁 汇编相关。D/A转换和A/D转换
💻 ASM
字号:
MY8255_B       EQU  9C61H
MY8255_MODE    EQU  9C63H
INTCSR_BYTE0   EQU  9438H
INTCSR_BYTE1   EQU  9439H
INTCSR_BYTE2   EQU  943AH
INTCSR_BYTE3   EQU  943BH
IMB4_BYTE3     EQU  941FH
PC8254_COUNT0  EQU  40H
PC8254_MODE    EQU  43H

SSTACK SEGMENT STACK
      DW 64 DUP(?)
TOP   LABEL WORD
SSTACK ENDS

DATA  SEGMENT
TABLE1 DB 41H,53H,53H,55H,4DH,45H,20H,20H,46H,41H,4EH,20H,53H,50H,45H,45H,44H,3AH,28H,2FH,73H,29H,'$'
TABLE2 DB 43H,55H,52H,52H,45H,4EH,54H,20H,46H,41H,4EH,20H,53H,50H,45H,45H,44H,3AH,28H,2FH,73H,29H,'$'
CSBAK1 DW ?
IPBAK1 DW ?
CSBAK2 DW ?
IPBAK2 DW ?
MKBAK1 DB ?
MKBAK2 DB ?
CSBAK3 DW ?
IPBAK3 DW ?
BOARD  DB 0
      
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 ?
AAAA      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
        MOV     DX,OFFSET TABLE1
        MOV     AH,09H
        INT     21H
        MOV     DL,0DH
        MOV     AH,02H
        INT     21H
        MOV     DL,0AH
        MOV     AH,02H
        INT     21H
        MOV     AX,SPEC
        MOV     BL,AL
        CALL    SHOW
        MOV     DL,0DH
        MOV     AH,02H
        INT     21H
        MOV     DL,0AH
        MOV     AH,02H
        INT     21H
        MOV     DX,OFFSET TABLE2
        MOV     AH,09H
        INT     21H
        MOV     DL,0DH
        MOV     AH,02H
        INT     21H
        MOV     DL,0AH
        MOV     AH,02H
        INT     21H
                  
MAIN:   CALL    INIT            ;Initiate Varable
        STI

M1:     MOV     AL,BOARD
        CMP     AL,03H
        JZ      BREAK
          
        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 	AAAA,AL
        JMP 	COU
IS0:    MOV     AL,10H
        MOV 	AAAA,AL   
COU:    MOV     AL,7FH
        SUB 	AL,AAAA
        MOV 	BBB,AL
        MOV     AX,SPEC           ;SPEC to CH1
        MOV 	CH1,AL

;        MOV     BL,AL
;        CALL    SHOW

        MOV     AX,YK             ;YK to CH2
        MOV     CH2,AL

        MOV  BL,AL
        CALL SHOW

        MOV  DL,0DH
        MOV  AH,02H
        INT  21H
        
        JMP 	M1         

BREAK:  CLI
        MOV AL,00H
        MOV DX,MY8255_B
        OUT DX,AL

        MOV DX,PC8254_MODE
        MOV AL,36H
        OUT DX,AL
        MOV DX,PC8254_COUNT0
        MOV AL,00H
        OUT DX,AL
        MOV AL,00H
        OUT DX,AL 

        MOV AX,0000H     
        MOV ES,AX
        MOV DI,0020H              ;INT 08H,20H=08H*4
        MOV AX,IPBAK1
        CLD
        STOSW
        MOV AX,CSBAK1
        STOSW
        MOV DI,0024H              ;INT 09H,24H=04H*4
        MOV AX,IPBAK3
        CLD
        STOSW
        MOV AX,CSBAK3
        STOSW

        MOV AL,MKBAK2
        OUT 0A1H,AL
        MOV AL,MKBAK1
        OUT 21H,AL

        MOV DI,01CCH              ;INT 73H,01CCH=73H*4
        MOV AX,IPBAK2
        CLD
        STOSW
        MOV AX,CSBAK2
        STOSW

        MOV     DX,INTCSR_BYTE1
        MOV     AL,00H
        OUT     DX,AL

        STI           
        MOV AX,4C00H
        INT 21H
RET
           
INIT:   NOP
        PUSH ES
        CLI

        MOV AX,0000H
        MOV ES,AX
        MOV DI,0020H                         ;INT 08H,20H=08H*4
        MOV AX,ES:[DI]
        MOV IPBAK1,AX           ;IP
        MOV AX,OFFSET MYINT1
        CLD
        STOSW
        MOV AX,ES:[DI]          ;CS
        MOV CSBAK1,AX
        MOV AX,SEG MYINT1
        STOSW
                
        MOV DI,01CCH                         ;INT 73H,01CCH=73H*4
        MOV AX,ES:[DI]
        MOV IPBAK2,AX           ;IP
        MOV AX,OFFSET MYINT2
        CLD
        STOSW
        MOV AX,ES:[DI]          ;CS
        MOV CSBAK2,AX
        MOV AX,SEG MYINT2
        STOSW

        MOV DI,0024H                         ;INT 08H,20H=08H*4
        MOV AX,ES:[DI]
        MOV IPBAK3,AX           ;IP
        MOV AX,OFFSET MYINT3
        CLD
        STOSW
        MOV AX,ES:[DI]          ;CS
        MOV CSBAK3,AX
        MOV AX,SEG MYINT3
        STOSW
                                 
        IN AL,21H
        MOV MKBAK1,AL
        AND AL,0FCH
        OUT 21H,AL
               
        IN  AL,0A1H
        MOV MKBAK2,AL
        AND AL,0F7H
        OUT 0A1H,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     AAAA,7FH
        MOV     VAA,7FH
        MOV     TC,00H

        MOV     AL,80H            ;Initiate 8255-B
        MOV     DX,MY8255_MODE
        OUT     DX,AL
        MOV     AL,00H
        MOV     DX,MY8255_B
        OUT     DX,AL

        MOV     DX,PC8254_MODE
        MOV     AL,36H
        OUT     DX,AL
        MOV     DX,PC8254_COUNT0
        MOV     AL,8FH
        OUT     DX,AL
        MOV     AL,04H
        OUT     DX,AL

        MOV     DX,INTCSR_BYTE0
        MOV     AL,00H
        OUT     DX,AL
        MOV     DX,INTCSR_BYTE1
        MOV     AL,1FH
        OUT     DX,AL
        MOV     DX,INTCSR_BYTE2
        MOV     AL,3FH
        OUT     DX,AL
        MOV     DX,INTCSR_BYTE3
        MOV     AL,00H
        OUT     DX,AL
                
        POP ES
        RET

MYINT3:  CLI
         PUSH DS
         PUSH AX
         MOV AX,DATA
         MOV DS,AX
               
         MOV AL,BOARD
         INC AL
         MOV BOARD,AL

         IN  AL,60H
         IN  AL,61H
         OR  AL,80H
         OUT 61H,AL
         
         MOV AL,20H
         OUT 20H,AL

         POP AX
         POP DS
         STI
         IRET
        
MYINT2:NOP
       CLI
       PUSH     DS
       PUSH 	AX
       PUSH 	BX
       PUSH	CX
       PUSH 	DX
       PUSHF

       MOV      AX,DATA
       MOV      DS,AX
          
       MOV 	AL,MARK  
       CMP 	AL,01H
       JZ 	IN1
       MOV 	MARK,01H
       
IN2:   NOP
       MOV      DX,IMB4_BYTE3
       IN       AL,DX
       MOV      DX,INTCSR_BYTE2
       MOV      AL,3FH
       OUT      DX,AL

       MOV      AL,63H
       OUT      0A0H,AL
       MOV      AL,62H
       OUT      20H,AL
 
       POPF
       POP 	DX
       POP 	CX 
       POP 	BX
       POP 	AX
       POP      DS

       STI
       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   
         
MYINT1:NOP
       CLI
       PUSH     DS
       PUSH 	AX
       PUSHF

       MOV      AX,DATA
       MOV      DS,AX

       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
       OUT      20H,AL
            
       POPF
       POP      AX
       POP      DS
       STI
       IRET

KJ:    NOP  
       PUSH 	AX
       CMP 	FPWM,01H
       JNZ 	TEST2
       CMP 	VAA,00H
       JNZ 	ANOT0
       MOV      AL, 00H
       MOV      DX, MY8255_B
       OUT      DX,AL
       MOV      FPWM,02H
       MOV 	AL,BBB
       CLC
       RCR 	AL,01H
       MOV 	VBB,AL
       JMP 	TEST2
ANOT0: DEC 	VAA         
TEST2: CMP 	FPWM,02H
       JNZ 	OUTT
       CMP 	VBB,00H
       JNZ 	BNOT0
       MOV 	AL,01H
       MOV      DX,MY8255_B
       OUT      DX,AL  
       MOV 	FPWM,01H
       MOV 	AL,AAAA
       CLC
       RCR 	AL,01H
       MOV 	VAA,AL
       JMP 	OUTT
BNOT0: DEC 	VBB        
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

SHOW	PROC	NEAR
	PUSH	AX
	PUSH	DX
	MOV	AL,BL
	AND	AL,0F0H                ;取高4位
        MOV     CL,4
        SHR     AL,CL
	CMP	AL,0AH			;是否是A以上的数
	JB	C2		
	ADD	AL,07H		
C2:	ADD	AL,30H		
	MOV	DL,AL			;显示字符
	MOV	AH,02H
	INT	21H
	MOV	AL,BL
	AND	AL,0FH			;取低4位
	CMP	AL,0AH
	JB	C3
	ADD 	AL,07H
C3:	ADD	AL,30H
	MOV	DL,AL			;显示字符
	MOV	AH,02H
	INT	21H
	POP	DX
	POP	AX
	RET
SHOW    ENDP 


CODE  ENDS
      END START      	

⌨️ 快捷键说明

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