第六章+串口與串行通訊_第1頁
第六章+串口與串行通訊_第2頁
第六章+串口與串行通訊_第3頁
第六章+串口與串行通訊_第4頁
第六章+串口與串行通訊_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第六章:單片機串口及應(yīng)用本講重點:本講重點: 51單片機的串行口結(jié)構(gòu);單片機的串行口結(jié)構(gòu); 與串行口相關(guān)的特殊功能寄存器;與串行口相關(guān)的特殊功能寄存器; 串行通訊的波特率設(shè)置;串行通訊的波特率設(shè)置; 串行口的串行口的 4 4種工作方式及其編程種工作方式及其編程.TXDRXDRXDTXDTXDRXDRXDTXDRS-232或485RS-232或485TXDRXDRS-232PC機COM1,COM2單片機甲乙之間近距離通訊單片機甲乙兩地之間遠距離通訊單片機與PC機之間的數(shù)據(jù)通訊串行通信的基本特征是串行通信的基本特征是數(shù)據(jù)數(shù)據(jù)逐位順序逐位順序進行傳送進行傳送串行通信的格式及約定(如:通訊速率、數(shù)據(jù)塊

2、串行通信的格式及約定(如:通訊速率、數(shù)據(jù)塊格式、信號電平格式、信號電平等)不同,形成了多種串行等)不同,形成了多種串行通信的協(xié)議與接口標準。通信的協(xié)議與接口標準。常見的有:常見的有:通用異步收發(fā)器通用異步收發(fā)器(UART)(UART)本課程介紹的串口本課程介紹的串口通用串行總線(通用串行總線(USBUSB)I2CI2C總線總線CANCAN總線總線SPISPI總線總線RS-485RS-485,RS-232CRS-232C,RS422ARS422A標準標準等等等等串行通信全雙工串行接口全雙工串行接口(UART)(UART)數(shù)據(jù)通信的數(shù)據(jù)通信的幾個術(shù)語:幾個術(shù)語: 并行并行:數(shù)據(jù)各位:數(shù)據(jù)各位同時同

3、時進行傳送進行傳送 串行串行:數(shù)據(jù):數(shù)據(jù)逐位順序逐位順序進行傳送進行傳送全雙工全雙工:(:(串行通信串行通信) )收收/ /發(fā)發(fā)可同時可同時進行進行 半雙工半雙工:(:(串行通信串行通信) )收收/ /發(fā)發(fā)不可不可同時進行同時進行異步串行通信異步串行通信: :以以字符字符為單位進行傳送為單位進行傳送 同步串行通信同步串行通信: :以以數(shù)據(jù)塊數(shù)據(jù)塊為單位進行傳送為單位進行傳送 波特率波特率(bps.)(bps.): :單位時間傳送的位數(shù)單位時間傳送的位數(shù)51單片機的串行接口SBUF(發(fā))(發(fā))SBUF(收)(收)發(fā)送控制器發(fā)送控制器 TI接收控制器接收控制器 RI移位寄存器移位寄存器波波特特率率

4、發(fā)發(fā)生生器器T1 1A累累加加器器(門門)RxDTxD去申請中斷去申請中斷引腳引腳引腳引腳CPU內(nèi)部內(nèi)部串行口的結(jié)構(gòu)兩個同名的兩個同名的接收接收/ /發(fā)送緩沖寄存器發(fā)送緩沖寄存器SBUFSBUF 指令指令 MOV SBUFMOV SBUF,A A 啟動一次數(shù)據(jù)發(fā)送啟動一次數(shù)據(jù)發(fā)送, ,可向可向SBUFSBUF 再發(fā)送下一個數(shù)再發(fā)送下一個數(shù) 指令指令 MOV AMOV A,SBUFSBUF 完成一次數(shù)據(jù)接收完成一次數(shù)據(jù)接收,SBUF,SBUF可再可再 接收下一個數(shù)接收下一個數(shù)接收接收/ /發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù), ,無論是否采用中斷方式無論是否采用中斷方式 工作工作, ,每接收每接收/ /發(fā)送一個數(shù)據(jù)

5、都必須用指發(fā)送一個數(shù)據(jù)都必須用指 令對令對 RI/TIRI/TI 清清0 0,以備下一次收,以備下一次收/ /發(fā)。發(fā)。串行口相關(guān)的串行口相關(guān)的SFRSFR(SCON,PCON)(SCON,PCON) SM0 SM1 SM2 REN TB8 RB8 TI R1SCONSCON SM0SM0,SM1SM1:串行口串行口4 4種工作方式的選擇位。種工作方式的選擇位。 0 0 0 0 方式方式0 0:8 8位移位寄存器位移位寄存器I/O,I/O,波特率波特率固定固定為為 f foscosc/12/12 0 1 0 1 方式方式1 1:1010位位UARTUART(1 1+8+8+1 1位)位), 波特

