📄 web.asm
字号:
;**********************************************************************************
;*---------------------------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 + -