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

📄 gl.asm

📁 一个MSC51汇编写的锅炉控制器源码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
        XCH    A,B
        MOV    A,R3
        SUBB   A,B
        JC     NTKD1
        CLR    STEMP
        CLR    STB
        SJMP   NTKD10
NTKD1:  SETB   STEMP
        SETB   STB
NTKD10: MOV    R2,WDTEMP0
        MOV    R3,WDTEMP1
        JB     CTB,REFV3
        MOV    A,R2
        ADD    A,#1
        DA     A
        MOV    R2,A
        MOV    A,R3
        ADDC   A,#0
        DA     A
        MOV    R3,A
REFV3:  MOV    B,#95H
        LCALL  RDBA
        XCH    A,B
        MOV    A,R2
        CLR    C
        SUBB   A,B
        MOV    B,#94H
        LCALL  RDBA
        XCH    A,B
        MOV    A,R3
        SUBB   A,B
        JC     NTKD2
        CLR    CTEMP
        CLR    CTB
        SJMP   NTKD20
NTKD2:  SETB   CTEMP
        SETB   CTB
NTKD20:
RTXW:   RET
;----------------------------
;
DISPWD: MOV    A,R3
        PUSH   ACC
        MOV    A,R2
        PUSH   ACC
        ANL    A,#0FH
        MOV    BUF0,A
        MOV    A,R2
        SWAP   A
        ANL    A,#0FH
        MOV    BUF1,A
        MOV    A,R3
        ANL    A,#0FH
        MOV    BUF2,A
        MOV    A,R3
        MOV    BUF3,#16H
        JNB    ACC.7,DP
        MOV    BUF3,#13H
        MOV    A,BUF2
        JNZ    DP1
        MOV    BUF3,#16H
        MOV    BUF2,#13H
        MOV    A,BUF1
        JNZ    DP1
        MOV    BUF3,#16H
        MOV    BUF2,#16H
        MOV    BUF1,#13H
        SJMP   DP1
DP:     MOV    A,BUF2
        JNZ    DP1
        MOV    BUF2,#16H
        MOV    A,BUF1
        JNZ    DP1
        MOV    BUF1,#16H
DP1:    LCALL  DISPSM
        POP    ACC
        MOV    R2,A
        POP    ACC
        MOV    R3,A
        RET
;----------------------------
;T=( (B-12) * 10000 / 51 - 3000 ) / 214
JSWD:   LCALL  CDATA
        MOV    A,B
        CLR    C
        SUBB   A,#12
        JNC    WDX
        CLR    A
WDX:    MOV    B,A
        MOV    R5,B
        MOV    R6,#27H
        MOV    R7,#10H
        LCALL  MUL2A1
        MOV    R4,#51
        LCALL  DIV3T1
        MOV    A,#2
        MUL    AB
        SUBB   A,#51
        JC     BSH
        CLR    A
        SETB   C
        ADDC   A,R7
        MOV    R7,A
        CLR    A
        ADDC   A,R6
        MOV    R6,A
        CLR    A
        ADDC   A,R5
        MOV    R5,A
BSH:    CLR    C
        MOV    A,R7
        SUBB   A,#0B8H
        MOV    R7,A
        MOV    A,R6
        SUBB   A,#0BH
        MOV    R6,A
        MOV    A,R5
        SUBB   A,#0
        MOV    R5,A
        CLR    F0
        JNC    FFS
        SETB   F0
        MOV    A,R7
        CPL    A
        MOV    R7,A
        MOV    A,R6
        CPL    A
        MOV    R6,A
        MOV    A,R5
        CPL    A
        MOV    R5,A
FFS:    MOV    R4,#214
        LCALL  DIV3T1
        MOV    A,#2
        MUL    AB
        JB     B.0,ADD1
        SUBB   A,#214
        JC     BSH1
ADD1:   CLR    A
        SETB   C
        ADDC   A,R7
        MOV    R7,A
        CLR    A
        ADDC   A,R6
        MOV    R6,A
        CLR    A
        ADDC   A,R5
        MOV    R5,A
BSH1:   MOV    R4,#10
        LCALL  DIV3T1
        MOV    WDTEMP0,B
        MOV    R4,#10
        LCALL  DIV3T1
        MOV    A,B
        SWAP   A
        ADD    A,WDTEMP0
        MOV    WDTEMP0,A
