?? web.asm
字號:
SCPRG: ACALL WATCHDOG ;調(diào)看門狗喂狗子程序.
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 ;調(diào)看門狗喂狗子程序.
MOV A,ADDRESS ;讀地址.
CJNE A,#00H,SCWAIT1 ;檢測地址是否改動.
AJMP MAIN
SCWAIT1: JNB RI,SCWAIT ;無接收數(shù)據(jù),則循環(huán)等待.
CLR RI
MOV A,SBUF
CLR ODD_BIT ;清除奇校驗位.
CJNE A,#START_BYTE,SCPRG ;判斷是否為起始位.
ACALL TIMESET ;設(shè)置定時器(60S).
SCWAIT3: ACALL WATCHDOG ;調(diào)看門狗喂狗子程序.
JNB RI,SCWAIT3 ;無接收數(shù)據(jù),則循環(huán)等待.
CLR RI
MOV ASCADDH,SBUF
SCWAIT4: ACALL WATCHDOG ;調(diào)看門狗喂狗子程序.
JNB RI,SCWAIT4 ;無接收數(shù)據(jù),則循環(huán)等待.
CLR RI
MOV ASCADDL,SBUF ;地址接收完畢.
ACALL TIMEOFF ;關(guān)定時器.
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 ;地址相符,回發(fā).
SCWAIT5: JNB TI,SCWAIT5 ;發(fā)送未完,則循環(huán)等待.
CLR TI
MOV SBUF,ASCADDL
SCWAIT6: JNB TI,SCWAIT6 ;發(fā)送未完,則循環(huán)等待.
CLR TI ;地址發(fā)送完畢
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
CLR RS485IO ;允許RS485輸入.禁止RS485輸出.
CLR RS232CE
SETB RS485CE ;選擇RS485.
ACALL TIMESET ;設(shè)置定時器(60S).
SCWAIT7: ACALL WATCHDOG ;調(diào)看門狗喂狗子程序.
JNB RI,SCWAIT7 ;無接收數(shù)據(jù),則循環(huán)等待.
CLR RI
MOV A,SBUF
ACALL TIMEOFF ;關(guān)定時器.
CLR ODD_BIT ;清除奇校驗位.
CJNE A,#SEND_BYTE,SCNEXT1 ;判斷是否為PC發(fā)送命令字.
AJMP SCSEND
SCNEXT1: CJNE A,#READ_BYTE,SCERRE1 ;判斷是否為PC接收命令字.
AJMP SCREAD
SCERRE1: AJMP SCPRG ;出錯,返回.
;接收PC機數(shù)據(jù)送到數(shù)控機床.
SCSEND: CLR RS485IO ;允許RS485輸入.禁止RS485輸出.
CLR RS232CE
SETB RS485CE ;選擇RS485.
ACALL DELAY
ACALL DELAY
ACALL DELAY
CLR RI
ACALL TIMESET ;設(shè)置定時器(60S).
SCWAIT8: ACALL WATCHDOG ;調(diào)看門狗喂狗子程序.
JNB RI,SCWAIT8 ;無接收數(shù)據(jù),則循環(huán)等待.
CLR RI
MOV A,SBUF
ACALL TIMEOFF ;關(guān)定時器.
MOV R4,A ;保護累加器.
CLR ODD_BIT ;清除奇校驗位.
CJNE A,#FINISH_BYTE,SCCONTINU1;判斷是否為結(jié)束命令字.
ACALL DELAY
ACALL DELAY
AJMP SCPRG ;收到結(jié)束命令字,返回.
SCCONTINU1: MOV A,R4 ;未收到結(jié)束命令字,繼續(xù)接收.
CLR RS485CE
SETB RS232CE ;選擇RS232.
ACALL DELAY
ACALL DELAY
ACALL DELAY
MOV SBUF,A
SCWAIT9: JNB TI,SCWAIT9 ;發(fā)送未完,則循環(huán)等待.
CLR TI ;數(shù)據(jù)發(fā)送完畢.
ACALL TIMESET ;設(shè)置定時器(60S).
SCWAIT10: ACALL WATCHDOG ;調(diào)看門狗喂狗子程序.
JNB RI,SCWAIT10 ;無接收數(shù)據(jù),則循環(huán)等待.
CLR RI
MOV A,SBUF
ACALL TIMEOFF
AJMP SCSEND
;接收數(shù)控機床數(shù)據(jù)送到PC機.
SCREAD: SETB RS485IO ;允許RS485輸出.禁止RS485輸入.
CLR RS485CE
SETB RS232CE ;選擇RS232.
ACALL DELAY
ACALL DELAY
ACALL DELAY
CLR RI
ACALL TIMESET ;設(shè)置定時器(60S).
SCWAIT11: ACALL WATCHDOG ;調(diào)看門狗喂狗子程序.
JNB RI,SCWAIT11 ;無接收數(shù)據(jù),則循環(huán)等待.
CLR RI
MOV A,SBUF
ACALL TIMEOFF ;關(guān)定時器.
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 ;發(fā)送未完,則循環(huán)等待.
CLR TI ;數(shù)據(jù)發(fā)送完畢.
CLR RS485CE
SETB RS232CE ;選擇RS232.
ACALL DELAY
ACALL DELAY
ACALL DELAY
MOV SBUF,A
SCWAIT14: JNB TI,SCWAIT14 ;發(fā)送未完,則循環(huán)等待.
CLR TI ;數(shù)據(jù)發(fā)送完畢.
CLR ODD_BIT ;清除奇校驗位.
CJNE A,#00H,SCNEXT2 ;判斷是否為結(jié)束命令字.
AJMP FINISHPRG ;收到結(jié)束命令字,返回.
SCNEXT2: CJNE A,#25H,SCNEXT3 ;判斷是否為結(jié)束命令字.
AJMP FINISHPRG ;收到結(jié)束命令字,返回.
SCNEXT3: CJNE A,#1AH,SCCONTINU2 ;判斷是否為結(jié)束命令字.
AJMP FINISHPRG ;收到結(jié)束命令字,返回.
SCCONTINU2: AJMP SCREAD ;未收到結(jié)束命令字,繼續(xù)接收.
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 ;發(fā)送結(jié)束命令字.
CPL C
MOV ODD_BIT,C ;加奇校驗.
MOV SBUF,A
SCWAIT13: JNB TI,SCWAIT13 ;發(fā)送未完,則循環(huán)等待.
CLR TI ;數(shù)據(jù)發(fā)送完畢.
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
;---------------------------------------------------------------------------------
;設(shè)置定時器子程序:
TIMESET: MOV TMOD,#21H
MOV TH0,#00H
MOV TL0,#01H
MOV R6,#TIMEH
MOV R7,#TIMEL ;置定時常數(shù).(60S)
SETB EA
SETB ET0 ;開定時器0中斷.
SETB TR0 ;定時器0開始計時.
RET
;---------------------------------------------------------------------------------
;關(guān)定時器子程序:
TIMEOFF: CLR TR0
CLR ET0
RET
;---------------------------------------------------------------------------------
;定時器中斷服務(wù)子程序:
T0PRG: MOV A_BYTE,A ;保護累加器.
MOV C_BIT,C ;保護進位標志.
CLR TR0 ;關(guān)定時.
CLR ET0 ;關(guān)中斷.
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 ;定時時間到,系統(tǒng)軟復(fù)位.
CLR C
SUBB A,#02H
MOV SP,A
MOV DPTR,#MAIN
PUSH DPL
PUSH DPH
RETI
TIME_CONTINU: MOV TH0,#00H ;定時時間未到,繼續(xù).
MOV TL0,#01H
SETB ET0 ;開定時器0中斷.
SETB TR0 ;定時器0開始計時.
MOV A,A_BYTE ;恢復(fù)累加器.
MOV C,C_BIT ;恢復(fù)進位標志.
RETI
;---------------------------------------------------------------------------------------
;延時20US
DELAY: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -