




已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1,第7章 AT89S51單片機 的串行口,1,成都理工大學工程技術(shù)學院 自動化工程系,2,2,第7章 目錄 7.1 串行口的結(jié)構(gòu) 7.1.1 串行口控制寄存器SCON 7.1.2 特殊功能寄存器PCON 7.2 串行口的4種工作方式 7.2.1 方式0 7.2.2 方式1 7.2.3 方式2 7.2.4 方式3 7.3 多機通信0,3,7.4 波特率的制定方法 7.4.1 波特率的定義 7.4.2 定時器T1產(chǎn)生波特率的計算 7.5 串行口的應用 7.5.1 雙機串行通信的硬件連接 7.5.2 串行通信設(shè)計需要考慮的問題 7.5.3 雙機串行通信軟件編程 7.5.4 PC機與單片機的點對點串行通信接口設(shè)計 7.5.5 PC機與單片機與多個單片機的串行通信接口設(shè)計,4,5,7.1 串行口的結(jié)構(gòu) 內(nèi)部結(jié)構(gòu)如圖7-1所示。 有兩個物理上獨立的接收、發(fā)送緩沖器SBUF(屬于特殊功能寄存器),可同時發(fā)送、接收數(shù)據(jù)。 發(fā)送緩沖器只能寫入不能讀出 接收緩沖器只能讀出不能寫入 兩個緩沖器共用一個特殊功能寄存器字節(jié)地址(99H)。 控制寄存器共有兩個:特殊功能寄存器SCON和PCON。,5,6,圖7-1 串行口的內(nèi)部結(jié)構(gòu)圖,6,7,7.1.1 串行口控制寄存器SCON 字節(jié)地址98H,可位尋址,位地址為98H9FH。格式如圖7-2所示。 圖7-2 串行口控制寄存器SCON的格式 介紹SCON中各位的功能。 (1)SM0、SM1串行口4種工作方式選擇位 SM0、SM1兩位編碼所對應的4種工作方式見表7-1。,7,8,(2)SM2多機通信控制位 多機通信是在方式2和方式3下進行。當串口以方式2或方式3接收時,如果SM2 = 1,則只有當接收到的第9位數(shù)據(jù)(RB8)為“1”時,才使RI置“1”,產(chǎn)生中斷請求,并將接收到的前8位數(shù)據(jù)送入SBUF。 當接收到的第9位數(shù)據(jù)(RB8)為“0”時,則將接收到的前8位數(shù)據(jù)丟棄。,8,9,當SM2 = 0時,則不論第9位數(shù)據(jù)是1還是0,都將前8位數(shù)據(jù)送入SBUF中,并使RI置1,產(chǎn)生中斷請求。 在方式1時,如果SM2 = 1,則只有收到有效的停止位時才會激活RI。 在方式0時,SM2必須為0。 (3)REN允許串行接收位。 由軟件置“1”或清“0”。 REN=1,允許串行口接收數(shù)據(jù)。 REN=0,禁止串行口接收數(shù)據(jù)。,9,10,(4)TB8發(fā)送的第9位數(shù)據(jù) 方式2和方式3,TB8是要發(fā)送的第9位數(shù)據(jù),其值由軟件置“1”或清“0”。在雙機串行通信時,一般作為奇偶校驗位使用;在多機串行通信中用來表示主機發(fā)送的是地址幀還是數(shù)據(jù)幀,TB8=1為地址幀,TB8=0為數(shù)據(jù)幀。 (5)RB8接收的第9位數(shù)據(jù) 方式2和方式3,RB8存放接收到的第9位數(shù)據(jù)。在方式1,如SM2 = 0,RB8是接收到的停止位。在方式0,不使用RB8。 (6)TI發(fā)送中斷標志位 方式0,串行發(fā)送的第8位數(shù)據(jù)結(jié)束時TI由硬件置“1”,在其他方式中,串行口發(fā)送停止位的開始時置TI 為“1”。,10,11,TI =1,表示一幀數(shù)據(jù)發(fā)送結(jié)束。TI的狀態(tài)可供軟件查詢,也可申請中斷。CPU響應中斷后,在中斷服務程序中向SBUF寫入要發(fā)送的下一幀數(shù)據(jù)。TI必須由軟件清“0”。 (7)RI接收中斷標志位 方式0時,接收完第8位數(shù)據(jù)時,RI由硬件置“1”。在其他工作方式中,串行接收到停止位時,該位置“1”。RI = 1,表示一幀數(shù)據(jù)接收完畢,并申請中斷,要求CPU從接收SBUF取走數(shù)據(jù)。該位的狀態(tài)也可供軟件查詢。RI必須由軟件清“0”。,12,SCON的所有位都可進行位操作清“0”或置“1”。 7.1.2 特殊功能寄存器PCON 字節(jié)地址為87H,不能位尋址。格式如圖7-3所示。,12,圖7-3 特殊功能寄存器PCON的格式,13,下面介紹PCON中各位功能。僅最高位SMOD與串口有關(guān),其他各位的功能已在第2章的節(jié)電工作方式一節(jié)中作過介紹。 SMOD:波特率選擇位。 例如,方式1的波特率計算公式為 方式1波特率 = 定時器T1的溢出率 當SMOD = 1時,要比SMOD = 0時的波特率加倍,所以也稱SMOD位為波特率倍增位。,13,14,7.2 串行口的4種工作方式 4種工作方式由特殊功能寄存器SCON中SM0、SM1位定義,編碼見表7-1。 7.2.1 方式0 方式0為同步移位寄存器輸入/輸出方式。該方式并不用于兩個AT89S51單片機之間的異步串行通信,而是用于串行口外接移位寄存器,擴展并行I/O口。 8位數(shù)據(jù)為一幀,無起始位和停止位,先發(fā)送或接收最低位。波特率固定,為fosc/12。幀格式如圖7-4所示。 圖7-4 方式0的幀格式,14,15,1方式0發(fā)送 (1)方式0發(fā)送過程 當CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令時,產(chǎn)生一個正脈沖,串行口開始把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù),中斷標志位TI置“1”。 發(fā)送時序如圖7-5所示。,15,16,16,圖7-5 方式0發(fā)送時序,17,(2)方式0發(fā)送應用舉例 圖7-6所示為方式0發(fā)送的一個具體應用,通過串行口外接8位串行輸入并行輸出移位寄存器74LS164,擴展兩個8位并行輸出口的具體電路。 方式0發(fā)送時,串行數(shù)據(jù)由P3.0(RXD端)送出,移位脈沖由P3.1(TXD端)送出。 在移位脈沖的作用下,串行口發(fā)送緩沖器的數(shù)據(jù)逐位地從P3.0串行移入74LS164中。,17,18,圖7-6 外接串入并出移位寄存器74LS164擴展的并行輸 出口,18,19,2方式0接收 (1)方式0接收過程 方式0接收,REN為串行口允許接收控制位,REN=0,禁止接收;REN = 1,允許接收。 當向SCON寄存器寫入控制字(設(shè)置為方式0,并使REN位置1,同時RI = 0)時,產(chǎn)生一個正脈沖,串行口開始接收數(shù)據(jù)。 引腳RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號輸出端,接收器以fosc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當接收完8位數(shù)據(jù)時,中斷標志RI置1,表示一幀數(shù)據(jù)接收完畢,可進行下一幀數(shù)據(jù)的接收,時序如圖7-7所示。,19,20,圖7-7 方式0接收時序,21,(2)方式0接收應用舉例 圖7-8為串行口外接兩片8位并行輸入串行輸出的寄存器74LS165擴展兩個8位并行輸入口的電路。 當74LS165的S/ 端由高到低跳變時,并行輸入端的數(shù)據(jù)被置入寄存器;當S/ = 1,且時鐘禁止端(第15腳)為低電平時,允許TXD(P3.1)串行移位脈沖輸入,這時在移位脈沖作用下,數(shù)據(jù)由右向左方向移動,以串行方式進入串行口的接收緩沖器中。,21,22,22,圖7-8 擴展74LS165作為并行輸入口,23,在圖7-8中: TXD(P3.1)作為移位脈沖輸出與所有75LS165的移位脈沖輸入端CP相連; RXD(P3.0)作為串行數(shù)據(jù)輸入端與74LS165的串行輸出端QH相連;P1.0與S/ 相連,用來控制74LS165的串行移位或并行輸入; 74LS165的時鐘禁止端(第15腳)接地,表示允許時鐘輸入。 當擴展多個8位輸入口時,相鄰兩芯片的首尾(QH與SIN)相連。,23,24,在方式0,SCON中的TB8、RB8位沒有用到,發(fā)送或接收完8位數(shù)據(jù)由硬件使TI或RI中斷標志位置“1”,CPU響應TI或RI中斷,在中斷服務程序中向發(fā)送SBUF中送入下一個要發(fā)送的數(shù)據(jù)或從接收SBUF中把接收到的1B存入內(nèi)部RAM中。 注意,TI或RI標志位必須由軟件清“0”,采用如下指令: CLR TI ;TI位清“0” CLR RI ;RI位清“0” 方式0時,SM2位(多機通信控制位)必須為0。,24,25,7.2.2 方式1 方式1為雙機串行通信方式,如圖7-9所示。 當SM0、SM1=01時,串行口設(shè)為方式1的雙機串行通信。TXD腳和RXD腳分別用于發(fā)送和接收數(shù)據(jù)。 圖7-9 方式1雙機串行通信的連接電路,25,26,方式1一幀數(shù)據(jù)為10位,1個起始位(0),8個數(shù)據(jù)位,1個停止位(1),先發(fā)送或接收最低位。幀格式如圖7-10所示。 圖7-10 方式1的幀格式 方式1為波特率可變的8位異步通信接口。波特率由下式確定: 方式1波特率 = 定時器T1的溢出率 式中,SMOD為PCON寄存器的最高位的值(0或1)。,26,27,1方式1發(fā)送 方式1輸出時,數(shù)據(jù)位由TXD端輸出,發(fā)送一幀信息為10位:1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當CPU執(zhí)行一條數(shù)據(jù)寫SBUF的指令,就啟動發(fā)送。發(fā)送時序見圖7-11。 圖7-11中TX時鐘的頻率就是發(fā)送的波特率。 發(fā)送開始時,內(nèi)部發(fā)送控制信號 變?yōu)橛行?,將起始位向TXD腳(P3.1)輸出,此后每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD引腳輸出一個數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,中斷標志位TI置1。,27,28,圖7-11 方式1發(fā)送時序,28,29,2方式1接收 方式1接收時(REN = 1),數(shù)據(jù)從RXD(P3.0)引腳輸入。當檢測到起始位的負跳變,則開始接收。接收時序見圖7-12。 接收時,定時控制信號有兩種,一種是接收移位時鐘(RX時鐘),它的頻率和傳送的波特率相同,另一種是位檢測器采樣脈沖,頻率是RX時鐘的16倍。以波特率的16倍速率采樣RXD腳狀態(tài)。當采樣到RXD端從1到0的負跳變時就啟動檢測器,接收的值是3次連續(xù)采樣(第7、8、9個脈沖時采樣)取兩次相同的值,以確認起始位(負跳變)的開始,較好地消除干擾引起的影響。,29,30,圖7-12 方式1接收時序,30,當確認起始位有效時,開始接收一幀信息。每一位數(shù)據(jù),也都進行3次連續(xù)采樣(第7、8、9個脈沖采樣),接收的值是3次采樣中至少兩次相同的值。當一幀數(shù)據(jù)接收完畢后,同時滿,31,足以下兩個條件,接收才有效。 (1)RI = 0,即上一幀數(shù)據(jù)接收完成時,RI = 1發(fā)出的中斷請求已被響應,SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。 (2)SM2 = 0或收到的停止位 = 1(方式1時,停止位已進入RB8),則將接收到的數(shù)據(jù)裝入SBUF和RB8(裝入的是停止位),且中斷標志RI置“1”。 若不同時滿足兩個條件,收的數(shù)據(jù)不能裝入SBUF,該幀數(shù)據(jù)將丟棄。,31,32,7.2.3 方式2 方式2和方式3,為9位異步通信接口。每幀數(shù)據(jù)為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控為1或0的第9位數(shù)據(jù)和1位停止位。方式2、方式3幀格式如圖7-13所示。 圖7-13 方式2、方式3的幀格式 方式2波特率 = fosc,32,33,1方式2發(fā)送 發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如奇偶校驗位或多機通信的地址/數(shù)據(jù)標志位),然后將要發(fā)送的數(shù)據(jù)寫入SBUF,即啟動發(fā)送。TB8自動裝入第9位數(shù)據(jù)位,逐一發(fā)送。發(fā)送完畢,使TI位置“1”。 發(fā)送時序如圖7-14所示。 圖7-14 方式2和方式3發(fā)送時序,33,34,【例7-1】方式2發(fā)送在雙機串行通信中的應用 下面的發(fā)送中斷服務程序,以TB8作為奇偶校驗位,偶校驗發(fā)送。數(shù)據(jù)寫入SBUF之前,先將數(shù)據(jù)的偶校驗位寫入TB8(設(shè)第2組的工作寄存器區(qū)的R0作為發(fā)送數(shù)據(jù)區(qū)地址指針)。 PIPTI: PUSH PSW ;現(xiàn)場保護 PUSH Acc SETB RS1 ;選擇第2組工作寄存器區(qū) CLR RS0 CLR TI ;發(fā)送中斷標志清“0” MOV A,R0 ;取數(shù)據(jù) MOV C,P ;校驗位送TB8, 采用偶校驗 MOV TB8,C ;P=1,校驗位TB8=1,P=0,校驗位TB8=0,34,35,MOV SBUF ,A ;A數(shù)據(jù)發(fā)送,同時發(fā)TB8 INC R0 ;數(shù)據(jù)指針加1 POP Acc ;恢復現(xiàn)場 POP PSW RETI ;中斷返回 2方式2接收 SM0、SM1=10,且REN = 1時,以方式2接收數(shù)據(jù)。數(shù)據(jù)由RXD端輸入,接收11位信息。當位檢測邏輯采樣到RXD的負跳變,判斷起始位有效,便開始接收一幀信息。在接收完第9位數(shù)據(jù)后,需滿足以下兩個條件,才能將接收到的數(shù)據(jù)送入SBUF(接收緩沖器)。 (1)RI = 0,意味著接收緩沖器為空。 (2)SM2 = 0或接收到的第9位數(shù)據(jù)位RB8 = 1。,35,36,當滿足上述兩個條件時,收到的數(shù)據(jù)送SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,且RI置“1”。若不滿足這兩個條件,接收的信息將被丟棄。 串行口方式2和方式3接收時序如圖7-15所示。 圖7-15 方式2和方式3接收時序,36,37,【例7-2】方式2接收在雙機通信中的應用。 本例對例7-1發(fā)送的數(shù)據(jù)進行偶校驗接收,程序如下(設(shè)1組寄存器區(qū)的R0為數(shù)據(jù)緩沖區(qū)指針)。 PIRI: PUSH PSW ;保護現(xiàn)場 PUSH Acc SETB RS0 ;選擇1組寄存器區(qū) CLR RS1 CLR RI MOV A,SBUF ;將接收到數(shù)據(jù)送到累加器A MOV C,P ;接收到數(shù)據(jù)字節(jié)的奇偶性送入C位,37,38,JNC L1 ;C=0,收的字節(jié)1的個數(shù)為偶數(shù),跳L1處 JNB RB8,ERP ;C=1,再判RB8=0?如RB8=0,則 ;出錯,跳ERP出錯處理 AJMP L2 ;C=1,RB8=1,收的數(shù)據(jù)正確,跳L2處 L1: JB RB8,ERP ;C=0,再判RB8=1?如RB8=1, ;則出錯,跳ERP出錯處理 L2: MOV R0,A ;C=0,RB8=0或C=1,RB8=1, ;接收數(shù)據(jù)正確,存入數(shù)據(jù)緩沖區(qū) INC R0 ;數(shù)據(jù)緩沖區(qū)指針增1,為下次接收做準備 POP Acc ;恢復現(xiàn)場 POP PSW,38,39,ERP: ;出錯處理程序段入口 RETI 7.2.4 方式3 SM0、SM1=11時,方式3。為波特率可變的9位異步通信方式,除了波特率外,方式3和方式2相同。方式3發(fā)送和接收時序如圖7-11和圖7-12所示。 方式3波特率 = 定時器T1的溢出率,39,40,7.3 多機通信 多個單片機可利用串行口進行多機通信,經(jīng)常采用如圖7-16所示的主從式結(jié)構(gòu)。系統(tǒng)中有1個主機(單片機或其他有串行接口的微機)和多個單片機組成的從機系統(tǒng)。主機的RXD與所有從機的TXD端相連,TXD與所有從機的RXD端相連。從機地址分別為01H、02H和03H。 圖7-16 多機通信系統(tǒng)示意圖,40,41,主從式是指多機系統(tǒng)中,只有一個主機,其余全是從機。主機發(fā)送的信息可以被所有從機接收,任何一個從機發(fā)送的信息,只能由主機接收。從機和從機之間不能進行直接通信,只能經(jīng)主機才能實現(xiàn)。 多機通信的工作原理: 要保證主機與所選擇的從機通信,須保證串口有識別功能。SCON中的SM2位就是為滿足這一條件設(shè)置的多機通信控制位。其工作原理是在串行口以方式2(或方式3)接收時,若SM2 = 1,則表示進行多機通信,可能以下兩種情況:,41,42,(1)從機接收到的主機發(fā)來的第9位數(shù)據(jù)RB8=1時,前8位數(shù)據(jù)才裝入SBUF,并置中斷標志RI = 1,向CPU發(fā)出中斷請求。 在中斷服務程序中,從機把接收到的SBUF中的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)中。 (2)如果從機接收到的第9位數(shù)據(jù)RB8=0時,則不產(chǎn)生中斷標志RI=1,不引起中斷,從機不接收主機發(fā)來的數(shù)據(jù)。 若SM2 = 0,則接收的第9位數(shù)據(jù)不論是0還是1,從機都將產(chǎn)生RI = 1中斷標志,接收到的數(shù)據(jù)裝入SBUF中。,43,應用這一特性,可實現(xiàn)AT89S51單片機的多機通信。多機通信的工作過程: (1)各從機初始化程序允許從機的串行口中斷,將串行口編程為方式2或方式3接收,即9位異步通信方式,且SM2和REN位置“1”,使從機處于多機通信且只接收地址幀的狀態(tài)。 (2)在主機和某個從機通信之前,先將從機地址(即準備接收數(shù)據(jù)的從機)發(fā)送給各個從機,接著才傳送數(shù)據(jù)(或命令),主機發(fā)出的地址幀信息的第9位為1,數(shù)據(jù)(或命令)幀的第9位為0。當主機向各從機發(fā)送地址幀時,各從機的串行口接收到的第9位信息RB8為1,且由,43,44,于各從機的SM2=1,則RI置“1”,各從機響應中斷,在中斷服務子程序中,判斷主機送來的地址是否和本機地址相符合,若為本機地址,則該從機SM2位清“0”,準備接收主機的數(shù)據(jù)或命令;若地址不相符,則保持SM2 = 1。 (3)接著主機發(fā)送數(shù)據(jù)(或命令)幀,數(shù)據(jù)幀的第9位為0。此時各從機接收到的RB8 = 0。 只有與前面地址相符合的從機(即SM2位已清“0”的從機)才能激活中斷標志位RI,從而進入中斷服務程序,接收主機發(fā)來的數(shù)據(jù)(或命令); 與主機發(fā)來的地址不相符的從機,由于SM2保持為1,又RB8 = 0,因此不能激活中斷標志RI,就不能接受主機,44,45,發(fā)來的數(shù)據(jù)幀。從而保證主機與從機間通信的正確性。此時主機與建立聯(lián)系的從機已經(jīng)設(shè)置為單機通信模式,即在整個通信中,通信的雙方都要保持發(fā)送數(shù)據(jù)的第9位(即TB8位)為0,防止其他的從機誤接收數(shù)據(jù)。 (4)結(jié)束數(shù)據(jù)通信并為下一次的多機通信做好準備。在多機系統(tǒng),每個從機都被賦予唯一的地址。例如,圖7-16三個從機的地址可設(shè)為:01H、02H、03H。 還要預留12個“廣播地址”,它是所有從機共有的地址,例如將“廣播地址”設(shè)為00H。當主機與從機的數(shù)據(jù)通信結(jié)束后,一定要將從機再設(shè)置為多機通信模式,以便進行下一次的多機通信。,46,這時要求與主機正在進行數(shù)據(jù)傳輸?shù)膹臋C必須隨時注意,一旦接收的數(shù)據(jù)第9位(RB8)為“1”,說明主機傳送的不再是數(shù)據(jù),而是地址,這個地址就有可能是“廣播地址”。 當收到“廣播地址”后,便將從機的通信模式再設(shè)置成多機模式,為下一次的多機通信做好準備。,46,47,7.4 波特率的制定方法 串行通信,收、發(fā)雙方發(fā)送或接收的波特率必須一致。4種工作方式。 方式0和方式2的波特率是固定的; 方式1和方式3的波特率是可變的,由T1溢出率確定。 7.4.1 波特率的定義 波特率的定義:串行口每秒發(fā)送(或接收)的位數(shù)。設(shè)發(fā)送一位所需要的時間為T,則波特率為1/T。 定時器的不同工作方式,得到的波特率的范圍不一樣,這是由T1在不同工作方式下計數(shù)位數(shù)的不同所決定。,47,48,7.4.2 定時器T1產(chǎn)生波特率的計算 和串行口的工作方式有關(guān)。 (1)方式0時,波特率固定為時鐘頻率fosc的1/12,不受SMOD位值的影響。若fosc = 12 MHz,波特率為1Mbit/s。 (2)方式2時,波特率僅與SMOD位的值有關(guān)。 方式2波特率 = fosc 若fosc = 12 MHz: SMOD = 0,波特率 = 187.5 kbit/s;SMOD = 1,波特率 為375 kbit/s。 (3)方式1或方式3定時,常用T1作為波特率發(fā)生器,其關(guān)系式為,48,49,波特率 = 定時器T1的溢出率 (7-1) 由式(7-1)見,T1溢出率和SMOD的值共同決定波特率。 在實際設(shè)定波特率時,T1常設(shè)置為方式2定時(自動裝初值),即TL1作為8位計數(shù)器,TH1存放備用初值。這種方式操作方便,也避免因軟件重裝初值帶來的定時誤差。 設(shè)定時器T1方式2的初值為X,則有 定時器T1的溢出率 = (7-2),49,50,將式(7-2)代入式(7-1),則有 波特率 = (7-3) 由式(7-3)可見,波特率隨fosc、SMOD和初值X而變化。 實際使用時,經(jīng)常根據(jù)已知波特率和時鐘頻率fosc來計算T1的初值X。為避免繁雜的初值計算,常用的波特率和初值X間的關(guān)系常列成表7-2的形式,以供查用。,50,51,表7-2 用定時器T1產(chǎn)生的常用波特率,51,52,對表7-2有兩點需要注意: (1)在使用的時鐘振蕩頻率fosc為12MHz或6MHz時,將初值X和fosc帶入式(7-3)中計算出的波特率有一定誤差。消除誤差可采用時鐘頻率11.0592MHz。(2)如果選用很低的波特率,如波特率選為55,可將定時器T1設(shè)置為方式1定時。但在這種情況下,T1溢出時,需在中斷服務程序中重新裝入初值。中斷響應時間和執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,可用改變初值的方法加以調(diào)整。,52,53,【例7-3】 若時鐘頻率為11.0592MHz,選用T1的方式2定時作為波特率發(fā)生器,波特率為2 400bit/s,求初值。 設(shè)T1為方式2定時,選SMOD = 0。 將已知條件帶入式(7-3)中 波特率 = = 2400 從中解得X = 244 = F4H。 只要把F4H裝入TH1和TL1,則T1產(chǎn)生的波特率為2 400bit/s。該結(jié)果也可直接從表7-2中查到。 這里時鐘振蕩頻率選為11.0592MHz,就可使初值為整數(shù),從而產(chǎn)生精確的波特率。,53,54,7.5 串行口的應用 利用串行口可實現(xiàn)單片機間的點對點串行通信、多機通信以及單片機與PC機間的單機或多機通信。限于篇幅,本節(jié)僅介紹單片機間的雙機串行通信的接口和軟件設(shè)計。 7.5.1 雙機串行通信的硬件連接 AT89S51串行口的輸入、輸出均為TTL電平。抗干擾性差,傳輸距離短,傳輸速率低。為提高串行通信的可靠性,增大串行通信的距離和提高傳輸速率,都采用標準串行接口,如RS-232、RS-422A、RS-485等。 根據(jù)通信距離和抗干擾性要求,可選擇TTL電平傳輸、RS-232C、RS-422A、RS-485串口進行串行數(shù)據(jù)傳輸。,54,55,1TTL電平通信接口 如果兩個單片機相距在1.5m之內(nèi),它們的串行口可直接相連,接口如圖7-9所示。甲機RXD與乙機TXD端相連,乙機RXD與甲機TXD端相連。 2RS-232C雙機通信接口 如果雙機通信距離在1.515m之間時,可用RS-232C標準接口實現(xiàn)點對點的雙機通信,接口如圖7-17所示。圖7-17的MAX232A是美國MAXIM(美信)公司生產(chǎn)的RS-232C雙工發(fā)送器/接收器電路芯片。,55,56,圖7-17 RS-232C雙機通信接口電路,57,3RS-422A雙機通信接口 RS-232C有明顯缺點:傳輸速率低、通信距離短、接口處信號容易產(chǎn)生串擾等。國際上又推出了RS-422A標準。與RS-232C的主要區(qū)別是,收發(fā)雙方的信號地不再共地,RS-422A采用了平衡驅(qū)動和差分接收的方法。用于數(shù)據(jù)傳輸?shù)氖莾蓷l平衡導線,這相當于兩個單端驅(qū)動器。 兩條線上傳輸?shù)男盘栯娖?,當一個表示邏輯“1”時,另一條一定為邏輯“0”。若傳輸中,信號中混入干擾和噪聲(共模形式),由于差分接收器的作用,就能識別有用信號并正確接收傳輸?shù)男畔?,并使干擾和噪聲相互抵消。,57,58,RS-422A能在長距離、高速率下傳輸數(shù)據(jù)。它的最大傳輸率為10Mbit/s,電纜允許長度為12m,如果采用較低傳輸速率時,最大傳輸距離可達1219m。 為了增加通信距離,可采用光電隔離,利用RS-422A標準進行雙機通信的接口電路如圖7-18所示。 圖中,每個通道的接收端都接有3個電阻R1、R2和R3,其中R1為傳輸線的匹配電阻,取值范圍在501k,其他兩個電阻是為了解決第一個數(shù)據(jù)的誤碼而設(shè)置的匹配電阻。為了起到隔離、抗干擾的作用,圖7-18中必須使用兩組獨立的電源。 圖中的SN75174、SN75175是TTL電平到RS-422A電平與RS-422A電平到TTL電平的電平轉(zhuǎn)換芯片。,58,59,59,圖7-18 RS-422A雙機通信接口電路,60,4RS-485雙機通信接口 RS-422A雙機通信需四芯傳輸線,這對長距離通信很不經(jīng)濟,故在工業(yè)現(xiàn)場,通常采用雙絞線傳輸?shù)腞S-485串行通信接口,很容易實現(xiàn)多機通信。 RS-485是RS-422A的變型,它與RS-422A的區(qū)別:RS-422A為全雙工,采用兩對平衡差分信號線;RS-485為半雙工,采用一對平衡差分信號線。 RS-485對于多站互連是十分方便的,很容易實現(xiàn)多機通信。RS-485允許最多并聯(lián)32臺驅(qū)動器和32臺接收器。圖7-19為RS-485通信接口電路。與RS-422A一樣,最大傳輸距離約為1219m,最大傳輸速率為10Mbit/s。,60,61,61,圖7-19 RS-485雙機通信接口電路,62,通信線路要采用平衡雙絞線。平衡雙絞線的長度與傳輸速率成反比,在100kbit/s速率以下,才可能使用規(guī)定的最長電纜。 只有在很短的距離下才能獲得最大傳輸速率。一般100m長雙絞線最大傳輸速率僅為1Mbit/s。 圖7-19,RS-485以雙向、半雙工的方式來實現(xiàn)雙機通信。在AT89S51單片機系統(tǒng)發(fā)送或接收數(shù)據(jù)前,應先將SN75176的發(fā)送門或接收門打開,當P1.0=1時,發(fā)送門打開,接收門關(guān)閉;當P1.0=0時,接收門打開,發(fā)送門關(guān)閉。,63,圖7-19中的SN75176芯片內(nèi)集成了一個差分驅(qū)動器和一個差分接收器,且兼有TTL電平到RS-485電平、RS-485電平到TTL電平的轉(zhuǎn)換功能。 此外常用的RS-485接口芯片還有MAX485。 7.5.2 串行通信設(shè)計需要考慮的問題 單片機的串行通信接口設(shè)計時,需考慮如下問題。 (1)首先確定通信雙方的數(shù)據(jù)傳輸速率。 (2)由數(shù)據(jù)傳輸速率確定采用的串行通信接口標準。,63,64,(3)在通信接口標準允許的范圍內(nèi)確定通信的波特率。為減小波特率的誤差,通常選用11.0592MHz的晶振頻率。 (4)根據(jù)任務需要,確定收發(fā)雙方使用的通信協(xié)議。 (5)通信線的選擇,這是要考慮的一個很重要的因素。通信線一般選用雙絞線較好,并根據(jù)傳輸?shù)木嚯x選擇纖芯的直徑。如果空間的干擾較多,還要選擇帶有屏蔽層的雙絞線。 (6)通信協(xié)議確定后,進行通信軟件編程,請見下面介紹。,64,65,7.5.3 雙機串行通信軟件編程 串行口的方式13是用于串行通信的,下面介紹雙機串行通信軟件編程。 應當說明的是,下面介紹的雙機串行通信的編程實際上與上面介紹的各種串行標準的硬件接口電路無關(guān),因為采用不同的標準串行通信接口僅僅是由雙機串行通信距離、傳輸速率以及抗干擾性能來決定的。,65,66,1串行口方式1應用編程 【例7- 4】 采用方式1進行雙機串行通信,收、發(fā)雙方均采用6MHz晶振,波特率為2 400bit/s,一幀信息為10位,發(fā)送方把以78H、77H單元的內(nèi)容為首地址,以76H、75H單元內(nèi)容減1為末地址的數(shù)據(jù)塊通過串口發(fā)送給收方。 發(fā)送方要發(fā)送的數(shù)據(jù)塊的地址為2000H201FH。先發(fā)地址幀,再發(fā)數(shù)據(jù)幀;接收方在接收時使用一個標志位來區(qū)分接收的是地址還是數(shù)據(jù),然后將其分別存放到指定的單元,67,中。發(fā)送方可采用查詢方式或中斷方式發(fā)送數(shù)據(jù),接收方可采用中斷或查詢方式接收。 (1)甲機發(fā)送程序 中斷方式的發(fā)送程序如下: ORG 0000H ;程序初始入口 LJMP MAIN ORG 0023H ;串行中斷入口 LJMP COM_INT ORG 1000H,68,MAIN: MOV SP,#53H ;設(shè)置堆棧指針 MOV 78H,#20H ;設(shè)發(fā)送的數(shù)據(jù)塊首、末地址 MOV 77H,#00H MOV 76H,#20H MOV 75H,#40H ACALL TRANS ;調(diào)用發(fā)送子程序 HERE: SJMP HERE TRANS:MOV TMOD,#20H ;設(shè)置定時器/計數(shù)器工作方式 MOV TH1,#0F3H ;設(shè)置計數(shù)器初值 MOV TL1,#0F3H MOV PCON,#80H ;波特率加倍,68,69,SETB TR1 ;接通計數(shù)器計數(shù) MOV SCON,#40H ;設(shè)置串行口工作方式 MOV IE,#00H ;先關(guān)中斷, 用查詢方式發(fā)送地址幀 CLR F0 MOV SBUF,78H ;發(fā)送首地址高8位 WAIT1:JNB TI,WAIT1 CLR TI MOV SBUF,77H ;發(fā)送首地址低8位 WAIT2:JNB TI,WAIT2 CLR TI MOV SBUF,76H ;發(fā)送末地址高8位 WAIT3:JNB TI,WAIT3 CLR TI,69,70,MOV SBUF,75H ;發(fā)送末地址低8位 WAIT4: JNB TI,WAIT4 CLR TI MOV IE,#90H ;打開中斷允許寄存器, ;采用中斷方式發(fā)送數(shù)據(jù) MOV DPH,78H MOV DPL,77H MOVX A,DPTR MOV SBUF,A ;發(fā)送首個數(shù)據(jù) WAIT: JNB F0,WAIT ;發(fā)送等待 RET,70,71,COM_INT: CLR TI ;關(guān)發(fā)送中斷標志位TI INC DPTR ;數(shù)據(jù)指針加1, 準備發(fā)送 :下個數(shù)據(jù) MOV A,DPH ;判斷當前被發(fā)送的數(shù)據(jù) ;的地址是不是末地址 CJNE A,76H,END1 ;不是末地址則跳轉(zhuǎn) MOV A,DPL ;同上 CJNE A,75H,END1 SETB F0 ;數(shù)據(jù)發(fā)送完, 置1標志位 CLR ES ;關(guān)串行口中斷 CLR EA ;關(guān)中斷 RET ;中斷返回,71,72,END1: MOVX A,DPTR ;將要發(fā)送的數(shù)據(jù)送累加器, ;準備發(fā)送 MOV SBUF,A ;發(fā)送數(shù)據(jù) RETI ;中斷返回 END (2)乙機接收程序。 中斷方式的接收程序如下: ORG 0000H LJMP MAIN ORG 0023H LJMP COM_INT ORG 1000H,72,73,MAIN: MOV SP,#53H ;設(shè)置堆棧指針 ACALL RECEI ;調(diào)用接收子程序 HERE: SJMP HERE RECEI: MOV R0,#78H ;設(shè)置地址接收區(qū) MOV TMOD,#20H ;設(shè)置定時器/計數(shù)器工作方式 MOV TH1,#0F3H ;設(shè)置波特率 MOV TL1,#0F3H MOV PCON,#80H ;波特率加倍 SETB TR1 ;開計數(shù)器 MOV SCON,#50H ;設(shè)置串行口工作方式 MOV IE,#90H ;開中斷 CLR F0 ;標志位清0 CLR 7FH,73,74,WAIT: JNB 7FH,WAIT ;查詢標志位等待接收 RET COM_INT: PUSH DPL ;壓棧, 保護現(xiàn)場 PUSH DPH PUSH Acc CLR RI ;接收中斷標志位清0 JB F0,R_DATA ;判接收的是數(shù)據(jù)還是 ;地址, F0=0為地址 MOV A,SBUF ;接收數(shù)據(jù) MOV R0,A ;將地址幀送指定的寄存器,74,75,DEC R0 CJNE R0,#74H,RETN SETB F0 ;置標志位, 地址接收完畢 RETN: POP Acc ;出棧, 恢復現(xiàn)場 POP DPH POP DPL RETI ;中斷返回 R_DATA:MOV DPH,78H ;數(shù)據(jù)接收程序區(qū) MOV DPL, 77H MOV A,SBUF ;接收數(shù)據(jù) MOVX DPTR,A ;送指定的數(shù)據(jù)存儲單元中,75,76,INC 77H ;地址加1 MOV A,77H ;判當前接收數(shù)據(jù)的地址是否向高8位進位 JNZ END2 ; INC 78H END2: MOV A,76H CJNE A,78H,RETN;判是否最后一幀, 不是則繼續(xù) MOV A,75H CJNE A,77H,RETN;是最后一幀則各種標志位清0 CLR ES CLR EA SETB 7FH SJMP RETN ;跳入返回子程序區(qū) END,76,77,2串行口方式2應用編程 方式2和方式1有兩點不同之處。接收/發(fā)送11位信息,多出第9位程控位,該位可由用戶置TB8決定,這是一個不同點。另一不同點是方式2波特率變化范圍比方式1小, 方式2的波特率 = 振蕩器頻率/n。 當SMOD=0時,n=64。 當SMOD=1時,n=32。 鑒于方式2的使用和方式3基本一樣(只是波特率不同),所以方式2的應用,可參照下面的方式3編程。,77,78,3串行口方式3應用編程 【例7-5】用方式3進行發(fā)送和接收。發(fā)送方采用查詢方式發(fā)送地址幀,采用中斷或查詢方式發(fā)送數(shù)據(jù),接收方采用中斷或查詢方式接收數(shù)據(jù)。發(fā)方和收方均采用6MHz的晶振,波特率為4 800bit/s。 發(fā)方首先將存在78H和77H單元中的地址發(fā)送給接收方,然后發(fā)送數(shù)據(jù)00HFFH,共256個數(shù)據(jù)。 (1)甲機發(fā)送程序 中斷方式的發(fā)送程序如下: ORG 0000H LJMP MAIN,78,79,ORG 0023H LJMP COM_INT ORG 1000H MAIN: MOV SP,#53H ;設(shè)置堆棧指針 MOV 78H,#20H ;設(shè)要存放數(shù)據(jù)單元的首地址 MOV 77H,#00H ACALL TRAN ;調(diào)用發(fā)送子程序 HERE: SJMP HERE TRANS:MOV TMOD,#20H ;設(shè)置定時器/計數(shù)器工作方式 MOV TH1,#0FDH ;設(shè)置波特率為4 800bit/s MOV TL1,#0FDH SETB TR1 ;開定時器 MOV SCON,#0E0H ;設(shè)置串行口工作方式為方式3,79,80,SETB TB8 ;設(shè)置第9位數(shù)據(jù)位 MOV IE,#00H ;關(guān)中斷 MOV SBUF,78H ;查詢方式發(fā)首地址高8位 WAIT: JNB TI,WAIT CLR TI MOV SBUF,77H ;發(fā)送首地址低8位 WAIT2:JNB TI,WAIT2 CLR TI MOV IE,#90H ;開中斷 CLR TB8 MOV A,#00H MOV SBUF,A ;開始發(fā)送數(shù)據(jù),80,81,WAIT1: CJNE A,#0FFH,WAIT1;判數(shù)據(jù)是否發(fā)送完畢 CLR ES ;發(fā)送完畢則關(guān)中斷 RET COM_INT:CLR TI ;中斷服務子程序段 INC A ;要發(fā)送數(shù)據(jù)值加1 MOV SBUF,A ;發(fā)送數(shù)據(jù) RETI ;中斷返回 END (2)乙機接收程序 接收方把先接收到的數(shù)據(jù)送給數(shù)據(jù)指針,將其作為數(shù)據(jù)存放的首地址,然后將接下來接收到的數(shù)據(jù)存放到以先前接收的數(shù)據(jù)為首地址的單元中去。,81,82,中斷方式接收: ORG 0000H LJMP MAIN ORG 0023H LJMP COM_INT ORG 1000H MAIN: MOV SP,#53H ;設(shè)置堆棧指針 MOV R0,#0FEH;設(shè)置地址幀接收計數(shù)寄存器初值 ACALL RECEI ;調(diào)用接收子程序 HERE: SJMP HERE,82,83,RECEI: MOV TMOD,#20H ;設(shè)定時器工作方式 MOV TH1,#0FDH ;設(shè)置波特率為4800bit/s MOV TL1,#0FDH SETB TR1 ;開定時器 MOV IE,#90H ;開中斷 MOV SCON,#0F0H ;設(shè)串口工作方式, 允許接收 SETB F0 ;設(shè)置標志位 WAIT: JB F0,WAIT ;等待接收 RET,83,84,COM_INT:CLR RI ;接收中斷標志位清0 MOV C,RB8;判第9位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 阿米巴經(jīng)營考試題及答案
- 街道社工考試題及答案
- 神經(jīng)源性膀胱護理查房
- 物業(yè)管理及物業(yè)電工培訓
- 冠脈搭橋術(shù)后心理護理
- 腫瘤學概論:化療專題
- 質(zhì)量意識培訓報告
- 導尿管技術(shù)及尿管護理
- 犬貓尿常規(guī)檢查規(guī)范與解讀
- 鋼板材質(zhì)培訓
- 色溫-XY-UV色坐標換算公式
- 小紅書寵物行業(yè)月報
- 國企治理三會一層詳解
- YY 0731-2009大型蒸汽滅菌器手動控制型
- 2020重大疾病保險的疾病定義使用規(guī)范修訂解讀及影響課件
- 《建筑工程消防施工質(zhì)量驗收規(guī)范》
- 電能質(zhì)量概念課件
- 計算機網(wǎng)絡課程設(shè)計小型公司網(wǎng)絡
- 中考考前注意事項講稿
- 朗讀技巧之重音、停連、語速、語調(diào)、語氣、節(jié)奏要領(lǐng)方法指導
- 2022-2023學年安徽省合肥市七年級下冊期末語文模擬試卷(含答案)
評論
0/150
提交評論