;
        MOV    R4,#10
        LCALL  DIV3T1
        MOV    WDTEMP1,B
        MOV    C,F0
        MOV    B.7,C
        MOV    WDTEMP1,B
        RET
;----------------------------
;(R5 R6 R7)/(R4)= (R5 R6 R7):B
DIV3T1: PUSH   ACC
        PUSH   PSW
        MOV    A,R2
        PUSH   ACC
        MOV    A,R3
        PUSH   ACC
;
        MOV    A,R5
        MOV    R2,A
        MOV    A,R6
        MOV    R3,A
        LCALL  DIV2T1
        MOV    A,R2
        MOV    R5,A
        MOV    A,R3
        MOV    R6,A
;
        MOV    R2,B
        MOV    A,R7
        MOV    R3,A
        LCALL  DIV2T1
        MOV    A,R3
        MOV    R7,A
;
        POP    ACC
        MOV    R3,A
        POP    ACC
        MOV    R2,A
        POP    PSW
        POP    ACC
        RET
;----------------------------
;(R2 R3)/(R4)= (R2 R3);REMAIN  B,输入数据R4不能为零
DIV2T1: PUSH   ACC
        PUSH   PSW
;
        MOV    A,R2
        MOV    B,R4
        DIV    AB
        PUSH   ACC
        MOV    R2,B
        MOV    B,#8
DIV2:   CLR    C
        MOV    A,R3
        RLC    A
        MOV    R3,A
        MOV    A,R2
        RLC    A
        MOV    R2,A          ;(R2,R3)左移一位
        MOV    F0,C
        CLR    C
        SUBB   A,R4
        JB     F0,DIV3
        JC     DIV4
DIV3:   MOV    R2,A
        INC    R3
DIV4:   DJNZ   B,DIV2
        MOV    A,R2
        MOV    B,A
        POP    ACC
        MOV    R2,A
;
        POP    PSW
        POP    ACC
        RET
;----------------------------
;(R6 R7 )*R5= (R5 R6 R7)
MUL2A1: PUSH   PSW
        PUSH   ACC
        PUSH   B
        MOV    A,R5
        MOV    B,R7
        MUL    AB
        MOV    R7,A
        MOV    A,B
        XCH    A,R6
        MOV    B,R5
        MUL    AB
        ADD    A,R6
        MOV    R6,A
        MOV    A,B
        ADDC   A,#0
        MOV    R5,A
        POP    B
        POP    ACC
        POP    PSW
        RET
;----------------------------
; 对数据取中值存放于 B 中(防止干扰)
CDATA:  PUSH   ACC
        JB     WDSTA,NWD0
        LCALL  RDAD
        LCALL  RDAD
        MOV    WD4,A
        LCALL  RDAD
        MOV    WD3,A
        LCALL  RDAD
        MOV    WD2,A
        LCALL  RDAD
        MOV    WD1,A
NWD0:   SETB   WDSTA
        MOV    WD0,WD1
        MOV    WD1,WD2
        MOV    WD2,WD3
        MOV    WD3,WD4
        LCALL  RDAD
        MOV    WD4,A
        LCALL  QZHQ
        POP    ACC
        RET
;----------------------------
;WD0,WD1,WD2,WD3,WD4取中值存放于B
QZHQ:   PUSH   ACC
        MOV    A,R0
        PUSH   ACC
        PUSH   PSW
;
        MOV    A,SP
        ADD    A,#1
        MOV    B,A
        ADD    A,#4
        MOV    SP,A
;
        MOV    R0,B
        MOV    @R0,WD0
        INC    R0
        MOV    @R0,WD1
        INC    R0
        MOV    @R0,WD2
        INC    R0
        MOV    @R0,WD3
        INC    R0
        MOV    @R0,WD4
;
NM0:    CLR    ZANC
        MOV    R0,B
NM:     MOV    A,@R0
        INC    R0
        CLR    C
        SUBB   A,@R0
        JNC    NM1
        MOV    A,@R0
        DEC    R0
        XCH    A,@R0
        INC    R0
        MOV    @R0,A
        SETB   ZANC
NM1:    MOV    A,R0
        XRL    A,SP
        JNZ    NM
        JB     ZANC,NM0
        DEC    R0
        DEC    R0
        MOV    B,@R0
;
        CLR    C
        MOV    A,SP
        SUBB   A,#5
        MOV    SP,A
