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

📄 web.asm

📁 PC机控制系统程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;**********************************************************************************
;*---------------------------PC与数控机床通信节点程序-----------------------------*
;*--------------------------------------------------------------------------------*
;*--------------------------------MCS-51汇编语言----------------------------------*
;*--------------------------------------------------------------------------------*
;*--------------------------------CPU: AT89C2051----------------------------------*
;*--------------------------------------------------------------------------------*
;*--------------------------------程序名:web.asm----------------------------------*
;*--------------------------------------------------------------------------------*
;*--------------------------------设计人:  黄 科----------------------------------*
;**********************************************************************************

ADDRESS         EQU  90H                        ;地址寄存器.
ADDREG          EQU  30H                        ;地址缓冲区.
ASCADDH         EQU  31H                        ;地址ASC码.
ASCADDL         EQU  32H                        ;地址ASC码.

RS485IO         EQU  0B3H                       ;RS485输入输出选择:0-选择输入,1-选择输出.

RS485CE         EQU  0B5H                       ;RS485选择使能:1-有效.
RS232CE         EQU  0B4H                       ;RS232选择使能:1-有效.

START_BYTE      EQU  01H                        ;起始命令字.
SEND_BYTE       EQU  02H                        ;发送命令字.
READ_BYTE       EQU  03H                        ;接收命令字.
ERRE_BYTE       EQU  07H                        ;错误命令字.
FINISH_BYTE     EQU  17H                        ;结束命令字.

ODD             BIT  0D0H                       ;奇校验位.
ODD_BIT         BIT  0E7H                       ;奇校验缓冲位.

TIMEH           EQU  03H
TIMEL           EQU  9BH                        ;定时常数,(60S).

C_BIT           BIT  00H                        ;进位标志缓冲位.
A_BYTE          EQU  33H                        ;累加器缓冲区.

DOGIN           BIT  0B7H                       ;看门狗喂狗输入.

                 ORG  0000H
                AJMP   MAIN

                 ORG  000BH
                AJMP   T0PRG

                 ORG  0100H
MAIN:           MOV    SP,#50H

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

                MOV    P1,#0FFH
                MOV    P3,#0FFH

                ACALL  COMRST                   ;串行口初始化.

                MOV    A,ADDRESS                ;读地址.
                CJNE   A,#00H,MAIN1
                AJMP   PCPRG                    ;与PC机接口.
MAIN1:          AJMP   SCPRG                    ;与数控机床接口.



PCPRG:          ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                SETB   RS485IO                  ;允许RS485输出.禁止RS485输入.
                CLR    RS485CE
                SETB   RS232CE                  ;选择RS232.
                
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                CLR    RI

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

                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
PCWAIT18:       JNB    TI,PCWAIT18              ;发送未完,则循环等待.
                CLR    TI

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

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

                ACALL  DELAY
                CLR    RI

                ACALL  TIMESET                  ;设置定时器(60S).
PCWAIT3:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,PCWAIT3               ;无接收数据,则循环等待.
                CLR    RI
                MOV    ASCADDH,SBUF
PCWAIT4:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,PCWAIT4               ;无接收数据,则循环等待.
                CLR    RI
                MOV    ASCADDL,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,ASCADDH
PCWAIT5:        JNB    TI,PCWAIT5               ;发送未完,则循环等待.
                CLR    TI
                MOV    SBUF,ASCADDL
PCWAIT6:        JNB    TI,PCWAIT6               ;发送未完,则循环等待.
                CLR    TI                       ;地址发送完毕

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

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY     
                CLR    RI

                ACALL  TIMESET                  ;设置定时器(60S).
PCWAIT7:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,PCWAIT7               ;无接收数据,则循环等待.
                CLR    RI
                MOV    A,SBUF
                ACALL  TIMEOFF                  ;关定时器.
                CJNE   A,ASCADDH,PCERRE1        ;判断地址是否相等.
                ACALL  TIMESET                  ;设置定时器(60S).