6、率波特率可變可變, ,按公式計算按公式計算 1 0 1 0 方式方式2 2:1111位位UARTUART(1 1+8+1+8+1+1 1位)位), 波特率波特率固定固定= =f fosc osc x1/32x1/32或或1/641/64 1 1 1 1 方式方式3 3:1111位位UARTUART(1 1+8+1+8+1+1 1位)位), 波特率波特率可變可變,按公式計算,按公式計算 SM2SM2:串行口串行口多機通信多機通信控制位控制位 (作為方式(作為方式2 2、方式、方式3 3的的附加控制位附加控制位)串行口控制寄存器SCON(98H) RI,TIRI,TI:串行口收串行口收/ /發(fā)數(shù)據(jù)

7、申請中斷標志位發(fā)數(shù)據(jù)申請中斷標志位 1 1 申請中斷;申請中斷; 0 0 不申請中斷不申請中斷 TB8TB8:方式方式2 2、3 3中,是要發(fā)送的第中,是要發(fā)送的第9 9位數(shù)據(jù)。位數(shù)據(jù)。 多機通信中多機通信中,TB8=0 ,TB8=0 表示發(fā)送的是數(shù)據(jù);表示發(fā)送的是數(shù)據(jù); TB8=1 TB8=1 表示發(fā)送的是地址。(奇偶校驗)表示發(fā)送的是地址。(奇偶校驗) RB8RB8:在方式在方式2 2、3 3中,是收到的第中,是收到的第9 9位數(shù)據(jù)。位數(shù)據(jù)。 在多機通信中在多機通信中, ,用作區(qū)別地址幀用作區(qū)別地址幀/ /數(shù)據(jù)幀的數(shù)據(jù)幀的 標志。(奇偶校驗)標志。(奇偶校驗) SM0 SM1 SM2 RE

8、N TB8 RB8 TI RI RENREN:串行口接收允許控制位串行口接收允許控制位 = 1 = 1 表示允許接收;表示允許接收; = 0 = 0 禁止接收。禁止接收。SCONSCONSMOD GF1 GF0 PD 1DL電源控制寄存器 PCONPCON(97H97H)特殊功能寄存器特殊功能寄存器PCONPCON不能按位尋址不能按位尋址 SMODSMOD:在串行口工作方式在串行口工作方式 1 1、2 2、3 3 中,中, 是是波特率加倍位波特率加倍位 =1 =1 時,波特率加倍時,波特率加倍 =0 =0 時,波特率不加倍。時,波特率不加倍。 ( (在在PCONPCON中只有這一個位與串口有關(guān)

9、中只有這一個位與串口有關(guān)) ) GF1,GF0GF1,GF0:用戶可自行定義使用的通用標志位用戶可自行定義使用的通用標志位PCONPCON PDPD:掉電方式控制位:掉電方式控制位 =0=0:常規(guī)工作方式。:常規(guī)工作方式。 =1=1:進入掉電方式:進入掉電方式: : 振蕩器振蕩器停振停振 片內(nèi)片內(nèi)RAMRAM和和SRFSRF的值保持不變的值保持不變 P0P3P0P3口維持原狀??诰S持原狀。 程序程序停止停止 只有復(fù)位能使之退出掉電方式。只有復(fù)位能使之退出掉電方式。 SMOD GF1 GF0 PD IDLPCONPCON IDLIDL:待機方式待機方式( (空閑方式空閑方式) )控制位控制位 =

10、0=0:常規(guī)工作方式。:常規(guī)工作方式。 =1=1:進入待機方式:進入待機方式: 振蕩器振蕩器繼續(xù)振蕩繼續(xù)振蕩 中斷中斷、定時器定時器、串口串口功能繼續(xù)有效功能繼續(xù)有效 片內(nèi)片內(nèi)RAMRAM和和SRFSRF保持不變保持不變 CPUCPU狀態(tài)狀態(tài)保持、保持、P0P3P0P3口維持原狀口維持原狀 程序程序停頓停頓。 中斷和復(fù)位能退出待機中斷和復(fù)位能退出待機, ,繼續(xù)后面的程序。繼續(xù)后面的程序。SMOD GF1 GF0 PD IDLPCONPCON PDPD:掉電控制位:掉電控制位 =0=0:常規(guī)方式。:常規(guī)方式。 =1=1:掉電方式:掉電方式: :振蕩器振蕩器停振停振片內(nèi)片內(nèi)RAMRAM和和SRFS

11、RF不變不變P0P3P0P3口維持原狀口維持原狀程序程序停止停止只有復(fù)位能退出掉電只有復(fù)位能退出掉電 IDLIDL:待機控制位:待機控制位 =0=0:常規(guī)方式。:常規(guī)方式。 =1=1:待機方式:待機方式:振蕩器振蕩器繼續(xù)振蕩繼續(xù)振蕩中斷中斷, ,定時器定時器, ,串口串口有效有效片內(nèi)片內(nèi)RAMRAM和和SRFSRF不變不變CPUCPU狀態(tài)狀態(tài), ,P0P3P0P3維持原狀維持原狀程序程序停頓停頓。中斷和復(fù)位能退出待機中斷和復(fù)位能退出待機, ,繼繼續(xù)后面的程序。續(xù)后面的程序。SMOD GF1 GF0 PD IDLPCONPCON串行口工作方式 0工作方式工作方式0 0:8 8位移位寄存器位移位寄

12、存器I/OI/O方式方式發(fā)送:發(fā)送:SBUFSBUF中的串行中的串行數(shù)據(jù)數(shù)據(jù)由由RxDRxD逐位移出;逐位移出; TxDTxD輸出輸出移位時鐘移位時鐘,頻率,頻率=fosc1/12=fosc1/12; 每送出每送出8 8位數(shù)據(jù)位數(shù)據(jù) TITI就自動置就自動置1 1; 需要用需要用軟件清零軟件清零 TITI。 接收:串行接收:串行數(shù)據(jù)數(shù)據(jù)由由RxDRxD逐位移入逐位移入SBUFSBUF中;中; TxDTxD輸出輸出移位時鐘移位時鐘,頻率,頻率=fosc1/12=fosc1/12; 每接收每接收 8 8位數(shù)據(jù)位數(shù)據(jù)RIRI就自動置就自動置1 1; 需要用需要用軟件清零軟件清零 RIRI。經(jīng)常配合經(jīng)

13、常配合“串入并出串入并出”“”“并入串出并入串出”移位移位 寄存器一起使用擴展接口。寄存器一起使用擴展接口。 方式方式0 0工作時,工作時,多用查詢方式編程多用查詢方式編程: 發(fā)送:發(fā)送:MOV SBUFMOV SBUF,A A 接收:接收:JNB RIJNB RI,$ $ JNB TI JNB TI,$ $ CLR RICLR RI CLR TI CLR TI MOV A, SBUFMOV A, SBUF工作方式工作方式0 0:8 8位移位寄存器位移位寄存器I/OI/O方式方式( (續(xù)續(xù)) )復(fù)位時復(fù)位時, ,SCONSCON 已經(jīng)被清零已經(jīng)被清零, ,缺省值缺省值: : 方式方式0 0。接

14、收前接收前, ,務(wù)必先置位務(wù)必先置位 REN=1 REN=1 允許接收數(shù)據(jù)允許接收數(shù)據(jù)。共陽極共陽極h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh h共陽共陽LEDLED數(shù)碼管數(shù)碼管公共端公共端( (字位字位) ) 接高電平,接高電平,筆劃筆劃( (字段字段) ) 置為低電平置為低電平就被點亮了就被點亮了h g f e d c b ah g f e d c b a累加器累加器 A1 1 0 0 0 0 0 01 1 0 0 0 0 0 00C0H = “0”0C0H = “0”比如要顯示比如要顯示“0 0” 須令須令a b c d e

15、f a b c d e f 為為“0”0” 電平,電平,g hg h為為“1”1”電平。電平。再再比如要顯示比如要顯示“3 3” 須令須令a b c d g a b c d g 為為“0”0” 電平,電平,e f he f h為為“1”1”電平。電平。1 0 1 1 0 0 0 01 0 1 1 0 0 0 00B0H = “3”0B0H = “3”例:例:利用串行口利用串行口工作方式工作方式0 0擴展出擴展出8 8位并行位并行I/OI/O口,口,驅(qū)動驅(qū)動共陽共陽LEDLED數(shù)碼管顯示數(shù)碼管顯示0909。A AB BCLKCLKh g f e d c b ah g f e d c b aCLR

16、CLR+5V+5VVCCVCCTxDTxDRxDRxD51單片機單片機74LS164共陽共陽LEDLED數(shù)碼管數(shù)碼管根據(jù)上圖編寫的通過串行口和根據(jù)上圖編寫的通過串行口和74LS164 74LS164 驅(qū)動共陽驅(qū)動共陽LEDLED數(shù)碼管數(shù)碼管( (查表查表) )顯示顯示0-90-9數(shù)字的子程序:數(shù)字的子程序:DSPLY:MOV DPTR, #TABLEDSPLY:MOV DPTR, #TABLE MOVC A, MOVC A, A+DPTRA+DPTR MOV SBUF, A MOV SBUF, A JNB TI, $ JNB TI, $ CLR TI CLR TI RET RETTABLE:D

17、B 0C0H,0F9H,0A4HTABLE:DB 0C0H,0F9H,0A4H DB 0B0H,99H,92H DB 0B0H,99H,92H DB 82H,0F8H,80H,90H DB 82H,0F8H,80H,90Hh g f e d c b ah g f e d c b a累加器累加器 A1 1 0 0 0 0 0 01 1 0 0 0 0 0 00C0H = “0”0C0H = “0”1 0 1 1 0 0 0 01 0 1 1 0 0 0 00B0H = “3”0B0H = “3”共陽極共陽極h g f e d c b ah g f e d c b aa ab bc cd dg g

18、e ef fh hC51程序如下:程序如下:#include void main( )unsigned char table =0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;SCON=0 x00;SBUF=table5; /顯示數(shù)字顯示數(shù)字5while (TI=0);TI=0;while(1); 常用于串行通訊。除發(fā)常用于串行通訊。除發(fā)/ /收收8 8位數(shù)據(jù)外,還位數(shù)據(jù)外,還 在在D0D0位前有一個位前有一個起始位起始位“0”0”; 在在D7D7位后有一個位后有一個停止位停止位“1”1”。方式方式1 1工作時:工作時:

19、發(fā)送端發(fā)送端自動添加自動添加一個起始位和一個停止位;一個起始位和一個停止位; 接收端接收端自動去掉自動去掉一個起始位和一個停止位。一個起始位和一個停止位。工作方式工作方式1 1: :1010位位UARTUART( (1 1+8+8+1 1位位) )波特率波特率可變可變 波特率可變波特率可變 用定時器用定時器T1T1作波特率發(fā)生器:作波特率發(fā)生器: 公式:公式:波特率波特率 = =(2 2SMODSMOD/32/32) T1T1的溢出率的溢出率波特率波特率= =(2(2SMODSMOD/32)/32) T1T1的溢出率的溢出率 溢出率:溢出率:T1T1溢出的頻繁程度溢出的頻繁程度 即:即:T1T

20、1溢出一次所需時間的倒數(shù)。溢出一次所需時間的倒數(shù)。 初值初值 X = 2 2n n - - 2 2SMODSMOD fosc fosc3232 波特率波特率 1212 波特率波特率 = =2 2SMODSMOD fosc fosc3232 12(2 12(2n n - - X X) )其中:其中:X X 是定時器初值是定時器初值 初值初值 X = 2 2n n - - 2 2SMODSMOD fosc fosc32 32 波特率波特率 1212 例例 題目要求用題目要求用T1T1工作于工作于方式方式2 2來產(chǎn)生波特率來產(chǎn)生波特率12001200, 已知晶振頻率已知晶振頻率= =6MHz6MHz

21、。要求出。要求出T1T1的的初值初值:初值初值 X = 2 28 8 - - 2 20 0 6 6 10106 63232 1200 1200 1212= 256 - - = 256 - - 13.026 6 10106 6460800460800 243 = 0F3H 結(jié)果后面要用到結(jié)果后面要用到RxDRxD引腳為引腳為接收端接收端,TxDTxD引腳為引腳為發(fā)送發(fā)送端端, ,由波特率由波特率 發(fā)生器發(fā)生器T1T1控制發(fā)送速度控制發(fā)送速度, ,不同于方式不同于方式0 0:收:收/ /發(fā)都發(fā)都 需要由需要由TxDTxD送出移位時鐘送出移位時鐘。 T1T1作波特率發(fā)生器時作波特率發(fā)生器時初始化包括

22、初始化包括: : 選選定時器定時器工作方式工作方式2 2(TMOD(TMOD選選8 8位自動重裝位自動重裝);); 將計算將計算( (或查表或查表) )出的出的初值初值X X賦給賦給TH1,TL1TH1,TL1; ; 啟動啟動T1T1 ( (SETB TR1SETB TR1);); 對對T1T1不要開中斷不要開中斷 !工作方式工作方式1 1的接收的接收/ /發(fā)送發(fā)送串行口的初始化包括串行口的初始化包括: : 對對SCONSCON選工作方式選工作方式 對對PCONPCON設(shè)波特率加倍位設(shè)波特率加倍位“SMODSMOD”(”(缺省值缺省值=0)=0) 如果是接收數(shù)據(jù)如果是接收數(shù)據(jù), ,仍要先置仍要

23、先置“1”1”RENREN位位 SM0 SM1 SM2 REN TB8 RB8 TI RISCONSCON SM0SM0,SM1SM1:串行口工作方式選擇位。串行口工作方式選擇位。 0 1 0 1 :方式:方式1 1,8 8位位UARTUART(1 1+8+8+1 1位)位) RENREN:串行口串行口接收允許接收允許位。位。 REN=1 REN=1 允許接收允許接收串行口控制寄存器串行口控制寄存器SCONSCON 0 1 0 1 0 0 0 0 TB8TB8,RB8RB8,TITI,RIRI等位由運行中間的情況等位由運行中間的情況 決定,可先寫成決定,可先寫成 “ “0”0” SM2SM2:

