1. Trang chủ
  2. » Công Nghệ Thông Tin

Tai lieu PIC-Bài 2: CHƯƠNG TRÌNH DELAY  - vuson.tk pptx

17 254 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 413,25 KB

Nội dung

Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 1/17 Tutorial02.03  Gửiđến: ĐoànHiệp,DoãnMinhĐăng,picvietnam@googlegroups.com Nộidung: Bài2:CHƯƠNGTRÌNHDELAY  MICROSOFTWORD  Tómtắt: Tutorialpostlênpicvietnam,topic“PIC16F877ATỪDỄTỚIKHÓ”thuộcluồng“CƠBẢNVỀ VIĐIỀUKHIỂN VÀPIC”vớinộidung: ‐ Vàinétsơlượcvềmụcđíchvàtácdụngcủach ươngtrìnhdelay. - Phântíchsourcecodemộtsốchươngtrìnhdelay. - Tậptrungphântích,khaithácchươngtrìnhdelaycủaNigelnhưmộtdạngchươngtrìnhdelay đượcchuẩnhóa. Tutorialnàysửdụngkhánhi ềucáckiếnthứctrongtutorialcủaNigel.  1. Vàinétsơlượcvềchươngtrìnhdelay. 1.1. Chukìxungclockvàchukìlệnh Trongphầnnàytasẽbànđếnmộtvàikiếnthứccơsởphụcvụchoviệcviếtchương trìnhdelay.CụthểlàtìmhiểuvềchukìxungclockvàchukìlệnhtrongviđiềukhiểnPIC. Tađãbiếtđểviđiềukhiểnhoạtđộngđượccầnphảicungcấpmộtnguồnxungclocktừ bênngoài.ĐốivớiviđiềukhiểnPIC,nguồnxungclockcóthểlàmộtmạch daođộngRC đơngiản,mộtthạchanh, Tấtnhiên,yêuc ầucủanguồnxungclockphảilàcàngổnđịnh càngtốt. Thôngthường,nguồnxungsửdụngchoviđiềukhiểnnóichungvàPIC nóiriênglà thạchanhvớicácưuđiểmgiáthànhkhôngcao,kháổnđịnhvàrấtthuậntiệntrongvi ệc tínhtoán,thiếtkếmạchứngdụngvàchươngtrìnhchoviđiềukhiển.Trongbài này,ta cũngsửdụngthạchanhlàmnguồnxungchoviđiềukhiển. Mỗithạchanhcómộttầnsốdaođộngcốđịnh,tagọitầnsốđólàf0,thôngthườngf0có các tầnsố4MHz,10MHz,20MHz, Tùytheomỗiloạiviđiềukhiểnmàyêucầu đốivới f0cóthểkhácnhau.ĐốivớiviđiềukhiểnPIC16F877A,tầnsốdaođộngf 0 phảinhỏhơn hoặcbằng20MHz,đâycũnglàtầnsốhoạtđộngtốiđamàđasốcácviđiềukhiểnPIC thuộcdòngmid‐rangecókhảnăngđápứngđược.Chukìdaođộngcủathạchanhtagọilà t 0vàđượctínhtheocôngthức: t 0=1/f0(1) Rấtcơbản!Khôngcógìcầnchúthíchthêmchocôngthứcnày. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 2/17  Tacũngđãbiếtrằngcóhailốikiếntrúcdùngđểtổchứcmộtviđiềukhiển,đólàkiến trúcVon‐NeumanvàkiếntrúcHavard.ViđiềukhiểnPICđượctổchứctheol ốikiếntrúc Havard.Takhôngđisâuvàocáclốikiếntrúcnày,màchỉcầnbiếtrằngvớilốikiếntrúc Havard,mỗi  lệnh sẽđược thựcthixong trongmộtkhoảngthời gianlàmộtchukìlệnh. Khoảngthờigiannàyluôncốđịnhvàphụthuộcvàochukìcủaxungclock. Tacómột“địnhnghĩa”mangtính đạikháinhưsau:chukìlệnhcủaviđi ềukhiển PIClàkhoảngthờigianmàviđiềukhiểnPICthựcthixongmộtlệnh.Tagọithờigiancủa mộtchukìlệnhlàt i. Đểthựcthixongmộtlệnh,viđiềukhiểnPICcầnđến4chukìxungclock.Nhưvậythời gianthựcthixongmộtlệnhsẽđượctính: t i=4t0  (2) Thaycôngthức(1)vàocôngthức(2)tacóđượccôngthứctínhthờigiancủamộtlệnh (mộtchukìlệnh)nhưsau: t i=4/f0(3) Vídụ:nếutasửdụngthạchanhloại4MHzthìthờigianthựcthimộtlệnhcủaviđiều khiểnlà: t i=4/(4 × 10 6 )=1 µ s Đểthuậntiệnchoviệctínhtoánvàthiếtkếchươngtr ìnhdelay,tasẽsửdụngloạithạch anh4MHzchomạchứngdụng,vìnhưcácbạnđãthấy,thờigianthựcthi mộtlệnhcủavi điềukhiểnlúcdólà1µs.Quáchẵn! 1.2. Mụcđíchvàtácdụngcủachươngtrìnhdelay Nhưtađãthấyởmục1.1,thờigianthựcthilệnhcủamộtviđiềukhiểnlàrấtnhanhso vớitốcđộcảmnhậnsựvậthiệntượngcủaconngười.Đi ềunàygâynhi ềukhókhăncho việc“giaotiếp”giữaconngườivớimộtviđiềukhiểncũngnhưkhókhăntrongviệccảm nhậnbằnggiácquankếtquảcácthaotáccủam ộtviđiềukhiển. Vídu,tadùngviđiềukhiểnđểđiềukhiểnmộtLEDchớptắtliêntục.Vớithaotácnày viđiềukhiểnchỉcầnhaichukìlệnh làhoàntấtmộtchukìchớptắt,vàthờigiancủamỗi chukìsẽlà2µs(khisửdụngthạchanh4MHz),vàtrongmộtgiây,LEDsẽchớptắt500000 lần.Trong khimắtngườichỉcóthểnhậnbiếtđược24hìnhảnhtrongmộtgiây.Điềunày cónghĩalà,mộtngườingoàihànhtinh,vớiconmắtcótốcđộxửlíhìnhảnhnhanhhơn, khi chứngkiếnhiệntươngtrênsẽnóirằng:“Eh,ngườitráiđất,tôithấycócáigìđóđang chớptắt”.Cònngườitráiđất,vớitốcđộxửlíhìnhảnhcủamắtlà24hình trong1giây,khi chứngkiếnhiệntượngtrênsẽnóirằng:“Không,ngườingoàihànhtinh,tôithấynósáng liêntụcđóchứ!”. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 3/17 Nhưvậy,làmsaođểmắtng ườicảmnhậnđượcLEDđangchớptắt,cáchduynhấtlà phảigiảmsốlầnchớptắttrong1giâynhỏhơn24,cácthaotácđểviđiềukhiể nhiểnthịcho conngườithấyđượchiệntượngtrênlầnlượtsẽlà: - BậtLEDsánglên - ChờmộtchútchotớikhimắtnhậnđượchìnhảnhLEDsáng. - TắtLED - ChờmộtchútchotớikhimắtnhậnđượchìnhảnhLEDtắt. - Lặplạicácthaotáctrên. Nhưtađãbiết,doviđiềukhiểnkhôngcócáilệnhgọilà“chờmộtchủ t”,chonênkhái niệmchươngtrìnhdelaymớiđượcphátsinhđểthựchiệnquátrìnhchờđó. Cóthểnóichươngtrìnhdelayđóngmộtvaitròquantrọngtrongcácthaotáchiểnthị. Bêncạnhđó,ch ươngtrìnhdelaycòncóvaitròquantrọngtrongviệcgiaotiếpvớicácthiết bịkhác,khimàtốcđộxửlícủaviđiềukhiểnvàcácthiếtbịkhôngđồngnhất.Ngoàira, ta cònsử dụngchương trình delay trong nhiềutìnhhuống thực tế cần ra lệnh cho viđiều khiểnphảichờ.  2. Xâydựngchươngtrìnhdelay 2.1. Cáclệnhsửdụngchochươngtrìnhdelay Ngoàicáclệnhđãđượcđềcậpđếntrongbài1,tacầnsửdụngthêmcáclệnhsaucho chươngtrìnhdelay: LệnhDECFSZ Cúpháp: DECFSZ thanh_ghi,noi_den Lệnh1 Lệnh2 Tácdụng:Giảmgiátrịch ứatrongthamsố“thanh_ghi”vàsosánhvới0. - Nếugiátrịsaukhigiảmkhác0,lệnh1đượcthựcthi. - Nếugiátrịsaukhigiảmbằng0,lệnh1khôngđượcthựcthivàđượ cthaybằng lệnhNOP(khônglàmgìc ả). Thamsố“noi_den”dùngđểxácđịnhnơilưugiátrịthanhghi“thanh_ghi”saukhi giảm.Khikhôngsửdụngthamsố“noi_den”,trìnhbiêndịchsẽmặcđịnhlàkếtqu ả đượcchứatrongthanhghiW. - Nếuthamsố“noi_den”bằng1,kếtquảđượcchứatrongthanhghi“thanh_ghi”. - Nếuthamsố“noi_den”bằng0,kếtquảđượcchứatrongthanhghiW. Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 4/17 LệnhRETURN Cúpháp: RETURN Tácdụng: trởvềchươngtrìnhchínhtừchươngtrìnhcon.  LệnhRETLW  Cúpháp: RETLW tham_so (0≤tham_so≤255)  Tácdụng: trởvềchươngtrìnhchínhtừch ươngtrìnhconvớigiátrịtham_so đượcchứatrongthanhghiW. 2.2. Thuậttoánchochươngtrìnhdelay Tađãbiếtởphần1,chươngtrìnhdelaylàchươngtrìnhdùngđểralệnhchoviđiều khiển “chờmộtchút”(tạmthờiđịnhnghĩamộtcách đạikháinhưvậy).Điềunày cũ ngđồngnghĩavớiviệcralệnhchoviđiềukhiểnlàmmộtcôngviệcvônghĩanàođó trongmộtkhoảngthờigiandotaquyếtđịnh. Trongtậplệnhcủaviđiều khiểnPIC,tacólệnhNOP.Lệnhnàycótácdungralệnh choviđiềukhiển khônglàmgìcả,vàthờigianthựcthilệnhnàycũnglà1chukì lệnh.Nhuvậy,tacócầnthiếtphảixâydựngthuậttoánchochươngtrìnhdelay,vìchỉ cần “NOP”liêntụclàxong?Hoàntoànkhôngđơngiảnnhưv ậy,vìkhiđótasẽgặp phảicácvấn đềsau: - Thứnhất,cáithuậttoáncóvẻ khôngbìnhthường. - Thứhai,viết chươngtrìnhnhư vậythìrấtmỏitay(muốnralệnhchoviđiều khiểnchờ1ms,bạnphải viếtđiviếtlạicáilệnhNOP 1000lầnnếusửdụng loạithạchanh4MHz). - Thứba,dunglượngbộnhớchươngtrìnhbịphíphạmmộtcách quáđáng. Rõràng làtakhôngthểviếtchươngtrìnhdelaytheocáchđó.Vàviệckhắcphụctất cảcácnhượcđiểmnêutrêncũnglàcáctiêuchíđặtrachomộtchươngtrìnhdelay,đó là:ngắngonvàthuậ ntiệnchoviệcsửdụng. Mộtphươngphápthườngsửdụngđểviếtcácchươngtrìnhdelaylàchoviđiềukhiển nhảytớinhảyluimấycáilabel.Tuynhiênđểkiểmsoátđượcthờigiandelaydo chươngtrìnhtạora,tacầntínhtoáncácgiátrịtrongchươngtrìnhmộtcáchphùhợp. Sauđâytasẽdisâuvàocácthuậttoándùngđểviếtchươngtrìnhdelaynày.  2.2.1 Thuậttoán1 TrongthuậttoánnàytasửdụnglệnhDECFSZđểxâydựngchươngtrìnhdelay. Đoạnchươngtrình1:xétmộtđoạncodenhưsau  Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 5/17 MOVLW d’20’ ;đưagiátrị20vàothanhghiW MOVWF delay‐reg ;delay‐reg<‐20 loop  DECFSZ delay‐reg,1 ;giảmgiátrịtrongthanhghidelay‐regvàsosánh ;với0,kếtquảchứatrongthanhghi“delay ‐reg”  GOTOloop ;nếugiátrithanhghi“delay_reg”khác0 ;thìnhảytớilabel“loop”  ………………… ;cáclệnhtiếptheosauđoạnchươngtrìnhdelaysau ;khigiátrịtrongthanhghi“delay‐reg”đãgiảmvề 0. Đoạn chương trình delay được thể hiện trong vòng lặp “loop”. Ta thấy lệnh “DECFSZ ”cầnmộtchukìlệnhđểthựcthi,lệnh“GOTO ” cần 2 chu kì lệnh,khiđógiá trịtrongthanhghi“delay‐reg”sẽbịgiảmđimộtđơnvị.Nhưvậyđể giátrịtrongthanhghi“delay‐reg”giảmmộtđơnvị,tacần(1+2)=3chukìlệnhvà quãngthời giancầnthiếtđểgiátrịtrongthanhghi“delay‐reg”giảmmộtđơnvịsẽlà3ti (t inhưđãđềcậpđếntrongphầntrênlàthờigiancủamộtchukìlệnh). Trongvídụtrên,dotađưavàothanhghidelay‐reggiátrị20chonênsốlầngiảm giátrịthanhghi”delay‐reg”sẽ là(20+1)=21.TacóthểtínhđượcthờigiandelayTdo đoạnchươngtrìnhtrêntạorasẽlà: T=3×(20+1)×t i Ví dụ, nếuta sửdụng loại thạchanh 4 MHzthì mộtchu kìlệnh sẽcóthời gian ti=1µs,dođóđoạnchươngtrìnhtrênsẽtạorakhoảngthờigiandelay: T=3× (20+1)×1µs=63µs Mộtcáchtổngquát,tacóthểsuyrađượccôngthứctínhthờigiandelaychođoạn chươngtrìnhtrênnhưsau: T=3 × (N+1)ti  (4) TrongđóNlàgiátrịđưavàothanhghi“delay‐reg”. Đếnđâytađãcóthểhìnhdungđượcmộtcáchsơlượccáchtínhtoánthờigiandelay Tcủamộtchươngtrìnhdelay.Thờigian Tnàysẽ phụthuộcvàocấu trúcgiảithuật chươngtrìnhdelayvàthờigianmộtchukìlệnht i. Mộtđiểmcầnchúýthôngthườngcácthanhghitasửdụnglàthanhghi8bit,cho nêngiátrịtốiđacóthểđưavàomộtthanhghilà255.Vậythờigiandelaylớnnhất mà đoạnchươngtrìnhdelaytrêncóthểtạoralà: T max=3x(255+1)ti Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 6/17 Muốn tạo thời gian delaylâu hơn,ta phải tăng số lượng cácvòng lặp lên.Đoạn chươngtrìnhsauminhhọacáchtăngsốlượngvònglặpchochươngtrìnhdelay: Đoạnchươngtrình2: MOVLW d’255’ MOVWF delay‐reg1 ;đưagiátrị255vàothanhghi“delay‐reg1” loop DECFSZ delay‐reg1,1 ;giảmgiátrịthanhghi“delay‐reg1”vàsosánhvới0 ;giátrịsaukhigiảmlưuvàothanhghi“delay‐reg1”  GOTO loop1 ;nếuchưabằng0nhảytớilabel“loop1”  GOTO next ;nếuđãbăng0chươngtrìnhdelayhoàntất loop1 MOVLW d’255’   MOVWF delay‐reg2 ;đưavàothanhghi“delay‐reg2”giátrị255 loop2  DECFSZ delay‐reg2,1 ;giảmgiátrịthanhghi“delay‐reg2”vàsosánhvới0 ;giátrịsaukhigiảmlưuvàothanhghi“delay‐reg2” GOTO loop2  ;nếuchưabằng0thìnhảyđếnlabel“loop2”  GOTO loop  ;nếubằng0thìnhảyđếnlabel“loop” next ………………… ; cáclệnhtiếptheosauchươngtrìnhdelay Taxétđoạnchươngtrìnhtừlabel“loop1”trước.Đoạnchươngtrìnhnàytươngtự nhưđoạnchương trình1,chonêncáchtínhthờigiandelaytrongđoạnchươngtrình nàykhôngcógìthayđổi.GiátrịNtrongcôngthức4sẽtươngứngvớigiátrịN 2đưa vàothanhghi“delay‐reg2”(255).TagọiT 2làthờigiandelaydođoạnchươngtrìnhnày tạorathìT 2sẽđựơctínhnhưsau: T 2=3×(N2+1)ti (5) Khigiátrịtrongthanhghi“delay‐reg2”giảmvề0thìcáclệnhtừlabel“loop”được thựcthi.Ởthờiđiểmnàygiátrịtrongthanhghi“delay‐reg1”sẽgiảmđim ộtđơnvịvà tiếptụcthựcthivònglặp“loop1”.NhưvậysaumộtkhoảngthờigianT 2,giátritrong thanhghi“delay‐reg1”sẽgiảmđimộtđơnvị,vànếutagọiN 1làgiátrịđưavàothanh ghi“delay‐reg1”thìsốlầngiảmgiátrịtrongthanhghi“delay‐reg1”sẽlà(N 1+1).Như vậythờigiandelayTdođoạnchươngtrình2tạoralà: T=(N 1+1)T2=3×(N1+1)×(N2+1)×ti (6) Dựatheocácgiátrịđưavàotrongđoạnchươngtrình2tacóthểtínhđượcthờigian delaydođoạnchươngtrìnhtrêntạoranhưsau: T=3×(255+1)×(255+1)t i=196608ti Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 7/17 Nếusửdụngloạithạchanh4MHzthìthờigiandelaydođoạnchươngtrìnhtrên tạoralà196608μs. Nhưvậy,tùyvàothờigiandelaycầnthiếtvàtùyvàoloạithạch anhsửdụngtrong mạchmàtacóthểđưacácgiátrịN 1vàN2vàocácthanhghi“delay‐reg1”và“delay‐ reg2”mộtcáchthíchhợpdựavàocôngthức(6). Vídụ:tínhtoáncácgiátrịđưavàothanhghi“delay‐reg1”và“delay‐reg2”đểthờigian delaydođoạnchươngtrình2t ạoralà90ms.Giảsửtađangsửdụngloạithạchanh4MHz. Tagiảibàitoánnhưsau:doloạithạchanhtasửdụngcótầnsố4MHznênt i=1μs. Dođótacó (N 1+1)×(N2+1)=T/3ti=90×10 ‐3 /(3×1×10 ‐6 )=30×10 3 Nếuchọngiátrịđưavàothanh ghi“delay‐reg2”làN2=199thìgiátrịN1đưavào thanhghi“delay‐reg1”sẽlà: N 1=30×10 3 /(199+1)‐1=149 Mộtđiểmcầnchúýlàbêncạnhviệcthỏamãncôngthức(6),cácgiátrịN 1vàN2 phảithỏamãnđiềukiện: 0<N 1<256và0<N2<256 (7) Thuậttoántrênchophéptagiảiquyếtkhátriệtđểcácvấnđềdànhchomộtchương trìnhdelay.Tuynhiên,nhượcđiểmcủathuậttoántrênlà:trongtrườnghợpcầnnhiều thờigiandelaykhácnhau,taphảiviếtnhiềuchươngtrìnhdelaykhácnhautươngứng. Thuậttoán2chochươngtrìnhdelayđượcpháttriểndựatrênthuậttoán1chophép khắcphụcnhượcđi ểmtrênvàsẽđượctrìnhbàycụthểởphầntiếptheo. 2.2.2 Thuậttoán2 Cácbạncóthểdễdàngnhậnrađâylàthuậttoánchochươngtrìnhdelayđượcsử dụngtrongtutorialcủaNigel.Phầnnàysẽphântíchcụthểgiảithuậtvàsourcecode củađoạnchươngtrình delaynày.Vàđểthểhiệntháiđộtôntrọngtácgiả,tutorialnày vẫngiữnguyênmãlệnhnhưtrongtutorialcủaNigel. Giảsửtađangsửdụngloạithạchanh4MHz.Taxétđoạncodesau: Đoạnchươngtrình3: MOVLW d’90’ MOVWF count1 ;đưagiátrị90vàothanhghicount1 d1  MOVLW d’199’  MOVWF counta ;đưagiátrị199vàothanhghicounta  MOVLW d’1’ Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 8/17  MOVWF countb ;đưagiátrị1vàothanhghicountb delay_0   DECFSZ counta,1 ;giảmgiátrịtrongthanghicountavàsosánhvới0  GOTO $+2 ;nếuchưabằng0,nhảytớilệnh“GOTOdelay_0”  DECFSZ countb,1 ;nếubằng0,giảmgiátrịtrongthanhghicountb  GOTO delay_0 ;countbsaukhigiảmcógiátrịbằng0nênlệnhnày ;khôngđượcthựcthi  DECFSZ count1,1 ;giảmgiátrịtrongthanhghicount1   GOTO d1 ;nhảyvềlabeld1  ‐‐‐‐‐‐‐‐‐‐‐‐‐   ;cáclệnhtiếptheocủachươngtrìnhchínhsauđoạn ;chươngtrìnhdelay Trướctiêntalưuýđếnlệnh“GOTO$+2”.Lệnhnàycótácdụng nhảytớilệnhthứ haikểtừdònglệnh“GOTO$+2”,tứclànhảyđếnlệnh“GOTOdelay_0”.Hoàntoàn tươngtựtacóthểdùnglệnhcócấutrúctươngtựđểnhảyđếnbấtcứdòngl ệnhnào trongchươngtrìnhthôngquaviệcthaythếhằngsốsaudấu“$”. Taxétđoạncodebắtđầutừlabel“delay_0”trước.LệnhDECFSZcounta,1”mất mộtchukìlệnhđểthựcthi.Nếugiá trịchứatrongthanhghicountachưabằng0thì lệnh“GOTO$+2”đượcthựcthi.Lệnhnàymấthaichukìlệnh.Tiếptheo,lệnh“GOTO delay_0”đượcthựcthi.Lệnhnàycũngmấthaichu kìlệnh.Sauđó,giátrịtrongthanh ghicountatiếptụcđượcgiảm.Đếnđâytanhậnthấyrằng,đểgiảmmộtgiátrịtrong thanhghicounta,tamấthết5chukìlệnh(1chukì lệnhcholệnhDECFSZcounta,1”,2 chukìlệnhcholệnh“GOTO$+2”và2chukìlệnhcholệnh“GOTOdelay_0”),vàdo giátrịđưavàothanhghicountalà199nênthờigiancầnthiếtđểthanhghicountagiảm hếtgiátrịvề0là: T a=5×(199+1)×ti Dotađangsửdụnglaọithạchanh4MHznênTasẽmanggiátrị1000μshay1ms. Khigiátrịtrongthanhghicountab ằng0,lệnh“GOTO$+2”sẽkhôngđượcthựcthi màthayvàođólàlệnhNOP,tiếptheolệnh“DECFSZcountb,1”sẽđượcthựcthi.Ta thấygiátrịđưavàothanhghicountblà1nênsaukhigiảmcountbsẽbằng0nênlệnh “GOTOdelay_0”sẽđượcthaybằnglệnhNOPvàtiếptheo,lệnh“DECFSZcount1,1”sẽ đượcthực thi.Sauđóchương trìnhquaytrởvềlabel“d1”đểthựchiệnviệcnạplạicác giátrịchothanhghicounta,countbvàtiếptụcthựcthiđoạncoedetưlabel“delay_0”. Nhưvậyviệcđưagiátrị1vàothanhghi countbthựcchấtchỉlàđểthực hiệnquá trìnhchuyểntiếpmỗikhithanhghicounta giảmvề0.Vàđoạncodetừlabel“delay_0” thựcchấtlàđểtạorathờigiandelaygầnđúng1ms dotađãbỏquamộtsốchukìlệnh Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 9/17 trongbướcchuyểntiếp(lưuýmộtlầnnữalàtađangsửdụngloạithạch anh4MHz), sauđógiátrịtrongthanhghicount1đượcgiảm 1đơnvị.Vònglặpcứtiếp tụcchođến khigiátrịtrongthanhghicount1đượcgiảmvề0. Khiđólệnh“GOTOd1”không đượcthực thinữavàquátrìnhtạothờigiandelaykếtthúc,cáclệnhtiếptheotrong chươngtrình chínhsẽtiếptụcđượcthựcthi. Đếnđâytacóthểnhậnthấyrằngcứmỗi1msthìgiátrịtrongthanhghicount1sẽ giảmđi1đơnvị.Dođó,muốntạorabất cứmộtthờigiandelaynàolàbộisốcủa1ms, tachỉviệcđưagiátrịtươngứngvàothanhghicount1.Trongvídụởđoạnchươngtrình 3,dotađưavàothanhghicount1giátrị90nên thờigiandelaysẽlà90ms.Hoàntoàn tươngtựchoviệctạorathờigiandelay10ms,50ms,100ms,150ms,200ms,…tacũng dễdàngnhậnthấylàthờigiandelaytốiđa dođoạnchươngtrìnhtrêntạoralà255ms. Vớicácthaotácthôngthườngdànhchoviđiềukhiển,cóthểnóiđâylàthờigiandelay đủlớnđểtacóthểsửdụng. Thuậttoán2tuy dàihơnvàsửdụngnhiềuthanhghihơnsovớithuậttoán1nhưng nócónhiềuưuđiểmhơnthuậttoán1dotínhlinhđộngvàdễsửdụngcủanó.Tacóthể s ửdụngđoạnchươngtrìnhdelaynàynhưmộtchươngtrìnhdelaymẫuchoviệcxây dựngcácứngdụngchoviđiềukhiểnPIC. Trongtrườnghợpsửdụnglọaithạchanhcótần sốcaohơn,tacóthểkếthợphai thuậttoán1và2đểtạorathờigiandelaymongmuốn. 3. Ứngdụng Trongcácphầntrên,tađãcóthểhìnhdungđượcmụcđích,tácdụngvàmộtsốgiải thuậtchoviệcxâydựngmộtchươngtrìnhdelay.Bâygiờlàlúcsửdụngcáckiếnthứcđó  chocácứngdụngcụthể. • Ứngdụng1: Ta sẽ phát triểnứng dụngđầu tiên cho chương trình delay từ mạch nguyên lí và chươngtrìnhđãđược xâydựngtrongbài1.Trongbài1,tađãthựchiệnviệtxuấtcácgiá trịra PORTB vàkiểmchứngbằng các LED gắnvàoPORTB.Bâygiờtasẽviếtchương trìnhchotấtcảcácLEDgắnvàoPORTBchớptắtsaumỗikhoảngthờigian100ms. Giảithuậtchochươngtrìnhchắccũngkhôngcógìphảiđángbàn,cácbướcthựchiện lầnlượtsẽlà: - BậttấtcảcácLEDởPORTB - Delay100ms - TắttấtcảcácLEDởPORTB - Delay100ms - Lặplạicácthaotáctrên Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 10/17 Chươngtrìnhsẽđượcviếtnhưsau:  Chươngtrình2.1: ;============================================================================= ;WWW.PICVIETNAM.COM ;Laptrinh:  NGUYENTRUNGCHINH ;Ngaybatdau: 23thang01nam2006 ;Ngayhoanthanh: 23thang01nam2006 ;Kiemtrachuongtrinh:DoanHiep,DoanMinhDang, ;picvietnam@googlegroups.com ;Ngaykiemtra:  ;SudungvidieukhienMicrochip:  PIC16F877A  title “chuongtrinh2‐1.asm” processor 16f877a  include <p16f877a.inc>  __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON& _XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF  ;Capnhatvabosung: ;Motachuongtrinh: ChuongtrinhdungdedieukhientatcacacLEDganvao ; PORTBchoptatlientucsaumoikhoangthoigian100ms. ;Khongsudungchuongtrinhcon ;Motaphancung: 8LEDduocganvaoPORTBthongquacacdientro,cac ;thanhphandikembaogomthachanh,machresetvanguon ;============================================================================= ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ ;Khoitaocacbien ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ count1EQU 0x20 ;cacbiendungchodoanchuongtrinhdelay countaEQU 0x21 countbEQU 0x22 [...]... như sau:   • Ứng dụng 2:  Yêu  cầu  của  ứng  dụng  này  cũng  tương  tự  như  ứng  dụng  1,  tuy  nhiên  ta  sẽ  thay  đổi  nhiều thời gian delay khác nhau, cụ thể như sau:  - Bật tất cả các LED   - delay 100 ms  - Tắt tất cả các LED   - Delay 200ms  Rõ ràng là trong đoạn chương trình chính, giải thuật không có nhiều khác biệt. Thay vì  sau khi tắt LED, ta gọi chương trình con delay_100ms thì bây giờ sẽ gọi chương trình con  . ườicảmnhậnđượcLEDđangchớptắt,cáchduynhấtlà phảigiảmsốlầnchớptắttrong1giâynhỏhơn24,cácthaotácđểviđiềukhiể nhiểnthịcho conngườithấyđượchiệntượngtrênlầnlượtsẽlà: - BậtLEDsánglên - ChờmộtchútchotớikhimắtnhậnđượchìnhảnhLEDsáng. - TắtLED - ChờmộtchútchotớikhimắtnhậnđượchìnhảnhLEDtắt. - Lặplạicácthaotáctrên. Nhưtađãbiết,doviđiềukhiểnkhôngcócáilệnhgọilà“chờmộtchủ t”,chonênkhái niệmchươngtrìnhdelaymớiđượcphátsinhđểthựchiệnquátrìnhchờđó. Cóthểnóichươngtrìnhdelayđóngmộtvaitròquantrọngtrongcácthaotáchiểnthị. Bêncạnhđó,ch ươngtrìnhdelaycòncóvaitròquantrọngtrongviệcgiaotiếpvớicácthiết bịkhác,khimàtốcđộxửlícủaviđiềukhiểnvàcácthiếtbịkhôngđồngnhất.Ngoàira,. gắnvàoPORTB.Bâygiờtasẽviếtchương trìnhchotấtcảcácLEDgắnvàoPORTBchớptắtsaumỗikhoảngthờigian100ms. Giảithuậtchochươngtrìnhchắccũngkhôngcógìphảiđángbàn,cácbướcthựchiện lầnlượtsẽlà: - BậttấtcảcácLEDởPORTB - Delay100ms - TắttấtcảcácLEDởPORTB - Delay100ms - Lặplạicácthaotáctrên Ngườibáocáo: NguyễnTrungChính Tàiliệu: TUT02.03 Ngày: 2/9/2006 Trang: 10/17 . Ứngdụng2: Yêucầucủaứngdụngnàycũngtươngtựnhưứngdụng1,tuynhiêntasẽthayđổi nhiềuthờigiandelaykhácnhau,cụthểnhưsau: - BậttấtcảcácLED - delay100ms - TắttấtcảcácLED - Delay200ms Rõrànglàtrongđoạnchươngtrìnhchính,giảithuậtkhôngcónhiềukhácbiệt.Thayvì saukhitắtLED,tagọichươngtrìnhcondelay_100msthìbâygiờs

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

TỪ KHÓA LIÊN QUAN

w