Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 1/29 Tutorial04.02 Gửiđến: picvietnam@googlegroups.com Nộidung: BÀI4:PARALLELSLAVEPORT(PSP)VÀỨNGDỤNG MICROSOFTWORD Tómtắt: Tutorialpostlênluồng“PIC16F877ATỪDỄTỚIKHÓ”thuộcchuyênmục“CƠBẢNVỀVI ĐIỀUKHIỂNVÀPIC”.Bài4baogồmnộidungsau: ‐ CấutạophầncứngPSPvàcácthanhghiđiềukhiển. ‐ XâydựngmoduleđiềukhiểnPSP(phầncứngvàphầnmềm). 1. SơlượcvềcấutạovàchứcnăngcủaPSP ParallelslavePort(PSP)làmộtkhốichứcnăngon‐chipđượctíchhợptrongphầncứng củamộtsốviđiềukhiểnPIC.Bêncạnhcáckhốichứcnăngrấtđadạngdùngchogiaotiếp nốitiếp(I2C,SPI,CAN,USB,…),PSPlàkhốichứcnăngduynhấttrongviđiềukhiểnPIC dùngchogiaotiếpsongsong8bit. VớisựthamgiacủakhốiPSP,cácchứcnănggiaotiếpcủaviđiềukhiểnPICtrởnên hoànthiệnhơn,giốngnhưmộtmáytính,vớicáccổngnốitiếpvàmộtcổngsongsong.Ta cóthểtạmsosánhcáckhốigiaotiếpnốitiếpcủaPIC nhưcổngCOMhoặccổngUSBcủa máytính,cònkhốigiaotiếpsongsong8bitPSPcóthểsosánhnhưcổngLPT(cổngsong song)củamáytính. MộtđiểmtươngđồnggiữaPSPvàcácgiaotiếpnốitiếpkháctrongviđiềukhiểnPIC, đólàPSPcũnglàgiaotiếptheomôhìnhmaster‐slave.Mộtmasterđượcphépđiều khiển cácgiaotiếpvớimộthoặcnhiềuslave.mastercónhiệmvụđưaracácyêucầugiaotiếp,ví dụnhưgiaotiếpvớislavenào,nộidunggiaotiếp,địnhhướngchiềudữliệu(đọchayghi dữliệu),…vàslavecónhiệmvụđápứngcácyêucầuđócủamaster.Tùytheophương thứcgiao tiếp,ta cócác quiđịnhriêng vềcách “ralệnh” củamaster, cáchđápứng của slavecũngnhưcáchtruyềnnhậndữliệu. PSPcũngcócácyêucầuriêngvềhoạtđộnggiaotiếp.Tuynhiên,cómộtđiểmcầnlưu ý ởđây,làPSPcủaviđiềukhiểnPICchỉhoạtđộngđượcởvaitròcủam ộtslave.Cáchoạt độnggiaotiếptrênPSPsẽđượcđiềukhiểnhoàntoànb ởimộtmaster. TrênđâylàmộtvàiđiểmsơlượcvềPSP.Trongphầntiếptheo tasẽđisâuvàocấutạo vàhoạtđộngcủaPSP,cũngnhưxâydựngmộtsốứngdụngcơbảnchoPSP. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 2/29 1.1 CấutạophầncứngcủaPSPtrongviđiềukhiểnPIC16F877A PSPđượctíchhợptrongkhánhiềuviđiềukhiểnPIC.Tùytheoviđiềukhiểnmàcách bốtrícácchânchứcnăngvàcácthanhghiđiềukhiểnchoPSPtrongmộtviđiềukhiểncó thểkhácnhau,tuynhiênvềbảnchất,cấutạocủaPSPlàkhôngđổi.Trongbàinày,viđiều khiểnPIC16F877AđượclựachọnđểtìmhiểuvàxâydựngcácứngdụngchoPSP. PSPcócácchânchứcnăngđượctíchhợptrongportDvàportEcủaPIC16F877A.port Dlàcácchândữliệudùngđểtruyềnnhậndữliệusongsong8bit.portElàcácchânđiều khiểnquátrìnhtruyềnnhận,baogồmcácchânRD*(ReaD,chânRE0),WR*(WRite,chân RE1)vàCS*(ChipSelect,chânRE2).Lưuýlàcácchânnàytíchcựcởtrạngtháilogic0. Cónghĩalà,ởtrạngtháikhôngtácđộng,cácchânnàyphảiđượcđưalênmứclogic1,nếu muốnmộtchânnàođótácđộnglênkhốiPSP,tađiềukhiểnchânđótrởvềtrạngtháilogic 0. KhiđượcchophéphoạtđộngởchếđộPSP,cácchânđiềukhiểnnêutrênsẽkhôngcòn đượcchophéphoạtđộngởchếđộI/O(portD)hoặcchếđộI/OAnalog(portE)nữa.Lúc này,portDvàportEsẽđượcđiềukhiểnbởicácthiếtbịngoạivikhác(mộtviđiềukhiển khácđóngvaitròlàmộtmasterchẳnghạn)đểtruyềnnhậndữliệusongsong8bit.Vaitrò cụthểcủachúngnhưsau: ‐ PortDlàngõxuấtnhậpdữliệuvàhoàntoànđượcđiềukhiểnbởikhốiPSP.Vaitrò củathanhghiTRISDtrongtrườnghợpnàysẽđượcbỏqua. ‐ PortElàcácchânđiềukhiểnvàphảiđượcthiếtlậpcácchếđộhoạtđộngthíchhợp, đólàchếđộngõvàoDigital.ChếđộnàyđượcđiềukhiểnbởithanhghiTRISEvà thanhghiADCON1. Bênc ạnhcácchânđiềukhiển,PSPcònđượchỗtrợngắtPSPvàcácbittrạngtháidùng đểđiềukhiểnhoạtđộngcủakhối.Cácthànhphầnhỗtrợnàyđượctrìnhbàytrongbảng sau(tachỉquantâmtớicácbitđiềukhiểnliênquantớiPSP): Thanh ghi Địa chỉ Chứcnăng PORTD 08h ChứadữliệutruyxuấtlênPSP PORTE 09h ĐiềukhiểncácchânRE2:RE0củaPORTE ChứacácbitđiềukhiểnPSPvàcácbitđiềukhiểnhướngtruyxuấtcác châncủaPORTE. Bit Chứcnăng 7 IBF:InputBufferFullstatusbit IBF=1:códữliệuởbộđệmngõvào IBF=0:khôngcódữliệuởbộđệmngõvào TRISE 89h 6 OBF:OutputBufferFullstatusbit OBF=1:Códữliệuởbộđệmngõra Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 3/29 OBF=0:Khôngcódữliệuởbộđệmngõra 5 IBOV:InputBufferOVerflowdetectbit IBOV=1:bộđệmdữliệungõvàobịtràn IBOV=0:bộđệmdữliệungõvàokhôngbịtràn 4 PSPMODE:ParallelslavePortMODE PSPMODE=1:chophépkhốiPSPhoạtđộng PSPMODE=0:khôngchophépkhốiPSPhoạtđộng 3 Khôngquantâm 2:0 CácbitđiềukhiểnhướngtruyxuấtcủaPORTE. TRISE<2:0>=1:Input TRISE<2:0>=0:Output Chứacờngắtcácngắtngoạivi Bit Chứcnăng PIR1 0Ch 7 PSPIF:ParallelSlavePortInterruptFlagbit PSPIF=1:XảyrangắtPSP PSPIF=0:chưaxảyrangắtPSP Chứacácbitchophépcácngătngoạivi Bit Chứcnăng PIE1 8Ch 7 PSPIE:ParallelSlavePortInterruptEnablebit PSPIE=1:ChophépngắtngoạiviPSP PSPIE=0:KhôngchophépngắtngoạiviPSP ADCON1 9Fh ChứacácbitđiềukhiểnADC.Cầnthiếtlậpcácgiátrịthíchhợpcho thanhghinàyđểcáccổngI/OcủaportElàDigitalinput 1.2 QuátrìnhtruyềnnhậndữliệuquaPSP ỞchếđộPSP,portDđóngvaitròlànơiđọcvàghidữliệuđượcđiềukhiểnbởimột master.Đểthựchiệnđượccảhaivaitròlàtruyềnvànhậndữliệu,port Dđượcbốtríhai bộchốtdữliệunhậpvàxuấttáchbiệtvớinhau.Cácchốtdữliệunàyđượcđiềukhỉểntrực tiếp bởi các chânđiều khiển RD*, WR* và CS*. Tùy theo mứclogictrêncác chânđiều khiểnnàymàquátrìnhđọchayghidữliệuđượctiếnhành. TasẽdựavàogiảnđồxungđểtìmhiểuquátrìnhtruyềnnhậndữliệucủaPSP.Trước tiênlàquátrìnhghidữliệulênPSP: Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 4/29 Hình1:GiảnđồxungthểhiệnquátrìnhghidữliệulênPSP. Trướctiêndữliệucầnghisẽđược đưavàocổngdữliệucủaPSP(portD).Quátrìnhghi dữliệuchỉbắtđầudiễnrakhicảhaichânWR*vàCS*cùngởmứclogicthấp.Khimộ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ểntrạngtháitừmứclogic0lênmứclogic1vàngắtngoạiviPSP(nếuđãđượccho phéptrướcđóbằngcáchsetbitPSPIEtrongthanhghiPIE1)sẽđượckíchhoạt.BitIBF (thanhghiTRISE)chuyểnlênmứclogic1dùngđểbáohiệurằngdữliệubộđệmngõvào đãđầy.BitPSPIFchuyểnlênmứclogic1dùngđểchỉthịtrạngtháingắtPSP.BitPSPIF 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. TrongkhibitIBFchỉđượcxóakhidữliệutừbufferđệmđượcđọcvào.Trongtrườnghợp dữliệucũchưađượcđọcvàomàdữliệumớiđãmuốnghilênPSP,bitIBOVsẽchuyểnlên mứclogic1. XétquátrìnhđọcdữliệutừPSP: Hình2:GiảnđồxungquátrìnhđọcdữliệutừPSP. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 5/29 GiảnđồxungquátrìnhđọcdữliệutừPSPcóthểphứctạphơnsovớigiảnđồxungcủ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ươngthứchoạtđộngcủaquátrìnhnày.Đầutiên,tathấychỉkhinàohaichânCS*và RD*cùngởmứclogicthấpthìquátrìnhđọcdữliệumớibắtđầu.Khiđó,bitOBFtừmức logic1sẽchuyểnvềmứclogic0,vàdữliệucầnđọcsẽxuấthiệntạingõracủaport D.Bit OBFtrởvềmứclogic 0đểchỉthịtrạngtháibộ đệmdữliệurađãrỗng,điềuđócó2 ý nghĩa: ‐ Thứnhất,dữliệucầnđọcphảiđượcđưavàoPSPtrướcđó.Khicósựtácđộngcủa haichânCS*vàRD*, PSPchỉlàmmộtcôngviệcđơngiản,đólàmởbufferđệmđể chophépdữliệudãđượcghivàotrướcđóxuấthiệnởngõraportD. ‐ Thứhai,khidữliệuchưađượcđọc,bufferđệmđãcós ẵndữliệunênbitOBFsẽở mứclogic1.Khidữliệuđượcđọc,bufferđệmrỗngnênmứclogiccủaOBFsẽbằng 0.MuốnbitOBFtrởvềmứclogic1,tathựchiệnthaotácghidữliệumớicầnđọclên bufferđệm. Đếngiaiđoạnnày,việcđọcdữliệuđãhoàntất,côngviệccònlạilàđánhdấukếtthúc quátrìnhđọcdữliệubằngcáchđưamộttronghaichânRD*hoặc CS*trởvềmứclogic cao,khiđócờngắtPSPIFđượcsetvàngắtngoạiviPSP(nếuđãđượcchophéptrướcđó) xảyra.BitPSPIFphảiđượcxóabằngchươngtrìnhđểnhậnbiếtđượctrườnghợpxảyra ngắttiếptheo. 2. XâydựngcácmoduleứngdụngchoPSP. MụcđíchcủacôngviệcnàylàứngdụngPSPtronggiaotiếpdữliệu vớicácthiếtbị ngoạivi.Trongcácứngdụngnày,đểđơngiản,tasẽsửdụng2viđiềukhiểnPIC16F877A, mộtviđiềukhiểnđượcchophéphoạtđộngởchếđộPSP,viđiềukhiểncònlạiđóngvai tròlàmộtmasterđểđiềukhiểnPSP(chúýlàPSPchỉhoạtđộngvớivaitròlàmộtslave). 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ươngtrình. 2.1 ỨngdụngđọcdữliệutừPSP Trongứngdụngnày,tasẽthựchiệncôngviệcđọcdữliệutừPSPdựatrêncácthôngtin đãđượcchuẩnbịtrongphầntrước. 2.1.1 Xâydựngphầncứngchoứngdụng Trướctiênlàviệcthiếtkếphầncứngchoứngdụng.Rõràngtacầnnốitấtcảcácchân liênquanđếnPSPđếnviđiềukhiểnmaster,đểbảođảmviệccóthểkiểmsoáthoàntoàn hoạtđộngcủaPSP. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 6/29 Đểkiểmtradữliệuđọcvàocóđúnghaykhông,tasửdụngmộtcôngcụthôngdụnglà cácLEDđượcnốivàomộtportkháccủamaster. Bêncạnhđótacũngcầnđếncácthànhphầnhỗtrợchocácviđiềukhiển(mạchreset, mạchổnđịnhxungdaođộngchothạchanh,…) Dựatrênmộtvàiýtưởngnhưvậy,tacóthểxâydựngmạchnguyênlíchoứngdụng nhưhình3. Trongmạchứngdụngởhình3,PSPcủaPIC16F877Aslavesẽđượcđiềukhiểnbởicác chânRE2:RE0c ủaPIC16F877Amaster.Cácchândữliệucủaslaveđượcnốivớicácchân củaportD.NhưvậykhốiPSPcủacả2PICmastervàslaveđềuđượcnốichungvớinhau (xéttrênquanđi ểmcấutạophầncứngcủaPIC16F877A).TuynhiênvaitròcủamỗiPIClà hoàntoànkhácbiệt,đólàPICmastersẽđiềukhiểnPSPcủaPICslave.NhưvậyPICslave đượcchophéphoạtđộngởchếđộPSP,cònPICmastersẽkhôngđượcchophéphoạtđộng ởchếđộPSP. Thựcchất tahoàn toàn cóthểsửdụngcácportđiều khiểnkhác củamasterđểđiều khiểnPSPslave(dùngPortBvàPortAchẳnghạn)màkhôngnhấtthiếtphảilàportDvà portE. Ngoàira,tachỉsửdụngmộtPSPslavenênviệcđiềukhiểnchânCS*(ChipSelect)là khôngcầnthiếtvàcóthểnốitrựctiếpchânCS*củaPSPslavexuốngmass.Trongtrường hợpnhiềuPSPslaveđượcsửdụng,chânCS*đượcdùngđểlựachọnviệcPSPslavenào đượcchophéptruyxuất.Ởđây,doyêucầucủaứngdụnglàchỉmangtínhchấttìmhiểu phươngthứchoạtđộngcủaPSP,vàđểứngdụngmangtínhtổngquátcaohơn,chânCS* vẫnsẽđượcđiềukhiển. Ngườibáocáo: NguyễnTrungChính Tàiliệ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ình3:SơđồnguyênlíứngdụngđọcdữliệutừPSPsửdụngPIC16F877A. 2.2 Viếtchươngtrìnhđiềukhiểnchoứngdụng Ởđâytacầnviếtchươngtrìnhchocảhaivi điềukhiểnmastervàslave.Cóthểnóiđây làmộtcông việckhôngđơngiản.Tasẽgiảiquyết vấnđềbằngcáchlần lượtđứngtrên phươngthứcđiềukhiểncủamastervàcách«phụcvụ»củaslaveđểhìnhdungracáchoạt độngchocảhaiviđiềukhiển. Trướchếtlàtrongvaitròcủamộtmaster.MastersẽyêucầuPSPslavexuẩtradữliệu cầnđọcchomasterbằngcáchđiềukhiểncácchânCS*vàRD*củaPSPslavexuốngmức logicthấp.Sauđóđọcdữliệuvàovàkếtthúctruyxuấtdữliệubằngcáchđưamộttrong haichânRD*hoặcCS*trởvềmứclogiccao.Nhưvậyhoạtđộngcủamasterkháđơngiản. BâygiờtasẽđóngvaitròlàmộtPSPslaveđểhìnhdungđượcnhữngthaotáccầnlàm củaPSPslave.KhihaichânCS*vàRD*cùngởmứclogicthấp,phầncứngcủaPSPsẽlập tứcđưadữliệutừbufferđệmrathẳngngõracủaPSP(ngõralàportD)vàbitOBFsẽ đượcset. KhimộttronghaichânCS*hoặcRD*trởvềmứclogiccaothìngắtngoạiviPSP sẽđượckíchhoạt,đồngthờiquátrìnhđọcdữliệucủamastercũngđãkếtthúc.Đâychỉ mớilànhữngphảnứngcủaphầncứngPSPkhiđượcđiềukhiểnbởimaster,màchưacósự canthiệpcủachươngtrình.Nhưvậy,mộtkhiPSPslaveđãcósẵndữliệuởbufferđệmthì 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,đơngiảnchỉlàchuẩnbịdữliệutiếptheochomaster,vàcôngviệcnàytốtnhấtnên Ngườibáocáo: NguyễnTrungChính Tàiliệ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 khimasterkết thúc thao tácđọc dữ liệu).CôngviệcchuẩnbịdữliệumớinàysẽđượchỗtrợbởicácbitOBFvàPSPIF. Dựatrênnhữngphântíchnhưtrên,tadãcóthểviếtđượcchươngtrìnhchocảhaivi điềukhiển.Cácchươngtrìnhcụthểnhưsau: Chươngtrình1M:dùngchomaster. processor 16f877a include <p16f877a.inc> __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON &_XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Khaiba’opha^`ncu*’ng ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ #define READ PORTE,0 #define WRITE PORTE,1 #define CS PORTE,2 #define LEDPORT PORTB ;========================================================================== ; CHUONGTRINHCHINH ORG 0x000 CLRF STATUS MOVLW 0x00 MOVWF PCLATH GOTOstart ;========================================================================== start ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Kho*?ita.oca’cPORT ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ BCF STATUS,RP1;BANK1 BSF STATUS,RP0 CLRF TRISB;kho*?ita.oca’cngo~ra CLRF TRISE MOVLW 0x06;kho*?ita.oca’cngo~I/Ola`digitalI/O MOVWF ADCON1 BCF STATUS,RP0 Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 9/29 CLRF PORTB BSF READ;‐du*ata^’tca?ca’ccha^n–die^`u BSF WRITE;khie^?nle^nmu*’clogiccao BSF CS ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Vo`ngla*.pchi’nhcu?achuo*ngtri`nh ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ loop CALLreadPSP MOVWF LEDPORT;xua^’tdu*~lie^.u–do.c–duo*.craLED GOTOloop ;========================================================================== ; CHUONGTRINHCON ;========================================================================== ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Chuo*ngtri`nhconʺreadPSPʺ ;Du`ng–de^?–do.cdu*~lie^.utu*`slaveve^`master ;Ke^’tqua?–do.cve^`chu*’atrongthanhghiW ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ readPSP BCF CS;ba*’t–da^`u–do.cdu*~lie^.u BCF READ BSF STATUS,RP0 MOVLW 0xFF;kho*?ita.oPORTDla`ca’cngo~va`o MOVWF TRISD BCF STATUS,RP0 MOVF PORTD,0;‐do.cdu*~lie^.uva`o BSF CS;ke^’tthu’c–do.cdu*~lie^.u BSF READ RETURN END ;========================================================================= Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 10/29 Chươngtrình1S:dùngchoslave processor 16f877a include <p16f877a.inc> __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON& _XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Khaiba’obie^’n ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ DATAOUT EQU 0x20;chu*’adu*~lie^.uca^`n–do.c ;bo*?imaster W_save EQU 0x21;ca’cthanhghidu`ng–de^? PCLATH_save EQU 0x22;thaota’ckhiva`onga*’tva` STATUS_save EQU 0x23;;thoa’tnga*’t FSR_save EQU 0x24 ;======================================================================== ;CHUONGTRINHNGAT ORG 0x004 GOTO ISR ;======================================================================== ISR MOVWF W_save;‐doa.nchuo*ngtri`nhba*’t–da^`u SWAPF STATUS,W;va`onga*’t CLRF STATUS MOVWF STATUS_save MOVF PCLATH,W MOVWF PCLATH_save CLRF PCLATH MOVF FSR,W MOVWF FSR_save BTFSSPIR1,PSPIF;kie^?mtraco*`nga*’tPSPIF GOTOexit_int;ne^’unga*’tngoa.iviPSPkho^ngxa?yra ;‐>thoat BCF PIR1,PSPIF;ne^’uco’,xo’aco*`nga*’tva`ba*’t‐da^`u ;xu*?li’nga*’t BSFSTATUS,RP0;thanhghiTRISEna*`mo*?BANK1 BTFSC TRISE,OBF;du*~lie^.utrongbuffer–da~ ;‐duo*.c–do.cchu*a?? [...]... “DATAOUT” ra PSP slave. Chương trình con “readPSP” dùng để đọc dữ liệu từ PSP vào và 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, phần việc còn lại được thực hiện trong chương trình ngắt. Lưu đồ giải thuật chương trình ngắt như sau: START INTERRUPT N PSPIF = 1?? Y XOA CO NGAT PSPIF IBF = 1 ?? N Y DOC DU LIEU VAO THANH GHI DATAIN XUAT RA PORT B N OBF = 0 ?? Y TANG GIA TRI THANH... Giải thuật của các chương trình trong ứng dụng này sẽ được trình bày dưới các luu đồ sau: Người báo cáo: Nguyễn Trung Chính Tài liệu: TUT04.02 Ngày: 5/24/2006 Trang: 20/29 START KHOI TAO N READBUT DUOC AN?? Y GOI CHUONG TRINH CON readPSP XUAT DU LIEU DOC DUOC RA PORT B WRITEBUT DUOC AN?? N Y TANG GIA TRI THANH GHI DATAOUT GOI CHUONG TRINH CON writePSP Hình 6 : Lưu đồ giải thuật chương trình chính của master. Người báo cáo: Nguyễn Trung Chính ... ; Ke^’t qua? –do.c ve^` chu*’a trong thanh ghi DATAIN ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ readPSP BCF CS BCF READ Người báo cáo: Nguyễn Trung Chính Tài liệu: TUT04.02 Ngày: 5/24/2006 Trang: 25/29 BSF STATUS,RP0 MOVLW 0xFF MOVWF TRISD BCF STATUS,RP0 MOVF PORTD,0 MOVWF DATAIN BSF CS BSF READ RETURN ... READBUT 11 VDD 32 VDD 0 10 K WRITEBUT SW3 SW4 0 0 OSC2/CLKO 31 VSS 12 VSS 4 MHz 30 pF 13 OSC1/CLKI 4 MHz 13 30 pF 0 0 MCLR/VPP RB7/PGD RB6/PGC READBUT 2 RB5 WRITEBUT RA0/AN0 3 RB4 4 RA1/AN1 5 RA2/AN2/VREF-/CVREF RB3/PGM RA3/AN3/VREF+ RB2 6 RB1 7 RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT 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... ghi lên PSP slave có đúng hay không. Sơ đồ nguyên lí cụ thể của ứng dụng này như trong hình 4. HI HI 2 3 4 5 6 7 0 RE0 8 RE1 9 RE2 10 15 16 17 18 23 24 25 26 30 pF 14 MCLR/VPP RB7/PGD RB6/PGC RA0/AN0 RB5 RA1/AN1 RB4 RA2/AN2/VREF-/CVREF RB3/PGM RA3/AN3/VREF+ RB2 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... 5 6 7 0 RE0 8 RE1 9 RE2 10 0 15 16 17 18 23 24 25 26 11 32 30 pF 14 OSC2/CLKO 4 MHz 30 pF 13 40 39 38 37 36 35 34 33 HI 1 R2 10 K SW2 VSS VSS 31 12 RB7/PGD RB6/PGC RA0/AN0 RB5 RA1/AN1 RB4 RA2/AN2/VREF-/CVREF RB3/PGM RA3/AN3/VREF+ RB2 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... ; Khai ba’o bie^’n ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ count1 EQU 0x20 counta EQU 0x21 countb EQU 0x22 DATAIN EQU 0x23 DATAOUT EQU 0x24 ;=========================================================================== ; CHUONG TRINH CHINH ORG 0x000 CLRF STATUS MOVLW ... WRITE BSF CS CLRF PORTB ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ; Kho* ?i ta.o ca’c bie^’n ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ CLRF DATAIN CLRF DATAOUT ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ; Vo`ng la*.p chi’nh cu?a chuo*ng tri`nh ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ loop ... wait1 ; do*.i cho –de^’n khi nu’t a^’n CALL delay_50ms ; ‐duo*.c tha? ra BTFSS READBUTTON GOTO wait1 CALL readPSP MOVF DATAIN,0 MOVWF PORTB noread BTFSC WRITEBUTTON Người báo cáo: Nguyễn Trung Chính Tài liệu: TUT04.02 Ngày: 5/24/2006 Trang: 24/29 GOTO loop wait2 ; do*.i cho –de^’n khi nu’t a^’n ... Sau đây là sơ đồ nguyên lí cụ thể của ứ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: 19/29 HI HI 330 X 8 MCLR/VPP RB7/PGD RB6/PGC 2 RB5 3 RA0/AN0 RB4 4 RA1/AN1 5 RA2/AN2/VREF-/CVREF RB3/PGM RA3/AN3/VREF+ RB2 6 RB1 7 RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RB0/INT 0 30 pF 14 RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT 30 29 28 27 22 . Viếtchươngtrìnhchoứngdụng Chươngtrìnhchoứngdụngnày,vềcơbản,làdựatrêncácchươngtrìnhtrước,tachit thêmvàocácthaotáctươngứngđốivớicácphímnhấn(chươngtrìnhcủamaster)hoặckết hợpcácbướcthaotácđọcvàghidữliệutrongchươngtrìnhngắt(đốivớichươngtrìnhcủa slave). Giảithuậtcủacácchươngtrìnhtrongứngdụngnàysẽđượctrìnhbàydướicácluuđồ sau: Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT04.02 Ngày: 5/24/2006 Trang: 20/29 KHOI TAO READBUT DUOC AN?? GOI CHUONG TRINH CON readPSP XUAT DU LIEU DOC DUOC RA PORT B WRITEBUT DUOC AN?? TANG GIA TRI THANH GHI DATAOUT GOI CHUONG TRINH CON writePSP Y Y START N N Hình6:Lưuđồgiảithuậtchươngtrìnhchínhcủamaster. . 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. 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 SW1 0 R10 330