24、串行口串行口多機通信多機通信控制位控制位, ,作為方式作為方式2 2、3 3 的的附加控制位附加控制位,此處不用,可寫成,此處不用,可寫成“0”0”MAINMAIN: ORG 0023HORG 0023H MOV TMODMOV TMOD,#20H#20H SBR1:JNB RI,SEND SBR1:JNB RI,SEND MOV TL1MOV TL1,#0F3H#0F3H LCALL LCALL SINSIN MOV TH1MOV TH1,#0F3H#0F3H SJMP NEXT SJMP NEXT SETB TR1SETB TR1 SEND:LCALL SEND:LCALL SOUTSOU

25、T MOV SCON, MOV SCON, #50H#50H NEXT:RETI NEXT:RETI SETB EA SETB EA SIN: SIN: SETB ES SETB ES RETRET LCALL LCALL SOUTSOUT SOUT:SOUT: SJMP $ SJMP $ RETRET例例:串行通信串行通信方式方式1 1應(yīng)用應(yīng)用 用用T1T1工作于方式工作于方式2 2,產(chǎn)生波特率,產(chǎn)生波特率1200bps1200bps發(fā)送子程序發(fā)送子程序 接收子程序接收子程序SOUTSOUT: SIN:SIN: MOV A MOV A,R0 MOV A,SBUFR0 MOV A,SBUF M

