Giáo trình Vi xử lý - Chương 5: Hoạt động của port nối tiếp (Serial Port) - Phạm Quang Trí

I. MỞ ĐẦU:
Máy tính truyền dữ liệu theo hai phương pháp: truyền dữ liệu song song và truyền dữ liệu nối tiếp.
• Truyền song song: Sử dụng nhiều dây dẫn để truyền dữ liệu giữa các thiết bị có khoảng cách
gần nhau (khoảng vài mét). Phương pháp này cho phép truyền dữ liệu với tốc độ cao nhờ sử dụng
nhiều dây dẫn để truyền dữ liệu đồng thời nên tại một thời điểm có thể truyền được nhiều bit thông tin
nhưng khoảng cách truyền thì có nhiều hạn chế.
• Truyền nối tiếp: Sử dụng một dây dẫn để truyền dữ liệu (một dây phát đi và một dây thu về)
giữa các thiết bị có khoảng cách xa nhau (khoảng vài trăm mét trở lên). Phương pháp này sẽ truyền dữ
liệu với tốc độ chậm hơn (so với phương pháp truyền song song) vì chỉ sử dụng một dây dẫn để truyền
dữ liệu nên tại một thời điểm chỉ có thể truyền được một bit thông tin nhưng khoảng cách truyền thì
không bị hạn chế như ở phương pháp song song.
pdf 23 trang thamphan 28/12/2022 2160
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Vi xử lý - Chương 5: Hoạt động của port nối tiếp (Serial Port) - Phạm Quang Trí", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfgiao_trinh_vi_xu_ly_chuong_5_hoat_dong_cua_port_noi_tiep_ser.pdf

