intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

thiết bị báo cháy tự động, chương iv

Chia sẻ: Nguyen Van Dau | Ngày: | Loại File: PDF | Số trang:11

98
lượt xem
27
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chế độ 1 – Chế độ TIMER 16 BIT: Hoạt động như timer 16 bit đầy đủ. - Cờ báo tràn là bit TFx trong TCON có thể đọc hoặc ghi bằng phần mềm. - MSB của giá trị trong thanh ghi timer là bit 7 của THx và LSB là bit 0 của TLx. Các thanh ghi timer (TLx/THx) có thể đọc hoặc ghi bất cứ lúc nào bằng phần mềm. Xung nhịp timer TLx (8 bit) THx (8 bit) TFx 2. Nguồn tạo xung nhịp: Có `ai nguồn tạo xung nhịp có thể có, được chọn bằng cách ghi vào C/T...

Chủ đề:
Lưu

Nội dung Text: thiết bị báo cháy tự động, chương iv

  1. Chương IV. CHEÁ ÑOÄ TIMER 1. Cheá ñoä 1 – Cheá ñoä TIMER 16 BIT: - Hoaït ñoäng nhö timer 16 bit ñaày ñuû. - Côø baùo traøn laø bit TFx trong TCON coù theå ñoïc hoaëc ghi baèng phaàn meàm. - MSB cuûa giaù trò trong thanh ghi timer laø bit 7 cuûa THx vaø LSB laø bit 0 cuûa TLx. Caùc thanh ghi timer (TLx/THx) coù theå ñoïc hoaëc ghi baát cöù luùc naøo baèng phaàn meàm. Xung nhòp timer TFx TLx THx (8 bit) (8 bit) Côø baùo traøn 2. Nguoàn taïo xung nhòp: Coù `ai nguoàn taïo xung nhòp coù theå coù, ñöôïc choïn baèng caùch ghi vaøo C/T (counter/timer) trong TMOD khi khôûi ñoäng timer. Moät nguoàn taïo xung nhòp duøng cho ñònh khoaûng thôøi gian, caùi khaùc cho ñeám söï kieän. Thaïch Boä dao Xung nhòp anh  12 ñoäng trong timer Chaân T0 hoaëc T1 0: (leân) ñònh khoaûng thôøi gian C/T  Ñònh khoaûng thôøi gian (interval timing):
  2. Neáu C/T=0 hoaït ñoäng timer lieân tuïc ñöôïc choïn vaøo timer ñöôïc duøng cho vieäc ñònh khoaûng thôøi gian. Luùc ñoù, timer laáy xung nhòp töø boä dao ñoäng treân chip. Boä chia 12 ñöôïc theâm vaøo ñeå giaûm taàn soá xung nhòp ñeán giaù trò thích hôïp cho caùc öùng duïng. Nhö vaäy, thaïch anh 12 MHz seõ cho toác ñoä xung nhòp timer 1 MHz. Baùo traøn timer xaûy ra sau moät soá (coá ñònh) xung nhòp, phuï thuoäc vaøo giaù trò ban ñaàu ñöôïc naïp vaøo caùc thanh ghi timer TLx/THx.  Ñeám söï kieän (Event Counting): Neáu C/T=1, timer laáy nguoàn xung nhòp töø beân ngoaøi. Trong haàu heát caùc öùng duïng, nguoàn beân ngoaøi naøy cung caáp cho timer moät xung khi xaûy ra moät söï kieän – timer duøng ñeám söï kieän. Soá söï kieän ñöôïc xaùc ñònh baèng phaàn meàm baèng caùch ñoïc caùc thanh ghi TLx/THx vì giaù trò 16 bit trong thanh ghi naøy taêng theâm moät cho moãi söï kieän. Nguoàn xung nhòp ngoaøi coù töø thay ñoåi chöùc naêng cuûa caùc port 3, bit 4 cuûa port 3 (P3.4) duøng laøm ngoõ vaøo taïo xung nhòp beân ngoaøi cho timer 0 vaø ñöôïc goïi laø “T0”. Vaø P3.5 hay “T1” laø ngoõ vaøo taïo xung nhòp cho timer 1. Trong caùc öùng duïng boä ñeám, caùc thanh ghi Timer ñöôïc taêng theâm 1 töông öùng vôùi chuyeån töø 1 xuoáng 0 ôû ngoõ vaøo beân ngoaøi: Tx, ngoõ vaøo beân ngoaøi ñöôïc laáy maãu trong S5P2 cuûa moïi chu kyø maùy. Nhö vaäy, khi ngoõ vaøo cao trong moät chu kyø vaø thaáp trong moät chu kyø keá thì soá ñeám ñöôïc taêng theâm moät. Gía trò môùi ñöôïc xuaát hieän trong caùc thanh ghi trong S3P1 cuûa chu kyø theo sau chu kyø trong ñoù phaùt heän söï chuyeån tieáp. Do ñoù, maát 2 chu kyø maùy (2s) ñeå ghi nhaän söï chuyeån 1 sang 0, taàn soá ngoaøi toái ña laø 500KHz (giaû söû hoaït ñoäng ôû 12 MHz). 3. Baét ñaàu, döøng vaø ñieàu khieån caùc Timer:
  3. Phöông phaùp ñôn giaûn nhaát ñeå baét ñaàu (cho chaïy) vaø döøng caùc timer laø duøng caùc bit ñieàu khieån chaïy: TRx trong TCON. TRx bò xoùa sau khi Reset heä thoáng. Nhö vaäy, caùc timer theo maëc nhieân laø bò caám (bò döøng). TRx ñöôïc ñaët leân 1 baèng phaàn meàm ñeå cho caùc timer chaïy. Xung nhòp timer Caùc thanh ghi timer 0 = leân: timer döøng TRx 1 = xuoáng: timer chaïy Vì TRx ôû trong thanh ghi TCON coù ñòa chæ bit, neân deã daøng cho vieäc ñieàu khieån caùc timer trong chöông trình. Ví duï, cho timer 0 chaïy baèng leänh: SETB TR0 Vaø döøng baèng leänh: CLR TRO Trình bieân dòch seõ thöïc hieän vieäc chuyeån ñoåi kyù hieäu caàn thieát töø “TR0” sang ñòa chæ bit ñuùng. SETB TR0 chính xaùc gioáng nhö SETB 8CH. Moät phöông phaùp khaùc ñeå ñieàu khieån caùc timer laø duøng bit GATE trong TMOD vaø ngoõ vaøo beân ngoaøi INTx. Ñaët GATE =1 cho pheùp timer seõ ñöôïc ñieàu khieån baèng INTx. Vieäc naøy raát hieäu duïng cho vieäc ño ñoä roäng xung nhö sau: Giaû söû INT0 ôû möùc thaáp nhöng caùc xung ôû möùc cao trong khoaûng thôøi gian ño. Khôûi ñoäng timer 0 ôû cheá ñoä 2 (cheá ñoä timer 16 bit), vôùi TL0/TH0=0000H, Gate = 1 vaø TR0 = 1. Khi INT0 ôû möùc cao, timer ñöôïc môû coång vaø ñöôïc caáp xung nhòp 1 MHz (neáu C8031/8051 hoaït ñoäng ôû taàn soá 12 MHz). Khi INT0 xuoáng
  4. thaáp, timer bò ‘ñoùng coång’ vaø thôøi khoaûng cuûa xung tính baèng s laø soá ñeám trong TL0/TH0. (Coù theå laäp trình INT0 ñeå taïo ra moät ngaét khi noù xuoáng thaáp). Hình sau minh hoïa Timer 1 hoaït ñoäng ôû cheá ñoä 1 nhö moät timer 16 bit. Caùc thanh ghi timer TL1/TH1 vaø côø baùo traøn TF1 trong sô ñoà chæ caùc khaû naêng coù theå coù cuûa nguoàn taïo xung nhòp vaø deã cho chaïy, döøng vaø ñieàu khieån timer. Boä dao  12 ñoäng trong TL1 TH1 TF1 T1 0: leân C/T 1: xuoáng 0: leân TR1 1: xuoáng GAT INT1 4. Khôûi ñoäng vaø truy xuaát caùc thanh ghi: Thoâng thöôøng caùc thanh ghi ñöôïc khôûi ñoäng moät laàn ôû ñaàu chöông trình ñeå ñaët cheá ñoä laøm vieäc ñuùng. Sau ñoù, trong thaân chöông trình, caùc timer ñöôïc cho chaïy, döøng, caùc bit côø ñöôïc kieåm tra vaø xoùa, caùc thanh ghi timer ñöôïc ñoïc vaø caäp nhaät v,v… theo ñoøi hoûi cuûa caùc öùng duïng. TMOD laø thanh ghi thöù nhaát ñöôïc khôûi ñoäng vì noù ñaët cheá ñoâï hoaït ñoäng. Ví duï caùc leänh sau khôûi ñoäng timer1 nhö timer 16
  5. bit (cheá ñoä 1) coù xung nhòp töø boä dao ñoäng treân chip cho vieäc ñònh khoaûng thôøi gian: MOV TMOD = 00010000B Neáu caàn soá ñeám ban ñaàu, caùc thanh ghi timer TL1/TH1 cuõng phaûi ñöôïc khôûi ñoäng. Nhôù laïi caùc timer ñeám leân vaø ñaët côø baùo traøn khi coù söï chuyeån tieáp FFFFH sang 0000H. moät khoaûng 100s coù theå ñöôïc ñònh thôøi baèng caùch khôûi ñoäng trò cho TL1/TH1 laøFF9C2 MOV TL1, # 9CH MOV TH1, # OFFH Roài timer ñöôïc cho chaïy baèng caùch ñieàu khieån bit nhö sau: SETB TR1 Côø baùo traøn ñöôïc töï ñoäng ñaït leân sau 100 s. Phaàn meàm coù theå ñôïi trong 100 s baèng caùch duøng leänh reõ nhaùnh coù ñieàu kieän nhaûy ñeán chính noù trong khi côø baùo traøn chöa ñöôïc ñaët leân 1: WAIT: JMB TF1, WAIT Khi timer traøn, caàn döøng timer vaø xoùa côø baùo traøn trong phaàn meàm: CLR TR1 CLR TF1 * Ñoïc timer ñang chaïy: Trong moät soá öùng duïng caàn ñoïc giaù trò trong caùc thanh ghi timer ñang chaïy. Vì phaûi ñoïc 2 thanh ghi timer, “sai pha” neáu byte thaáp traøn vaøo byte cao giöõa hai laàn ñoïc. Giaù trò coù theå ñoïc ñöôïc khoâng ñuùng. Giaûi phaùp laø ñoïc byte cao tröôùc, keá ñoù ñoïc
  6. byte thaáp roài ñoïc byte cao moät laàn nöõa. Neáu byte cao ñaõ thay ñoåi thì laëp laïi caùc hoaït ñoäng ñoïc. Caùc leänh döôùi ñaây ñoïc caùc leänh thanh ghi timer TL1/TH1 vaøo caùc thanh ghi R6/R7: AGAIN: MOV A,TH1 MOV R6, TL1 CJNE R7, A C. HOAÏT ÑOÄNG CUÛA BOÄ FGAÉT (INTERRUPT): I. GIÔÙI THIEÄU: Moät interrupt (ngaét) laø söï xaûy ra moät ñieàu kieän – moät söï kieän, maø noù gaây treo taïm thôøi chöông trình trong ñieàu kieän coù ñöôïc phuïc vuï bôûi moät chöông trình khaùc. Caùc interrupt ñoùng vai troø quan troïng trong vieäc thieát keá vaø caøi ñaët caùc öùng duïng vi ñieàu khieån. Chuùng cho pheùp heä thoáng baát ñoàng boä vôùi moät söï kieän vaø giaûi quyeát moät söï kieän trong khi ñoù moät chöông trình khaùc ñang thöïc thi. Moät heä thoáng ñöôïc ñieàu khieån baèng interrupt cho ta aûo giaùc laø laøm nhieàu vieäc ñoàng thôøi. Dó nhieân laø CPU ñoàng thôøi khoâng theå thöïc thi hôn moät leänh. Nhöng noù coù theå taïm treo vieäc thöïc thi moät chöông trình ñeå thöïc thi moät chöông trình khaùc, roài quay veà chöông trình thöù nhaát. Theo caùch naøy, interrupt gioáng nhö moät chöông trình con, nhöng coù moät khaùc bieät trong heä thoáng ñöôïc ñieàu khieån laø söï ngaét quaõng khoâng xaûy ra nhö keát quaû cuûa moät leänh, maø ñaùp öùng moät söï kieän xaûy ra baát ñoàng boä vôùi chöông trình chính. Ngöôøi ta khoâng bieát luùc naøo vaø ôû ñaâu chöông trình chính bò ngaét quaõng. Chöông trình giaûi quyeát ngaét goïi laø chöông trình phuïc vuï ngaét (ISR: Interrupt Service Routine) hoaëc boä xöû lyù ngaét. ISR thöïc thi ñaùp öùng ngaét vaø thoâng thöôøng thöïc hieän taùc vuï nhaäp
  7. hay xuaát vôùi moät thieát bò. Khi ngaét xaûy ra, chöông trình chính taïm thôøi bò treo vaø reõ nhaùnh ñeán ISR: ISR thi haønh vaø keát thuùc baèng leänh trôû veà ngaét. Chöông trình tieáp tuïc thöïc thi taïi choã maø noù taïm döøng. Thöôøng ngöôøi ta xem chöông trình chính thöïc thi ôû möùc neàn (cô sôû) vaø caùc ISR thöïc thi ngaét (Interrupt Level). Ngöôøi ta duøng thuaät ngöõ Foreground (phía tröôùc) (Base – Level) chæ möùc neàn vaø Background (phía sau) (Interrupt – level) chæ möùc ngaét. Hình aûnh caùc ngaét ñöôïc moâ taû trong hình sau: CHÖÔNG TRÌNH CHÍNH Thöïc thi chöông trình khoâng coù ngaét ISR ISR ISR * ** * ** * ** C/tr chính C/tr chính C/tr chính C/tr chính Thöïc thi chöông trình coù ngaét * : goïi ngaét ** : quay veà töø ngaét II. TOÅ CHÖÙC NGAÉT CUÛA C8031/8051: Thaät söï taát caû caùc nguoàn ngaét ôû C8031/8051: 2 ngaét ngoaøi, 2 töø timer vaø moät ngaét Port noái tieáp. Taát caû caùc ngaét theo maëc nhieân ñeàu bò caám sau khi Reset heä thoáng vaø ñöôïc cho pheùp baèng phaàn meàm. Khi coù 2 hoaëc nhieàu ngaét ñoàng thôøi, 1 ngaét xaûy ra trong khi 1 ngaét khaùc ñang ñöôïc phuïc vuï, coù caû 2 söï tuaàn töï hoûi voøng vaø sô ñoà öu tieân 2 möùc duøng ñeå xaùc ñònh thöïc hieän ngaét. Vieäc hoûi voøng tuaàn töï thì coá ñònh nhöng öu tieân ngaét thì coù theå laäp trình ñöôïc. *. Cho pheùp vaø caám caùc ngaét: (Enabling and Disnabling Interrupt)
  8. Moãi nguoàn Interrupt ñöôïc cho pheùp hoaëc caám töøng ngaét qua moät thanh ghi chöùc naêng ñaëc bieät coù ñòa chæ bit IE (Interrupt Enable) ôû ñòa chæ A8H. Cuõng nhö xaùc ñònh bit cho pheùp rieâng bieät cho moãi nguoàn ngaét, coù moät bit cho pheùp/caám toaøn boä ñöôïc xoùa ñeå caám hoaøn toaøn caùc ngaét ñöôïc xeùt (ñaët leân 1) ñeå cho pheùp taát caû caùc ngaét. Bit Kyù Ñòa chæ Moâ taû (1 = cho pheùp, hieäu bit 0=caám) IE.7 EA AFH Cho pheùp / caám toaøn boä IE.6 _ AEH Khoâng ñöôïc ñònh nghóa IE.5 ET2 ADH Cho pheùp ngaét töø timer 2(8052) IE.4 ES ACH Cho pheùp ngaét Port noái tieáp IE.3 ET1 ABH Cho pheùp ngaét töø timer 1 IE.2 EX1 AAH Cho pheùp ngaét ngoaøi IE.1 ET0 A8H Cho pheùp ngaét töø timer 0 IE.0 EX0 A8H Cho pheùp ngaét ngoaøi 0 Baûng 1.10: Toùm taét thanh ghi IE Hai bit phaûi ñöôïc ñaët leân moät ñeå cho pheùp baát kyø ngaét naøo: bit cho pheùp rieâng vaø bit cho pheùp toaøn boä.Ví duï caùc ngaét töø timer ñöôïc cho pheùp nhö sau: SETB ET1 ; Cho pheùp ngaét töø timer 1. SETB EA ; Ñaët bit cho pheùp toaøn boä. Hoaëc : MOV IE, #10001000B. Maëc duø hai caùch naøy coù cuøng moät hieäu quaû sau khi reset heä thoáng nhöng hieäu quaû seõ khaùc neáu IE ñöôïc ghi giöõa chöông trình. Caùch thöù nhaát khoâng aûnh höôûng tôùi 5 bit trong thanh ghi
  9. IE, traùi laïi caùch thöù hai seõ xoùa caùc bit khaùc. Neân khôûi trò IE theo caùch thöù hai ôû ñaàu chöông trình (nghóa laø sau khi môû maùy hoaëc reset heä thoáng), nhöng cho pheùp vaø caám caùc ngaét ngay trong chöông trình neân duøng caùch thöù nhaát ñeå traùnh aûnh höôûng ñeán caùc bit khaùc trong thanh ghi IE. Ngaét Port noái tieáp coù töø Logic OR cuûa ngaét thu (RI) vaø phaùt (TI). Caùc bit côø taïo caùc ngaét ñöôïc toùm taéc trong baûng sau: Ngaét Côø Thanh ghi SER vaø vò trí bit Beân ngoaøi IE0 TCON.1 0 Beân ngoaøi IE1 TCON.3 1 Timer 0 TF0 TCON.5 Timer 1 TF1 TCON.7 Port noái TI SCON.1 tieáp Port noái RI SCON.0 tieáp
  10. III. Xöû lyù ngaét (Processing Interrupt): Khi ngaét xaûy ra vaø CPU chaáp thuaän, chöông trình chính ngaét quaõng nhöõng hoaït ñoäng sau ñaây xaûy ra: + Leänh hieän haønh hoaøn taát vieäc thöïc thi. + Caát PC vaøo ngaên xeáp. + Traïng thaùi ngaét hieän haønh ñöôïc caát vaøg beân trong. + Caùc ngaét bò chaën ôû möùc ngaét. + Naïp vaøo PC ñòa chæ vector cuûa ISR. + ISR thöïc thi. ISR thöïc thi vaø ñaùp öùng ngaét. ISR hoaøn taát baèng leänh RETI (quay veà töø ngaét). Ñieàu naøy laøm laáy laïi giaù trò cuõ PC töø ngaên xeáp vaø laáp laïi traïng thaùi ngaét cuõ. Thöïc thi chöông trình chính ôû choã maø noù bò döøng. Caùc vector ngaét (Interrupt Vectors): Khi chaáp nhaän ngaét, giaù trò ñöôïc naïp vaøo PC ñöôïc goïi laø vector ngaét. Noù laø ñòa chæ baét ñaàu cuûa ISR cho nguoàn taïo ngaét. Caùc vector ngaét ñöôïc cho baûng sau: Ngaét Côø Ñòa chæ vector Reset heä RST 0000H thoáng Beân ngoaøi 0 IE0 0003H Timer 0 TF 0 000BH Beân ngoaøi 1 IE 1 0013H Timer 1 TF 1 001BH Port noái tieáp T1 hoaëc 0023H R1
  11. Baûng : Caùc vector ngaét Vector Reset heä thoáng (RST ôû ñòa chæ 0000H) ñöôïc ñeå trong baûng naøy vì theo nghóa naøy noù gioáng Interrupt: noù ngaét chöông trình chính vaø naïp giaù trò môùi cho PC. Khi “chæ ñeán moät ngaét”, côø gaây ra ngaét töï ñoäng bò xoùa bôûi phaàn cöùng& Caùc ngoaïi leä laø RI vaø TI vôùi caùc ngaét port noái tieáp vaø TF2, EXF2 vôùi caùc Interrupt Timer. Vì coù hai nguoàn coù theå cho moãi ngaét naøy, khoâng thöïc teá ñeå CPU xoùa côø ngaét. Caùc bit naøy phaûi ñöôïc kieåm tra trong ISR ñeå xaùc ñònh nguoàn ngaét vaø côø taïo ngaét seõ ñöôïc xoùa baèng phaàn meàm. Thoâng thöôøng moät reõ nhaùnh xaûy ra vôùi moät phaûn öùng thích hôïp, phuï thuoäc vaøo nguoàn ngaét. Vì caùc vector ngaét ôû phaàn ñaàu cuûa boä nhôù chöông trình, neân leänh thöù nhaát cuûa chöông trình chính thöôøng laø leänh nhaûy qua chöông trình chính naøy. Ví duï nhö leänh LJMP 0030H.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2