26、OV CMOV C,P MOV C, PP MOV C, P CPL C JNC ERR CPL C JNC ERR MOVMOV A ACCCC.7.7, C, C ANL A, #7FHANL A, #7FH INC R0 MOV R1, AINC R0 MOV R1, A MOV SBUF, A INC R1 MOV SBUF, A INC R1 CLR TI CLR RI CLR TI CLR RI RET RET RET RET例例 ( (續(xù)續(xù)) )刪除刪除刪除刪除由于波特率固定由于波特率固定, ,常用于常用于單片機間單片機間通訊。通訊。 數(shù)據(jù)由數(shù)據(jù)由8+8+1 1位組成,通常附加的

27、一位位組成,通常附加的一位 (TB8/RB8)(TB8/RB8)用于用于“奇偶校驗奇偶校驗”。 工作方式工作方式2 2: : 1111位位UARTUART( (1 1+8+1+8+1+1 1位位) )兩種兩種波特率波特率 方式方式2 2的波特率的波特率 = fosc = fosc 2 2SMODSMOD/64/64 即即: : f fosc osc 1/32 1/32 或或 f fosc osc 1/64 1/64 兩種兩種奇偶校驗奇偶校驗是檢驗串行通信雙方傳輸?shù)臄?shù)據(jù)正確是檢驗串行通信雙方傳輸?shù)臄?shù)據(jù)正確與否的與否的一個措施一個措施,并不能保證通信數(shù)據(jù)的傳輸一并不能保證通信數(shù)據(jù)的傳輸一定正確定正