Nội dung text: Giáo trình Vi xử lý - Chương 5: Hoạt động của port nối tiếp (Serial Port) - Phạm Quang Trí

  1. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. CHƯƠNG5 HOTðNGCAPORTNITIP (SERIALPORT ) I.MðU: Máytínhtruyndliutheohaiphươngpháp:truyndliusongsongvàtruyndliuni tip. • Truynsongsong:Sdngnhiudâydnñtruyndliugiacácthitbcókhongcách gnnhau ( khong vài mét ).Phươngphápnàychophéptruyndliuvitcñ cao nh sdng nhiudâydnñtruyndliuñngthinêntimtthiñimcóthtruynñưcnhiubitthôngtin nhưngkhongcáchtruynthìcónhiuhnch. • Truynnitip:Sdngmtdâydnñtruyndliu( mtdâyphátñivàmtdâythuv) giacácthitbcókhongcáchxanhau( khongvàitrămméttrlên ).Phươngphápnàystruynd liuvitcñchmhơn(soviphươngpháptruynsongsong )vìchsdngmtdâydnñtruyn dliunêntimtthiñimchcóthtruynñưcmtbitthôngtinnhưngkhongcáchtruynthì khôngbhnchnhưphươngphápsongsong. Chip8051cómtportnitip(serialport )vicáctínhnăngnhưsau: • Lưuý:trưnghpñctrưngthhaithìdliuthnhtskhôngbmtnuCPUñcxong dliuthnhttrưckhidliuthhaiñưcnhnñyñ. Cácthanhghichcnăngñcbitcaportnitip: ðilưngñctrưngchotcñtruyndliunhanhhaychmlàtcñbaud(baudrate)hay còngilàtnshotñngcaportnitipcóthlàgiátrcñnhhaythayñitùytheoyêucuca ngưilptrình.Khichñtcñbaudthayñiñưcsdng,bñnhthi1cungcpxungclocktc ñbaudvàtaphilptrìnhsaochophùhp.phiênbnchip8031/8052,bñnhthi2cũngcóth ñưclptrìnhñcungcpxungclocktcñbaud. GiáotrìnhVixlý. 154 Biênson:PhmQuangTrí
  2. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. III.THANHGHIðIUKHINPORTNITIP( SCON ): ThanhghiSCON( SerialControlRegister ):chacácbitdùngññiukhinchñhotñng vàbáotrngtháicaportnitip. CutrúccathanhghiSCON: Bit 7 6 5 4 3 2 1 0 SCON: Serial Control Register 9F 9E 9D 9C 9B 9A 99 98 Ñòa chæ bit (HEX) SM1 REN RB8 RI SM0 SM2 TB8 TI Kyù hieäu RI : Receive Interrupt Côø ngaét thu. RI = 1 ngay khi keát thuùc vieäc thu moät döõ lieäu, RI ñöôïc xoùa bôûi phaàn meàm. TI : Transmit Interrupt Côø ngaét phaùt. TI = 1 ngay khi keát thuùc vieäc phaùt moät döõ lieäu, TI ñöôïc xoùa bôûi phaàn meàm. RB8: Receive bit 8 Bit thöù 9 nhaän ñöôïc (cheá ñoä 2 vaø 3). TB8: Transmit bit 8 Bit thöù 9 ñöôïc phaùt (cheá ñoä 2 vaø 3). Bit naøy ñöôïc set (1) hoaëc xoùa (0) bôûi phaàn meàm. REN : Receive Enable Cho pheùp thu. Bit naøy phaûi ñöôïc set ñeå nhaän caùc döõ lieäu. SM2: Serial Mode 2 Bit 2 choïn cheá ñoä cuûa port noái tieáp. Bit naøy cho pheùp truyeàn thoâng ña xöû lyù ôû cheá ñoä 2 vaø 3; bit RI seõ khoâng ñöôïc tích cöïc neáu bit thöù 9 nhaän ñöôïc laø 0. SM1: Serial Mode 1 Bit 1 choïn cheá ñoä cuûa port noái tieáp. SM0: Serial Mode 0 Bit 0 choïn cheá ñoä cuûa port noái tieáp. Cácchñcaportnitip: Trưckhisdngportnitipcnphi: GiáotrìnhVixlý. 156 Biênson:PhmQuangTrí
  3. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. • Ginñthigianphátdliu: Quátrìnhthudliu: • Quátrìnhkhiñng : Setbitchophépthu(REN=1) →Xóacngtthu(RI=0) ⇒Victhud liubtñu :CácxungclockdchbitñưcgirachânTxDvàdliutthitbbênngoài ñưcdchvàochânRxDbicácxungclockdchbitnày(vicdchdliuvàochânRxDxyra cnhlêncaxungclockdchbit). • Ginñthigianthudliu: ngdng:Mtngdngkhthicachñ0(chñthanhghidchbit)làmrngthêmcácngõra chochip8051.Mtvimchthanhghidchnitip–songsongcóthñưcnivicácchânTxDvà RxDcachip8051ñcungcpthêm8ñưngxut( xemhìnhvbêndưi ).Cácthanhghidchbit kháccóthghépcascade vithanhghidchbitñutiênñmrngthêmna. GiáotrìnhVixlý. 158 Biênson:PhmQuangTrí
  4. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. Quátrìnhphátdliu: • Quátrìnhkhiñng :GhidliucnphátvàoSBUF⇒Vicphátdliubtñu :Dliut SBUFñưcdchrachânTxD(theotht: Startbit→→→8bitdata(D0 D7) →→→Stopbit ) →c TI=1. W ri te • Tcñbaud:dongưilptrìnhthitlpvàñưcquiñnhbitcñtràncaTimer1. • Thigianca1bittrênñưngtruyn:bngnghchñocatcñbaud( 1/Baudrate ). • CngtphátTI=1:khibitstopñưcxuthintrênchânTxD. Qúatrìnhthudliu: • Quátrìnhkhiñng :Mtschuyntrngtháitmc1xungmc0tichânRxD(tcxut hinbitStart) ⇒Victhudliubtñu :8bitdliuñưcdchvàotrongSBUF(theotht: D0→D1→ →D7) →Stopbit(bitth9)ñưcñưavàobitRB8(thucthanhghiSCON) →c RI=1. • Tcñbaud:dongưilptrìnhthitlpvàñưcquiñnhbitcñtràncaTimer1. • Haiñiukinbtbucñthchinquátrìnhthudliunhưtrên: o RI=0 →Yêucunàycónghĩalàchip8051ñãñcxongdliutrưcñóvàxoácRI o (SM2=1vàStopbit=1 )hocSM2=0 →chápdngtrongchñtruynthôngñax lý.YêucunàycónghĩalàkhôngsetcRIbng1trongchñtruynthôngñaxlý khibitdliuth9là0. • CngtthuRI=1:khi8bitdliuñãñưcnpvàoSBUF. Lưuý:Trưnghpcáctínhiunhiuxuthintrênñưngtruyn( làmchoñưngtruynxuthin mcthp )dnñnlàmchobthunhndngsai,choñólàsxuthincaSTARTbit( logic0 )và tinhànhthchinquátrìnhthudliu,tñódnñnktqunhnvàoskhôngñúng.ðtránhñiu nàyxyrathìkhiñưngtruyncóschuyntrngtháit1xung0,bthuyêucumc0nàyphi GiáotrìnhVixlý. 160 Biênson:PhmQuangTrí
  5. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. KhuôngdngcamtdliukhisdngchñUART9bit: eceive ransmit R T Recei Trans V.KHIðNGVÀTRUYXUTCÁCTHANHGHI: 1.Bitchophépthu( nhn )dliu( REN:ReceiveEnable ): • Côngdng:dùngñchophép( hockhôngchophép )nhncáckýtdliu. REN=1 :Chophépnhndliu⇒lnhthchin: SETBREN REN=0 :Khôngchophépdliu⇒lnhthchin: CLRREN 2.Bitdliuth9: • Côngdng:tùythucvàoñctínhkthutcathitbnitipmàcóthyêucuhockhông yêucubitdliuth9. Khiphátdliu :bitdliuth9 phiñưcnpvàobitTB8caSCONtrưckhiphátñi. Khithudliu :bitdliuth9 sñưcnpvàobitRB8caSCONsaukhithuxong. 3.Bitkimtrachn/l( P:Parity ): • Côngdng:Trongchip8051thìbitParityñưcdùngñthitlpvickimtrachn cho8bit dliuchatrongthanhghiA( thưngdùngñkimtralikhitruyndliu ). P=1 ⇒Slưngbit1trongthanhghiAlàsl. P=0 ⇒Slưngbit1trongthanhghiAlàschn. hoc Slưngbit1trongthanhghiAvàbitPlàmtschn . chñ1 (UART8bit )thìbitchn/ldochip8051toracóthñưcthêmvàotibitth8 (vtríD7)vàkhiñótachcóthtruyndliuchcó7bit . GiáotrìnhVixlý. 162 Biênson:PhmQuangTrí
  6. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. • ThôngquavickimtracngtRI cóthbitñưcchip8051ñãnhnxongmtbyted liuhaychưa.Cnchúýrng,ñâycRIñưcñt( RI=1 )khi8051ñãhoànttvicnhnmtbyte dliu,cònñưcxoá( RI=0 )thìphidongưilptrìnhthchinbnglnh(CLRRI ).Cũngnênnh rng,nukhôngtinhànhctnidungcathanhghiSBUFvàonơiantoànthìscónguycơbmt dliuvanhnñưcdodliutiptheoñưcchuynvào.CRIcóthñưckimtrabnglnh (JNBRI, )hocsdngphươngphápngt( sñưctrìnhbàytrongchươngtiptheo ). Lưuñvàñonlnhñkimtravàthumtdliunitiptthitbbênngoàivàochip8051 (chavàoA): Lưuñvàñonlnhñkimtravàphátmtdliunitiptchip8051( chatrongA)rathitb bênngoài: VI.TRUYNTHÔNGðAXLÝ: Cácchñ2và3làcácchñdphòngchovictruynthôngñaxlý.Trongcácchñnày,9 bitdliuñưcthuvàbitth9ñưañnRB8.Portcóthñưclptrìnhsaochokhibitstopñưc nhn,ngtdoportnitipchñưctíchccnuRB8=1.ðctrưngnàycóthñưcbngcáchsetbit SM2trongthanhghiSCONbng1.Mtngdngchoñiunàylàmtmôitrưngmngsdng nhiu8051ñưcspxptheomôhìnhch/t( master/slave )nhưhìnhdưiñây. GiáotrìnhVixlý. 164 Biênson:PhmQuangTrí
  7. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. 4.SdngTimer1làmxungclocktcñbaudchoportnitip: KthuttoxungclocktcñbaudbngTimer1: Vchnchñ:thưngdùngTimer1chñ8bittñngnpli( Mode2 ).Cáctcñbaudrt chmcóthnhnñưcbngcáchsdngchñ16bit( Mode1 ). • Víd:KhiñngthanhghiTMODñdùngT1làmbtoxungtcñbaud(choT1hotñng chñ2): MOVTMOD,#2xH x:dànhchoTimer0 Vchntcñbaud: GiMlàgiátrcnnpchothanhghiTH1ñcótcñbaudnhưyêucu,tacó: f M = − Timer Timer 1 overflow rate f Timer 1 overflow rate Mà: f = Timer và Baud rate = Timer 12 16 (hoaëc 32) f 1 ⇒ M = − Osc × 12 Baud rate × 16 (hoaëc 32) Vytacó: f f Osc Osc M = − (, SMOD = )1 hoc M = − (, SMOD = )0 192×Baud rate 384×Baud rate Trongñó: fOsc (Hz):tnsthchanh. Baudrate(bps):tcñbaudcaportnitip. • Víd:Totcñbaudlà1200vitrưnghpSMOD=0vàchip8051dùngthchanh12 MHz. GiMlàgiátrcnnpchothanhghiTH1ñcótcñbaudnhưyêucu,tacó: f M = − Osc (, SMOD = )0 384×Baud rate 6 12.10 ⇒ M = − = −26,0416 ≅ -26 ( làmtròns). 384×1200 GiáotrìnhVixlý. 166 Biênson:PhmQuangTrí
  8. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. • Ghidliucnphátvàoportnitipñphátñi: MOVSBUF, (4) • Quaytrlibưc5ñphátmtdliutiptheo. Lưuý: (1) :Giátrdùngñquiñnhchñhotñngcaportnitip.ðñơngintrongviclp trình,tacóthkhiñngthanhghiSCONtheonhưtrìnhbàydưiñây: Mode1: (1) =52H Mode3: (1) =D2H (2) :GiátrdùngñquiñnhchñhotñngcaTimer1( dùngñtotcñbaudchovic truyndliunitip ).ðñơngintrongviclptrình,tacóthkhiñngthanhghiTMODtheo nhưtrìnhbàydưiñây( chyuñâytachcnsdngTimer1Mode2–Chñ8bittñngnp li ): Mode2: (2) =20H (3) :Giátrdùngñquiñnhtcñbaudchoportnitip.Giátrnàyphthucvàotns thchanh,bitSMODvàtcñbaudmàngưilptrìnhmongmun( xemthêm“ Bngtínhtcñ baudchoportnitip ”nhưtrênñãtrìnhbày ). (3) =M f f Osc Osc M = − (, SMOD = )1 hoc M = − (, SMOD = )0 192×Baud rate 384×Baud rate Trongñó: fOsc (Hz):tnsthchanh. Baudrate(bps):tcñbaudcaportnitip. (4) :Dliucnphátñithôngquaportnitip.Dliunàycóthlànidungcamtônh, thanhghihocmtgiátrtcthi. Nênnhrng,nucóyêucuthìbitgikèmtheo( vídnhưbitParity )cnphithêm vào trưckhitinhànhquátrìnhphátdliu( Mode1:kèmthêmvàovtrícabitD7,Mode3:kèmthêm vàovtrícabitTB8). GiáotrìnhVixlý. 168 Biênson:PhmQuangTrí
  9. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. Baudrate=2400 6 11,0592×10 ⇒ M = − = −12 ⇒(TH1)=12hay(TH1)=F4H. 384×2400 Baudrate=1200 6 11,0592×10 ⇒ M = − = −24 ⇒(TH1)=24 hay(TH1)=F8H. 384×1200 XéttrưnghpSMOD=1: GiMlàgiátrcnnpchothanhghiTH1ñcótcñbaudnhưyêucu,tacó: f M = − Osc 192×Baud rate Baudrate=19200 6 11,0592×10 ⇒ M = − = −3 ⇒(TH1)=3hay(TH1)=FDH . 192×19200 2.Víd2: ( Khiñngportnitip ) VitmtchuilnhñkhiñngportnitipsaochoportnàyhotñngnhưmtUART8bitvi tcñbaudlà2400,sdngTimer1ñcungcpxungclocktcñbaud.Chip8051sdngthch anh12MHz. Gii ðkhiñngportnitipcócuhìnhnhưtrêntacntácñngñncácthanhghi:SCON,TMOD, TCONvàTH1. SM0=0,SM1=1,SM2=0 →chñUART8bit. REN=1 →chophépportnitipthudliu. TI=1 →chophépportsnsàngphátdliu( bñmphátrng ). RI=0 →chophépportsnsàngthudliu( bñmthurng ). GATE=0,C/T=0,M1=1,M0=0 →Timer1chññnhthi8bittnpli. GiáotrìnhVixlý. 170 Biênson:PhmQuangTrí
  10. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. vicphátkýtñưcbtñulntrànkcabñmtoxungclockchoportnitip.Saucùngbit ACC.7sñưcxóañgiátrtrvgingnhưkhimã7bitñưcchuynñnchươngtrìnhcon. 4.Víd4: ( Chươngtrìnhconthu(nhn)dliu ) Gisportnitipñãñưckhiñng(nhưvíd1).Hãyvitmtchươngtrìnhconñthud liutportnitipvànpgiátrthuñưcvàothanhghiA(dliuthuñưccódng7bitdliu+1 bitkimtral,tươngtdliutvíd2).Sdngbitth8thuñưclàmbitkimtralvàsetcnh Cnucólichnl. Gii ChươngtrìnhconnàybtñubngvicchcngtthuRIñưcsetbng1ñchrarngkýtñã snsàngtrongbñmthuSBUF( ññưcñc ).KhiRI=1,lnhJNBchuynñiukhinñnlnhtip theosaulnhnày.CRIñưcxóavàmãtrongSBUFñưcchavàothanhghiA.DobitPtrongthanh ghiPSWñưcthitlpñkimtrachnchogiátrtrongthanhghiA.Chonênbitnàysñưcset bng1nunidungthanhghiA( tcdliuvathuñưc )cóchabitkimtralbitth7ca thanhghinàyvàngưclithìbitnàysñưcxoábng0thôngqualnhCPL.VicdichuynbitPvào trongcnhCYslàmchoCY=0nukhôngcólihocCY=1nucómtlichnl.Saucùngbit ACC.7sñưcxóaññmborngchcómã7bitñưctrvchochươngtrìnhñãgi. 5.Víd5: ( Truyndliu ) Vitchươngtrìnhcho8051(fOsc =11,0592MHz)ñtruynliêntcmtkýt“A”thôngquaportni tipvitcñ4800baud(Mode1). Gii • Tínhtoán:Davàonhngcôngthcñãhc,tacó: Portnitip( Mode1 ) ⇒(SCON)=52H Timer1( Mode2 ) ⇒(TMOD)=20H Baudrate=4800vàfOsc =11,0592MHz ⇒(TH1)=6vi(SMOD)=0 GiáotrìnhVixlý. 172 Biênson:PhmQuangTrí
  11. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. 8.Víd8: ( Nhndliu ) Vitchươngtrìnhcho8051(fOsc =11,0592MHz)ñnhnliêntccácdliuthôngquaportnitip vitcñ4800baud(Mode1)vàgicácdliunhnñưcñnP1. Gii • Tínhtoán: Portnitip( Mode1 ) ⇒(SCON)=52H Timer1( Mode2 ) ⇒(TMOD)=20H Baudrate=4800vàfOsc =11,0592MHz ⇒(TH1)=6vi(SMOD)=0 • Chươngtrình:Davàonhngtínhtoántrên,tacó: MOV SCON,#52H ;UART8bit,tcñbaudthayñi. MOV TMOD,#20H ;Chñ8bittnpli. MOV TH1,#(6) ;Baudrate=4800. SETB TR1 ;KhiñngTimer1. LOOP: JNB RI,$ ;Kimtrañãthudliuhoàntt? CLR RI ;XoácRI,chunbcholnthuktip. MOV A,SBUF ;ThuvàctdliuvàoACC. MOV P1,A ;GidliuthuñưcraP1. SJMP LOOP ;Lpliquátrìnhphát. END ;Ktthúcchươngtrình. 9.Víd9: ( Thuvàphátdliu ) Choportnitipca8051(fOsc =11,0592MHz)ñưcnivicngCOMcamáytínhPC(gis rngtrênmáytínhñãcósnchươngtrìnhñgivànhndliunitipthôngquacngCOM).Hãy vitchươngtrìnhcho8051ñthchincáccôngvicsau:  Gicâuthôngbáo“READY”ñnmáytính.  LiêntcnhncácdliunitiptmáytínhgiñnvàchuyncácdliunàyraP1ca 8051.  LiêntclycácdliutP2ca8051vàphátcácdliunàyñnmáytínhthôngquaport nitip. Bitrng8051truyndliunitipMode1vitcñbaudlà9600. Gii • Tínhtoán: Portnitip( Mode1 ) ⇒(SCON)=52H Timer1( Mode2 ) ⇒(TMOD)=20H Baudrate=9600vàfOsc =11,0592MHz ⇒(TH1)=3vi(SMOD)=0 • Chươngtrình:Davàonhngtínhtoántrên,tacó: MOV P2,#0FFH ;CuhìnhP2làcngvào. MOV SCON,#52H ;UART8bit,tcñbaudthayñi. MOV TMOD,#20H ;Chñ8bittnpli. MOV TH1,#(3) ;Baudrate=4800. SETB TR1 ;KhiñngTimer1. MOV DPTR,#MYDATA ;Npcontrvùngdliu. NEXT: ;Phnphátcâuthôngbáo CLR A ;XoáACC,A=0 MOVC A,@A+DPTR ;LydliutiônhROMdo GiáotrìnhVixlý. 174 Biênson:PhmQuangTrí
  12. Chương5:Hotñngcaportnitip(SerialPort). TrưngðHCôngnghipTp.HCM. vàomtvùngnhcaRAMni,nublithìkhôngghi.ñonlnhgichươngtrìnhconNHAPs ñtñachñucavùngnhvàothanhghiR0trưckhigichươngtrìnhconNHAP.Gisportni tipñãñưckhiñng. GiáotrìnhVixlý. 176 Biênson:PhmQuangTrí