PCWAIT8:        ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,PCWAIT8               ;地址相等,继续接收.
                CLR    RI
                MOV    A,SBUF
                ACALL  TIMEOFF                  ;关定时器.
                CJNE   A,ASCADDL,PCERRE1        ;判断地址是否相等.
                AJMP   PCCONTINU1               ;地址相等,继续.

PCERRE1:        SETB   RS485IO                  ;允许RS485输出.禁止RS485输入.
                CLR    RS485CE
                SETB   RS232CE                  ;选择RS232.
                
                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                
                MOV    A,#ERRE_BYTE             ;发送错误命令字.
                MOV    C,ODD
                CPL    C
                MOV    ODD_BIT,C                ;加奇校验位.
                MOV    SBUF,A
PCWAIT9:        JNB    TI,PCWAIT9
                CLR    TI
                AJMP   PCPRG                    ;返回

PCCONTINU1:     SETB   RS485IO                  ;允许RS485输出.禁止RS485输入.
                CLR    RS485CE                  ;地址相等.
                SETB   RS232CE                  ;选择RS232.

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY

                MOV    SBUF,ASCADDH             ;向PC机回发地址.
PCWAIT10:       JNB    TI,PCWAIT10
                CLR    TI
                MOV    SBUF,ASCADDL
PCWAIT11:       JNB    TI,PCWAIT11
                CLR    TI                       ;地址回发完毕.

                ACALL  DELAY
                CLR    RI

                ACALL  TIMESET                  ;设置定时器(60S).
PCWAIT12:       ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,PCWAIT12              ;无接收数据,则循环等待.
                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
PCWAIT16:       JNB    TI,PCWAIT16              ;发送未完,则循环等待.
                CLR    TI                       ;数据发送完毕.

                CLR    ODD_BIT                  ;清除奇校验位.
                CJNE   A,#SEND_BYTE,PCNEXT1     ;判断是否为PC发送命令字.
                AJMP   PCSEND
PCNEXT1:        CJNE   A,#READ_BYTE,PCERRE2     ;判断是否为PC接收命令字.
                AJMP   PCREAD

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

                MOV    A,#ERRE_BYTE             ;发送错误命令字.
                MOV    C,ODD
                CPL    C
                MOV    ODD_BIT,C                ;加奇校验位.
                MOV    SBUF,A
PCWAIT13:       JNB    TI,PCWAIT13
                CLR    TI
                AJMP   PCPRG                    ;返回

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

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY
                CLR    RI


                ACALL  TIMESET                  ;设置定时器(60S).
PCWAIT14:       ACALL  WATCHDOG                 ;调看门狗喂狗子程序.
                JNB    RI,PCWAIT14              ;无接收数据,则循环等待.
                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
PCWAIT15:       JNB    TI,PCWAIT15              ;发送未完,则循环等待.
                CLR    TI                       ;数据发送完毕.

                CLR    ODD_BIT                  ;清除奇校验位.
                CJNE   A,#FINISH_BYTE,PCCONTINU2;判断是否为结束命令字.
                ACALL  DELAY
                ACALL  DELAY
                AJMP   PCPRG                    ;收到结束命令字,返回.
PCCONTINU2:     AJMP   PCSEND                   ;未收到结束命令字,继续接收.

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

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

                CLR    RS485CE
                SETB   RS232CE                  ;选择RS232.

                ACALL  DELAY
                ACALL  DELAY
                ACALL  DELAY                

                MOV    SBUF,A
PCWAIT19:       JNB    TI,PCWAIT19
                CLR    TI

                CLR    ODD_BIT                  ;清除奇校验位.
                CJNE   A,#FINISH_BYTE,PCCONTINU3;判断是否为结束命令字.
                AJMP   PCPRG                    ;收到结束命令字,返回.
PCCONTINU3:     AJMP   PCREAD                   ;未收到结束命令字,继续接收.

⌨️ 快捷键说明

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