28、確。 換言之:如果換言之:如果奇偶校驗發(fā)生錯誤,表明數(shù)據(jù)傳奇偶校驗發(fā)生錯誤,表明數(shù)據(jù)傳輸一定出錯了;如果奇偶校驗沒有出錯,輸一定出錯了;如果奇偶校驗沒有出錯,絕不等絕不等于于數(shù)據(jù)傳輸完全正確。數(shù)據(jù)傳輸完全正確。奇校驗:奇校驗:8 8位位有效數(shù)據(jù)連同有效數(shù)據(jù)連同1 1位位附加位中,附加位中, 二進制二進制“1”1”的個數(shù)的個數(shù)為為奇數(shù)奇數(shù) 偶校驗:偶校驗:8 8位位有效數(shù)據(jù)連同有效數(shù)據(jù)連同1 1位位附加位中,附加位中, 二進制二進制“1”1”的個數(shù)的個數(shù)為為偶數(shù)偶數(shù)約定約定接收接收采用采用奇校驗奇校驗 若接收到的若接收到的9 9位位數(shù)據(jù)中數(shù)據(jù)中“1”1”的個數(shù)為奇數(shù),的個數(shù)為奇數(shù), 則表明接收則

29、表明接收正確正確,取出,取出8 8位有效數(shù)據(jù)即可;位有效數(shù)據(jù)即可; 若接收到的若接收到的9 9位位數(shù)據(jù)中數(shù)據(jù)中“1”1”的個數(shù)為的個數(shù)為偶數(shù)偶數(shù), 則表明接收則表明接收出錯出錯!應(yīng)當進行!應(yīng)當進行出錯處理出錯處理。約定約定發(fā)送發(fā)送采用采用奇校驗奇校驗 若若發(fā)送發(fā)送的的8 8位有效數(shù)據(jù)中位有效數(shù)據(jù)中“1”1”的個數(shù)為的個數(shù)為偶數(shù)偶數(shù), 則要則要人為添加人為添加一個附加位一個附加位“1”1”一起發(fā)送;一起發(fā)送; 若若發(fā)送發(fā)送的的8 8位有效數(shù)據(jù)中位有效數(shù)據(jù)中“1”1”的個數(shù)為的個數(shù)為奇數(shù)奇數(shù), 則要則要人為添加人為添加一個附加位一個附加位“0”0”一起發(fā)送。一起發(fā)送。采用采用偶校驗偶校驗時,處理方

30、法與時,處理方法與奇校驗奇校驗相反相反 回顧:回顧: 程序狀態(tài)字寄存器程序狀態(tài)字寄存器PSWPSW中有一個中有一個奇偶狀態(tài)位奇偶狀態(tài)位 P PCYACF0RS0OVPRS1PSW.7PSW.0 P P (PSW.0):(PSW.0):奇偶狀態(tài)位。奇偶狀態(tài)位。 P=1 P=1 表示目前累加器中表示目前累加器中 “ “1”1”的個數(shù)為的個數(shù)為奇數(shù)奇數(shù) P=0 P=0 表示目前累加器中表示目前累加器中 “ “1”1”的個數(shù)為的個數(shù)為偶數(shù)偶數(shù)CPUCPU隨時監(jiān)視著隨時監(jiān)視著AccAcc的的“1”1”的個數(shù)的個數(shù)并自動反映在并自動反映在 P P工作方式工作方式2 2 的的奇偶校驗用法奇偶校驗用法 選用選

31、用偶校驗偶校驗方式方式發(fā)送發(fā)送 PIPL: PUSH PSW ;PIPL: PUSH PSW ;保護現(xiàn)場保護現(xiàn)場 PUSH PUSH A ACC CC CLR TI ; CLR TI ;清發(fā)送中斷標志以備下次發(fā)送清發(fā)送中斷標志以備下次發(fā)送 MOV AMOV A, R0 ;R0 ;取由取由R0R0所指向的單元中的數(shù)據(jù)所指向的單元中的數(shù)據(jù) MOV C, P ;MOV C, P ;將奇偶標志位通過將奇偶標志位通過C C放進放進TB8TB8 MOV TB8, C ; MOV TB8, C ;一起發(fā)送出去一起發(fā)送出去 MOV SBUF,A ;MOV SBUF,A ;啟動發(fā)送啟動發(fā)送 INC R0 ;IN

32、C R0 ;指針指向下一個數(shù)據(jù)單元指針指向下一個數(shù)據(jù)單元 POP POP A ACC ;CC ;恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場 POP PSWPOP PSW RETI ; RETI ;中斷返回中斷返回串口方式串口方式2 2 的的奇偶校驗用法:奇偶校驗用法: 選用選用偶校驗偶校驗方式方式發(fā)送發(fā)送 如果如果 A A 中的數(shù)的中的數(shù)的1 1的個數(shù)是奇數(shù)(的個數(shù)是奇數(shù)(P=1P=1),), 將將TB8TB8寫成寫成“1”1”一起發(fā)出去;一起發(fā)出去; 反之:若(反之:若(P=0P=0)則寫)則寫TB8=“0”TB8=“0”發(fā)出去。發(fā)出去。 選用選用偶校驗偶校驗方式方式接收接收 若收到的數(shù)中若收到的數(shù)中P=0P=0,

