?? tem.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 + -