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

📄 io_sub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	    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 + -