33、,且檢查到且檢查到RB8=0RB8=0就可能對了就可能對了 若收到的數(shù)中若收到的數(shù)中P=1P=1, ,且檢查到且檢查到RB8=1RB8=1就可能對了就可能對了 若若P=0P=0且且RB8=1RB8=1或或P=1P=1且且RB8=0RB8=0就一定出錯了就一定出錯了!串口方式串口方式2 2 的的奇偶校驗用法:奇偶校驗用法: SM0 SM1 SM2 REN TB8 RB8 TI R1SCONSCON串行口控制寄存器串行口控制寄存器SCONSCONTB8 RB8 選用選用偶校驗偶校驗方式方式接收接收: PIPL:PUSH PSW ;PIPL:PUSH PSW ;保護現(xiàn)場保護現(xiàn)場 PUSH PUSH

34、A ACC CC CLR RI ; CLR RI ;清發(fā)送中斷標志以備下次發(fā)送清發(fā)送中斷標志以備下次發(fā)送 MOV AMOV A,S SBUBUF;F;讀進收到的數(shù)據(jù)讀進收到的數(shù)據(jù) MOV C, P ;MOV C, P ;奇偶標志位奇偶標志位C =JNB PC =JNB P,L1L1 JNC L1 ;C=0 JNC L1 ;C=0時轉(zhuǎn)到時轉(zhuǎn)到L1 L1 P=0P=0時轉(zhuǎn)到時轉(zhuǎn)到L1L1 JNB RB8,JNB RB8,ERRERR;P=1;P=1時轉(zhuǎn)到時轉(zhuǎn)到L2L2,若,若RB8=0RB8=0“出錯出錯” SJMP L2 ;RB8=1 SJMP L2 ;RB8=1 則表明接收正確,轉(zhuǎn)則表明接收正

35、確,轉(zhuǎn)L2L2 L1: JB RB8, L1: JB RB8,ERRERR;P=0;P=0且且RB8=1RB8=1表明表明“出錯出錯” L2: MOV R0, A ;P=0L2: MOV R0, A ;P=0且且RB8=0RB8=0表明接收正確表明接收正確 INC R0 ;INC R0 ;指針指向下一個數(shù)據(jù)單元指針指向下一個數(shù)據(jù)單元 POP POP A ACC ;CC ;恢復(fù)現(xiàn)場恢復(fù)現(xiàn)場 POP PSW POP PSW ERRERR: :出錯處理出錯處理 RETI ; RETI ;中斷返回中斷返回 RETIRETI例例:編程將甲機片內(nèi)編程將甲機片內(nèi)RAM中中30H3FH中的中的16個數(shù)據(jù)發(fā)送給

36、乙機,個數(shù)據(jù)發(fā)送給乙機,串行口工作在方式串行口工作在方式2,波特率固定,波特率固定,TB8作為奇偶校驗位。作為奇偶校驗位。分析:兩臺單片機應(yīng)用系統(tǒng)在進行通信時,如果距離較近,接分析:兩臺單片機應(yīng)用系統(tǒng)在進行通信時,如果距離較近,接口只需三根導(dǎo)線,將它們的串行口直接相連,即可實現(xiàn)雙機通口只需三根導(dǎo)線,將它們的串行口直接相連,即可實現(xiàn)雙機通信,如圖所示。信,如圖所示。甲機發(fā)送程序(匯編)甲機發(fā)送程序(匯編) 編程將甲機片內(nèi)編程將甲機片內(nèi)RAMRAM中中30H30H 3FH3FH中的中的1616個數(shù)據(jù)發(fā)送給乙個數(shù)據(jù)發(fā)送給乙機,串行口工作在方式機,串行口工作在方式2 2,波特率固定,波特率固定,TB8

37、TB8作為奇偶校驗作為奇偶校驗位,程序如下:位,程序如下:ORG 0050HORG 0050HMOV SCONMOV SCON,#80H#80H;設(shè)定串行口為工作方式;設(shè)定串行口為工作方式2 2MOV PCONMOV PCON,#00H#00H;波特率為;波特率為fOSC/64fOSC/64MOV ROMOV RO,#30H#30H;設(shè)置發(fā)送數(shù)據(jù)指針;設(shè)置發(fā)送數(shù)據(jù)指針MOV R3MOV R3,#10H#10H;設(shè)置存放的數(shù)據(jù)塊長度;設(shè)置存放的數(shù)據(jù)塊長度XHAXHA: MOV AMOV A,R0 R0 ;取出待發(fā)送的數(shù)據(jù);取出待發(fā)送的數(shù)據(jù)MOV CMOV C,P P;將;將A A中的奇偶位送中的

