單片機(jī)原理及應(yīng)用(C語(yǔ)言版)7_第1頁(yè)
單片機(jī)原理及應(yīng)用(C語(yǔ)言版)7_第2頁(yè)
單片機(jī)原理及應(yīng)用(C語(yǔ)言版)7_第3頁(yè)
單片機(jī)原理及應(yīng)用(C語(yǔ)言版)7_第4頁(yè)
單片機(jī)原理及應(yīng)用(C語(yǔ)言版)7_第5頁(yè)
已閱讀5頁(yè),還剩83頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)原理及應(yīng)用(c語(yǔ)言版)第7章mcs-51單片機(jī)串行口主 編:周國(guó)運(yùn)本章制作:魯慶賓申國(guó)水利水電出版牡第7章mcs-51單片機(jī)串行口m亍通信基本知識(shí)7.2 im亍口結(jié)構(gòu)及控制7.3 im亍口工作方式7.4串行口應(yīng)用舉例 7.5單片機(jī)與pc機(jī)通信的接口電路本章要點(diǎn)本章主要講述mcs51單片機(jī)串行口的 結(jié)構(gòu)工作原理以及應(yīng)用。主要內(nèi)容包括串行通信基本知識(shí).mcs- 51單片機(jī)串行口結(jié)構(gòu)串行口工作方式以及 單片機(jī)與pc機(jī)通信的接口電路。7.1串行通信基本知識(shí)主要內(nèi)容7.1.1數(shù)據(jù)通信7.1.2異步通信和同步通信7.1.3波特率7丄4通信方向71.5串行通信接口種類7.1.1數(shù)據(jù)通信計(jì)算機(jī)與外界的信

2、息交換稱為通信?;镜耐ㄐ欧椒ㄓ胁⑿型ㄐ藕痛型ㄐ艃煞No1. 并行通信單位信息(通常指一個(gè)字節(jié))的各位數(shù)據(jù) 同時(shí)傳送的通信方法稱為并行通信o2. 串行通信單位信息的各位數(shù)據(jù)被分時(shí)一位一位依次 順序傳送的通信方式稱為串行通信。p1.0dou vntypi-r丄丄u丄ivau 1 aup1.2-d2 夕卜txdvrxd夕卜p1.3v-d3 部89c52 p1.4-d4 設(shè)p1.5v-d5 備89c52p1.6-d6p1.7v-d7gnd-gndgndgnd圖71并行通信示意圖圖72串行通信示意圖從圖中可以看出:并行通信連線多,速度快,適合近距離通信;串行通信連線少,速度慢,適合遠(yuǎn)距離通信。7.1.

3、2異步通信和同步通信1.異步通信異步通信中,傳送的數(shù)據(jù)可以是一個(gè)字符 代碼或一個(gè)字節(jié)數(shù)據(jù),數(shù)據(jù)以幀的形式一幀一 幀傳送。0/1 0/1停止位起始位第n個(gè)字符8位數(shù)據(jù)第n+1個(gè)字符校驗(yàn)位00/10/10/10/10/10/10/10/10/111停止位起始位0 0/1 0/1 圖73異步通信的一幀數(shù)據(jù)格式2同步通信在同步通信中,每一數(shù)據(jù)塊發(fā)送開始時(shí), 先發(fā)送一個(gè)或兩個(gè)同步字符,使發(fā)送與接收 取得同步,然后再順序發(fā)送數(shù)據(jù)。數(shù)據(jù)塊的 各個(gè)字符間取消起始位和停止位,所以通信 速度得以提高o同步字符1同步字符2數(shù)據(jù)流數(shù)據(jù)數(shù)據(jù) 圖74同步通信數(shù)據(jù)幀格式7.1.3波特率在串行通信中,對(duì)數(shù)據(jù)傳送速度有一定 要

4、求。波特率表示每秒傳送的位數(shù),單位為 b/s (記作波特)。例如:數(shù)據(jù)傳送速率為每秒鐘10個(gè)字符, 若每個(gè)字符的一幀為11位,則傳送波持率為:mb)字符 x10 字符/s =110b/s異步通信的傳送速率一般在5019 200b/s 之i可o7.1.4通信方向單工方式:一對(duì)傳輸線只允許單方向傳送aidl-lxzt數(shù)據(jù);半雙工方式:一對(duì)傳輸線允許向兩個(gè)方向中的任一方向傳送數(shù)據(jù),但不能同時(shí)進(jìn)行;全雙工方式:用兩對(duì)傳輸線連接在發(fā)送器和接收器上,發(fā)送和接收能同時(shí)進(jìn)行。接 收 器(a)單工方式(c)全雙工方式圖75串行通信傳輸方式根據(jù)串行通信格式及約定(如同步方式 通信速率數(shù)據(jù)塊格式等)不同,形成了 許

