📄 io_sub.asm
字号:
MOV B, #3
MUL AB
ADD A, #xAD_BUF
MOV R0, A
MOV dEXTPART, #cADSEG
MOV pPORT2, #cADSEG ; CLEAR HIGH ADDRESS BITS
MOVX A, @R0 ; XCHANGE @R0 <=> R7.R4.R5
XCH A, R7 ; \\.
MOVX @R0, A ; \\.
INC R0 ; \\.
MOVX A, @R0 ; \\.
XCH A, R4 ; \\.
MOVX @R0, A ; \\.
INC R0 ; \\.
MOVX A, @R0 ; \\.
XCH A, R5 ; \\.
MOVX @R0, A ; \\...
DEC R0 ; RESTORE THE BUFFER PNT.
DEC R0
LCALL F3_SUB ; T2 - T1
MOV A, #7FH
ANL A, R7 ; GET THE ABSOLUTE RESULT (DELTA T)
MOV R7, A
MOV A, dTMPBUF ; GET THE SETUP DELTA
MOV B, #3
MUL AB
MOV DPTR, #uDELTA_D
MOV dEXTPART, #cSCDRAM ; SET THE HIGH BYTE OF RAM ADDRESS
MOV pPORT2, dEXTPART ; INIT. EXT. RAM SEGMENT FOR xTMPBUF USE
MOV R0, #xTMPBUF1
PUSH ACC
MOVC A, @A+DPTR
MOVX @R0, A
POP ACC
INC A
INC R0
PUSH ACC
MOVC A, @A+DPTR
MOVX @R0, A
POP ACC
INC A
INC R0
MOVC A, @A+DPTR
MOVX @R0, A
DEC R0
DEC R0
LCALL F3_SUB
CLR A
MOV dEXTPART, A
MOV pPORT2, A ; RESTORE THE EXT RAM SEGMENT TO '0'
JC MeasErrP
MOV iMEASNUM, #0
RET ; OVER DELTA CHECK
END
;#############################################################
; FILE NAME TX_TEMP.ASM
; SUBROUTE: TABTO_RS - GET ONE GROUP DATA IN TABLE TO R7,R4,R5
; FUNCTION:
; PARMENTERS:
; A - THE INDEX OF GROUP
; DPTR - THE POINTER TO THE START POINT OF LOOK-TABLE
;
; USING REGISTERS: A, R7, R4, R5
; RETURN: ONE THREE BYTE FLOAT DATA IN R7,R4,R5
;------------------------------------------------------------
TABTO_RS: PUSH B
MOV B, #03 ; GET THE BYTE SHIFT IN TABLE
MUL AB
MOV B, A ; SAVE THE SHIFT
MOVC A, @A+DPTR
MOV R7, A
INC B
MOV A, B
MOVC A, @A+DPTR
MOV R4, A
INC B
MOV A, B
MOVC A, @A+DPTR
MOV R5, A
POP B
RET
;#############################################################
; FILE NAME USEGAD.ASM
; SUBROUTE: GET_AX2BXC - GET ONE TEMPERATURE FROM TX-TABLE REFER TO THE
; A/D CONVERTION DATA
; FUNCTION: DEFUALT
; PARMENTERS: R7,R4,R5 - THE A/D CONVERTION DATA
; CHANGE REGISTERS: R0, R1, R2, R3, R4, R5, R6, R7, A, B
; RETURN: GET TEMPERATURE SAVE IN R7.R4.R5 AND IN BUFFER POINT BY ??
;------------------------------------------------------------
PROC GETAX2BXC, INSERT
For_KX_C: CALL MOVRS_PR0 ; SAVE X - X0
MOV A, #1
CALL TABTO_RS
CALL F3_MUL ; k*X
CALL MOVRS_PR0
MOV A, #2
CALL TABTO_RS
CALL F3_ADD ; (k*X) + C
CLR C
RET
GETAX2BXC: MOV R0, #xTMPBUF1
MOV dEXTPART, #cSCDRAM
MOV pPORT2, dEXTPART
CALL MOVRS_PR0 ; SAVE READ OUT DATA TO TMPBUF1
MOV A, #03H
CALL TABTO_RS ;
CALL F3_SUB ;
JC ErrRtn ; DATA TOO LITTLE, TO ERROR PROCESS
CLR A
MOVC A, @A+DPTR ; MOVE THE DPTR TO ENXT SECTION
JZ For_KX_C
MOV R1, A
MOV B, #03H
MUL AB
ADD A, DPL
MOV DPL, A
MOV A, B
ADDC A, DPH
MOV DPH, A ; ..\\
MOV A, #03H
CALL TABTO_RS
CALL F3_SUB ; L05BE
JC ForInsert ; IN SECTION 1 PROCESS
CLR A ; IS IN SECTION 2
MOVC A, @A+DPTR ; MOVE THE DPTR TO ENXT SECTION
MOV R1, A
MOV B, #03H
MUL AB
ADD A, DPL
MOV DPL, A
MOV A, B
ADDC A, DPH
MOV DPH, A ; ..\\
MOV A, #03H
CALL TABTO_RS ; L207E
CALL F3_SUB ; L05BE
JC ForInsert ; L2101
CLR A ; IS IN SECTION 3
MOVC A, @A+DPTR ; MOVE THE DPTR TO ENXT SECTION
MOV R1, A
MOV B, #03H
MUL AB
ADD A, DPL
MOV DPL, A
MOV A, B
ADDC A, DPH
MOV DPH, A ; ..\\
MOV A, #0H
CALL TABTO_RS ; L207E
CALL F3_SUB ; L05BE
JC ForInsert ; L2101
ErrRtn: MOV dEXTPART, #00H
MOV pPORT2, dEXTPART
SETB C ; TOO GREAT, TO ERROR PROCESS
RET
ForInsert: MOV dEXTPART, #00H
MOV pPORT2, dEXTPART
CLR C ; L2101
MOV A, R1 ; MOVE DPTR BACK TO SECTION FRIST IN TABLE
MOV B, #03H
MUL AB
XCH A, DPL
SUBB A, DPL
MOV DPL, A
MOV A, DPH
SUBB A, B
MOV DPH, A ; ..\\
DoInsert: CALL INSERT ; L2118 GET INSERT POINTER
RET
;#############################################################
; FILE NAME IO_SUB.ASM
; SUBROUTE: INSERT - DO Y = aX**2 + bX + c INSERT
; FUNCTION:
; Eta = (X - X[i-1])/(X[i+1]-X[i])-(X - X[i+1])/(X[i]-X[i-1])
; Zeta = Eta * {(X - X[i])/(X[i+1] - X[i-1])}
; Y = (Zeta + Num)*dY + Y0
; PARMENTERS:
; xTMPBUF1 - THE POINTER TO THE INSERT DATA
; DPTR - THE POINTER TO THE START POINT OF LOOK-TABLE
;
; USING REGISTERS: R0, R1, R2, R3, R4, R5, R6, R7, A, B
; RETURN: Y[i] IN R7.R4.R5 AND IN BUFFER POINT BY ??
;------------------------------------------------------------
INSERT: MOV A, #3
CLR B_EN_INT ; CLOSE ALL INTERRUPT
MOV pPORT2, #cSCDRAM
GetNextXi: INC A
PUSH ACC
ACALL TABTO_RS ; \\..
MOV R0, #xTMPBUF1 ; LET'S R0 POINT CURRENT X
CALL F3_SUB
POP ACC
JC CalculateYi ; @R0 < X[i] ?
PUSH ACC
SUBB A, R1
POP ACC
JC GetNextXi
CalculateYi: PUSH ACC
MOV R0, #xTMPBUF2
CALL MOVRS_PR0 ; SAVE (X - X[i]) => TMPBUF2
POP ACC
PUSH ACC
INC A
CALL TABTO_RS ; GET X[i+1]
MOV R0, #xTMPBUF3 ; SAVE X[i+1] => TMPBUF3
CALL MOVRS_PR0
POP ACC
PUSH ACC
DEC A
CALL TABTO_RS ; GET X[i-1]
MOV R0, #xTMPBUF3
CALL F3_SUB ; X[i+1] - X[i-1]
MOV R0, #xTMPBUF2
CALL F3_DIV
CALL MOVRS_PR0 ; SAVE [(X-X[i])/(X[i+1]-X[i-1]) => TMPBUF2
POP ACC
PUSH ACC
DEC A
CALL TABTO_RS ; GET X[i-1]
MOV R0, #xTMPBUF1
CALL F3_SUB ; X - X[i-1]
MOV R0, #xTMPBUF3
CALL MOVRS_PR0 ; SAVE X - X[i-1] => TMPBUF3
POP ACC
PUSH ACC
INC A
CALL TABTO_RS ; GET X[i+1]
MOV A, R7
MOV R6, A
MOV A, R4
MOV R2, A
MOV A, R5
MOV R3, A ; MOV X[i+1](R7.R4.R5) => R6.R2.R3
POP ACC
PUSH ACC
CALL TABTO_RS ; GET X[i]
CALL F3_RSSUB ; X[i+1] - X[i]
MOV R0, #xTMPBUF3
CALL F3_DIV ; (X-X[i-1])/(X[i+1] - X[i])
CALL MOVRS_PR0 ; SAVE IT TO => TMPBUF3
POP ACC
PUSH ACC
INC A
CALL TABTO_RS ; GAT X[i+1]
MOV R0, #xTMPBUF1 ; GET X POINTER: TMPBUF1
CALL F3_SUB ; X - X[i+1]
CALL MOVRS_PR0 ; SAVE X - X[i+1] => TMPBUF1
POP ACC
PUSH ACC
CALL TABTO_RS ; GET X[i]
MOV A, R7
MOV R6, A
MOV A, R4
MOV R2, A
MOV A, R5
MOV R3, A ; MOV R7.R4.R5 => R6.R2.R3
POP ACC
PUSH ACC
DEC A
CALL TABTO_RS ; GET X[i-1]
CALL F3_RSSUB ; X[i] - X[i-1]
MOV R0, #xTMPBUF1
CALL F3_DIV ; (X-X[i+1])/(X[i] - X[i-1])
MOV R0, #xTMPBUF3
CALL F3_SUB ; CALCULATE THE Eta
MOV R0, #xTMPBUF2 ; GET (X-X[i])/(X[i-1]-X[i+1]) POINTER
CALL F3_MUL ; CALCULATE THE Zeta
CALL MOVRS_PR0 ; SAVE Zeta => TMPBUF2
POP ACC ; GET Num AS 3 BYTE FLOAT DATA
CLR C
SUBB A, #3
MOV R7, #08
MOV B, #0
CALL F3_FORMAT
MOV R4, A
MOV R5, B
MOV R0, #xTMPBUF2
CALL F3_ADD ; Zeta + Num
CALL MOVRS_PR0
MOV A, #02
CALL TABTO_RS ; (Zeta + Num) * dY
CALL F3_MUL
MOV R0, #xTMPBUF2
CALL MOVRS_PR0
MOV A, #01 ; GET Y0
CALL TABTO_RS
CALL F3_ADD ; (Zeta + Num) * dY + Y0
MOV pPORT2, dEXTPART
SETB B_EN_INT ; OPEN ALL INTERRUPT
RET
END
;#############################################################
; FILE NAME IO_SUB.ASM
; SUBROUTE: DA_OUT - D/A OUTPUT
; CALL FUNCTION: NONE
; PARMENTERS: A - THE DATA WILL OUTPUT
; R7 - THE CHANNEL
; CHANGE REGISTERS: C, A, R2, R7
; RETURN: REGISTER A - THE SECRET INPUT CODE
;------------------------------------------------------------
PROC DA_OUT
DA_OUT: XCH A, R7
MOV R2, #3
SWAP A
RLC A
RLC A
NextBitA: ACALL BitOut
DJNZ R2, NextBitA
MOV A, R7
MOV R2, #8
NextBitB: ACALL BitOut
DJNZ R2, NextBitB
NOP
CLR B_DALDD
NOP
NOP
SETB B_DALDD
NOP
NOP
CLR B_DALDA
NOP
NOP
SETB B_DALDA
RET
BitOut: SETB B_DACLK ; CLOCK TO HIGH
RLC A
MOV B_DADIN, C ; OUTPUT DATA BIT
NOP
CLR B_DACLK ; CLOCK TO LOW
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -