tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps

9 446 1
tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps

Đang tải... (xem toàn văn)

Thông tin tài liệu

Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 1/9 Tutorialn o 03.02  Gửiđến: picvietnam@googlegroups.com Nộidung: KếtnốiPICvớiEEPROM,DS1307dùngI2C  MICROSOFTWORD  Tómtắt: TrongTutorialcủabạnNgôHảiBắcđãcóphầnhướngdẫnvềcáchlậptrìnhgiaotiếpcổngCom trongPCdùngVC++6.0.Hômnaymìnhsẽgiớithiệuchocácbạncách  thứclậptrìnhgiaotiếpnối tiếpUARTtrênPIC: 1. GiaotiếpnốitiếpdùngUART ViếttắtcủaUniversalAsynchronousReceiver – Transmitter –thườnglà một mạch tíchhợpđượcsửdụngtrongviệctruyềndẫndữliệunốitiếpgiữamáytínhvàthiếtbị ngoạivithôngquacổngnốitiếp.RấtnhiềuviđiềukhiểnhiệnnayđãtíchhợpUART.Để bắtđầuviệctruyềndữliệu bằngUART,mộtstartbitđượcgửiđi,sauđólà5‐8bitdữ liệu,sauđólàstopbit.Startbitcótrạngtháingượcvớitrạngtháibìnhthườngcủađường truyềndữliệu.Stopbitcócùngtrạngtháivớitrạngtháibìnhthườngcủađườngtruyền dữliệu.TốcđộcủaUARTđượcquyđịnhbởitốcđộbaud.Mộtsốinterfacechuẩncủa UARTlàEIA,RS232,RS422vàRS485. NhưvậyđểlàmviệcvớiUARTchúngtaphải quantâmđếncácthôngsốsau: • TốcđộBaud:thườnglà9600 • SốbítđượcdùngđểtruyềnData:từ5đến8(thườnglà8) • BítStop1,hay2thườngchọn1 • Bitchẵnlẻ 2.GiaotiếpUARTtrongPIC16F877A 2.1.CácthanhghiđượcsửdụngtrongPIC16F877A TrongPIC16F877Acótấtcả5thanhghichoquatrìnhđiềukhiểnUART:Trongđócó 2thanhghichứcnăngTXSTA,RCSTA,2thanhghidữliệuRCREG,TXREG.,vàthanh ghitốcđộBaud:SPBRG. Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 2/9 ThanhghiTXSTA  CSRC: TX9 :chọnchếđộchuyền9bit:(=1:9bit,=0:8bit) TXEN :Chophéptruyền SYNC :Chọnchếđộtruyềnđồngbộhaykhôngđồngbộ:(=1:đồng bộ,=0: khôngđồngbộ) BRGH :chọnchếdộtruyềncaohaythấp(=1HIGH,=0:LOW) TRMT :bítbáotrạngtháicủabộđệm:=1:TSR rỗng(dữliệuđãđựoctruyền xong),=0:TSRđầy(dữliệucòntrongbộđệmcủaUART) TX9D :giátrịcủabítthứ9trongchếđộtruyền9bit.Bitnàycóthểdùngđể lưubitParity; ThanhghiRCSTA   SPEN  :chophépsửdụngbộUART RX9 :chấpnhậnchếđộnhận9bit SREN :khôngdùngvớitrườnghợpAsychoronous CREN :tiếptụcnhậndữliệu ADDEN :dùngtrongchếđộchọn9bit:(master,slave) Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 3/9 FERR  :bítbáohiệulỗiđườngtruyền OERR :báohiệulỗiđườngtruyền RX9D  :giátrịbítthứ9trongquátrìnhReceiveđượclưutạiđây. ThanhghiTXREG:dùngđểchứadữliệutruyềnđitrongquátrìnhTransmit ThanhghiRCREG:dùngđểlưudữliệutừngoàivàotrongquátrìnhReceive Thanhghi:SPBRGlàthanhghithiếtlậptốcđộbaudcủaPIC TrongPIC16F877AcóhaichếđộtruyềnHighspeed,vàLowspeedđượcquyđịnhbởi bitBRGHcủathanhghiTXSTA.Việcphânchiahaimứctốcđộnàyđểcósựchọnlựacho trườnghợpsaisốvớitốcđộbaudchuẩncủaPC:MàtrongPCcócácmứcchuẩn:300, 2400,9600,19200,28800.Cácbạncóthểthamkhảobảng10‐3ởtrang114đểbiêtđượccác mứctốcđộ:    Hình1:BAUDRATEFORASYNCHORONOUSMODE(BRGH=0) Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 4/9  Hình2:BAUDRATEFORASYNCHRONOUSMODE(BRGH=1) Thôngquabảngtrêntathấyứngvớitầnsốthạchanhlà4Mđểchọnchotốcđộbaud là9600tacóthểchọnhaigiátrịcủathanhghiSPBRGởhaitrườnghợp:SPBRG=25ứng vớiBRGH=1cóisaisốlà0.15vàSPBRG=6ứngvớiBRGH=0cósaisố6.99.Rõrànglàta chọngiatrịnàocósaisốbếnhấtvàứngvớiVDtrêntanênchọnSPBRG=25,BRGH=1 vìnócósaisốnhỏhơntrườnghợpkia.Nhưvậyứngvớitrườnghợpnàocósaisốnhỏ hơntronghaigiátrịthìtasẽchọncáiđó.  2.2. QuátrìnhtruyềnvànhậncủaPICvớiPC TrongPIC16F877Acónhiều chếđộtruyềnnhậnkhácnhau:chếđộtruyềnnhậndùng bit9đểđịnhchẵnlẻ,haychomạngVĐK1mastervànhiềuslave.Vàchếđộchuyền đồngbộứngdụngchoviệcgiao tiếpvớiA/D,D/A hayvớicácEEPRO.Vàtấtnhiêncác chếdộnàysẽđượcthiếtlậpbởicácbittrongthanhghiTXSTA,vàTCSTA.Tuynhiên trongtutorialnàychỉxingiớithiệuchếđộtruyềnvành ận8bitgiaotiếpvớiPCmột trongcácchứcnăngcủabộAUSARTcủaPIC Quátrìnhnhậndữliệu TrongPIC16F877Ađểnhận biếtđược dữ liệu truyền tới người ta dùng bit cờ RCIF trongthanhghiPIR1.NhưvậykhithanhghiđệmdữliệuchứadữliệuthìRCIFsẽđược đưalên1.VàchínhcờnàychophépPIC16F877Acóhaiphươngthứcđểnhậnbiếtlúc nàocódữliệutruyềntới.SửdụngngắtvàsửdụngkiểuPolling(quayvòng) Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 5/9 • KiểuPolling:liêntụckiểmtracờRCIFnếu=1thìđọcdữliệu:Phươngthứcnàycóưu điểmdẽlâptrình,phùhợpvớinhữngứngdụngnhỏ. • Kiểudùngngăt:đượcthiếtlậpbằngcáchchoRCIE=1đểchophépngắt.Tứclàmỗi khicódữliệutruyềntớiRCREGthìsinhramộtngắtvàPICsẽtạmdừngchươngtrình hiệnthờiđểxửlýdữliệuvừanhậnđược.Cáchnàychủyếuđượcsửdụng NhưvậycácbướcchoquátrìnhnhậndữliệucủaquátrìnhsửdụngINTERUPTbao gồm: ‐ 1.Khởitạotốcđộbaud:ởthanhghiSPBRG.ChoSPBRG=25,BRGH=1ứngvớitốc độ9600(thạchanh4M) ‐ 2.ChophépquátrìnhtruyềnkhôngđồngbộbắngcáchthiếtlậpSPEN=1,SYNC=0; ‐ 3.Chophépngắtquátrìnhnhậndữliệu:RCIE=1 ‐ 4Chophépnhậndữliệu:CREN=1 ‐ 5.ChophépngắttoàncụcbăngviệcGIE=1,PEIE=1(GIE,PEIEtrongthanhghi INTCON) ‐ 6.Xửlýcácphầnkhácchươngtrìnhkhicóngắtxảyrathìxửlýdữliệu VD:nhậndữliệutừPCvớitốcđộbaud:96000sửdụngngắt   BSF TXSTA,BRGH ;ChoBRGH=1  MOVLW Dʹ25ʹ  ;Chonchedo9.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àmngắtxửlýdữliệu:  MOVF RCREG,W ;NhandulieutuRCREGchuyenchothanhghiW  MOVWF PORTB ;DuadulieuraPORTB    Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 6/9 2.2.2.Quátrìnhtruyềndữliệu Trongquá trìnhtruyềndữliệucũngcóhai chế độsửdụngngắtvàPolling,tuy  nhiênquátrìnhtruyềndữliệulênPCkhôngphảilàthờidiểmbất kỳmàdặtdướisự kiểmsoátc ủachươngtrìnhchonênngườitathưòngsửdụngkiểupollingkhicầntruyền thìtruyềnđi. Nhưvậycácbướcchoquátrìnhthiếtlập ngắt: ‐ 1.Khởitạotốcđộbaud:ởthanhghiSPBRG.ChoSPBRG=25,BRGH=1ứngvớitốc độ9600(thạchanh4M) ‐ 2.ChophépquátrìnhtruyềnkhôngđồngbộbắngcáchthiếtlậpSPEN=1,SYNC=0; ‐ 3.ChophéptruyềndữliệubằngcáchthiếtlậpbítTXEN=1; ‐ 4.KhicầntruyềndữliệuchỉcầnLoaddữliệuđólênTXREG VD:  BSF TXSTA,BRGH ;ChoBRGH=1 MOVLW Dʹ25ʹ  ;Chon chedo9.600 MOVWF SPBRG   BSF RCSTA,SPEN;  BCF TXSTA,SYNC ;  BSF TXSTA,TXEN;TXEN=1    MOVFDATA,W ;ChuyendulieutuDATAquaW  MOVWF TXREG ;TruyendulieubangcachloaddulieulenTXREG     Lưuý:trưkhichoquátrìnhtruyềnvànhậndữliệutaphảithiếtlậptrạngtháichân củaRC7,RC6chohợplý.ChoRC7làdạngin,RC6làdạngout 3.Mộtvidụđơngiản ĐâylàmộtVDvềquátrìnhtruyềnvànhậndữliệutừPC.PICnhậndữliệutùPC chuyểnquaPORTB(hiểnthịqualed)rồitruyềntrởlạiPC  Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 7/9 list p=16f877A  #include <p16f877A.inc>  __CONFIG 0x393A errorlevel ‐302 w_temp EQU0x71 status_temp EQU0x72 pclath_tempEQU0x73  ACC EQU0x74 R2 EQU0x7A R3 EQU0x7B R4 EQU0x7C  ;**********************************************************************  ORG 0x000  ;processorresetvector  goto main  ;gotobeginningofprogram  ORG 0x004  ;interruptvectorlocation   movwf w_temp ;saveoffcurrentWregistercontents  movfSTATUS,w ;moveSTATUSregisterintoWregister  movwf status_temp ;saveoffcontentsofSTATUSregister  movfPCLATH,W  ;movePCLATHregisterintoWregister  movwf pclath_temp ;saveoffcontentsofPCLATHregister ;=============================================================================  BANKSEL RCREG  MOVF RCREG,W ; Nhan du lieu tu RCREG chuyen cho thanh ghiW  MOVWF PORTB  ;DuadulieuraPORTB  BANKSEL TXREG MOVWF TXREG ;TruyendulieudolenPC ;==============================================================================  movf pclath_temp,w ;retrievecopyofPCLATHregister  movwf PCLATH ;restorepre‐isr PCLATHregistercontents  movf status_temp,w ;retrievecopyofSTATUSregister  movwf STATUS ;restorepre‐isrSTATUSregistercontents  swapf w_temp,f  swapf w_temp,w ;restorepre‐isrWregistercontents  retfie main  BANKSEL ADCON1  MOVLW 0x06  MOVWF ADCON1 ;ChọnchếđộDigitalởcacchan  CALL Init_serialport  BANKSEL TRISB  CLRF TRISB  ;ChodangPORTBladangout  BSF INTCON,GIE  ;Chophepngat  BSF INTCON,PEIE  GOTO $  Init_serialport  BANKSEL TXSTA Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 8/9  BSF TRISC,7 ;Chonchanrb2ladangin  BCF TRISC,6  MOVLW Bʹ00100100ʹ ;Chonchedo8bit,Hightbaudrate  MOVWF TXSTA  MOVLW Dʹ25ʹ  ;Chonchedo9.600  MOVWF SPBRG  BSF PIE1,RCIE;Chophepngat(receive)  BANKSEL RCSTA  MOVLW Bʹ 10010000ʹ ;   MOVWF RCSTA  RETURN   END   Vớisơđồkêtnốinhưhìnhvẽ: +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 MachTESTUSARTdungPIC16F877A Hình3:Mạchtest USART dung PIC16F877A Lưuý :ởsơđồtrênsửdụngMax232kếtnốimáytínhvìmứcđiệnápcủaPCvàPIClàkhác nhauvàMax232ởđâycótácdụnglàmbộchuyểnđổitrunggiangiữaPCvàPIC ‐ Cáchthức test Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 9/9 ‐ Sửdụngchươngtrìnhgiaotiếpmáytínhbấtkỳcóchếđộtruyềnvànhậndữliệu.( dùngchươngtrìnhMSCOMcủaNgohaibac) ‐ SoạnthảocodechươngtrìnhnhưtrêntạofileHex rồinạpvàoPIC16F877A. ‐ Thiếtlậpphầncứngnhưtronghìnhvẽ. ‐ KếtnốiPICvớicổngcomcủamáytínhnhưsơđồtrên. ‐ Mởchươngtrìnhgiaotiếpmáytínhquacổng Comrồichọnchếđộtruyền8bit,tốc độBAUD9600. ‐ Chọnconnectrồichuyềndữliệu.Cácbạnsẽthấydữliệunhậnđượcsẽnhưkhita nốitắthaichân2,3củacổngcomvàbạnsẽthấydữliệuhiểnthịquaLED>VD truyềnchữʺTʺứngvới0x54hay01010100cácbạnsẽthấycóbaledsáng:led6và led4,led2sángcòncácLedcònlạitối ‐ (lưuýlàdữliệuhiểnthịraledlàdữliệucuốicùngcủađoạntext,vìcácdữliệukia chỉxuấthiệntrongthờigianrấtngắnnênkhôngthểnhậnrađược)   Hình4:Giaodiệnmẫu 4.Kếtluận Trongtutorialnàychỉhướngdãnvềcáchthứctruyềnvànhậndữliệukhôngđồngbộ quaPCcơchếsửdụng8bit.ĐểtìmhiểuthêmvềcơchếUSARTtrongPICcácbạncóthể thamkhảoDatasheetc ủaPIC16F877A(trang111) Quatutorialnàycácbạnsẽbiếtđượccáchlậptrìnhtruyềnnhậndữliệumộtcáchđơn giản,cáchsửdungchươngtrìnhkếtnốimáytínhhaysơđôsửdụ ngMax232kếtnốimáy tính.  . Ngườibáocáo: PhạmĐứcMạnh Tàiliệu: TUT03.01 Ngày: 2/9/2006 Trang: 1/9 Tutorialn o 03.02  Gửiđến: picvietnam@googlegroups.com Nộidung: Kết nối PIC với EEPROM, DS1307 dùng I2C  MICROSOFTWORD  Tómtắt: TrongTutorialcủabạnNgôHảiBắcđãcóphầnhướngdẫnvềcáchlậptrìnhgiaotiếpcổngCom trongPC dùng VC++6.0.Hômnaymìnhsẽgiớithiệuchocácbạncách. Sửdụngchươngtrìnhgiaotiếpmáytínhbấtkỳcóchếđộtruyềnvànhậndữliệu.( dùng chươngtrìnhMSCOMcủaNgohaibac) ‐ SoạnthảocodechươngtrìnhnhưtrêntạofileHex rồinạpvào PIC1 6F877A. ‐ Thiếtlậpphầncứngnhưtronghìnhvẽ. ‐ Kết nối PIC với cổngcomcủamáytínhnhư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 MachTESTUSARTdung PIC1 6F877A Hình3:Mạchtest USART dung PIC1 6F877A Lưuý :ởsơđồtrênsửdụngMax232 kết nối máytínhvìmứcđiệnápcủaPCvà PIC làkhác nhauvàMax232ởđâycótácdụnglàmbộchuyểnđổitrunggiangiữaPCvà PIC ‐

Ngày đăng: 03/07/2014, 20:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan