?? a20-2.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 ?
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 + -