5、多串行通信接口標(biāo)準(zhǔn),如常見的:uart (串行異步通信接口八usb (通用串行總線接口). i2c (集成電路間的串行總線)spi (串行外設(shè)總線八 485總線.can總線接口等。7.2串行口結(jié)構(gòu)及控制主要內(nèi)容7.2.1 mcs-51串行口結(jié)構(gòu) 722與串行口有關(guān)的特殊功能寄存器723波特率設(shè)計(jì)圖76串行口方式1、3內(nèi)部結(jié)構(gòu)示意簡(jiǎn)圖722與串行口有關(guān)的特殊功能寄存器1.控制狀態(tài)寄存器scon用于定義串行通信口的工作方式和反映串 行口狀態(tài),其字節(jié)地址為98h,復(fù)位值為 0000 0000b,可位尋址格式為:d7 d6 d5 d4 d3 d2 di d0smo smi sm2 ren tb8 rb

6、8 ti ri smo和smi (scon.7> scon.6):串行 口工作方式選擇位。sm0sm1工作方式功能說(shuō)明波特率00方式0同步移位寄存器fosc/1201方式18位數(shù)據(jù)uart可變(t1溢岀率/32或/16)10方式29位數(shù)據(jù)uartfosc/64 或 fosc/3211方式39位數(shù)據(jù)uart可變(t1溢岀率732或/16)sm2 (scon.5):多機(jī)通信控制位,在 方式2或3中使用。ren (scon.4):允許接收控制位,由 軟件置1或清0。 tb8 (scon.3):發(fā)送數(shù)據(jù)的第9位。 rb8 (scon.2):接收數(shù)據(jù)的第9位。 ti (scon.1):發(fā)送中斷標(biāo)志

7、。 ri (scon.o):接收中斷標(biāo)志。關(guān)于ti和ri:串行發(fā)送中斷標(biāo)志ti和接收中斷ri是同一個(gè)中斷源,cpu事先不知道是發(fā)送中斷標(biāo)志ti還是接收中斷標(biāo)志ri產(chǎn)生 的中斷請(qǐng)求,所以,在全雙工通信時(shí),必須 由軟件來(lái)判別。2.電源控制寄存器pcon電源控制寄存器pcon (地址為87h)中只 有smod位與串行口工作有關(guān)。d7 d6 d5 d4 d3 d2 di dosmodgf1gf0pdidlsmod (pcon.7):波特率倍增位。串行口工作于方式4方式2和方式3時(shí),當(dāng)smod = 1時(shí),串行口波特率加倍。復(fù)位值為0000 oooobo pcon寄存器不能進(jìn)行位尋址。723波特率設(shè)計(jì)方式

8、0和方式2的波特率是固定的,方式1和方式3的波特率是由定時(shí)器t1的溢出率來(lái) 決定的。在增強(qiáng)型單片機(jī)中,也可以使用t2 作波特率發(fā)生器。1.方式0的波特率固定為振蕩頻率的1/12。并不受pcon寄存器中smod位的影響。方式0的波特率二fosc/122.方式2的波特率接收與發(fā)送的移位時(shí)鐘由振蕩頻率fosc的 第二節(jié)拍p2時(shí)鐘(fosc/2)給出,所以,方 式2波特率取決于pco n中smod位的值: 當(dāng)smod=0時(shí),波特率為fosc的1/64;若 smod=1,則波特率為fosc的1/32。即方式2的波特率二2smod x fosc/643. 方式1和方式3的波特率(1) t1作波特率發(fā)生器爪

9、mod方式x 3的波特率二*x (t1溢出速率)爪mod即波特率=飛一xx/初值)在最典型應(yīng)用中,定時(shí)器t1選用定時(shí)器模式2,此時(shí)n=8,設(shè)定時(shí)器的初值為x:于是,x=256 -foscx(smod+l)384x波特率(2) t2作波特率發(fā)生器在增強(qiáng)型單片機(jī)中,還可以使用t2作為 波特率發(fā)生器。當(dāng)寄存器t2con的位 tclk=1和(或)rclk=1時(shí),允許串行口 從t2獲得發(fā)送和(或)接收的波特率。串行口方式x 3的波特率二t2溢出率/16定時(shí)器2作波特率發(fā)生器時(shí),計(jì)數(shù)在每個(gè)狀態(tài)周期遞增。這樣:方式4 3的波特率二振蕩頻率32x (65536-(rcap2h, rcap2l)7.3串行口工作

10、方式主要內(nèi)容7.3.1串行口方式07.3.2串行口方式17.3.3串行口方式2和方式3方式0為同步移位寄存器輸入/輸出方式, 常用于擴(kuò)展i/o 口。rxd為數(shù)據(jù)輸入或輸出, txd為移位時(shí)鐘,作為外接部件的同步信號(hào)。方式0不適用于兩個(gè)89c52之間的數(shù)據(jù)通 信,可以通過(guò)外接移位寄存器來(lái)實(shí)現(xiàn)單片機(jī) 的接口擴(kuò)展。在這種方式下,收/發(fā)的數(shù)據(jù)為8位,低 位在前,無(wú)起始位.奇偶校驗(yàn)位及停止位, 波特率是固定的。7.3.1串行口方式03 4 5 6 10 11 12 1311 12 13 14 3 4 5方式1真正用于串行發(fā)送或接收,為10位通用異步接口。txd與rxd分別用于發(fā)送與 接收數(shù)據(jù)。收發(fā)一幀數(shù)

11、據(jù)的格式為1位起始位.8位數(shù) 據(jù)位(低位在前)1位停止位,共10位。在 接收時(shí),停止位進(jìn)入scon的rb8,此方式 的傳送波特率可調(diào)。串行口工作在方式2和方式3均為每幀11 位異步通信格式,由txd和rxd發(fā)送與接 收(兩種方式操作是完全一樣的,不同的 只是特波率)。每幀11位:即1位起始位、8位數(shù)據(jù)位 (低位在前).1位可編程的第9數(shù)據(jù)位和1 位命止位。發(fā)送時(shí),第9數(shù)據(jù)位(tb8)可以設(shè)置為 1或0,也可將奇偶位裝入tb8;接收時(shí),第9數(shù)據(jù)位進(jìn)入scon的rb8。主要內(nèi)容7.4.1同步方式應(yīng)用7.4.2異步方式應(yīng)用7.4.1同步方式應(yīng)用msc-51單片機(jī)的串行口在方式0時(shí),以 同步方式操作。

12、外接串入併出或并入/串出 器件,可實(shí)現(xiàn)i/o 口的擴(kuò)展。例72用89c52串行口外接164串入併出 移位寄存器擴(kuò)展8位并行輸出口,外接165并 入/串出移位寄存器擴(kuò)展8位并行輸入口。8位 并行輸出口的每位都接一個(gè)發(fā)光二極管,要 求從8位并行輸入口讀入開關(guān)的狀態(tài)值,使 閉合開關(guān)對(duì)應(yīng)的發(fā)光二極管點(diǎn)亮。如圖713 所示。圖7-13方式0擴(kuò)展輸入輸出電路,74hc164用于串/并轉(zhuǎn)換,解:數(shù)據(jù)的輸朋岀通過(guò)rxd接收和發(fā)送, 移位時(shí)鐘通過(guò)txd逵吐 74hc165用于并/串轉(zhuǎn)換。=1c語(yǔ)言程序清單: #include<reg52.h> sbit p1_o=p1ao; sbit p1_1=p1

13、a1;unsigned char datal; void main()scon=oxlo;串行口方式0,允許接收es=1;允許串行口中斷ea=1;p1_o=o;pl_l=l;pl_l=o;sbuf=o;while(l);void s_srv() interrupt 4if(ti)ti=0;pl_0=l;關(guān)閉并行輸出 并行置入數(shù)據(jù) 開始串行移位 送入串行數(shù)據(jù)等待中斷 中斷服務(wù)程序發(fā)送中斷打開并行輸岀else ri=o; datal=sbuf; p1_o=o; sbuf=datal; pl_l=l; p1_1=o;匯編語(yǔ)言程序清單:org 0000hsjmp mainorg 23hsjmp s_s

14、rv接收中斷讀取接收的數(shù)據(jù)關(guān)閉并行輸出送入串行數(shù)據(jù)為接收下一次數(shù)據(jù)做準(zhǔn)備;串行口中斷服務(wù)程序7.4.1同步方式應(yīng)用main:movscon,#10hsetbessetbeamova,#0clrp1.0movsbuf,asetbpl.lclrpl.lsjmp$;串行口方式0初始化;關(guān)閉并行輸出;開始串行輸出;等待中斷s_srv:jbcclrmovclrcplmovsetbclrretisend:setbretiti,send ri a,sbuf p1.0a sbuf,apl.lpl.lp1.07.4.2異步方式應(yīng)用串行口方式1與方式3很近似,波特率設(shè)置一樣,不同之處在于方式3比方式1多了一個(gè) 數(shù)

15、據(jù)附加位。方式2與方式3基本一樣(只是波特率設(shè)置不同),接收/發(fā)送11位信息:開始為1位起 始位(0),中間8位數(shù)據(jù)位.數(shù)據(jù)位之后為1 位程控位(由用戶置scon的tb8決定),最 后是1位停止位(1) o只比方式1多了一位程控位。例73將片內(nèi)ram 50h5fh中的數(shù)據(jù)串行發(fā)送,用第9個(gè)數(shù)據(jù)位作奇偶校驗(yàn)位,設(shè)晶 振為11.059 2mh®波特率為2 400b/s,編制串行口方式3的發(fā)送程序。解:用tb8作奇偶校驗(yàn)位,在數(shù)據(jù)寫入發(fā) 送緩沖器之前.先將數(shù)據(jù)的奇偶位p寫入tb8, 這時(shí),第9位數(shù)據(jù)作奇偶校驗(yàn)用,發(fā)送采用中 斷方式。c語(yǔ)言程序清單:#include<reg52.h&g

16、t;unsigned char i=0;unsigned char an*町16 _at_ 0x50; 發(fā)送緩沖區(qū) void main() scon=oxco;串行口初始化tmod=0x20;定時(shí)器初始化thl=0xf4; tll=0xf4;tr1=1;es=1;ea=1;acc=arrayi;tb8=p;sbuf=acc; while(l);中斷初始化發(fā)送第_個(gè)數(shù)據(jù)送累加器,目的取p位void server() interrupt 4 ti=0;acc=arr 町+i;tb8=p;sbuf=acc; if(i=16)es=0;串行口中斷服務(wù)程序清發(fā)送中斷標(biāo)志取下_個(gè)數(shù)據(jù)發(fā)送完畢,禁止串口中斷

17、匯編語(yǔ)言程序清單:orgsjmporgsjmpmain:0000hmain 23h servermov mov mov mov setb setb setb mov movscon,#ocoh tmod,#20h th1,#of4h tl1,#of4h triesear0,#50hr7,#0fh;上電,轉(zhuǎn)主程序;轉(zhuǎn)中斷服務(wù)程序;串行口方式3初始化 淀時(shí)器1工作在方式2;允許串行口中斷;cpu開中斷movmovmovmovsjmpserver:clrincmovmovmovmovdjnzclrendt:retia,r0c,ptb&csbuf,a$tiroa,r0c,ptb&csb

18、uf,ar7,endtes濫豔臨標(biāo)志;發(fā)送下一個(gè)數(shù)據(jù);判斷數(shù)據(jù)塊是否發(fā)送完 ;否則,禁止串行口中斷例74編寫一個(gè)接收程序,將接收的16字節(jié)數(shù)據(jù)送入片內(nèi)ram 50h5fh單元中。設(shè)第9個(gè)數(shù)據(jù)位作奇偶校驗(yàn)位,晶振為11.059 2 mhz,波特率為2 400b/s o解:rb8作奇偶校驗(yàn)位,接收時(shí),取出該位 進(jìn)行核對(duì),接收采用查詢方式。c語(yǔ)言程序清單:#include<reg52.h>unsigned char i;unsigned char array16 _at_ 0x50;接收緩沖區(qū)串行口初始化,允許接收void main()scon=oxdo; tmod=0x20; thl=

19、0xf4;tll=0xf4;tr1=1;for(i=0;i<16;i+) while(iri);ri=o;acc=sbuf;if(rb8=p) arrayi=acc;elsefo=1;break;while(l);循環(huán)接收16個(gè)數(shù)據(jù) 等待一次接收完成校驗(yàn)正確 校驗(yàn)不正確movmovmovwait:jnbclr匯編語(yǔ)言程序清單:main:mov tmod,#20hmov th1,#of4hmov tl1,#of4hsetb triscon,#odohr0,#50hr7,#10hri,$rimov a,sbuf;定時(shí)器初始化;串口初始化,允許接收;首地址送r0 澈據(jù)長(zhǎng)度送r7;等待接收完成

20、;清中斷標(biāo)志 ;讀數(shù)到累加器jnb p,pnpjnb rb&error sjmp rightpnp: jb rb&errorright:mov r0,a inc ro djnz r7,wait clr fo reterror:setb foret;p=0,轉(zhuǎn)pnp;p=1, rb8=0,轉(zhuǎn)岀錯(cuò);p=0, rb8=1,轉(zhuǎn)出錯(cuò);存數(shù);修改地址指針;未接收完,繼續(xù);置正確接收標(biāo)志f0=0f錯(cuò)誤接收標(biāo)志fo=1例75用第9個(gè)數(shù)據(jù)位作奇偶校驗(yàn)位,編 制串行口方式3的全雙工通信程序,設(shè)雙機(jī)將 各自鍵盤的按鍵鍵值發(fā)送給對(duì)方,接收正確 后放入緩沖區(qū)(可用于顯示或其它處理), 晶振為11.059

21、 2 mhz,波特率為9 600b/so解:因?yàn)槭侨p工方式,通信雙方的程序一樣。發(fā)送和接收都采用中斷方式。c語(yǔ)言程序清單:#include<reg52.h> char k;unsigned char buffer; void main()scon=oxdo;tmod=0x20;thl=0xfd;tll=0xfd;tr1=1;es=1;ea=1;串行口初始化,允許接收定時(shí)器初始化開串行口中斷開總中斷while(l)k=key();if(k!=-l)acc=k;tb8=p; sbuf=acc; display ();讀取按鍵按下鍵值 無(wú)鍵按下返回 將鍵值送累加器,取p位送 tb8發(fā)送

22、 顯示程序發(fā)送引起,清ti/否則,接收引起/讀取接收數(shù)據(jù)校驗(yàn)正確,存入緩沖區(qū)void serial_server() interrupt 4if(ti)ti=0;elseri=0;acc=sbuf;if(rb8=p) buffer=acc;匯編語(yǔ)言程序清單:org 0000hsjmp mainorg 23hljmp s_servmain:mov sp,#0dfhmov scon,#odohmov tmod,#20hmov th1,#ofdhmov tl1,#ofdh;跳轉(zhuǎn)到主程序;跳轉(zhuǎn)到串口中斷服務(wù)程序;設(shè)置堆棧指針;串口初始化;定時(shí)器初始化,t1方式2淀時(shí)器1賦初值setbtr1setbes

23、setbea;啟動(dòng)定時(shí)器1;開中斷l(xiāng)oop:lcall key;讀取按鍵(參看第9章),;有鍵按下返回鍵值,cjne a,#offh,send;無(wú)鍵按下返回0ffh,;有鍵按下轉(zhuǎn)發(fā)送next:lcall display;調(diào)用顯示;主程序循環(huán)ljmp loopsend:movmovmovljmps_serv:jbcclrretic,ptb&csbufaloopri,recvti滯校驗(yàn)位發(fā)送;循環(huán);是接收中斷轉(zhuǎn)接收處理;是發(fā)送中斷,清ti7.4.2異步方式應(yīng)用recv:movjbjbsjmpone:jnbright:movi_end:a,sbufp,onerb&lendrightr

24、b&lendbuffersreti;接收處理程序;取接收值送a;校驗(yàn)位為1,轉(zhuǎn);校驗(yàn)錯(cuò),轉(zhuǎn)中斷返回;校驗(yàn)正確,正確處理;校驗(yàn)錯(cuò),轉(zhuǎn)中斷返回;接收數(shù)據(jù)送緩沖區(qū)7.5單片機(jī)與pc機(jī)通信的接口電路主要內(nèi)容7.5.1 max232芯片簡(jiǎn)介7.5.2 pc機(jī)與89c52串行通信的接口電路利用pc機(jī)配置的異步通信適配器,可以 很方便地完成pc機(jī)與單片機(jī)的數(shù)據(jù)通信。pc機(jī)與89c52單片機(jī)最簡(jiǎn)單的連接是零調(diào)制3線經(jīng)濟(jì)型,這是進(jìn)行全雙工通信所必須的 最少數(shù)目的線路。串行通信電平:由于89c52單片機(jī)輸入 輸出電平為ttl電平,而pc機(jī)配置的是rs 232c標(biāo)準(zhǔn)串行接口,二者的電氣規(guī)范不一致。數(shù)字值:1 0ttl電平:+5v0v232 電平:-3v -15v +3v

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論