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

📄 web.asm

📁 PC机控制系统程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:



SCPRG:          ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY

                CLR    RS485IO                  ;允许RS485输入.禁止RS485输出.
                CLR    RS232CE
                SETB   RS485CE                  ;选择RS485.

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                CLR    RI

SCWAIT:         ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                MOV    A,ADDRESS                ;读地址.
                CJNE   A,#00H,SCWAIT1           ;检测地址是否改动.
                AJMP   MAIN
SCWAIT1:        JNB    RI,SCWAIT                ;无接收数据,则循环等待.
                CLR    RI
                MOV    A,SBUF

                CLR    ODD_BIT                  ;清除奇校验位.
                CJNE   A,#START_BYTE,SCPRG      ;判断是否为起始位.

                ACALL  TIMESET                  ;设置定时器(60S).
SCWAIT3:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,SCWAIT3               ;无接收数据,则循环等待.
                CLR    RI
                MOV    ASCADDH,SBUF
SCWAIT4:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,SCWAIT4               ;无接收数据,则循环等待.
                CLR    RI
                MOV    ASCADDL,SBUF             ;地址接收完毕.
                ACALL  TIMEOFF                  ;关定时器.

                MOV    A,ASCADDH
                SWAP   A
                ANL    A,#11110000B
                MOV    ADDREG,A
                MOV    A,ASCADDL
                ANL    A,#00001111B
                ADD    A,ADDREG
                MOV    ADDREG,A

                MOV    A,ADDRESS
                CJNE   A,ADDREG,SCPRG           ;地址不符,返回.

                SETB   RS485IO                  ;允许RS485输出.禁止RS485输入.
                CLR    RS232CE
                SETB   RS485CE                  ;选择RS485.

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY


                MOV    SBUF,ASCADDH             ;地址相符,回发.
SCWAIT5:        JNB    TI,SCWAIT5               ;发送未完,则循环等待.
                CLR    TI
                MOV    SBUF,ASCADDL
SCWAIT6:        JNB    TI,SCWAIT6               ;发送未完,则循环等待.
                CLR    TI                       ;地址发送完毕

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY

                CLR    RS485IO                  ;允许RS485输入.禁止RS485输出.
                CLR    RS232CE
                SETB   RS485CE                  ;选择RS485.

                ACALL  TIMESET                  ;设置定时器(60S).
SCWAIT7:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,SCWAIT7               ;无接收数据,则循环等待.
                CLR    RI
                MOV    A,SBUF
                ACALL  TIMEOFF                  ;关定时器.

                CLR    ODD_BIT                  ;清除奇校验位.
                CJNE   A,#SEND_BYTE,SCNEXT1     ;判断是否为PC发送命令字.
                AJMP   SCSEND
SCNEXT1:        CJNE   A,#READ_BYTE,SCERRE1     ;判断是否为PC接收命令字.
                AJMP   SCREAD

SCERRE1:        AJMP   SCPRG                    ;出错,返回.

;接收PC机数据送到数控机床.
SCSEND:         CLR    RS485IO                  ;允许RS485输入.禁止RS485输出.
                CLR    RS232CE
                SETB   RS485CE                  ;选择RS485.

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                CLR    RI 
                 
                ACALL  TIMESET                  ;设置定时器(60S).
SCWAIT8:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,SCWAIT8               ;无接收数据,则循环等待.
                CLR    RI
                MOV    A,SBUF
                ACALL  TIMEOFF                  ;关定时器.

                MOV    R4,A                     ;保护累加器.
                CLR    ODD_BIT                  ;清除奇校验位.
                CJNE   A,#FINISH_BYTE,SCCONTINU1;判断是否为结束命令字.
                ACALL  DELAY
                ACALL  DELAY
                AJMP   SCPRG                    ;收到结束命令字,返回.
SCCONTINU1:     MOV    A,R4                     ;未收到结束命令字,继续接收.

                CLR    RS485CE
                SETB   RS232CE                  ;选择RS232.
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
     
                MOV    SBUF,A
SCWAIT9:        JNB    TI,SCWAIT9               ;发送未完,则循环等待.
                CLR    TI                       ;数据发送完毕.

                ACALL  TIMESET                  ;设置定时器(60S).
SCWAIT10:       ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,SCWAIT10              ;无接收数据,则循环等待.
                CLR    RI
                MOV    A,SBUF
                ACALL  TIMEOFF

                AJMP   SCSEND


;接收数控机床数据送到PC机.
SCREAD:         SETB   RS485IO                  ;允许RS485输出.禁止RS485输入.
                CLR    RS485CE
                SETB   RS232CE                  ;选择RS232.

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                CLR    RI

                ACALL  TIMESET                  ;设置定时器(60S).
