一對多的通訊(用第9位作地址和數(shù)據(jù)的區(qū)分位)
協(xié)議:
1)主機置SM2=0。所有從機初始狀態(tài)時置SM2=1;
2)主機向從機發(fā)送地址信息一個字節(jié),第9位(TB8)=1。
3)主機向從機發(fā)送數(shù)據(jù)信息一個字節(jié),第9位(TB8)=0。
4)主機發(fā)送某一從機地址信息一個字節(jié),第9位(TB8)=1。
5)所有從機都能接收到主機發(fā)送的地址信息。
6)從機接收到地址信息后,與本從機號進行比較;若地址符合,置本從機SM2=0,且向主機發(fā)送本從機號作為應答(TB8=0)。
7)主機接收到從機正確應答后,開始發(fā)送數(shù)據(jù)字節(jié),第9位TB8=0。
8)只有對應從機才能接收到主機的數(shù)據(jù)信息,并能與主機對話。
9)結束主機與對應從機一次通訊后,該從機置SM2=1。
10) 主機返回步驟4)。
通訊程序的特殊部分示例:
主機方:(例如:主機與第3號從機通訊)
,,,,,,,,,,
MASTER: MOV SCON,#98H ;串口方式2,SM2=0,REN=1,TB8=0
MTT1: MOV SBUF,#03H ;發(fā)送第3號從機號
WAIT1: JBC TI,WAIT2
SJMP WAIT1
WAIT2: JBC RI,MRR1 ;等待接收應答
SJMP WAIT2
MRR1: MOV A,SBUF ;接收應答
XRL A,#03H ;比較是3號從機嗎?
JZ RIGHT ;是,轉向發(fā)送數(shù)據(jù)
ERR: MOV SBUF,#0 ;不是,(#發(fā)送復位信號)
WAIT3: JBC TI,ERR1 ;
SJMP WAIT3 ;
ERR1: SJMP MTT1 ;重新呼叫
RIGHT: CLR TB8 ;聯(lián)絡成功,TB8=0
,,,,,,, ;發(fā)送數(shù)據(jù)
第3號從機響應:
,,,,,,,,,
SLAVE: MOV SCON,#0B0H ;串口方式2,SM2=1,REN=1
,,,,,,,
SRR1: JBC RI,SRR2 ;等待接收地址信號
SJMP SRR1
SRR2: MOV A,SBUF
XRL A,#03H
JNZ SRR1 ;接收到的不是本從機號
CLR SM2 ;主機是呼叫本從機
CLR TB8 ;清SM2=0,準備接收數(shù)據(jù),TB8=0
MOV SBUF,#03H ;發(fā)送本機號給主機作為應答
WAIT: JBC TI,SRR3
SJMP WAIT
SRR3: JBC RI,SRR4 ;等待主機發(fā)送數(shù)據(jù)
SJMP SRR3
SRR4: JNB RB8,RIGHT ;是復位信號嗎?
SETB SM2 ;是,恢復監(jiān)聽地址。
SJMP SRR1 ;
RIGHT: MOV A,SBUF ;成功,接收數(shù)據(jù)