38、奇偶位送C CMOV TB8MOV TB8,C C;奇偶位送;奇偶位送TB8TB8MOV SBUFMOV SBUF,A A;發(fā)送數(shù)據(jù);發(fā)送數(shù)據(jù)LOOPLOOP:JBC TIJBC TI,ZZ1ZZ1;判斷一幀數(shù)據(jù)是否發(fā)送完成;判斷一幀數(shù)據(jù)是否發(fā)送完成AJMP LOOPAJMP LOOP;沒有發(fā)送完繼續(xù)發(fā)送;沒有發(fā)送完繼續(xù)發(fā)送ZZ1ZZ1: INC R0INC R0;發(fā)送完一字節(jié)取下一個數(shù)據(jù);發(fā)送完一字節(jié)取下一個數(shù)據(jù)DJNZ R3DJNZ R3,XHAXHA;判斷;判斷1616個數(shù)據(jù)是否發(fā)送完成個數(shù)據(jù)是否發(fā)送完成ENDEND乙機接收程序(匯編):接收甲機發(fā)送的乙機接收程序(匯編):接收甲機發(fā)送的

39、1616個數(shù)據(jù)并存放在本機內(nèi)部個數(shù)據(jù)并存放在本機內(nèi)部RAMRAM(30H3FH30H3FH)中,串行口工作在方式)中,串行口工作在方式2 2,核對奇偶校驗位,并對接收數(shù)據(jù)的正,核對奇偶校驗位,并對接收數(shù)據(jù)的正確性進行判斷,如果數(shù)據(jù)有錯,轉(zhuǎn)出錯處理程序。確性進行判斷,如果數(shù)據(jù)有錯,轉(zhuǎn)出錯處理程序。ORG ORG 0050H0050HMOV MOV SCONSCON,#90H#90H;設(shè)定串行口為工作方式;設(shè)定串行口為工作方式2 2,并允許接收,并允許接收MOV MOV PCONPCON,#00H#00H;波特率為;波特率為fOSC/64fOSC/64MOV MOV RORO,#30H#30H;設(shè)

40、置接收數(shù)據(jù)指針;設(shè)置接收數(shù)據(jù)指針MOV MOV R3R3,#10H#10H;設(shè)置存放的數(shù)據(jù)塊長度;設(shè)置存放的數(shù)據(jù)塊長度LOOPLOOP: JBC JBC RIRI,JSHJSH;判斷一幀數(shù)據(jù)是否接收完成;判斷一幀數(shù)據(jù)是否接收完成AJMPAJMPLOOPLOOP;JSHJSH:MOV MOV A A,SBUFSBUF;將接收數(shù)據(jù)送;將接收數(shù)據(jù)送A A中中JB JB PSW.0PSW.0,OHTOHT;判斷接收到的數(shù)據(jù)的奇偶性;判斷接收到的數(shù)據(jù)的奇偶性JB JB RB8RB8,ERRERR;如果與發(fā)送的奇偶性不同,轉(zhuǎn)錯誤處理;如果與發(fā)送的奇偶性不同,轉(zhuǎn)錯誤處理AJMP AJMP RTHRTH;轉(zhuǎn)正

41、確處理;轉(zhuǎn)正確處理OHTOHT:JNB JNB RB8RB8,ERRERRRTHRTH:MOV MOV R0R0,A A;接收數(shù)據(jù)送內(nèi)部;接收數(shù)據(jù)送內(nèi)部RAMRAMINC INC R0R0;內(nèi)存指針加;內(nèi)存指針加1 1DJNZ DJNZ R3R3,LOOPLOOP;判斷;判斷1616個數(shù)據(jù)是否接收完成個數(shù)據(jù)是否接收完成JS1JS1:AJMP AJMP JS1JS1ERRERR:ENDEND甲機發(fā)送端程序(甲機發(fā)送端程序(C51C51):):#include#include#define uchar unsigned char#define uchar unsigned charvoid sen

42、d(void);void send(void);uchar code tr16=0 x10,0 x11,0 x12,0 x13,0 x14,0 x15,0 x16,0 x17, uchar code tr16=0 x10,0 x11,0 x12,0 x13,0 x14,0 x15,0 x16,0 x17, 0 x18,0 x19,0 x1a,0 x1b,0 x1c,0 x1d,0 x1e,0 x1f; 0 x18,0 x19,0 x1a,0 x1b,0 x1c,0 x1d,0 x1e,0 x1f;void main(void)void main(void) TMOD=0 x20; TMOD=0

43、 x20; TH1=0 xf4; TH1=0 xf4; TL1=0 xf4; / TL1=0 xf4; /* *晶振頻率為晶振頻率為12MHz,12MHz,波特率為波特率為24002400* */ / SCON=0 xd0; SCON=0 xd0; PCON=0 x00; PCON=0 x00; TR1=1; TR1=1; send(); send(); void send()void send() uchar i; uchar i; for(i=0;i16;i+) for(i=0;i16;i+) SBUF=tri; SBUF=tri; while(!TI); while(!TI); TI=0

44、; TI=0; 接收端接收端C51C51程序:程序:#include#include#define uchar unsigned char#define uchar unsigned charvoid rece( );void rece( );uchar re16;uchar re16;void main(void)void main(void)TMOD=0 x20;TMOD=0 x20; TH1=0 xf4; TH1=0 xf4; TL1=0 xf4; TL1=0 xf4; SCON=0 xd0; SCON=0 xd0; PCON=0 x00; PCON=0 x00; TR1=1; TR1=

