2.2 RS-485
RS-485標(biāo)準(zhǔn)接口是單片機(jī)系統(tǒng)種常用的一種串行總線之一。RS-485通信方式RS-485標(biāo)準(zhǔn)是由EIA(電子工業(yè)協(xié)會(huì))和TIA(通訊工業(yè)協(xié)會(huì))共同制訂和開發(fā)的。RS-485作為一種多點(diǎn)差分?jǐn)?shù)據(jù)傳輸?shù)?a href="http://ttokpm.com/v/tag/2364/" target="_blank">電氣規(guī)范,已成為業(yè)界最廣泛應(yīng)用的標(biāo)準(zhǔn)通信接口之一。理論上,RS-485標(biāo)準(zhǔn)最多接入32個(gè)設(shè)備(受芯片驅(qū)動(dòng)能力的影響),可以工作在半雙工或全雙工模式下,最大傳輸距離約為1219米,最大傳輸速率約為10Mbps[1]。然而通常RS-485網(wǎng)絡(luò)采用平衡雙絞線作為傳輸媒體,平衡雙絞線的長(zhǎng)度與傳輸速率成反比,只有在20Kbps的傳輸速率下,才可能達(dá)到最大傳輸距離。一般15米長(zhǎng)的雙絞線最大傳輸速率僅為1Mbps。不過(guò)對(duì)于速率要求不是很高的控制系統(tǒng)來(lái)說(shuō)已經(jīng)足夠了。
RS-485采用平衡發(fā)送和差分接收方式來(lái)實(shí)現(xiàn)通信:在發(fā)送端TXD將串行口的TTL電平信號(hào)轉(zhuǎn)換成差分信號(hào)A、B兩路輸出,經(jīng)傳輸后在接收端將差分信號(hào)還原成TTL電平信號(hào)。兩條傳輸線通常使用雙絞線,又是差分傳輸,因此有極強(qiáng)的抗共模干擾的能力,接收靈敏度也相當(dāng)高。同時(shí),最大傳輸速率和最大傳輸距離也大大提高。如果以10Kbps速率傳輸數(shù)據(jù)時(shí)傳輸距離可達(dá)12m,而用100Kbps時(shí)傳輸距離可達(dá)1.2km。如果降低波特率,傳輸距離還可進(jìn)一步提高。另外RS-485實(shí)現(xiàn)了多點(diǎn)互連,最多可達(dá)256臺(tái)驅(qū)動(dòng)器和256臺(tái)接收器,非常便于多器件的連接。不僅可以實(shí)現(xiàn)半雙工通信,而且可以實(shí)現(xiàn)全雙工通信。
2.3 多機(jī)通信原理
在多機(jī)通信中,每臺(tái)從機(jī)均分配有一個(gè)從機(jī)地址,主機(jī)與從機(jī)之間進(jìn)行串行通信時(shí),通常是主機(jī)先呼叫某從機(jī)地址,喚醒被叫從機(jī)后,主、從兩機(jī)之間進(jìn)行數(shù)據(jù)交換。而未被呼叫的從機(jī)則繼續(xù)進(jìn)行各自的工作??墒牵绻谥鳈C(jī)與某被呼叫從機(jī)進(jìn)行數(shù)據(jù)交換過(guò)程中,其他從機(jī)如果不采取相應(yīng)的數(shù)據(jù)識(shí)別技術(shù),則這些從機(jī)就會(huì)因?yàn)榇型ㄐ啪€上有數(shù)據(jù)傳輸而時(shí)時(shí)被打斷,影響正常的工作。利用單片機(jī)的串口工作方式2、方式3可以很好解決上述問(wèn)題。在多機(jī)通信過(guò)程中,從機(jī)首先要解決的是如何識(shí)別主機(jī)發(fā)送的是地址信息還是數(shù)據(jù)信息。當(dāng)發(fā)送的是地址信息時(shí),各從機(jī)都響應(yīng)串口中斷,接收主機(jī)下發(fā)的一幀地址數(shù)據(jù)。而當(dāng)主機(jī)發(fā)送數(shù)據(jù)幀時(shí),無(wú)關(guān)從機(jī)可不響應(yīng)串口中斷。解決的方法是:當(dāng)主機(jī)發(fā)送一幀地址信息時(shí),應(yīng)保持這幀數(shù)據(jù)的第9位為1(即TB8=1)。從機(jī)按照工作方式2或工作方式3運(yùn)行時(shí),將串口寄存器SCON中的控制位SM2置為1,當(dāng)所接收的一幀數(shù)據(jù)的第9位為1,所有從機(jī)都產(chǎn)生串口中斷,接收這一幀地址數(shù)據(jù)并與各自的從機(jī)地址進(jìn)行比較,以判斷主機(jī)是否要與本機(jī)通信。接收到的地址數(shù)據(jù)與從機(jī)地址相等達(dá)到為被呼叫從機(jī),該從機(jī)將串口控制寄存器SCON中的控制位SM2清為0, 去接收主機(jī)發(fā)送來(lái)的數(shù)據(jù)幀(數(shù)據(jù)幀的第9位為0),此時(shí)不管接收到的第9位數(shù)據(jù)是否為1或0,都要產(chǎn)生串口中斷,這就保證了主機(jī)與被呼叫從機(jī)間的正常數(shù)據(jù)通信。數(shù)據(jù)通信結(jié)束后,該從機(jī)又重新將串行口控制寄存器SCON中的控制位SM2置為1,為下一次與主機(jī)進(jìn)行通信做好準(zhǔn)備。其他從機(jī)則一直在SM2=1下繼續(xù)自己的工作,不會(huì)因?yàn)橹?、從機(jī)之間的數(shù)據(jù)通信而被打斷。
多機(jī)通信的實(shí)現(xiàn),主要靠主、從機(jī)正確地設(shè)置與判斷多機(jī)通信控制位SM2和發(fā)送或接收的第9位數(shù)據(jù)(TB8或RB8)。當(dāng)主機(jī)給從機(jī)發(fā)送信息時(shí),要根據(jù)發(fā)送信息的性質(zhì)來(lái)設(shè)置TB8,發(fā)送地址信號(hào)時(shí),設(shè)置TB8=1;發(fā)送數(shù)據(jù)或命令時(shí),設(shè)置TB8=0。當(dāng)從機(jī)的SM2為1時(shí),該從機(jī)只接收地址幀(RB8位為1),對(duì)數(shù)據(jù)幀(RB8位為0)將不予理睬。而當(dāng)SM2為0時(shí),該從機(jī)接收所有發(fā)送來(lái)的信息。多機(jī)通信過(guò)程如下:(1) 使所有從機(jī)的SM2置1,處于只接收地址幀的狀態(tài)(即從機(jī)復(fù)位);
?。?) 主機(jī)發(fā)送一地址幀信息,其中包含8位地址,第9位為地址、數(shù)據(jù)標(biāo)志位,第9
位置1表示發(fā)送的是地址;
?。?) 從機(jī)接收到地址幀后,各自中斷CPU,把接收到的地址與本地址作比較; (4) 地址相符的從機(jī),使SM2清零以接收主機(jī)隨后發(fā)來(lái)的所有信息,對(duì)于地址不相符
的從機(jī),仍保持SM2=1狀態(tài),對(duì)主機(jī)隨后發(fā)送的數(shù)據(jù)不予理睬,直到主機(jī)發(fā)送來(lái)新的地址幀;
?。?) 主機(jī)發(fā)送數(shù)據(jù)或控制信息給被尋址的從機(jī);
?。?) 被尋址的從機(jī),因SM2=0,可以接收主機(jī)發(fā)送過(guò)來(lái)的所有數(shù)據(jù),當(dāng)從機(jī)接收數(shù)據(jù)
結(jié)束時(shí),置位SM2,返回接收地址幀狀態(tài)(復(fù)位狀態(tài));
(7) 當(dāng)主機(jī)改為與另外從機(jī)聯(lián)系時(shí),可再發(fā)地址幀尋址其從機(jī),而先前被尋址過(guò)的從
機(jī)恢復(fù)SM2=1
第4章 系統(tǒng)問(wèn)題及其解決
4.1 通信規(guī)則
由于MAX485通訊是一種半雙工通訊,發(fā)送和接收共用同一物理信道。在任意時(shí)刻只允許一臺(tái)單機(jī)處于發(fā)送狀態(tài)。因此要求應(yīng)答的單機(jī)必須在偵聽到總線上呼叫信號(hào)已經(jīng)發(fā)送完畢,并且沒(méi)有其它單機(jī)發(fā)出應(yīng)答信號(hào)的情況下,才能應(yīng)答。半雙工通訊對(duì)主機(jī)和從機(jī)的發(fā)送和接收時(shí)序有嚴(yán)格的要求。如果在時(shí)序上配合不好,就會(huì)發(fā)生總線沖突,使整個(gè)系統(tǒng)的通訊癱瘓,無(wú)法正常工作。要做到總線上的設(shè)備在時(shí)序上的嚴(yán)格配合,必須要遵從以下幾項(xiàng)原則: (1) 復(fù)位時(shí),主從機(jī)都應(yīng)該處于接收狀態(tài)。
MAX485芯片的發(fā)送和接收功能轉(zhuǎn)換是由芯片的 RE* ,DE端控制的。RE*=1,DE=1時(shí),MAX485發(fā)送狀態(tài);RE*=0,DE=0時(shí),MAX485處于接收狀態(tài)。一般使用單片機(jī)的一根口線連接RE*,DE端。在上電復(fù)位時(shí),由于硬件電路穩(wěn)定需要一定的時(shí)間,并且單片機(jī)各端口復(fù)位后處于高電平狀態(tài),這樣就會(huì)使總線上各個(gè)分機(jī)處于發(fā)送狀態(tài),加上上電時(shí)各電路的不穩(wěn)定,可能向總線發(fā)送信息。因此,如果用一根口線作發(fā)送和接收控制信號(hào),應(yīng)該將口線反向后接入MAX485的控制端,使上電時(shí)MAX485處于接收狀態(tài)。 另外,在主從機(jī)軟件上也應(yīng)附加若干處理措施,如:上電時(shí)或正式通訊之前,對(duì)串行口做幾次空操作,清除端口的非法數(shù)據(jù)和命令。
?。?) 控制端RE*,DE的信號(hào)的有效脈寬應(yīng)該大于發(fā)送或接收一幀信號(hào)的寬度。 在全雙工通訊過(guò)程中,發(fā)送和接收信號(hào)分別在不同的物理鏈路上傳輸,發(fā)送端始終為發(fā)送端,接收端始終為接收端,不存在發(fā)送、接收控制信號(hào)切換問(wèn)題。在RS-485半雙工通訊中,由于MAX485的發(fā)送和接收都由同一器件完成,并且發(fā)送和接收使用同一物理鏈路,必須對(duì)控制信號(hào)進(jìn)行切換。控制信號(hào)何時(shí)為高電平,何時(shí)為低電平,一般以單片機(jī)的TXC(發(fā)送完成標(biāo)記),RXC(接收完成標(biāo)記)信號(hào)作參考。
發(fā)送時(shí),檢測(cè)TXC是否建立起來(lái),當(dāng)TXC為高電平后關(guān)閉發(fā)送功能轉(zhuǎn)為接收功能; 接收時(shí),檢測(cè)RXC是否建立起來(lái),當(dāng)RXC為高電平后,接收完畢,又可以轉(zhuǎn)為發(fā)送。 在理論上雖然行得通,但在實(shí)際聯(lián)調(diào)中卻出現(xiàn)傳輸數(shù)據(jù)時(shí)對(duì)時(shí)錯(cuò)的現(xiàn)象。根據(jù)查證有關(guān)資料,并借助示波器反復(fù)測(cè)試,才發(fā)現(xiàn)一個(gè)值得注意的問(wèn)題,我們可以查看單片機(jī)的時(shí)序:
單片機(jī)在串行口發(fā)送數(shù)據(jù)時(shí),只要將8位數(shù)據(jù)位傳送完畢,TXC標(biāo)志即建立,但此時(shí)應(yīng)發(fā)送的第九位數(shù)據(jù)位(若發(fā)送地址幀時(shí))和停止位尚未發(fā)出。如果在這是關(guān)閉發(fā)送控制,勢(shì)必造成發(fā)送幀數(shù)據(jù)不完整。如果單片機(jī)多機(jī)通訊采用較高的波特率,幾條操作指令的延時(shí)就可能超過(guò)2位(或1位)數(shù)據(jù)的發(fā)送時(shí)間,問(wèn)題或許不會(huì)出現(xiàn)。但是如果采用較低波特率,如9600,發(fā)送一位數(shù)據(jù)需104μs左右,單靠幾條操作指令的延時(shí)遠(yuǎn)遠(yuǎn)不夠,問(wèn)題就明顯地暴露出來(lái)。接收數(shù)據(jù)時(shí)也同樣如此,單片機(jī)在接收完8個(gè)數(shù)據(jù)位后就建立起RXC信號(hào),但此時(shí)還未接收到第九位數(shù)據(jù)位(若接收地址幀時(shí))和停止位。所以,接收端必須延時(shí)大于2位數(shù)據(jù)位的時(shí)間(1位數(shù)據(jù)位時(shí)間=1/波特率),再作應(yīng)答,否則會(huì)發(fā)生總線沖突。
?。?) 總線上所連接的各單機(jī)的發(fā)送控制信號(hào)在時(shí)序上完全隔開。
為了保證發(fā)送和接收信號(hào)的完整和正確,避免總線上信號(hào)的碰撞,對(duì)總線的使用權(quán)必須進(jìn)行分配才能避免競(jìng)爭(zhēng),連接到總線上的單機(jī),其發(fā)送控制信號(hào)在時(shí)間上要完全隔離。
總之,發(fā)送和接收控制信號(hào)應(yīng)該足夠?qū)挘员WC完整地接收一幀數(shù)據(jù),任意兩個(gè)單機(jī)的發(fā)送控制信號(hào)在時(shí)間上完全分開,避免總線爭(zhēng)端。
第5章 軟件設(shè)計(jì)
5.1 系統(tǒng)結(jié)構(gòu)
該多機(jī)通信系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖如圖5-1所示,系統(tǒng)采用半雙工主從通信方式,主機(jī)可以讀取從機(jī)的數(shù)據(jù)或?qū)憯?shù)據(jù)到從機(jī),并將數(shù)據(jù)送終端進(jìn)行顯示;從機(jī)主要負(fù)責(zé)對(duì)分布的電子設(shè)備進(jìn)行監(jiān)測(cè)或控制,用中斷的方式接收主機(jī)發(fā)來(lái)的命令并做出回應(yīng)。
5.2 通信協(xié)議 5.2.1 信息格式
該協(xié)議的信息格式如下:
(1)編碼格式;二進(jìn)制代碼。
(2)波特率:9600 b/s。
?。?)通信方式:半雙工。
(4)每個(gè)字符由u 位組成; 1位:起始位(0); 8位:數(shù)據(jù)位;1位:地址/數(shù)據(jù)識(shí)別位(1為地址,o為數(shù)據(jù)); l位:停止位(1)。
(5) 字符發(fā)送順序;低位在先
(6) 幀結(jié)束標(biāo)志:通信線路空閑3.5 ms以上
?。?) 幀校驗(yàn)方式:數(shù)據(jù)和(2字節(jié))
?。?) 主機(jī)詢問(wèn)的一般格式見(jiàn)表5-2:
表5-2 主機(jī)詢問(wèn)的一般格式
從機(jī)地址碼:兩字節(jié)二進(jìn)制數(shù),后一字節(jié)是前一字節(jié)的反碼。 命令碼:一字節(jié)二進(jìn)制數(shù),O1H代表主機(jī)讀,02H代表主機(jī)寫。 數(shù)據(jù)個(gè)數(shù):表示主機(jī)要讀寫的字節(jié)個(gè)數(shù),一字節(jié)二進(jìn)制數(shù)。
校驗(yàn)和:兩字節(jié)二進(jìn)制數(shù),是將從機(jī)地址碼、命令和數(shù)據(jù)按字節(jié)從頭依次相加,生成兩字節(jié)的校驗(yàn)和。 從機(jī)應(yīng)答的一般格式(如表5-3)
表5-3 從機(jī)應(yīng)答的一般格式
圖中信息段的定義同圖2
5.2.2 定時(shí)與重發(fā)
本通信協(xié)議定時(shí)規(guī)定如下:
(1)幀發(fā)送時(shí)限;70 ms.超過(guò)此時(shí)限結(jié)束發(fā)送。
?。?)主機(jī)等待從機(jī)應(yīng)答時(shí)限:7 ms,超過(guò)此時(shí)限,酌情重發(fā)。 (3)主機(jī)重發(fā)次數(shù):不超過(guò)4次,超過(guò)后,判通信失敗。
5.2.3 通信過(guò)程
一次完整的通信過(guò)程分為3個(gè)階段:主機(jī)詢問(wèn)、從機(jī)應(yīng)答和鏈路釋放。主機(jī)詢問(wèn)階段,主機(jī)以幀的形式將從機(jī)地址碼、命令、數(shù)據(jù)和校驗(yàn)碼傳送到指定從機(jī);從機(jī)應(yīng)答階段,從機(jī)解釋接收的命令碼,并組織相應(yīng)幀信息回送到主機(jī);鏈路釋放階段,從機(jī)清除接收緩沖區(qū)及相關(guān)變量,準(zhǔn)備與主機(jī)下次通信。任何一次完整的通信過(guò)程都是由主機(jī)方發(fā)起的,從機(jī)在被主機(jī)尋址前只能處于偵聽狀態(tài),從機(jī)在接收到地址碼的第2個(gè)字節(jié)后,立即判斷是否尋址自己,如果是.繼續(xù)接受下面的數(shù)據(jù),否則不與理睬。
5.3 通信軟件設(shè)計(jì) 5.3.1 從機(jī)通信軟件設(shè)計(jì)
在該系統(tǒng)中,從機(jī)的主要任務(wù)是對(duì)被檢測(cè)設(shè)備進(jìn)行故障檢測(cè)和故障定位,通信軟件的主要功能是接收主機(jī)的命令并將檢測(cè)的結(jié)果回送主機(jī)。從機(jī)通信軟件由2部分組成:串行中斷服務(wù)程序和定時(shí)器TO中斷服務(wù)程序。串行中斷服務(wù)程序用于接收或發(fā)送數(shù)據(jù);TO中斷服務(wù)程序用于當(dāng)從機(jī)接收完一幀信息后進(jìn)行解釋并啟動(dòng)通信向主機(jī)應(yīng)答,另外也用于當(dāng)從機(jī)發(fā)送超時(shí)后的一些處理。從機(jī)上電后處于偵聽狀態(tài),當(dāng)主機(jī)尋址時(shí),便進(jìn)人中斷服務(wù)程序,其程序流程圖如圖5-4所示。
圖5-4 串行通信中斷服務(wù)程序流程圖
定時(shí)器TO,并置收發(fā)標(biāo)志為收。當(dāng)接收完第2個(gè)字節(jié)后,各從機(jī)立即判斷是否尋址本機(jī),若是,則置SM2為‘
0’,繼續(xù)接收主機(jī)送來(lái)的數(shù)據(jù);若不是,則禁止T0定時(shí),不在接收后面的數(shù)據(jù)。當(dāng)被尋址從機(jī)接收完一幀信息后,字符間隔定時(shí)器會(huì)產(chǎn)生定時(shí)中斷,進(jìn)入TO中斷服務(wù)程序。圖5-5是TO中斷服務(wù)程序流程圖
進(jìn)入TO中斷服務(wù)程序后,首先清除TO中斷請(qǐng)求標(biāo)志,停止TO定時(shí)器,接著判斷是接收完成還是發(fā)送超時(shí),若是接收完成,再判斷校驗(yàn)和是否正確,若正確,對(duì)接收的命令進(jìn)行解釋,看是主機(jī)讀還是主機(jī)寫操作,若是主機(jī)讀,則將數(shù)據(jù)打包,送到專門用于通信的數(shù)組,接著,禁止接收,置本機(jī)為應(yīng)答工作方式,最后啟動(dòng)發(fā)送,發(fā)送第一個(gè)字節(jié),同時(shí)啟動(dòng)發(fā)送時(shí)限定時(shí)器TO。當(dāng)一個(gè)字節(jié)發(fā)送完后,便進(jìn)入通信中斷服務(wù)程序,
繼續(xù)發(fā)送余下數(shù)據(jù)。如果在上邊判校驗(yàn)和時(shí),發(fā)現(xiàn)不正確,則置SM2為‘1’,恢復(fù)本機(jī)的偵聽狀態(tài),以便接收主機(jī)的重發(fā)信息。
5.3.2 主機(jī)通信軟件設(shè)計(jì)
該系統(tǒng)主機(jī)的主要任務(wù)是循環(huán)讀取從機(jī)的檢測(cè)結(jié)果,并送終端顯示,其通信軟件由3部分組成:主程序中負(fù)責(zé)尋址從機(jī)的尋址模塊、通信中斷服務(wù)程序和TO中斷服務(wù)程序。尋址模塊程序流程圖見(jiàn)圖5-6。
對(duì)從機(jī)尋址是按照從機(jī)的編號(hào)順序進(jìn)行的,即從1號(hào)從機(jī)開始,主機(jī)發(fā)送該從機(jī)信息幀的第1個(gè)字節(jié)啟動(dòng)尋址,同時(shí)啟動(dòng)發(fā)送超時(shí)定時(shí)器TO,然后檢測(cè)通信結(jié)束標(biāo)志.當(dāng)主機(jī)成功的接收到該從機(jī)的應(yīng)答信息后,便會(huì)置位該標(biāo)志,完成與該從機(jī)的通信。接下來(lái),尋址下一從機(jī),直到所有從機(jī)都被尋址。最后,主機(jī)完成其它功能后,又從1號(hào)從機(jī)開始下一循環(huán)的尋址。通信中斷服務(wù)程序和TO中斷服務(wù)程的設(shè)計(jì)方法與從機(jī)的大同小異,在此不再介紹。
第6章 程序設(shè)計(jì)
程序是單片機(jī)靈魂,沒(méi)有對(duì)應(yīng)的程序,單片機(jī)系統(tǒng)是無(wú)法完成任何動(dòng)作的,解決所涉及的問(wèn)題的。編寫程序必須對(duì)機(jī)器的指令系統(tǒng)非常的熟悉,而且不能脫離具體的機(jī)器,因此程序不能在不同的機(jī)器上通用。未了使本系統(tǒng)能夠成功運(yùn)行,程序是必不可少的,所以這次編寫了一個(gè)主機(jī)程序,兩個(gè)從機(jī)程序。
6.1 主機(jī)程序如下:
#include《reg51.h》 #include《absacc.h》 #include《intrins.h》 unsigned char cort=0; sbit P3_5=P3^5;
/********************************* 按鍵掃描子程序
*********************************/ key_serial() interrupt 0 using 1
{
++cort; }
/********************************* 發(fā)送子程序
*********************************/ void master(void) { if(cort==1) { SBUF=0x01; while(TI!=1);TI=0; P3_5=0; SM2=0;
while (RI!=1);RI=0;
P2=SBUF;
SM2=1; P3_5=1;
}
if(cort==2) {
SBUF=0x02; while(TI!=1);TI=0; SM2=0; P3_5=0;
while(RI!=1);RI=0; P2=SBUF; SM2=1; P3_5=1;
}
if(cort==3)cort=1; SM2=1;
}
/***************主程序****************/ void main(void) {
P2=0xff; TMOD=0x20; TL1=0xfd; TH1=0xfd; PCON=0x00; TR1=1; SCON=0xf8; EA=1; EX0=1; IT0=1; P3_5=1;
while(1) {
master();
//發(fā)送
} }
6.2 從機(jī)1程序如下: #include《reg51.h》 #include《absacc.h》 #include《intrins.h》
unsigned char serial_receiver; sbit P3_5=P3^5;
/**************************************** 串行口中斷子程序
****************************************/ void serial (void) interrupt 4 using 1 { ES=0; RI=0;
if(SBUF==0x01)
{
P3_5=1; SM2=0; P1=0x10; SBUF=0x10;
while(TI!=1);TI=0;
}
SM2=1; ES=1;
P3_5=0;
}
/*****************主程序******************/
void main(void) { P1=0x00; TMOD=0x20; TL1=0xfd; TH1=0xfd; PCON=0x00; TR1=1; SCON=0xf0; EA=1; ES=1; P3_5=0; while(1) { _nop_();
}
6.3 從機(jī)2程序如下: #include《reg51.h》 #include《absacc.h》 #include《intrins.h》
unsigned char serial_receiver; sbit P3_5=P3^5;
/**************************************** 串行口中斷子程序
****************************************/ void serial (void) interrupt 4 using 1 { ES=0; RI=0;
if(SBUF==0x02)
{
P3_5=1; SM2=0; P1=0x80; SBUF=0x80;
while(TI!=1);TI=0;
} SM2=1; ES=1;
P3_5=0;
}
/*****************主程序******************/ void main(void) { P1=0x00; TMOD=0x20; TL1=0xfd; TH1=0xfd; PCON=0x00; TR1=1; SCON=0xf0; EA=1; ES=1; P3_5=0; while(1) { _nop_();