PSP và ứng dụng

29 204 2
PSP và ứng dụng

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

PSP và ứng dụng

Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 1/29 Tutorial04.02  Gửiđến: picvietnam@googlegroups.com Nộidung: BÀI4:PARALLELSLAVEPORT(PSP)VÀỨNGDỤNG  MICROSOFTWORD  Tómtắt: Tutorialpostlênluồng“PIC16F877ATỪDỄTỚIKHÓ”thuộcchuyênmục“CƠBẢNVỀVI ĐIỀUKHIỂNVÀPIC”.Bài4baogồmnộidungsau: ‐ CấutạophầncứngPSPvàcácthanhghiđiềukhiển. ‐ XâydựngmoduleđiềukhiểnPSP(phầncứngvàphầnmềm).  1. SơlượcvềcấutạovàchứcnăngcủaPSP ParallelslavePort(PSP)làmộtkhốichứcnăngon‐chipđượctíchhợptrongphầncứng củamộtsốviđiềukhiểnPIC.Bêncạnhcáckhốichứcnăngrấtđadạngdùngchogiaotiếp nốitiếp(I2C,SPI,CAN,USB,…),PSPlàkhốichứcnăngduynhấttrongviđiềukhiểnPIC dùngchogiaotiếpsongsong8bit. VớisựthamgiacủakhốiPSP,cácchứcnănggiaotiếpcủaviđiềukhiểnPICtrởnên hoànthiệnhơn,giốngnhưmộtmáytính,vớicáccổngnốitiếpvàmộtcổngsongsong.Ta cóthểtạmsosánhcáckhốigiaotiếpnốitiếpcủaPIC nhưcổngCOMhoặccổngUSBcủa máytính,cònkhốigiaotiếpsongsong8bitPSPcóthểsosánhnhưcổngLPT(cổngsong song)củamáytính. MộtđiểmtươngđồnggiữaPSPvàcácgiaotiếpnốitiếpkháctrongviđiềukhiểnPIC, đólàPSPcũnglàgiaotiếptheomôhìnhmaster‐slave.Mộtmasterđượcphépđiều khiển cácgiaotiếpvớimộthoặcnhiềuslave.mastercónhiệmvụđưaracácyêucầugiaotiếp,ví dụnhưgiaotiếpvớislavenào,nộidunggiaotiếp,địnhhướngchiềudữliệu(đọchayghi dữliệu),…vàslavecónhiệmvụđápứngcácyêucầuđócủamaster.Tùytheophương thứcgiao tiếp,ta cócác quiđịnhriêng vềcách “ralệnh” củamaster, cáchđápứng của slavecũngnhưcáchtruyềnnhậndữliệu. PSPcũngcócácyêucầuriêngvềhoạtđộnggiaotiếp.Tuynhiên,cómộtđiểmcầnlưu ý ởđây,làPSPcủaviđiềukhiểnPICchỉhoạtđộngđượcởvaitròcủam ộtslave.Cáchoạt độnggiaotiếptrênPSPsẽđượcđiềukhiểnhoàntoànb ởimộtmaster. TrênđâylàmộtvàiđiểmsơlượcvềPSP.Trongphầntiếptheo tasẽđisâuvàocấutạo vàhoạtđộngcủaPSP,cũngnhưxâydựngmộtsốứngdụngcơbảnchoPSP.  Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 2/29 1.1 CấutạophầncứngcủaPSPtrongviđiềukhiểnPIC16F877A PSPđượctíchhợptrongkhánhiềuviđiềukhiểnPIC.Tùytheoviđiềukhiểnmàcách bốtrícácchânchứcnăngvàcácthanhghiđiềukhiểnchoPSPtrongmộtviđiềukhiểncó thểkhácnhau,tuynhiênvềbảnchất,cấutạocủaPSPlàkhôngđổi.Trongbàinày,viđiều khiểnPIC16F877AđượclựachọnđểtìmhiểuvàxâydựngcácứngdụngchoPSP. PSPcócácchânchứcnăngđượctíchhợptrongportDvàportEcủaPIC16F877A.port Dlàcácchândữliệudùngđểtruyềnnhậndữliệusongsong8bit.portElàcácchânđiều khiểnquátrìnhtruyềnnhận,baogồmcácchânRD*(ReaD,chânRE0),WR*(WRite,chân RE1)vàCS*(ChipSelect,chânRE2).Lưuýlàcácchânnàytíchcựcởtrạngtháilogic0. Cónghĩalà,ởtrạngtháikhôngtácđộng,cácchânnàyphảiđượcđưalênmứclogic1,nếu muốnmộtchânnàođótácđộnglênkhốiPSP,tađiềukhiểnchânđótrởvềtrạngtháilogic 0. KhiđượcchophéphoạtđộngởchếđộPSP,cácchânđiềukhiểnnêutrênsẽkhôngcòn đượcchophéphoạtđộngởchếđộI/O(portD)hoặcchếđộI/OAnalog(portE)nữa.Lúc này,portDvàportEsẽđượcđiềukhiểnbởicácthiếtbịngoạivikhác(mộtviđiềukhiển khácđóngvaitròlàmộtmasterchẳnghạn)đểtruyềnnhậndữliệusongsong8bit.Vaitrò cụthểcủachúngnhưsau: ‐ PortDlàngõxuấtnhậpdữliệuvàhoàntoànđượcđiềukhiểnbởikhốiPSP.Vaitrò củathanhghiTRISDtrongtrườnghợpnàysẽđượcbỏqua. ‐ PortElàcácchânđiềukhiểnvàphảiđượcthiếtlậpcácchếđộhoạtđộngthíchhợp, đólàchếđộngõvàoDigital.ChếđộnàyđượcđiềukhiểnbởithanhghiTRISEvà thanhghiADCON1. Bênc ạnhcácchânđiềukhiển,PSPcònđượchỗtrợngắtPSPvàcácbittrạngtháidùng đểđiềukhiểnhoạtđộngcủakhối.Cácthànhphầnhỗtrợnàyđượctrìnhbàytrongbảng sau(tachỉquantâmtớicácbitđiềukhiểnliênquantớiPSP): Thanh ghi Địa chỉ Chứcnăng PORTD 08h ChứadữliệutruyxuấtlênPSP PORTE 09h ĐiềukhiểncácchânRE2:RE0củaPORTE ChứacácbitđiềukhiểnPSPvàcácbitđiềukhiểnhướngtruyxuấtcác châncủaPORTE. Bit Chứcnăng 7 IBF:InputBufferFullstatusbit IBF=1:códữliệuởbộđệmngõvào IBF=0:khôngcódữliệuởbộđệmngõvào TRISE  89h 6 OBF:OutputBufferFullstatusbit OBF=1:Códữliệuởbộđệmngõra Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 3/29 OBF=0:Khôngcódữliệuởbộđệmngõra 5 IBOV:InputBufferOVerflowdetectbit IBOV=1:bộđệmdữliệungõvàobịtràn IBOV=0:bộđệmdữliệungõvàokhôngbịtràn 4 PSPMODE:ParallelslavePortMODE PSPMODE=1:chophépkhốiPSPhoạtđộng PSPMODE=0:khôngchophépkhốiPSPhoạtđộng 3 Khôngquantâm 2:0 CácbitđiềukhiểnhướngtruyxuấtcủaPORTE. TRISE<2:0>=1:Input TRISE<2:0>=0:Output Chứacờngắtcácngắtngoạivi Bit Chứcnăng PIR1 0Ch 7  PSPIF:ParallelSlavePortInterruptFlagbit PSPIF=1:XảyrangắtPSP PSPIF=0:chưaxảyrangắtPSP Chứacácbitchophépcácngătngoạivi Bit Chứcnăng PIE1    8Ch 7  PSPIE:ParallelSlavePortInterruptEnablebit PSPIE=1:ChophépngắtngoạiviPSP PSPIE=0:KhôngchophépngắtngoạiviPSP ADCON1 9Fh ChứacácbitđiềukhiểnADC.Cầnthiếtlậpcácgiátrịthíchhợpcho thanhghinàyđểcáccổngI/OcủaportElàDigitalinput  1.2 QuátrìnhtruyềnnhậndữliệuquaPSP ỞchếđộPSP,portDđóngvaitròlànơiđọcvàghidữliệuđượcđiềukhiểnbởimột master.Đểthựchiệnđượccảhaivaitròlàtruyềnvànhậndữliệu,port Dđượcbốtríhai bộchốtdữliệunhậpvàxuấttáchbiệtvớinhau.Cácchốtdữliệunàyđượcđiềukhỉểntrực tiếp bởi các chânđiều khiển RD*, WR* và CS*. Tùy theo mứclogictrêncác chânđiều khiểnnàymàquátrìnhđọchayghidữliệuđượctiếnhành. TasẽdựavàogiảnđồxungđểtìmhiểuquátrìnhtruyềnnhậndữliệucủaPSP.Trước tiênlàquátrìnhghidữliệulênPSP: Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 4/29  Hình1:GiảnđồxungthểhiệnquátrìnhghidữliệulênPSP.  Trướctiêndữliệucầnghisẽđược đưavàocổngdữliệucủaPSP(portD).Quátrìnhghi dữliệuchỉbắtđầudiễnrakhicảhaichânWR*vàCS*cùngởmứclogicthấp.Khimột trong hai chân WR* hoặc CS* trở về mức logic cao, các bit IBF và PSPIF sẽ đồng thời chuyểntrạngtháitừmứclogic0lênmứclogic1vàngắtngoạiviPSP(nếuđãđượccho phéptrướcđóbằngcáchsetbitPSPIEtrongthanhghiPIE1)sẽđượckíchhoạt.BitIBF (thanhghiTRISE)chuyểnlênmứclogic1dùngđểbáohiệurằngdữliệubộđệmngõvào đãđầy.BitPSPIFchuyểnlênmứclogic1dùngđểchỉthịtrạngtháingắtPSP.BitPSPIF phảiđược xóa bằng chương trìnhđểnhận biếtđược trường hợp xảy ra ngắt tiếp theo. TrongkhibitIBFchỉđượcxóakhidữliệutừbufferđệmđượcđọcvào.Trongtrườnghợp dữliệucũchưađượcđọcvàomàdữliệumớiđãmuốnghilênPSP,bitIBOVsẽchuyểnlên mứclogic1. XétquátrìnhđọcdữliệutừPSP:  Hình2:GiảnđồxungquátrìnhđọcdữliệutừPSP.  Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 5/29 GiảnđồxungquátrìnhđọcdữliệutừPSPcóthểphứctạphơnsovớigiảnđồxungcủa quá trình ghi dữ liệu. Tuy nhiên nếuđểý phân tích kĩ, ta vẫn có thể hình dungđược phươngthứchoạtđộngcủaquátrìnhnày.Đầutiên,tathấychỉkhinàohaichânCS*và RD*cùngởmứclogicthấpthìquátrìnhđọcdữliệumớibắtđầu.Khiđó,bitOBFtừmức logic1sẽchuyểnvềmứclogic0,vàdữliệucầnđọcsẽxuấthiệntạingõracủaport D.Bit OBFtrởvềmứclogic 0đểchỉthịtrạngtháibộ đệmdữliệurađãrỗng,điềuđócó2 ý nghĩa: ‐ Thứnhất,dữliệucầnđọcphảiđượcđưavàoPSPtrướcđó.Khicósựtácđộngcủa haichânCS*vàRD*, PSPchỉlàmmộtcôngviệcđơngiản,đólàmởbufferđệmđể chophépdữliệudãđượcghivàotrướcđóxuấthiệnởngõraportD. ‐ Thứhai,khidữliệuchưađượcđọc,bufferđệmđãcós ẵndữliệunênbitOBFsẽở mứclogic1.Khidữliệuđượcđọc,bufferđệmrỗngnênmứclogiccủaOBFsẽbằng 0.MuốnbitOBFtrởvềmứclogic1,tathựchiệnthaotácghidữliệumớicầnđọclên bufferđệm. Đếngiaiđoạnnày,việcđọcdữliệuđãhoàntất,côngviệccònlạilàđánhdấukếtthúc quátrìnhđọcdữliệubằngcáchđưamộttronghaichânRD*hoặc CS*trởvềmứclogic cao,khiđócờngắtPSPIFđượcsetvàngắtngoạiviPSP(nếuđãđượcchophéptrướcđó) xảyra.BitPSPIFphảiđượcxóabằngchươngtrìnhđểnhậnbiếtđượctrườnghợpxảyra ngắttiếptheo.  2. XâydựngcácmoduleứngdụngchoPSP. MụcđíchcủacôngviệcnàylàứngdụngPSPtronggiaotiếpdữliệu  vớicácthiếtbị ngoạivi.Trongcácứngdụngnày,đểđơngiản,tasẽsửdụng2viđiềukhiểnPIC16F877A, mộtviđiềukhiểnđượcchophéphoạtđộngởchếđộPSP,viđiềukhiểncònlạiđóngvai tròlàmộtmasterđểđiềukhiểnPSP(chúýlàPSPchỉhoạtđộngvớivaitròlàmộtslave). Ta sẽ xây dựng cácứng dụng này theo từng bước, từ thiết kế phần cứngđến viết chươngtrình.  2.1 ỨngdụngđọcdữliệutừPSP Trongứngdụngnày,tasẽthựchiệncôngviệcđọcdữliệutừPSPdựatrêncácthôngtin đãđượcchuẩnbịtrongphầntrước.  2.1.1 Xâydựngphầncứngchoứngdụng Trướctiênlàviệcthiếtkếphầncứngchoứngdụng.Rõràngtacầnnốitấtcảcácchân liênquanđếnPSPđếnviđiềukhiểnmaster,đểbảođảmviệccóthểkiểmsoáthoàntoàn hoạtđộngcủaPSP. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 6/29       Đểkiểmtradữliệuđọcvàocóđúnghaykhông,tasửdụngmộtcôngcụthôngdụnglà cácLEDđượcnốivàomộtportkháccủamaster. Bêncạnhđótacũngcầnđếncácthànhphầnhỗtrợchocácviđiềukhiển(mạchreset, mạchổnđịnhxungdaođộngchothạchanh,…) Dựatrênmộtvàiýtưởngnhưvậy,tacóthểxâydựngmạchnguyênlíchoứngdụng nhưhình3. Trongmạchứngdụngởhình3,PSPcủaPIC16F877Aslavesẽđượcđiềukhiểnbởicác chânRE2:RE0c ủaPIC16F877Amaster.Cácchândữliệucủaslaveđượcnốivớicácchân củaportD.NhưvậykhốiPSPcủacả2PICmastervàslaveđềuđượcnốichungvớinhau (xéttrênquanđi ểmcấutạophầncứngcủaPIC16F877A).TuynhiênvaitròcủamỗiPIClà hoàntoànkhácbiệt,đólàPICmastersẽđiềukhiểnPSPcủaPICslave.NhưvậyPICslave đượcchophéphoạtđộngởchếđộPSP,cònPICmastersẽkhôngđượcchophéphoạtđộng ởchếđộPSP. Thựcchất tahoàn toàn cóthểsửdụngcácportđiều khiểnkhác củamasterđểđiều khiểnPSPslave(dùngPortBvàPortAchẳnghạn)màkhôngnhấtthiếtphảilàportDvà portE. Ngoàira,tachỉsửdụngmộtPSPslavenênviệcđiềukhiểnchânCS*(ChipSelect)là khôngcầnthiếtvàcóthểnốitrựctiếpchânCS*củaPSPslavexuốngmass.Trongtrường hợpnhiềuPSPslaveđượcsửdụng,chânCS*đượcdùngđểlựachọnviệcPSPslavenào đượcchophéptruyxuất.Ởđây,doyêucầucủaứngdụnglàchỉmangtínhchấttìmhiểu phươngthứchoạtđộngcủaPSP,vàđểứngdụngmangtínhtổngquátcaohơn,chânCS* vẫnsẽđượcđiềukhiển. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 7/29 RD4 RD1 RD6 30 pF R3 RD3 R7 D2 RD0 RE2 R10 330 X 8 0 RD7 RD1 30 pF R5 R9 RE0 RE0 D8 0 RD3 RD2 SW2 HI D6 RD5 R1 10 K 4 MHz PIC16F877A MASTER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD VSS OSC1/CLKI OSC2/CLKO RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 VSS VDD RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 30 pF D1 SW1 RD5 R4 RD0 PIC16F877A PSP SLAVE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD VSS OSC1/CLKI OSC2/CLKO RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 VSS VDD RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD D3 4 MHz RD4 0 D7 0 D4 R8 RD6 D5 0 30 pF RD7 HI 0 R6 HI 0 RE1 RE2 R2 10 K HI RD2 RE1  Hình3:SơđồnguyênlíứngdụngđọcdữliệutừPSPsửdụngPIC16F877A.  2.2 Viếtchươngtrìnhđiềukhiểnchoứngdụng Ởđâytacầnviếtchươngtrìnhchocảhaivi điềukhiểnmastervàslave.Cóthểnóiđây làmộtcông việckhôngđơngiản.Tasẽgiảiquyết vấnđềbằngcáchlần lượtđứngtrên phươngthứcđiềukhiểncủamastervàcách«phụcvụ»củaslaveđểhìnhdungracáchoạt  độngchocảhaiviđiềukhiển. Trướchếtlàtrongvaitròcủamộtmaster.MastersẽyêucầuPSPslavexuẩtradữliệu cầnđọcchomasterbằngcáchđiềukhiểncácchânCS*vàRD*củaPSPslavexuốngmức logicthấp.Sauđóđọcdữliệuvàovàkếtthúctruyxuấtdữliệubằngcáchđưamộttrong haichânRD*hoặcCS*trởvềmứclogiccao.Nhưvậyhoạtđộngcủamasterkháđơngiản. BâygiờtasẽđóngvaitròlàmộtPSPslaveđểhìnhdungđượcnhữngthaotáccầnlàm củaPSPslave.KhihaichânCS*vàRD*cùngởmứclogicthấp,phầncứngcủaPSPsẽlập tứcđưadữliệutừbufferđệmrathẳngngõracủaPSP(ngõralàportD)vàbitOBFsẽ đượcset. KhimộttronghaichânCS*hoặcRD*trởvềmứclogiccaothìngắtngoạiviPSP sẽđượckíchhoạt,đồngthờiquátrìnhđọcdữliệucủamastercũngđãkếtthúc.Đâychỉ mớilànhữngphảnứngcủaphầncứngPSPkhiđượcđiềukhiểnbởimaster,màchưacósự canthiệpcủachươngtrình.Nhưvậy,mộtkhiPSPslaveđãcósẵndữliệuởbufferđệmthì mọi thao tác truy xuất sẽ hoàn toànđượcđiều khiển bởi master, và công việc của PSP slave,đơngiảnchỉlàchuẩnbịdữliệutiếptheochomaster,vàcôngviệcnàytốtnhấtnên Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 8/29 được tiến hành trong chương trình ngắt (ngay sau khimasterkết thúc thao tácđọc dữ liệu).CôngviệcchuẩnbịdữliệumớinàysẽđượchỗtrợbởicácbitOBFvàPSPIF. Dựatrênnhữngphântíchnhưtrên,tadãcóthểviếtđượcchươngtrìnhchocảhaivi điềukhiển.Cácchươngtrìnhcụthểnhưsau: Chươngtrình1M:dùngchomaster. processor 16f877a include <p16f877a.inc> __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON &_XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Khaiba’opha^`ncu*’ng ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ #define READ PORTE,0 #define WRITE PORTE,1 #define CS PORTE,2  #define LEDPORT PORTB ;========================================================================== ;   CHUONGTRINHCHINH ORG 0x000 CLRF STATUS MOVLW 0x00 MOVWF PCLATH GOTOstart ;========================================================================== start ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Kho*?ita.oca’cPORT ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ BCF STATUS,RP1;BANK1 BSF STATUS,RP0  CLRF TRISB;kho*?ita.oca’cngo~ra CLRF TRISE MOVLW 0x06;kho*?ita.oca’cngo~I/Ola`digitalI/O MOVWF ADCON1  BCF STATUS,RP0  Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 9/29 CLRF PORTB BSF READ;‐du*ata^’tca?ca’ccha^n–die^`u BSF WRITE;khie^?nle^nmu*’clogiccao BSF CS ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Vo`ngla*.pchi’nhcu?achuo*ngtri`nh ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ loop CALLreadPSP MOVWF LEDPORT;xua^’tdu*~lie^.u–do.c–duo*.craLED GOTOloop ;========================================================================== ; CHUONGTRINHCON ;========================================================================== ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Chuo*ngtri`nhconʺreadPSPʺ ;Du`ng–de^?–do.cdu*~lie^.utu*`slaveve^`master ;Ke^’tqua?–do.cve^`chu*’atrongthanhghiW ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ readPSP BCF CS;ba*’t–da^`u–do.cdu*~lie^.u BCF READ  BSF STATUS,RP0  MOVLW 0xFF;kho*?ita.oPORTDla`ca’cngo~va`o MOVWF TRISD  BCF STATUS,RP0  MOVF PORTD,0;‐do.cdu*~lie^.uva`o  BSF CS;ke^’tthu’c–do.cdu*~lie^.u BSF READ  RETURN  END ;=========================================================================  Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 10/29 Chươngtrình1S:dùngchoslave  processor 16f877a  include <p16f877a.inc> __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON& _XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF  ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Khaiba’obie^’n ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ DATAOUT EQU 0x20;chu*’adu*~lie^.uca^`n–do.c ;bo*?imaster W_save EQU 0x21;ca’cthanhghidu`ng–de^? PCLATH_save EQU 0x22;thaota’ckhiva`onga*’tva`  STATUS_save EQU 0x23;;thoa’tnga*’t FSR_save EQU 0x24 ;======================================================================== ;CHUONGTRINHNGAT ORG 0x004 GOTO ISR ;======================================================================== ISR MOVWF W_save;‐doa.nchuo*ngtri`nhba*’t–da^`u SWAPF STATUS,W;va`onga*’t CLRF STATUS MOVWF STATUS_save MOVF PCLATH,W MOVWF PCLATH_save CLRF PCLATH MOVF FSR,W MOVWF FSR_save  BTFSSPIR1,PSPIF;kie^?mtraco*`nga*’tPSPIF GOTOexit_int;ne^’unga*’tngoa.iviPSPkho^ngxa?yra ;‐>thoat BCF PIR1,PSPIF;ne^’uco’,xo’aco*`nga*’tva`ba*’t‐da^`u ;xu*?li’nga*’t BSFSTATUS,RP0;thanhghiTRISEna*`mo*?BANK1  BTFSC TRISE,OBF;du*~lie^.utrongbuffer–da~ ;‐duo*.c–do.cchu*a?? [...]... chương trình được thực thi đúng, các LED ở port B của master sẽ sáng tắt tương ứng với  dữ liệu đọc vào.    2.2 Ứng dụng ghi dữ liệu lên PSP Ta sẽ tiếp tục tìm hiểu các thao tác ghi dữ liệu lên PSP.  Các bước tiến hành cũng tương  tự như ứng dụng đọc dữ liệu từ PSP.     2.2.1 Xây dựng phần cứng cho ứng dụng Việc  thực  hiện  thành  công  ứng dụng trước  tạo  được  nhiều  thuận  lợi  hơn  cho  ta  thực  hiện  ứng dụng tiếp theo này. Rõ ràng độ ... RB0/INT RE0 8 RE1 9 RE0/RD/AN5 RD7 /PSP7 RE2 10 RE1/WR/AN6 RE2/CS/AN7 RD6 /PSP6 RD5 /PSP5 15 RD4 /PSP4 16 RC0/T1OSO/T1CKI RD3 /PSP3 17 RC1/T1OSI/CCP2 RD2 /PSP2 18 RC2/CCP1 RD1 /PSP1 23 RC3/SCK/SCL RD0 /PSP0 RC4/SDI/SDA 24 RC5/SD0 25 26 RC6/TX/CK RC7/RX/DT VDD VDD 30 pF 14 OSC2/CLKO 0 HI 15 16 17 18 23 24 25 26 RD7 /PSP7 RD6 /PSP6 RD5 /PSP5 RD4 /PSP4 RD3 /PSP3 RD2 /PSP2 RD1 /PSP1 RD0 /PSP0 330 X 8 1 HI RE0 8 RE1 9 RE0/RD/AN5... RC5/SD0 RC6/TX/CK RC7/RX/DT RD7 /PSP7 RD6 /PSP6 RD5 /PSP5 RD4 /PSP4 RD3 /PSP3 RD2 /PSP2 RD1 /PSP1 RD0 /PSP0 13 30 pF 0 VDD VDD 40 39 38 37 36 35 34 33 30 29 28 27 22 21 20 19 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 11 32 OSC2/CLKO 4 MHz OSC1/CLKI 0 MCLR/VPP HI R1 10 K SW1 VSS VSS 31 12 OSC1/CLKI 0 0 PIC16F877A MASTER PIC16F877A PSP SLAVE   Hình 4 : Sơ đồ nguyên lí ứng dụng ghi dữ liệu lên PSP sử dụng PIC16F877A.    2.2.2... ;========================================================================    2.3 Ứng dụng tổng hợp    Trong các phần trước, ta đã xây dựng được các chương trình phục vụ cho các thao tác  cơ bản trên PSP,  bao gồm đọc ghi dữ liệu. Để củng cố lại nắm vững các thao tác trên,  ta sẽ thực hiện một ứng dụng tổng hợp. Yêu cầu của ứng dụng như sau:  ‐ Master sẽ được bổ sung thêm hai công tăc ấn “WRITEBUT” “READBUT”.      ‐ Nếu  nút  “WRITEBUT” ... phép trước đó) sẽ được kích hoạt. Nhiệm vụ của phần cứng PSP đến đây là kết thúc. Công  việc còn lại của chương trình điều khiển là đọc dữ liệu từ bộ đệm vào xử lí dữ liệu đó.  Trong trường hợp của ứng dụng này, ta sẽ đọc dữ liệu đó vào xuất ra port B của slave  để kiểm tra xem dữ liệu nhận được hay chưa, nhận được đúng hay sai. Thao tác này tốt  nhất cũng nên được tiến hành trong chương trình ngắt (ngay khi dữ liệu vừa được nhận  vào), như vậy sẽ tránh được trường hợp tràn bộ đệm. Hiện tượng này xảy ra khi dữ liệu cũ ... VSS 12 VSS OSC1/CLKI 0 PIC16F877A MASTER PIC16F877A PSP SLAVE   Hình 5 : Sơ đồ nguyên lí  ứng dụng tổnh hợp.    2.3.2 Viết chương trình cho ứng dụng Chương trình cho ứng dụng này, về cơ bản, là dựa trên các chương trình trước, ta chit  thêm vào các thao tác tương ứng đối với các phím nhấn (chương trình của master) hoặc kết  hợp các bước thao tác đọc ghi dữ liệu trong chương trình ngắt (đối với chương trình của ... RA4/TOCKI/C1OUT RB1 RA5/AN4/SS/C2OUT RB0/INT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT RD7 /PSP7 RD6 /PSP6 RD5 /PSP5 RD4 /PSP4 RD3 /PSP3 RD2 /PSP2 RD1 /PSP1 RD0 /PSP0 VDD VDD 330 X 8 R3 R4 R5 R6 R7 R8 R9 R10 30 29 28 27 22 21 20 19 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 D1 D2 D3 D4 D5 D6 D7 D8 1 2 3 4 5 6 7 0 RE0 8 RE1 9 RE2 10 0 15 16... dữ  liệu  lên  PSP slave,  sau  đó  slave  xuất dữ liệu nhận được ra các LED ở PORT B. Sau mỗi lần ghi, giá trị ghi lên PSP slave sẽ tăng lên một đơn vị.  ‐ Nếu nút “READBUT” được ấn, master sẽ đọc dữ liệu từ PSP slave, sau đó xuất dữ  liệu nhận được ra các LED ở PORT B. Sau mỗi lần đọc, giá trị đọc từ PSP slave sẽ  tăng lên một đơn vị.    2.3.1 Xây dựng phần cứng cho ứng dụng Phần cứng sẽ có một số thay đổi nhỏ như sau: ... Người báo cáo:  Nguyễn Trung Chính  Tài liệu:  TUT04.02  Ngày:  5/24/2006  Trang:  21/29  Trong  đó  chương  trình  con  “writePSP”  dùng  để  xuât  giá  trị  chứa  trong  thanh  ghi  “DATAOUT” ra PSP slave. Chương trình con “readPSP” dùng để đọc dữ liệu từ PSP vào  lưu dữ liệu đọc được vào trong thanh ghi ”DATAIN”.  Đối với chương trình cho slave, chương trình chính chỉ thực hiện các thao tác khởi tạo, ... Hình 4 : Sơ đồ nguyên lí ứng dụng ghi dữ liệu lên PSP sử dụng PIC16F877A.    2.2.2 Viết chương trình điều khiển cho ứng dụng Ta tiến hành các bước phân tích như trong ứng dụng trước.   Đầu  tiên  là  xem  xét  các  hoạt  động  của  master.  Thao  tác  ghi  dữ  liệu  lên  PSP được  bắt  đầu bằng việc master đưa dữ liệu cần ghi ra port D, sau đó điều khiển cho cả hai chân WR*  SC* xuống mức logic thấp. Công việc còn lại là kết thúc thao tác ghi dữ liệu bằng cách 

Ngày đăng: 28/03/2014, 00:05

Từ khóa liên quan

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

Tài liệu liên quan