Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 1/9 Tutorialn o 03.02 Gửiđến: picvietnam@googlegroups.com Nộidung: KếtnốiPICvớiEEPROM,DS1307dùngI2C MICROSOFTWORD Tómtắt: TrongTutorialcủabạnNgôHảiBắcđãcóphầnhướngdẫnvềcáchlậptrìnhgiaotiếpcổngCom trongPCdùngVC++6.0.Hômnaymìnhsẽgiớithiệuchocácbạncách thứclậptrìnhgiaotiếpnối tiếpUARTtrênPIC: 1. GiaotiếpnốitiếpdùngUART ViếttắtcủaUniversalAsynchronousReceiver – Transmitter –thườnglà một mạch tíchhợpđượcsửdụngtrongviệctruyềndẫndữliệunốitiếpgiữamáytínhvàthiếtbị ngoạivithôngquacổngnốitiếp.RấtnhiềuviđiềukhiểnhiệnnayđãtíchhợpUART.Để bắtđầuviệctruyềndữliệu bằngUART,mộtstartbitđượcgửiđi,sauđólà5‐8bitdữ liệu,sauđólàstopbit.Startbitcótrạngtháingượcvớitrạngtháibìnhthườngcủađường truyềndữliệu.Stopbitcócùngtrạngtháivớitrạngtháibìnhthườngcủađườngtruyền dữliệu.TốcđộcủaUARTđượcquyđịnhbởitốcđộbaud.Mộtsốinterfacechuẩncủa UARTlàEIA,RS232,RS422vàRS485. NhưvậyđểlàmviệcvớiUARTchúngtaphải quantâmđếncácthôngsốsau: • TốcđộBaud:thườnglà9600 • SốbítđượcdùngđểtruyềnData:từ5đến8(thườnglà8) • BítStop1,hay2thườngchọn1 • Bitchẵnlẻ 2.GiaotiếpUARTtrongPIC16F877A 2.1.CácthanhghiđượcsửdụngtrongPIC16F877A TrongPIC16F877Acótấtcả5thanhghichoquatrìnhđiềukhiểnUART:Trongđócó 2thanhghichứcnăngTXSTA,RCSTA,2thanhghidữliệuRCREG,TXREG.,vàthanh ghitốcđộBaud:SPBRG. Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 2/9 ThanhghiTXSTA CSRC: TX9 :chọnchếđộchuyền9bit:(=1:9bit,=0:8bit) TXEN :Chophéptruyền SYNC :Chọnchếđộtruyềnđồngbộhaykhôngđồngbộ:(=1:đồng bộ,=0: khôngđồngbộ) BRGH :chọnchếdộtruyềncaohaythấp(=1HIGH,=0:LOW) TRMT :bítbáotrạngtháicủabộđệm:=1:TSR rỗng(dữliệuđãđựoctruyền xong),=0:TSRđầy(dữliệucòntrongbộđệmcủaUART) TX9D :giátrịcủabítthứ9trongchếđộtruyền9bit.Bitnàycóthểdùngđể lưubitParity; ThanhghiRCSTA SPEN :chophépsửdụngbộUART RX9 :chấpnhậnchếđộnhận9bit SREN :khôngdùngvớitrườnghợpAsychoronous CREN :tiếptụcnhậndữliệu ADDEN :dùngtrongchếđộchọn9bit:(master,slave) Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 3/9 FERR :bítbáohiệulỗiđườngtruyền OERR :báohiệulỗiđườngtruyền RX9D :giátrịbítthứ9trongquátrìnhReceiveđượclưutạiđây. ThanhghiTXREG:dùngđểchứadữliệutruyềnđitrongquátrìnhTransmit ThanhghiRCREG:dùngđểlưudữliệutừngoàivàotrongquátrìnhReceive Thanhghi:SPBRGlàthanhghithiếtlậptốcđộbaudcủaPIC TrongPIC16F877AcóhaichếđộtruyềnHighspeed,vàLowspeedđượcquyđịnhbởi bitBRGHcủathanhghiTXSTA.Việcphânchiahaimứctốcđộnàyđểcósựchọnlựacho trườnghợpsaisốvớitốcđộbaudchuẩncủaPC:MàtrongPCcócácmứcchuẩn:300, 2400,9600,19200,28800.Cácbạncóthểthamkhảobảng10‐3ởtrang114đểbiêtđượccác mứctốcđộ: Hình1:BAUDRATEFORASYNCHORONOUSMODE(BRGH=0) Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 4/9 Hình2:BAUDRATEFORASYNCHRONOUSMODE(BRGH=1) Thôngquabảngtrêntathấyứngvớitầnsốthạchanhlà4Mđểchọnchotốcđộbaud là9600tacóthểchọnhaigiátrịcủathanhghiSPBRGởhaitrườnghợp:SPBRG=25ứng vớiBRGH=1cóisaisốlà0.15vàSPBRG=6ứngvớiBRGH=0cósaisố6.99.Rõrànglàta chọngiatrịnàocósaisốbếnhấtvàứngvớiVDtrêntanênchọnSPBRG=25,BRGH=1 vìnócósaisốnhỏhơntrườnghợpkia.Nhưvậyứngvớitrườnghợpnàocósaisốnhỏ hơntronghaigiátrịthìtasẽchọncáiđó. 2.2. QuátrìnhtruyềnvànhậncủaPICvớiPC TrongPIC16F877Acónhiều chếđộtruyềnnhậnkhácnhau:chếđộtruyềnnhậndùng bit9đểđịnhchẵnlẻ,haychomạngVĐK1mastervànhiềuslave.Vàchếđộchuyền đồngbộứngdụngchoviệcgiao tiếpvớiA/D,D/A hayvớicácEEPRO.Vàtấtnhiêncác chếdộnàysẽđượcthiếtlậpbởicácbittrongthanhghiTXSTA,vàTCSTA.Tuynhiên trongtutorialnàychỉxingiớithiệuchếđộtruyềnvành ận8bitgiaotiếpvớiPCmột trongcácchứcnăngcủabộAUSARTcủaPIC Quátrìnhnhậndữliệu TrongPIC16F877Ađểnhận biếtđược dữ liệu truyền tới người ta dùng bit cờ RCIF trongthanhghiPIR1.NhưvậykhithanhghiđệmdữliệuchứadữliệuthìRCIFsẽđược đưalên1.VàchínhcờnàychophépPIC16F877Acóhaiphươngthứcđểnhậnbiếtlúc nàocódữliệutruyềntới.SửdụngngắtvàsửdụngkiểuPolling(quayvòng) Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 5/9 • KiểuPolling:liêntụckiểmtracờRCIFnếu=1thìđọcdữliệu:Phươngthứcnàycóưu điểmdẽlâptrình,phùhợpvớinhữngứngdụngnhỏ. • Kiểudùngngăt:đượcthiếtlậpbằngcáchchoRCIE=1đểchophépngắt.Tứclàmỗi khicódữliệutruyềntớiRCREGthìsinhramộtngắtvàPICsẽtạmdừngchươngtrình hiệnthờiđểxửlýdữliệuvừanhậnđược.Cáchnàychủyếuđượcsửdụng NhưvậycácbướcchoquátrìnhnhậndữliệucủaquátrìnhsửdụngINTERUPTbao gồm: ‐ 1.Khởitạotốcđộbaud:ởthanhghiSPBRG.ChoSPBRG=25,BRGH=1ứngvớitốc độ9600(thạchanh4M) ‐ 2.ChophépquátrìnhtruyềnkhôngđồngbộbắngcáchthiếtlậpSPEN=1,SYNC=0; ‐ 3.Chophépngắtquátrìnhnhậndữliệu:RCIE=1 ‐ 4Chophépnhậndữliệu:CREN=1 ‐ 5.ChophépngắttoàncụcbăngviệcGIE=1,PEIE=1(GIE,PEIEtrongthanhghi INTCON) ‐ 6.Xửlýcácphầnkhácchươngtrìnhkhicóngắtxảyrathìxửlýdữliệu VD:nhậndữliệutừPCvớitốcđộbaud:96000sửdụngngắt BSF TXSTA,BRGH ;ChoBRGH=1 MOVLW Dʹ25ʹ ;Chonchedo9.600 MOVWF SPBRG BSF RCSTA,SPEN;SPEN=1 BCF TXSTA,SYNC ;SYNC=0 BSF TXSTA,CREN BSF PIE,RCIE ;RCIE=1 BSF INTCON,GIE BSF INTCON, PEIE ;Hàmngắtxửlýdữliệu: MOVF RCREG,W ;NhandulieutuRCREGchuyenchothanhghiW MOVWF PORTB ;DuadulieuraPORTB Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 6/9 2.2.2.Quátrìnhtruyềndữliệu Trongquá trìnhtruyềndữliệucũngcóhai chế độsửdụngngắtvàPolling,tuy nhiênquátrìnhtruyềndữliệulênPCkhôngphảilàthờidiểmbất kỳmàdặtdướisự kiểmsoátc ủachươngtrìnhchonênngườitathưòngsửdụngkiểupollingkhicầntruyền thìtruyềnđi. Nhưvậycácbướcchoquátrìnhthiếtlập ngắt: ‐ 1.Khởitạotốcđộbaud:ởthanhghiSPBRG.ChoSPBRG=25,BRGH=1ứngvớitốc độ9600(thạchanh4M) ‐ 2.ChophépquátrìnhtruyềnkhôngđồngbộbắngcáchthiếtlậpSPEN=1,SYNC=0; ‐ 3.ChophéptruyềndữliệubằngcáchthiếtlậpbítTXEN=1; ‐ 4.KhicầntruyềndữliệuchỉcầnLoaddữliệuđólênTXREG VD: BSF TXSTA,BRGH ;ChoBRGH=1 MOVLW Dʹ25ʹ ;Chon chedo9.600 MOVWF SPBRG BSF RCSTA,SPEN; BCF TXSTA,SYNC ; BSF TXSTA,TXEN;TXEN=1 MOVFDATA,W ;ChuyendulieutuDATAquaW MOVWF TXREG ;TruyendulieubangcachloaddulieulenTXREG Lưuý:trưkhichoquátrìnhtruyềnvànhậndữliệutaphảithiếtlậptrạngtháichân củaRC7,RC6chohợplý.ChoRC7làdạngin,RC6làdạngout 3.Mộtvidụđơngiản ĐâylàmộtVDvềquátrìnhtruyềnvànhậndữliệutừPC.PICnhậndữliệutùPC chuyểnquaPORTB(hiểnthịqualed)rồitruyềntrởlạiPC Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 7/9 list p=16f877A #include <p16f877A.inc> __CONFIG 0x393A errorlevel ‐302 w_temp EQU0x71 status_temp EQU0x72 pclath_tempEQU0x73 ACC EQU0x74 R2 EQU0x7A R3 EQU0x7B R4 EQU0x7C ;********************************************************************** ORG 0x000 ;processorresetvector goto main ;gotobeginningofprogram ORG 0x004 ;interruptvectorlocation movwf w_temp ;saveoffcurrentWregistercontents movfSTATUS,w ;moveSTATUSregisterintoWregister movwf status_temp ;saveoffcontentsofSTATUSregister movfPCLATH,W ;movePCLATHregisterintoWregister movwf pclath_temp ;saveoffcontentsofPCLATHregister ;============================================================================= BANKSEL RCREG MOVF RCREG,W ; Nhan du lieu tu RCREG chuyen cho thanh ghiW MOVWF PORTB ;DuadulieuraPORTB BANKSEL TXREG MOVWF TXREG ;TruyendulieudolenPC ;============================================================================== movf pclath_temp,w ;retrievecopyofPCLATHregister movwf PCLATH ;restorepre‐isr PCLATHregistercontents movf status_temp,w ;retrievecopyofSTATUSregister movwf STATUS ;restorepre‐isrSTATUSregistercontents swapf w_temp,f swapf w_temp,w ;restorepre‐isrWregistercontents retfie main BANKSEL ADCON1 MOVLW 0x06 MOVWF ADCON1 ;ChọnchếđộDigitalởcacchan CALL Init_serialport BANKSEL TRISB CLRF TRISB ;ChodangPORTBladangout BSF INTCON,GIE ;Chophepngat BSF INTCON,PEIE GOTO $ Init_serialport BANKSEL TXSTA Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 8/9 BSF TRISC,7 ;Chonchanrb2ladangin BCF TRISC,6 MOVLW Bʹ00100100ʹ ;Chonchedo8bit,Hightbaudrate MOVWF TXSTA MOVLW Dʹ25ʹ ;Chonchedo9.600 MOVWF SPBRG BSF PIE1,RCIE;Chophepngat(receive) BANKSEL RCSTA MOVLW Bʹ 10010000ʹ ; MOVWF RCSTA RETURN END Vớisơđồkêtnốinhưhìnhvẽ: +5V +5V U5 U8 U7 U9 U6 P1 CONNECTOR DB9 5 9 4 8 3 7 2 6 1 MAX232 1 3 4 5 11 10 12 9 1615 2 6 14 7 13 8 C1+ C1 C2+ C2- T1in T2in R1out R2out VCCGND V+ V- T1out T2out R1in R2in U1 PIC16F877A 1 2 3 4 5 6 7 8 9 10 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 33 34 35 36 37 38 39 40 11 32 12 31 MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3/VREF+ RA4/TOCKI RA5/AN4 RE0 RE1 RE2 OSC1/CLK1 OSC2/CLK0 RC0 RC1 RC2 RC3/SCL RD0 RD1 RD2 RD3 RC4/SDA RC5 RC6/TX RC7/RX RD4 RD5 RD6 RD7 RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 VDD VDD VSS VSS MachTESTUSARTdungPIC16F877A Hình3:Mạchtest USART dung PIC16F877A Lưuý :ởsơđồtrênsửdụngMax232kếtnốimáytínhvìmứcđiệnápcủaPCvàPIClàkhác nhauvàMax232ởđâycótácdụnglàmbộchuyểnđổitrunggiangiữaPCvàPIC ‐ Cáchthức test Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 9/9 ‐ Sửdụngchươngtrìnhgiaotiếpmáytínhbấtkỳcóchếđộtruyềnvànhậndữliệu.( dùngchươngtrìnhMSCOMcủaNgohaibac) ‐ SoạnthảocodechươngtrìnhnhưtrêntạofileHex rồinạpvàoPIC16F877A. ‐ Thiếtlậpphầncứngnhưtronghìnhvẽ. ‐ KếtnốiPICvớicổngcomcủamáytínhnhưsơđồtrên. ‐ Mởchươngtrìnhgiaotiếpmáytínhquacổng Comrồichọnchếđộtruyền8bit,tốc độBAUD9600. ‐ Chọnconnectrồichuyềndữliệu.Cácbạnsẽthấydữliệunhậnđượcsẽnhưkhita nốitắthaichân2,3củacổngcomvàbạnsẽthấydữliệuhiểnthịquaLED>VD truyềnchữʺTʺứngvới0x54hay01010100cácbạnsẽthấycóbaledsáng:led6và led4,led2sángcòncácLedcònlạitối ‐ (lưuýlàdữliệuhiểnthịraledlàdữliệucuốicùngcủađoạntext,vìcácdữliệukia chỉxuấthiệntrongthờigianrấtngắnnênkhôngthểnhậnrađược) Hình4:Giaodiệnmẫu 4.Kếtluận Trongtutorialnàychỉhướngdãnvềcáchthứctruyềnvànhậndữliệukhôngđồngbộ quaPCcơchếsửdụng8bit.ĐểtìmhiểuthêmvềcơchếUSARTtrongPICcácbạncóthể thamkhảoDatasheetc ủaPIC16F877A(trang111) Quatutorialnàycácbạnsẽbiếtđượccáchlậptrìnhtruyềnnhậndữliệumộtcáchđơn giản,cáchsửdungchươngtrìnhkếtnốimáytínhhaysơđôsửdụ ngMax232kếtnốimáy tính. . Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 1/9 Tutorialn o 03.02 Gửiđến: picvietnam@googlegroups.com Nộidung: Kết nối PIC với EEPROM, DS1307 dùng I2C MICROSOFTWORD Tómtắt: TrongTutorialcủabạnNgôHảiBắcđãcóphầnhướngdẫnvềcáchlậptrìnhgiaotiếpcổngCom trongPC dùng VC++6.0.Hômnaymìnhsẽgiớithiệuchocácbạncách. Sửdụngchươngtrìnhgiaotiếpmáytínhbấtkỳcóchếđộtruyềnvànhậndữliệu.( dùng chươngtrìnhMSCOMcủaNgohaibac) ‐ SoạnthảocodechươngtrìnhnhưtrêntạofileHex rồinạpvào PIC1 6F877A. ‐ Thiếtlậpphầncứngnhưtronghìnhvẽ. ‐ Kết nối PIC với cổngcomcủamáytínhnhưsơđồtrên. ‐. DB9 5 9 4 8 3 7 2 6 1 MAX232 1 3 4 5 11 10 12 9 1615 2 6 14 7 13 8 C1+ C1 C2+ C 2- T1in T2in R1out R2out VCCGND V+ V- T1out T2out R1in R2in U1 PIC1 6F877A 1 2 3 4 5 6 7 8 9 10 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 33 34 35 36 37 38 39 40 11 32 12 31 MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3/VREF+ RA4/TOCKI RA5/AN4 RE0 RE1 RE2 OSC1/CLK1 OSC2/CLK0 RC0 RC1 RC2 RC3/SCL RD0 RD1 RD2 RD3 RC4/SDA RC5 RC6/TX RC7/RX RD4 RD5 RD6 RD7 RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 VDD VDD VSS VSS MachTESTUSARTdung PIC1 6F877A Hình3:Mạchtest USART dung PIC1 6F877A Lưuý :ởsơđồtrênsửdụngMax232 kết nối máytínhvìmứcđiệnápcủaPCvà PIC làkhác nhauvàMax232ởđâycótácdụnglàmbộchuyểnđổitrunggiangiữaPCvà PIC ‐