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

📄 tem.asm

📁 汇编相关。D/A转换和A/D转换
💻 ASM
字号:
AD574_0        EQU  9C00H
AD574_1        EQU  9C01H
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 256 DUP(?)
TOP   LABEL WORD
SSTACK ENDS

DATA  SEGMENT
TABLE1 DB 41H,53H,53H,55H,4DH,45H,20H,20H,54H,45H,4DH,50H,45H,52H,41H,54H,55H,52H,45H,3AH,'$'
TABLE2 DB 43H,55H,52H,52H,45H,4EH,54H,20H,54H,45H,4DH,50H,45H,52H,41H,54H,55H,52H,45H,3AH,'$'
CSBAK1 DW ?
IPBAK1 DW ?
CSBAK2 DW ?
IPBAK2 DW ?
MKBAK1 DB ?
MKBAK2 DB ?
CSBAK3 DW ?
IPBAK3 DW ?
BOARD  DB 0

TS        DB 64H
SPEC      DW 20H
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 ?
AAAA      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 ?

DTABLE   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
        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 
        STI

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

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

        MOV     BL,AL
        CALL    SHOW

        MOV     BL,ADVALUE
        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 	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 	AAAA,7FH
        MOV 	VAA,7FH
        MOV 	TC,00H

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

        MOV     DX,AD574_1
        OUT 	DX,AL		; START ADC574
 	
        MOV     DX,PC8254_MODE
        MOV     AL,36H
        OUT     DX,AL
        MOV     DX,PC8254_COUNT0
        MOV     AL,69H
        OUT     DX,AL
        MOV     AL,2DH
        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


DALLY:   NOP
        PUSH 	CX
        MOV     CX,3000H
B2:     PUSH 	AX
        POP 	AX
        LOOP 	B2
        POP 	CX
        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      DX,AD574_0
       IN	AL,DX		;READ ADC0809
       MOV   	ADVALUE,AL
       MOV 	ADMARK,01H  

       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


MYINT1:NOP
       CLI
       PUSH     DS
       PUSH 	AX
       PUSHF

       MOV      AX,DATA
       MOV      DS,AX

       MOV      DX,AD574_1
       OUT      DX,AL
       MOV	AL,TC
       CMP	AL,TS
       JNC	TT2
       INC 	TC
TT1:   CALL 	KJ

       MOV      AL,20H
       OUT      20H,AL 

       POPF
       POP      AX
       POP      DS
       STI
       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      DX,MY8255_B
       MOV      AL,01H  
       OUT 	DX,AL
TEST2: CMP 	FPWM,02H
       JNZ 	OUTT
       CMP 	VBB,00H
       JNZ 	BNOT0
       MOV 	FPWM,01H
       MOV 	AL,AAAA
       CLC
       RCR 	AL,01H
       MOV 	VAA,AL
       JMP 	OUTT
BNOT0: DEC 	VBB
       MOV      DX,MY8255_B
       MOV 	AL,00H
       OUT 	DX,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

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