;
        POP    PSW
        POP    ACC
        MOV    R0,A
        POP    ACC
        RET
;----------------------------
;RDAD 读出TLC549CP中的数据存放于A
RDAD:   PUSH   B
        PUSH   PSW
        SETB   CS
        NOP
        NOP
        NOP
        CLR    CLK
        CLR    CS
        NOP
        NOP
        MOV    B,#8
        CLR    C
LWRAD:  MOV    C,DO
        RLC    A
        SETB   CLK
        NOP
        CLR    CLK
        NOP
        DJNZ   B,LWRAD
        SETB   CS
        MOV    B,#6
YS:     NOP
        DJNZ   B,YS
        POP    PSW
        POP    B
        RET
;----------------------------
;延时1S,FOR   12M
DLY1S:  PUSH   B
        MOV    B,#10
DLP1S:  LCALL  DLY100
        DJNZ   B,DLP1S
        POP    B
        RET
;----------------------------
;延时100MS,FOR   12M
DLY100: PUSH   B
        MOV    B,#100
DLP1:   LCALL  DLY1MS
        DJNZ   B,DLP1
        POP    B
        RET
;----------------------------
;延时100MS,FOR   12M
DLY50:  PUSH   B
        MOV    B,#50
DLP50:  LCALL  DLY1MS
        DJNZ   B,DLP50
        POP    B
        RET
;----------------------------
;延时10MS,FOR   12M
DLY10MS:PUSH   B
        MOV    B,#10
DLPD:   LCALL  DLY1MS
        DJNZ   B,DLPD
        POP    B
        RET
;----------------------------
;延时1MS,FOR   12M
DLY4MS: PUSH   B
        MOV    B,#4
DLPDM:  LCALL  DLY1MS
        DJNZ   B,DLPDM
        POP    B
        RET
;----------------------------
;延时1MS,FOR   6M
DLY1MS: PUSH   B
        MOV    WDTRST,#01EH
        MOV    B,#238
DLYLP:  DJNZ   B,DLYLP
        MOV    WDTRST,#0E1H
        POP    B
        RET
;----------------------------
;运行状态时显示现在时间和累计运行时间
YXSH:   JB     RUNL,RTYXSH
        CJNE   A,#5,YXSH0
        MOV    R2,TTIMER3
        MOV    R3,TTIMER2
        MOV    B,#9CH
        LCALL  RDBA
        MOV    R4,A
        MOV    B,#9DH
        LCALL  RDBA
        MOV    R5,A
        MOV    A,R2
        LCALL  JSTIME
        MOV    A,R2
        XCH    A,R3
        MOV    R2,A
        LCALL  DISPTM
        LCALL  DLY1S
        LCALL  CONTROL
        LCALL  DLY1S
        RET
YXSH0:  CJNE   A,#6,RTYXSH
        MOV    R3,TTIMER3          ;显示现在时间
        MOV    R2,TTIMER2
        LCALL  DISPTM
        LCALL  DLY1S
        LCALL  CONTROL
        LCALL  DLY1S
RTYXSH: RET
;----------------------------
;计算时间差(R2,R3)-(R4,R5)=(R2,R3)
JSTIME: MOV    A,R3
        CLR    C
        SUBB   A,R5
        MOV    A,R2
        SUBB   A,R4
        JNC    NJ24
        MOV    A,#24H
        ADD    A,R2
        DA     A
        MOV    R2,A
NJ24:   MOV    A,R4
        JZ     JSD
        CPL    A
        ADD    A,#1
        CLR    C
        SUBB   A,#66H
        ADD    A,R2
        DA     A
        MOV    R2,A
JSD:    MOV    A,R3
        CLR    C
        SUBB   A,R5
        JNC    JSFL
        MOV    A,#99H
        ADD    A,R2
        DA     A
        MOV    R2,A
        MOV    A,#60H
        ADD    A,R3
        MOV    R3,A
JSFL:   MOV    A,R5
        JZ     JSD0
        CPL    A
        ADD    A,#1
        CLR    C
        SUBB   A,#66H
        ADD    A,R3
        DA     A
        MOV    R3,A
JSD0:
        RET
;----------------------------
;
WWDT:   MOV    WDTRST,#01EH
        NOP
        NOP
        MOV    WDTRST,#0E1H
        RET
;----------------------------
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -