版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
.PAGE.第八章80第一節概述計算機與外界的信息交換稱為通信。常用通信方式有兩種:并行通信與串行通信,簡稱并行傳送和串行傳送。并行傳送具有傳送速度快,效率高等優點,但傳送多少數據位就需要多少根數據線,傳送成本高;串行傳送是按位順序進行數據傳送,最少僅需要一根傳輸線即可完成,傳送距離遠,但傳送速度慢。串行通信又分同步和異步兩種方式。同步通信中,在數據傳送開始時先用同步字符來指示〔常約定1—2個,并由同時傳送的時鐘信號來實現發送端和接收端同步,即檢測到規定的同步字符后,接著就連續按順序傳送數據。這種傳送方式對硬件結構要求較高。在單片機異步通信中數據分為一幀一幀地傳送,即異步串行通信一次傳送一個完整字符,字符格式如圖8—1所示:圖8—1異步串行通信的字符格式一個字符應包括以下信息:1.起始位:對應邏輯0〔space狀態。發送器通過發送起始位開始一幀字符的傳送。2.數據位:起始位之后傳送數據位。數據位中低位在前,高位在后。數據位可以是5、6、7、8位。3.奇偶校驗位:奇偶校驗位實際上是傳送的附加位,若該位用于用于奇偶校驗,可校檢串行傳送的正確性。奇偶校驗位的設置與否及校驗方式〔奇校驗還是偶校驗由用戶需要確定。4.停止位:用邏輯1〔mark表示。停止位標志一個字符傳送的結束。停止位可以是1、1.5或2位。串行通信中用每秒傳送二進制數據位的數量表示傳送速率,稱為波特率。1波特=1bps〔位/秒例如數據傳送速率是240幀/秒,每幀由一位起始位、八位數據位和一位停止位組成,則傳送速率為:10×240=2400位/秒=2400波特單片機的串行通信主要采用異步通信傳送方式。在串行通信中,按不同的通信方向有單工傳送和雙工傳送之分,如圖8—2所示:甲機乙機〔a單工傳送甲機乙機〔b雙工傳送甲機乙機〔c全雙工傳送圖8—2單片機串行通信方向示意圖8—2〔a中,甲.乙兩機只能單方向發送或接收數據;圖8—2〔b中,甲機和乙機能分時進行雙向發送和接收數據;圖8—2〔c中,甲,乙兩機能同時雙向發送和接收數據。第二節8051串行口的基本結構MCS—51系列單片機串行口結構框圖如圖8—3所示:圖8—38051串行口結構框圖一、串行口緩沖寄存器SBUF圖8—3中SUBF是串行口緩沖寄存器,發送SBUF和接收SBUF地址同為99H,但由于發送SBUF不能接收數據,接收SBUF也不具有發送功能,故二者工作互不干擾。當CPU向SBUF寫入時,數據進入發送SBUF,同時啟動串行發送;CPU讀SBUF時,實際上是讀接收SBUF數據。二、串行通信控制寄存器與串行通信有關的控制寄存器主要是串行通信控制寄存器SCON。SCON是8051的一個可以位尋址的專用寄存器,用于串行數據通信的控制。SCON的單元地址98H,位地址9FH—98H。寄存器內容及位地址表示如下:SCON位地址9F9E9D9C9B9A9998位符號SM0SM1SM2RENTB8RB8TIRI各位功能說明如下:位符號功能說明SM0,SM1SM0,SM1──串行口工作方式選擇位:SM0SM1工作方式功能0008位數碼傳送,波特率固定,為f晶振/12。01110位數碼傳送,波特率可變。10211位數碼傳送,波特率固定,為f晶振/64或f晶振/32。11311位數碼傳送,波特率可變。SM2SM2──多機通信控制位:當串行口以方式2或方式3接收時,如SM2=1,則只有當接收到的第九位數據〔RB8為1,才將接收到的前8位數據送入接收SBUF,并使RI位置1,產生中斷請求信號;否則將接收到的前8位數據丟棄。而當SM2=0時,則不論第九位數據為0還是為1,都將前8位數據裝入接收SBUF中,并產生中斷請求信號。對方式0,SM2必須為0,對方式1,當SM2=1,只有接收到有效停止位后才使RI位置1。RENREN──允許接收位,用于對串行數據的接收進行控制:REN=0,禁止接收;REN=1,允許接收。該位由軟件置1或清零。TB8TB8──發送數據位8:在方式2和方式3時,TB8是要發送的第9位數據。RB8RB8——接收數據位8:在方式2和方式3中,RB8位存放接收到的第9位數據TITI──發送中斷標志:當方式0時,發送完第8位數據后,該位由硬件置位。在其它方式下,于發送停止位之前由硬件置位。因此TI=1,表示幀發送結束。其狀態既可供軟件查詢使用,也可請求中斷。TI位由軟件清0。RIRI──接收中斷標志:當方式0時,接收完第8位數據后,該位由硬件置1。在其它方式下,當接收到停止位時,該位由硬件置位。因此RI=1,表示幀接收結束。其狀態既可供軟件查詢使用,也可以請求中斷。RI位由軟件清0。另外,電源控制寄存器PCON中SMOD位可影響串行口的波特率。當〔SMOD=1,串行口波特率加倍。還有中斷允許寄存器IE中的ES位可選擇串行口中斷允許或禁止。ES=0,禁止串行口中斷ES=1,允許串行口中斷第三節8051串行通信工作方式及應用8051單片機的串行通信共有四種工作方式:串行工作方式0串行口為同步移位寄存器方式,波特率固定為f晶振/12。該方式主要用于I/O口擴展等,方式0傳送數據時,串行數據由RXD〔P3.0端輸入或輸出,而TXD〔P3.1此時僅作為同步移位脈沖發生器發出移位脈沖。串行數據的發送和接收以8位為一幀,不設起始位和停止位,其格式如下:D0D1D2D3D4D5D6D7方式0輸出數據時,向SBUF寫入數據的指令:MOVSBUF,A或:MOVSBUF,XXH即為從RXD端輸出數據的發送啟動指令。當8位數據全部移出后,SCON中的TI位被自動置1。方式0輸入數據時,使SCON中REN位置1指令:SETBREN即為從RXD端輸入數據啟動指令。當接收到8位數據后SCON中的RI位被自動置1。方式0工作時往往需要外部有串入并出寄存器〔輸出和并入串出寄存器〔輸入配合使用,方式0多用于將串行口轉變為并行口的使用場合,如圖8—4所示:圖8—4串行工作方式0與輸入,輸出電路的連接示例圖8—4〔a中CD4094是"串入并出"移位寄存器,TXD端輸出頻率為F晶振/12的固定方波信號〔移位脈沖,在該移位脈沖的作用下,D端串行輸入數據可依次存入CD4094內部8D鎖存器鎖存。P1.0為選通信號,當P1.0=STB為高電平時,將內部8D鎖存器數據并行輸出。圖8—4〔b中CD4014為"串入/并出—串出"移位寄存器,P1—P8為并行輸入端,Q8為串行輸出端,當P1.0=P/S=1,加在并行輸入端P1—P8上的數據在時鐘脈沖作用下從Q8端串行輸出。方式0的移位操作的波特率固定為單片機晶振頻率f晶振的十二分之一。即:波特率=f晶振/12。例如當f晶振=12MHZ,波特率=106〔位/秒。例8—1試編寫從CD4094并行輸出數據36H的參考程序:解:參考程序如下:MOVSCON,#00H ;串行口工作方式0。CLRES;禁止串行口中斷。MOVA,#36H ;傳送數據送A。CLRP1.0 ;關閉并行輸出。MOVSBUF,A ;啟動串行輸出。HERE:CTI,FS ;等待串行輸出完畢。AJMPHERE FS:SETBP1.0;開啟并行輸出。RET;返回。2.串行工作方式1方式1傳送的數據格式方式1傳送一幀為10位的串行數據,包括1位起始位,8位數據位和1位停止位。其幀格式為:起始D0D1D2D3D4D5D6D7停止〔2方式1的波特率的確定方式1的波特率是可變的,計算公式為:波特率=〔2smod/32×〔T1溢出率其中smod為PCON寄存器最高位的值。所謂定時器T1的溢出就是T1在單位時間內溢出的次數。如設T1為工作方式2,那么T1定時時間:T1定時=〔28—X×T機=〔28—X×12/F晶振則T1的溢出率=1/T1定時=F晶振/〔12〔28—X由此可得波特率的計算公式為:波特率=〔2smod/32×F晶振/〔12〔28—X實際使用時總是先確定波特率,再計算定時器T1的記數初值X,然后進行T1的初始化。根據上述波特率的計算公式,可得T1記數初值的計算公式為:X=256-〔F晶振×2smod/〔384×波特率定時器T1之所以選擇工作方式2,是因為方式2具有自動加載功能,可避免通過程序反復裝入計數初值而影響波特率的準確性?!?方式1數據的發送和接收方式1的數據發送由一條寫入單片機發送寄存器SBUF指令啟動。8位數據在串行口由硬件自動加入起始位和停止位組成完整的幀格式。在內部移位脈沖作用下,由TXD端串行輸出。發送完一幀數據后,使TXD輸出端維持"1"狀態并置使TI標志位置1以通知CPU發送下一個字符。接收數據由接收單片機SCON中的REN置1開始,隨后串行口不斷采樣RXD端電平,當采樣到RXD端電平從1向0跳變時,就認定是接收信號并開始接收從RXD端輸入的數據,并送入內部接收寄存器SBUF中,直到停止位到來之后,并使RI位置1,通知CPU從SBUF中取走接收到的一幀字符。方式1傳送數據時發送前應先清TI,接收前應先清RI。例8—2甲,乙兩單片機擬以工作方式1進行串行數據通信,波特率為1200,甲機發送,發送數據在甲機外部RAM1000H-101FH單元中。乙機接收,并把接收數據依次放入乙機外部RAM1000H-101FH單元中。甲,乙機晶振頻率均為6MHZ。連接方式如圖8—5所示:TXDRXD甲機乙機圖8—5例8—2示意圖解:設定:<1>甲、乙機定時用工作方式2,即初值66×106×1384×1200X=256-=243=F3H<2>SMOD=0,即波特率不倍增。<3>用查詢傳送方式。<4>SCON=01000000B=40H可得甲機發送主程序如下:ORG0030HMOVTMOD,#20H ;設定時器1工作方式2。MOVTL1,#0F3H ;設置定時器初值。MOVTH1,#0F3H ;設置重裝值。CLREA ;禁止中斷。MOVPCON,#00H ;<SMOD>=0。MOVSCON,#40H ;設串行工作方式1,禁止接收。MOVDPTR,#1000H ;建立發送數據地址指針初值。MOVR7,#20H ;建立計數指針。SETBTR1;啟動定時器1。SEND:MOVXA,DPTR ;取數據。MOVSBUF,A ;啟動數據傳送操作。JNBTI,$ ;等待一幀發送完畢。CLRTI;清TI標志。INCDPTR;指向下一單元。DJNZR7,SEND ;數據塊傳送結束?沒結束繼續傳送。CLRTR1 ;傳送結束,停止定時器1工作。RET;返回。乙機接收參考程序如下:ORG0030HMOVTMOD,#20H;設定時器1工作方式2。MOVTL1,#0F3H ;設置定時器初值。MOVTH1,#0F3H ;設置重裝值。CLREA ;禁止中斷。MOVPCON,#00H;SMOD=0。MOVSCON,#40H;設串行工作方式1。MOVDPTR,#1000H;建立接收地址指針初值。MOVR7,#20H ;建立計數指針。SETBTR1 ;啟動定時器T1。SETBREN ;啟動接收數據操作。RECIV:JNBRI,$;等待數據接收完畢。CLRRI ;清RI標志。MOVA,SBUF ;取數據。MOVXDPTR,A;送外部RAM。INCDPTR ;指向下一單元。DJNZR7,RECIV ;數據塊接收完畢?沒完繼續接收。CLRTR1 ;接收完畢,停止定時器1工作。RET ;返回。如改用中斷方式甲機發送參考程序如下:ORG0000HAJMPMAINORG0023HLJMPASEND;建立串行中斷口地址。ORG0030HMAIN:MOVSP,#30H ;設置堆棧。MOVTMOD,#20H ;設定時器1工作方式2。MOVTL1,#0F3H ;設置定時器初值。MOVTH1,#0F3H ;設置重裝值。MOVPCON,#00H ;SMOD=0。MOVSCON,#40H ;設串行工作方式1。MOVR7,#1FH ;建立計數指針。MOVDPTR,#1000H ;建立發送地址指針初值。SETBEA ;總中斷允許。SETBES ;串行中斷允許。SETBTR0 ;啟動定時器0。MOVXA,DPTR ;第一個數據送A。MOVSBUF,A ;啟動傳送數據操作。INCDPTR ;指向下一RAM單元。WAIT:AJMP$ ;等待中斷。中斷服務子程序:ORG0100HCLRTI;清TI。ASEND:MOVXA,DPTR ;取數據。MOVSBUF,A;傳送數據INCDPTR ;指向下一單元。DJNZR7,GOON ;傳送結束?沒結束繼續傳送。CLREA;傳送結束,關閉。CLRTR1GOON:RETI;返回。順便指出,甲機以中斷方式傳送數據時,計數指示為1FH而非20H,這是因為在啟動甲機發送時已經向SBUF發送了一個數據。至于乙機,既可用上述查詢方式接收,也可用中斷方式接收。中斷方式程序設計思路與查詢方式類似,不再細述。在異步串行通訊中,接收機以波特率的3倍檢測RXD端信號,檢測到兩次以上相同信號即為有效信號。在實際應用中,可根椐需要加入奇偶校驗位一起傳送,以提高傳送的可靠性。例8—3甲,乙兩單片機同樣以工作方式1進行串行數據通信,波特率為1200,甲機發送,發送數據在甲機外部RAM1000H-101FH單元中,在發送之前先將數據塊長度發送給乙機,發送完后,向乙機發送一個累加校驗和。乙機接收,乙機首先接收數據長度,然后接收數據,并把接收數據依次放入乙機外部RAM1000H-101FH單元中,接收完畢后進行一次累加和校驗,數據全部接收完畢時向甲機送出狀態字,表示傳送狀態。甲、乙機晶振頻率均為6MHZ。連接方式見圖8—6:甲乙TXDRXDRXDTXD圖8—6例8—3示意圖解:設定如下:〔1波特率約定為1200,以定時器T1為波特率發生器,T1用工作方式2〔SMOD=0,波特率不倍增。66×106×1384×1200則初值:X=256—=243=F3H〔2設置R5為累加和寄存器,R6為數據塊長度寄存器。〔3用查詢傳送方式?!?串行口為工作方式1,允許接收,即;SCON=01010000B=50H可得甲機發送主程序如下:ORG0030HMOVTMOD,#20H ;設定時器1工作方式2。MOVTL1,#0F3H ;設置定時器初值。MOVTH1,#0F3H ;設置重裝值。SETBTR1;啟動定時器1。MOVPCON,#00H;〔SMOD=0。MOVSCON,#50H;設串行工作方式1,允許接收。AGAIN:MOVDPTR,#1000H;建立發送數據地址指針初值。MOVR6,#20H ;數據塊長度送R6。MOVR5,#00H;累加和寄存器清"0"。MOVSBUF,R6;先發送長度值。L1:CTI,L2;等待發送結束。AJMPL1L2:MOVXA,DPTR;取數據塊中數據。MOVSBUF,A;發送數據。ADDA,R5;發送數據累加。MOVR5,A;累加和送R5。INCDPTR;地址加1。L3:CTI,L4;等待一幀數據發送完畢。AJMPL3L4:DJNZR6,L2;判斷數據塊是否發送完,若未完繼續發送。MOVSBUF,R5;數據塊發送完畢,發累加和校驗碼。L5:CTI,L6;等待發送累加和碼結束。AJMPL5L6:CRI,L7;接收從機發來的結果標志碼。AJMPL6L7:MOVA,SBUFJZL8;若標志碼為00H,表示接收正確,返回;反之重發。AJMPAGAIN;發送有錯,重發。L8:RET乙機接收參考程序如下:ORG0030HMOVTMOD,#20H;設定時器1工作方式2。MOVTL1,#0F3H ;設置定時器初值。MOVTH0,#0F3H ;設置重裝值。SETBTR1;啟動T1。MOVPCON,#00H ;SMOD=0。MOVSCON,#50H;設串行工作方式1,允許接收。AGAIN:MOVDPTR,#1000H ;建立接收地址指針初值L0:CRI,L1;接收發送長度值。AJMPL0L1:MOVA,SBUFMOVR6,A;取發送長度值送R6。MOVR5,#00H;累加和寄存器清"0"。WAIT:CRI,L2;接收數據。AJMPWAITL2:MOVA,SBUFMOVXDPTR,A;將所接收數據送數據區。INCDPTR;指向下一單元。ADDA,R5;累加。MOVR5,ADJNZR6,WAIT;若數據接收未完繼續。L3:CRI,L4;數據接收完畢,接收主機的累加校驗碼。AJMPL3L4:MOVA,SBUF;取主機累加和校驗碼。XRLA,R5;與本機累加和進行校驗。JZL7;若校驗正確轉L7。MOVSBUF,#0FFH;校驗出錯,回送校驗出錯標志碼FFH,表示要求主機重發。L5:CTI,L6;回送FFH。AJMPL5L6:AJMPAGAIN;重新接收L7:MOVSBUF,#00H;回送校驗正確標志碼00H。L8:CTI,L9;回送。AJMPL8L9:RET;接收完成,返回。3.串行工作方式2方式2是11位為一幀的串行通信方式,即1位始位,9位數據位和1位停止位。其中第9位數據既可作奇偶校驗位,也可作控制位使用。其幀格式為:起始D0D1D2D3D4D5D6D7D8停止附加第9位〔D8由軟件置1或清零。方式2發送時單片機自動將SBUF中8位數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路養護工高級技能知識考試試題與答案
- 2026年外科病史采集試題及答案
- 2026年期末憲法學試題及答案
- 2026年建筑材料題庫及答案
- 2026年蟲害培訓考試試題及答案
- 2026年內科中醫護理試題及答案
- 2026年兒科呼吸系統護理試題及答案
- 2026年職業衛生健康標準更新解讀考試題庫附答案
- 2026年銀行從業資格考試公共基礎練習題重點考點題庫及答案
- 2026年烹調專業題庫附答案
- 崇州市人力資源開發有限責任公司公開招聘崇州市工會社會工作者(6人)筆試備考試題及答案詳解
- 2026年度成都市公開選調公務員筆試備考試題及答案詳解
- 中信建投:未來產業投資地圖系列之“可控核聚變”
- 2026第二季度廣西欽州市欽南區發展投資集團有限公司人才招聘2人筆試題庫(考試直接用)附答案詳解
- 電梯工程質量監理評估報告模板
- 《具身智能技術及產業實踐的階段性進展 》
- 2025廣東省深圳市中考歷史真題(解析版)
- 2026年混凝土結構檢測試題及答案
- 呼吸內科臨床診療指南(2025版)
- 2026屆上海市各區高三語文一模試題匯編之古詩鑒賞試題及答案解析
- 民航小知識教學課件
評論
0/150
提交評論