Ngườibáocáo:NguynTrungChínhTàiliu:TUT02.02
Ngày:1/30/2006Trang:1/18
Tutorial02.02
Giđến:picvietnam@googlegroups.com
Nidung:HàmDelay
MICROSOFTWORD
Tómtt:
Tutorialpostlênpicvietnam,topic“PIC16F877ATỪDỄTIKHÓ”thuclung“CƠBNV
VIĐIUKHINPIC”vinidung:
‐ Vàinétsơlượcvềmcđíchtácdngcachươngtrìnhdelay.
- Phântíchsourcecodemtsốchươngtrìnhdelay.
- Tptrungphântích,khaithácchươngtrìnhdelaycaNigelnhưmtdngchươngtrìnhdelay
đượcchunhóa.
TutorialnàysửdngkhánhiucáckiếnthctrongtutorialcaNigel.
1. Vàinétsơlượcvềchươngtrìnhdelay.
1.1. Chuxungclockchulnh
Trongphnnàytasẽbànđếnmtvàikiếnthccơsởphcvụchovicviếtchương
trìnhdelay.CụthểtìmhiuvềchuxungclockchulnhtrongviđiukhinPIC.
Tađãbiếtđểviđiukhinhotđngđưccnphicungcpmtngunxungclocktừ
bênngoài.ĐiviviđiukhinPIC,ngunxungclockthểmtmchdaođngRC
đơngin,mtthchanh,...Ttnhiên,yêucucangunxungclockphicàngổnđnh
càngtt.
Thôngthường,ngunxungsửdngchoviđiukhinnóichungPICnóiriêng
thchanhvicácưuđimgiáthànhkhôngcao,kháổnđnhrtthuntintrongvic
tínhtoán,thiếtkếmchứngdngchươngtrìnhchoviđiukhin.Trongbàinày,ta
cũngsửdngthchanhlàmngunxungchoviđiukhin.
Mithchanhmttnsốdaođộngcốđịnh,tagitnsốđóf0,thôngthườngf0
cáctnsố4MHz,10MHz,20MHz,...Tùytheomiloiviđiukhinyêucuđivi
f0thểkhácnhau.ĐốiviviđiukhinPIC16F877A,tnsốdaođngf0phinhỏhơn
hocbng20MHz,đâycũngtnsốhotđngtiđađasốcácviđiukhinPIC
thucdòngmidrangekhảnăngđápứngđưc.Chudaođngcathchanhtagi
t0đượctínhtheocôngthc:
t0=1/f0(1)
Rtcơbn!Khôngcnchúthíchthêmchocôngthcnày.
Ngườibáocáo:NguynTrungChínhTàiliu:TUT02.02
Ngày:1/30/2006Trang:2/18
Tacũngđãbiếtrnghailikiếntrúcdùngđtổchcmtviđiukhin,đókiến
trúcVonNeumankiếntrúcHavard.ViđiukhinPICđưctổchctheolikiếntrúc
Havard.Takhôngđisâuvàocáclikiếntrúcnày,chỉcnbiếtrngvilikiếntrúc
Havard,milnhsẽđượcthcthixongtrongmtkhongthigianmtchulnh.
Khongthigiannàyluôncốđịnhphụthucvàochucaxungclock.
Tamtđịnhnghĩa”mangtính...đikháinhưsau:chulnhcaviđiukhin
PICkhongthigianviđiukhinPICthcthixongmtlnh.Tagithigianca
mtchulnhti.
Đểthcthixongmtlnh,viđiukhinPICcnđến4chuxungclock.Nhưvythi
gianthcthixongmtlnhsẽđượctính:
ti=4t0 (2)
Thaycôngthc(1)vàocôngthc(2)tađưccôngthctínhthigiancamtlnh
(mtchulnh)nhưsau:
ti=4/f0(3)
d:nếutasửdngthchanhloi4MHzthìthigianthcthimtlnhcaviđiu
khinlà:
ti=4/(4
×
106)=1
μ
s
Đểthuntinchovictínhtoánthiếtkếchươngtrìnhdelay,tasẽsửdngloithch
anh4MHzchomchứngdng,nhưcácbnđãthy,thigianthcthimtlnhcavi
điukhinlúc1μs.Quáchn!
1.2. Mcđíchtácdngcachươngtrìnhdelay
Nhưtađãthyởmc1.1,thigianthcthilnhcamtviđiukhinrtnhanhso
vitcđcmnhnsựvthintượngcaconngười.Điunàygâynhiukhókhăncho
vic“giaotiếp”giaconngườivimtviđiukhincũngnhưkhókhăntrongviccm
nhnbnggiácquankếtquảcácthaotáccamtviđiukhin.
du,tadùngviđiukhinđđiukhinmtLEDchpttliêntc.Vithaotácnày
viđiukhinchỉcnhaichulnhhoànttmtchuchptt,thigiancami
chusẽ2μs(khisửdngthchanh4MHz),trongmtgiây,LEDsẽchptt500000
ln.Trongkhimtngườichỉthểnhnbiếtđưc24hìnhảnhtrongmtgiây.Điunày
nghĩalà,mtngườingoàihànhtinh,viconmttcđxửhìnhảnhnhanhhơn,
khichngkiếnhintươngtrênsẽnóirng:“Eh,ngườitráiđt,tôithycáiđóđang
chptt”.Cònngườitráiđt,vitcđxửhìnhảnhcamt24hìnhtrong1giây,khi
chngkiếnhintượngtrênsẽnóirng:“Không,ngườingoàihànhtinh,tôithysáng
liêntcđóch!”.
Ngườibáocáo:NguynTrungChínhTàiliu:TUT02.02
Ngày:1/30/2006Trang:3/18
Nhưvy,làmsaođmtngườicmnhnđưcLEDđangchptt,cáchduynht
phigimsốlnchptttrong1giâynhỏhơn24,cácthaotácđểviđiukhinhinthịcho
conngườithyđượchintượngtrênlnlượtsẽlà:
- BtLEDsánglên
- ChờmtchútchotikhimtnhnđượchìnhảnhLEDsáng.
- TtLED
- ChờmtchútchotikhimtnhnđượchìnhảnhLEDtt.
- Lplicácthaotáctrên.
Nhưtađãbiết,doviđiukhinkhôngcáilnhgi“chờmtcht”,chonênkhái
nimchươngtrìnhdelaymiđượcphátsinhđểthchinquátrìnhchờđó.
thểnóichươngtrìnhdelayđóngmtvaitròquantrngtrongcácthaotáchinth.
Bêncnhđó,chươngtrìnhdelaycònvaitròquantrngtrongvicgiaotiếpvicácthiết
bịkhác,khitcđxửcaviđiukhincácthiếtbịkhôngđồngnht.Ngoàira,ta
cònsửdngchươngtrìnhdelaytrongnhiutìnhhungthctếcnralnhchoviđiu
khinphich.
2. Xâydngchươngtrìnhdelay
2.1. Cáclnhsửdngchochươngtrìnhdelay
Ngoàicáclnhđãđưcđcpđếntrongbài1,tacnsửdngthêmcáclnhsaucho
chươngtrìnhdelay:
LnhDECFSZ
pháp:DECFSZthanh_ghi,noi_den
Lnh1
Lnh2
Tácdng:Gimgiátrịchatrongthamsố“thanh_ghi”sosánhvi0.
- Nếugiátrịsaukhigimkhác0,lnh1đượcthcthi.
- Nếugiátrịsaukhigimbng0,lnh1khôngđưcthcthiđưcthaybng
lnhNOP(khônglàmc).
Thamsố“noi_den”dùngđxácđnhnơilưugiátrịthanhghi“thanh_ghi”saukhi
gim.Khikhôngsửdngthamsố“noi_den”,trìnhbiêndchsẽmcđnhkếtquả
đượcchatrongthanhghiW.
- Nếuthamsố“noi_den”bng1,kếtquảđượcchatrongthanhghi“thanh_ghi”.
- Nếuthamsố“noi_den”bng0,kếtquảđượcchatrongthanhghiW.
Ngườibáocáo:NguynTrungChínhTàiliu:TUT02.02
Ngày:1/30/2006Trang:4/18
LnhRETURN
pháp: RETURN
Tácdng:trởvềchươngtrìnhchínhtừchươngtrìnhcon.
LnhRETLW
pháp:RETLWtham_so(0tham_so255)
Tácdng:trởvềchươngtrìnhchínhtừchươngtrìnhconvigiátrịtham_so
đượcchatrongthanhghiW.
2.2. Thuttoánchochươngtrìnhdelay
Tađãbiếtởphn1,chươngtrìnhdelaychươngtrìnhdùngđralnhchoviđiu
khin...“chờmtchút”(tmthiđnhnghĩamtcách...đikháinhưvy).Điunày
cũngđngnghĩavivicralnhchoviđiukhinlàmmtcôngvicnghĩanàođó
trongmtkhongthigiandotaquyếtđịnh.
TrongtplnhcaviđiukhinPIC,talnhNOP.Lnhnàytácdungralnh
choviđiukhin...khônglàmc,thigianthcthilnhnàycũng1chu
lnh.Nhuvy,tacnthiếtphixâydngthuttoánchochươngtrìnhdelay,chỉ
cn...“NOP”liêntcxong?Hoàntoànkhôngđơnginnhưvy,khiđótasẽgp
phicácvnđềsau:
- Thứnht,cáithuttoánvẻ...khôngbìnhthường.
- Thứhai,viếtchươngtrìnhnhư vythìrtmitay(munralnhchoviđiu
khinchờ1ms,bnphiviếtđiviếtlicáilnhNOP...1000lnnếusửdng
loithchanh4MHz).
- Thứba,dunglượngbộnhớchươngtrìnhbịphíphmmtcách...quáđáng.
ràngtakhôngthểviếtchươngtrìnhdelaytheocáchđó.vickhcphctt
cảcácnhượcđimnêutrêncũngcáctiêuchíđtrachomtchươngtrìnhdelay,đó
là:ngngonthuntinchovicsửdng.
Mtphươngphápthườngsửdngđểviếtcácchươngtrìnhdelaychoviđiukhin
...nhytinhyluimycáilabel.Tuynhiênđkimsoátđưcthigiandelaydo
chươngtrìnhtora,tacntínhtoáncácgiátrịtrongchươngtrìnhmtcáchphùhp.
Sauđâytasẽdisâuvàocácthuttoándùngđểviếtchươngtrìnhdelaynày.
2.2.1 Thuttoán1
TrongthuttoánnàytasửdnglnhDECFSZđểxâydngchươngtrìnhdelay.
Đonchươngtrình1:xétmtđoncodenhưsau
Ngườibáocáo:NguynTrungChínhTàiliu:TUT02.02
Ngày:1/30/2006Trang:5/18
MOVLWd’20’ ;đưagiátrị20vàothanhghiW
MOVWFdelayreg;delayreg<‐20
loop
DECFSZdelayreg,0;gimgiátrịtrongthanhghidelayreg
;sosánhvi0,kếtquảchatrongW
GOTOloop ;nếugiátrithanhghi“delay_reg”khác0
;thìnhytilabel“loop”
;cáclnhtiếptheosauđonchươngtrìnhdelaysau
;khigiátrịtrongthanhghi“delayreg”đãgimvề0.
Đonchươngtrìnhdelay đượcthể hintrongvònglp“loop”.Tathylnh
“DECFSZ ...”cnmtchulnhđểthcthi,lnh“GOTO...”cn2chu
lnh,khiđógiátrịtrongthanhghi“delayreg”sẽbịgimđimtđơnv.Nhưvyđ
giátrịtrongthanhghi“delayreg”gimmtđơnv,tacn(1+2)=3chulnh
quãngthigiancnthiếtđểgiátrịtrongthanhghi“delayreg”gimmtđơnvịsẽ3ti
(tinhưđãđềcpđếntrongphntrênthigiancamtchulnh).
Trongdụtrên,dotađưavàothanhghidelayreggiátrị20chonênsốlngim
giátrịthanhghi”delayreg”sẽ(20+1)=21.TathểtínhđưcthigiandelayTdo
đonchươngtrìnhtrêntorasẽlà:
T=3×(20+1)×ti
d,nếutasử dngloithchanh4MHzthìmtchulnhsẽ thigian
ti=1μs,dođóđonchươngtrìnhtrênsẽtorakhongthigiandelay:
T=3×(20+1)×1μs=63μs
Mtcáchtngquát,tathểsuyrađưccôngthctínhthigiandelaychođon
chươngtrìnhtrênnhưsau:
T=3
×
(N+1)ti (4)
TrongđóNgiátrịđưavàothanhghi“delayreg”.
Đếnđâytađãthểhìnhdungđượcmtcáchsơlượccáchtínhtoánthigiandelay
Tcamtchươngtrìnhdelay.ThigianTnàysẽphụthucvàocutrúcgiithut
chươngtrìnhdelaythigianmtchulnhti.