45、1; rece( ); rece( ); void rece()void rece() uchar m; uchar m;for(m=0;m16;m+)for(m=0;m16;m+) while(RI=0); while(RI=0); rem=SBUF; rem=SBUF; RI=0; RI=0; 工作方式工作方式3 3: :當當SM0,SM1SM0,SM1為為1111時時, ,串行口工作于方式串行口工作于方式3 3 11 11位位UARTUART( (1 1+8+1+8+1+1 1位位) ) 波特率可變波特率可變 串口方式串口方式3 3和方式和方式2 2唯一的區(qū)別是波特率機制不同唯一的區(qū)別是

46、波特率機制不同。方式方式2 2的波特率固定為時鐘周期的的波特率固定為時鐘周期的3232或或6464分頻,分頻,不可變。此工作方式與其他串行通訊設(shè)備連接困不可變。此工作方式與其他串行通訊設(shè)備連接困難,因此不常用。難,因此不常用。方式方式3 3的波特率可變,按前面的公式計算:的波特率可變,按前面的公式計算: 波特率波特率= =(2(2SMODSMOD/32)/32) T1T1的溢出率的溢出率 波特率波特率 = =2 2SMODSMOD fosc fosc3232 12(2 12(2n n - - X X) )其中:其中:X X 是定時器初值是定時器初值 模式模式2 2、3 3的應(yīng)用:多機通訊的應(yīng)用

47、:多機通訊在方式在方式2 2或方式或方式3 3下,下,TB8TB8是是發(fā)送的第發(fā)送的第9 9位數(shù)據(jù)位數(shù)據(jù),可用軟件,可用軟件置置1 1和清和清0 0;RB8RB8是是接收到的第接收到的第9 9位數(shù)據(jù)位數(shù)據(jù);這兩位可以作為奇;這兩位可以作為奇偶校驗位。偶校驗位。lSM2 :多機通信使能位多機通信使能位. . 1,模式模式0、1時時: SM2SM2不用,應(yīng)設(shè)為不用,應(yīng)設(shè)為0 0。時。時RIRI才能被正常激活并引發(fā)中斷才能被正常激活并引發(fā)中斷; ; 2,模式模式2、3時時:若若SM2=0時,無論接收到的第時,無論接收到的第9位位RB8是是1還是還是0,只,只要收到數(shù)據(jù),要收到數(shù)據(jù),RI就置就置1。

48、若若SM2=1,收到的第收到的第9位位(RB8)=0時時,則則RI不會被激活;不會被激活;若若SM2=1且且RB8=1時時,RI才能被激活才能被激活=1并引發(fā)中斷。并引發(fā)中斷。用在多機通信時,用在多機通信時,TB8TB8和和RB8RB8位位可作為可作為地址與數(shù)據(jù)幀地址與數(shù)據(jù)幀的的標志位,一般約定標志位,一般約定地址幀為地址幀為“1”1”,數(shù)據(jù)幀為數(shù)據(jù)幀為0 0。 利用利用第第9 9位數(shù)據(jù)位數(shù)據(jù)作為單片機之間通信的作為單片機之間通信的聯(lián)絡(luò)位聯(lián)絡(luò)位,其關(guān)鍵在,其關(guān)鍵在于巧妙地使用于巧妙地使用SM2SM2位和接收到的第位和接收到的第9 9個附加數(shù)據(jù)位個附加數(shù)據(jù)位( (接收后放在接收后放在RB8RB8

49、中中) )。通常主機與從機之間通信應(yīng)做如下約定。通常主機與從機之間通信應(yīng)做如下約定。1 1)主機向從機發(fā)送)主機向從機發(fā)送地址地址信息時,其信息時,其第第9 9位數(shù)據(jù)必須為位數(shù)據(jù)必須為1 1,而向,而向從機發(fā)送或接收從機送來的數(shù)據(jù)信息(包括命令)時,其第從機發(fā)送或接收從機送來的數(shù)據(jù)信息(包括命令)時,其第9 9位數(shù)據(jù)均應(yīng)規(guī)定為位數(shù)據(jù)均應(yīng)規(guī)定為0 0且主機的且主機的SM2SM2也應(yīng)設(shè)為也應(yīng)設(shè)為0 0。2 2)所有)所有從機從機在建立與主機通信之前,均應(yīng)處于對通信線路的在建立與主機通信之前,均應(yīng)處于對通信線路的監(jiān)聽狀態(tài)監(jiān)聽狀態(tài)。在監(jiān)聽狀態(tài)下必須使。在監(jiān)聽狀態(tài)下必須使SM2=1SM2=1,此時,此時只能只能收到主機發(fā)收到主機發(fā)出的出的地址信息地址信息( (第第9 9位為位為1)1),非地址信息不接受。,非地址信息不接受。3 3)所有從機收到地址后均應(yīng)進行識別,判斷是否是主機呼叫)所有從機收到地址后均應(yīng)進行識別,判斷是否是主機呼叫本從機,如果本從機,如果收到的地址與本從機的地址相符合收到的地址與本從機的地址相符合,即為呼叫,即為呼叫本從機。當確認是主機呼叫本從機后,該從機應(yīng)解除監(jiān)聽狀本從機。當確認是主機呼叫本從機后,該從機應(yīng)解除監(jiān)聽狀態(tài),態(tài),使使SM2=0SM2=0,同時把本從機的地址發(fā)回主機作為應(yīng)答信息,同時把本從機的地址發(fā)回主機作為應(yīng)答信息,只有這樣才能收到主機發(fā)送的有效數(shù)據(jù)或向主

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論