實(shí)戰(zhàn)攻堅(jiān)!
本節(jié),給大家講解針對(duì)EASY-M0806R這款PLC的SCAN用戶驅(qū)動(dòng)子程序該完成的功能。
通過(guò)前面的講解,大家應(yīng)該知道,SCAN是在梯形圖完成一次掃描以后被系統(tǒng)調(diào)用的程序,在這個(gè)程序里面,我們需要更新輸入輸出口的狀態(tài)以及LED的狀態(tài)。
SCAN
SCAN: LCALL USER_SCAN_O ;輸出端口和LED更新
LCALL USER_SCAN_I ;輸入端口和LED更新
RET
USER_SCAN_O:
;刷新輸出端口
MOV DPTR,#RAM_PY+1 ;Y00--Y05
MOVX A,@DPTR
CPL A
MOV SFRPAGE,#0FH
ANL A,#3FH
MOV B,A
MOV A,P1
ANL A,#0C0H
ORL A,B ;使P1.6,P1.7保持原來(lái)的狀態(tài)
MOV P1,A ;刷新輸出
;刷新輸出LED
SWAP A
MOV C,ACC.4
MOV P0.4,C
MOV C,ACC.5
MOV P0.5,C
MOV C,ACC.6
MOV P0.6,C
MOV C,ACC.7
MOV P0.7,C
MOV C,ACC.0
MOV P4.1,C
MOV C,ACC.1
MOV P4.0,C
RET
USER_SCAN_I: MOV A,INPUT_CNT
JZ USER_SCAN_I1
RET
USER_SCAN_I1: LCALL USER_SCAN_IS ;判斷8次采樣值是否相同
JB F0,USER_SCAN_I2
MOV C,ACC.7 ;調(diào)整輸入口
MOV F0,C
MOV C,ACC.0
MOV ACC.7,C
MOV C,F0
MOV ACC.0,C
MOV C,ACC.6
MOV F0,C
MOV C,ACC.1
MOV ACC.6,C
MOV C,F0
MOV ACC.1,C
MOV C,ACC.5
MOV F0,C
MOV C,ACC.2
MOV ACC.5,C
MOV C,F0
MOV ACC.2,C
MOV C,ACC.4
MOV F0,C
MOV C,ACC.3
MOV ACC.4,C
MOV C,F0
MOV ACC.3,C
MOV INPUT_PORTA,A ;相同則更新輸入數(shù)據(jù)寄存器
MOV DPTR,#RAM_PX+1 ;X00--X07
MOV A,INPUT_PORTA
MOVX @DPTR,A ;更新X00--X07
;刷新輸入LED
MOV A, INPUT_PORTA
CPL A
MOV P2,A
USER_SCAN_I2: MOV INPUT_CNT,#08H
RET
;判斷8個(gè)采樣數(shù)據(jù)是否相同,相同則F0=0
USER_SCAN_IS: MOV DPTR,#XINPUT
MOVX A,@DPTR
MOV M0,A
MOV R7,#7
USER_SCAN_IS1: INC DPTR
MOVX A,@DPTR
CJNE A,M0,USER_SCAN_IS2
DJNZ R7,USER_SCAN_IS1
CLR F0
RET
USER_SCAN_IS2: SETB F0
RET
關(guān)于本段代碼的詳細(xì)說(shuō)明,筆者將改變一下方式,在下面的回帖為大家講解。當(dāng)然筆者在關(guān)鍵處已經(jīng)做了注釋,大家可以先看看并結(jié)合之前的程序研究一下,發(fā)帖提出問題,看看筆者的回答與自己的理解有何偏差。
如果沒有人發(fā)帖,筆者自然是希望看文章的朋友們都理解了筆者的代碼,就小小的懶惰一回吧,嘿嘿~!
當(dāng)然如果大家的問題很多,那么筆者就寫“科威PLC芯片組開發(fā)實(shí)例(十二)”,詳細(xì)給大家說(shuō)明SCAN中代碼的含義。
本帖首發(fā)中國(guó)工控網(wǎng)科威PLC論壇,轉(zhuǎn)載請(qǐng)聲明!