?? 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 + -