tai lieu PIC-BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG  - vuson.tk doc

29 228 0
tai lieu PIC-BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG  - vuson.tk doc

Đ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

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?? [...]... “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ế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vàghidữliệutrongchươngtrìnhngắt(đốivớichươngtrìnhcủa slave). 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     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ình6:Lưuđồgiảithuậtchươngtrìnhchínhcủamaster.  . 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

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

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

  • Đang cập nhật ...

Tài liệu liên quan