SCWAIT11:       ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,SCWAIT11              ;无接收数据,则循环等待.
                CLR    RI
                MOV    A,SBUF
                ACALL  TIMEOFF                  ;关定时器.

                SETB   RS485IO                  ;允许RS485输出.禁止RS485输入.
                CLR    RS232CE
                SETB   RS485CE                  ;选择RS485.
                
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY

                MOV    SBUF,A
SCWAIT12:       JNB    TI,SCWAIT12              ;发送未完,则循环等待.
                CLR    TI                       ;数据发送完毕.

                CLR    RS485CE
                SETB   RS232CE                  ;选择RS232.

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY

                MOV    SBUF,A
SCWAIT14:       JNB    TI,SCWAIT14              ;发送未完,则循环等待.
                CLR    TI                       ;数据发送完毕.

                CLR    ODD_BIT                  ;清除奇校验位.
                CJNE   A,#00H,SCNEXT2           ;判断是否为结束命令字.
                AJMP   FINISHPRG                ;收到结束命令字,返回.
SCNEXT2:        CJNE   A,#25H,SCNEXT3           ;判断是否为结束命令字.
                AJMP   FINISHPRG                ;收到结束命令字,返回.
SCNEXT3:        CJNE   A,#1AH,SCCONTINU2        ;判断是否为结束命令字.
                AJMP   FINISHPRG                ;收到结束命令字,返回.
SCCONTINU2:     AJMP   SCREAD                   ;未收到结束命令字,继续接收.

FINISHPRG:      SETB   RS485IO                  ;允许RS485输出.禁止RS485输入.
                CLR    RS232CE
                SETB   RS485CE                  ;选择RS485.
                
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
               
                MOV    A,#FINISH_BYTE           ;发送结束命令字.
                CPL    C
                MOV    ODD_BIT,C                ;加奇校验.
                MOV    SBUF,A
SCWAIT13:       JNB    TI,SCWAIT13              ;发送未完,则循环等待.
                CLR    TI                       ;数据发送完毕.

                AJMP   SCPRG



;---------------------------------------------------------------------------------
;看门狗喂狗子程序:
WATCHDOG:       SETB   DOGIN
                NOP
                NOP
                NOP
                NOP
                CLR    DOGIN
                RET


;---------------------------------------------------------------------------------
;串行口初始化子程序:
COMRST:         MOV    TMOD,#21H
                MOV    TH1,#0FDH
                MOV    TL1,#0FDH                  ;波特率: 9600 bit/s
                SETB   TR1
                MOV    SCON,#50H                  ;串口方式1并允许接收.
                RET

;---------------------------------------------------------------------------------
;设置定时器子程序:
TIMESET:        MOV    TMOD,#21H
                MOV    TH0,#00H
                MOV    TL0,#01H
                MOV    R6,#TIMEH
                MOV    R7,#TIMEL                  ;置定时常数.(60S)
                SETB   EA
                SETB   ET0                        ;开定时器0中断.
                SETB   TR0                        ;定时器0开始计时.
                RET

;---------------------------------------------------------------------------------
;关定时器子程序:
TIMEOFF:        CLR    TR0
                CLR    ET0
                RET

;---------------------------------------------------------------------------------
;定时器中断服务子程序:
T0PRG:          MOV    A_BYTE,A                   ;保护累加器.
                MOV    C_BIT,C                    ;保护进位标志.
                CLR    TR0                        ;关定时.
                CLR    ET0                        ;关中断.

                MOV    A,R7
                CLR    C
                SUBB   A,#01H
                MOV    R7,A
                MOV    A,R6
                SUBB   A,#00H
                MOV    R6,A                       ;TIMEH:TIMEL-1

                CJNE   R6,#00H,TIME_CONTINU
                CJNE   R7,#00H,TIME_CONTINU

                MOV    A,SP                       ;定时时间到,系统软复位.
                CLR    C
                SUBB   A,#02H
                MOV    SP,A
                MOV    DPTR,#MAIN
                PUSH   DPL
                PUSH   DPH
                RETI

TIME_CONTINU:   MOV    TH0,#00H                   ;定时时间未到,继续.
                MOV    TL0,#01H
                SETB   ET0                        ;开定时器0中断.
                SETB   TR0                        ;定时器0开始计时.
                MOV    A,A_BYTE                   ;恢复累加器.
                MOV    C,C_BIT                    ;恢复进位标志.
                RETI


;---------------------------------------------------------------------------------------
;延时20US
DELAY:          NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                RET

⌨️ 快捷键说明

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