Đề tài Nghiên cứu họ vi điều khiển 8051

Tài liệu Đề tài Nghiên cứu họ vi điều khiển 8051: MỤC LỤC Trang Lời nói đầu 5 TÓM TẮT ĐỀ TÀI 6 PHẦN 1 : CƠ SỞ LÝ THUYẾT CHƯƠNG I : GIỚI THIỆU TỔNG QUAN HỌ VI ĐIỀU KHIỂN PIC 8 I.1. Lịch sử phát triển 8 I.2. Các đặc điểm 8 I.3. Phân loại 9 CHƯƠNG II : KIẾN TRÚC PHẦN CỨNG PIC 16F84A 10 II.1. Giới thiệu PIC16F84A 10 II.2. Sơ đồ bố trí chân 11 II.3. Sơ đồ khối 13 II.4. Cấu tạo bộ dao động 16 II.5. Hoạt động RESET 19 II.6. Tổ chức bộ nhớ 21 Bộ đếm chương trình ( PC ) 36 Ngăn xếp ( STACK) 36 Chế độ địa chỉ 37 II.7.Cấu trúc cổng I/O 40 II.8. Bộ định thời (TMR0) 51 II.9. Watchdog Timer 53 II.10. Ngắt 54 CHƯƠNG III : TẬP LỆNH CỦA PIC16F84A 56 III.1/ Bảng tóm tắt tập lệnh 56 III.2/ Định dạng tổng quát của từ lệnh 57 III.3/ Mô tả chi tiết từng lệnh 58 CHƯƠNG IV : LẬP TRÌNH HỢP NGỮ PIC16F84A VỚI CHƯƠNG TRÌNH BIÊN DỊCH MPASM 77 IV.1/ Giới thiệu chương trình biên dịch MPASM 77 ...

doc138 trang | Chia sẻ: hunglv | Lượt xem: 1136 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Nghiên cứu họ vi điều khiển 8051, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MUÏC LUÏC Trang Lôøi noùi ñaàu 5 TOÙM TAÉT ÑEÀ TAØI 6 PHAÀN 1 : CÔ SÔÛ LYÙ THUYEÁT CHÖÔNG I : GIÔÙI THIEÄU TOÅNG QUAN HOÏ VI ÑIEÀU KHIEÅN PIC 8 I.1. Lòch söû phaùt trieån 8 I.2. Caùc ñaëc ñieåm 8 I.3. Phaân loaïi 9 CHÖÔNG II : KIEÁN TRUÙC PHAÀN CÖÙNG PIC 16F84A 10 II.1. Giôùi thieäu PIC16F84A 10 II.2. Sô ñoà boá trí chaân 11 II.3. Sô ñoà khoái 13 II.4. Caáu taïo boä dao ñoäng 16 II.5. Hoaït ñoäng RESET 19 II.6. Toå chöùc boä nhôù 21 Boä ñeám chöông trình ( PC ) 36 Ngaên xeáp ( STACK) 36 Cheá ñoä ñòa chæ 37 II.7.Caáu truùc coång I/O 40 II.8. Boä ñònh thôøi (TMR0) 51 II.9. Watchdog Timer 53 II.10. Ngaét 54 CHÖÔNG III : TAÄP LEÄNH CUÛA PIC16F84A 56 III.1/ Baûng toùm taét taäp leänh 56 III.2/ Ñònh daïng toång quaùt cuûa töø leänh 57 III.3/ Moâ taû chi tieát töøng leänh 58 CHÖÔNG IV : LAÄP TRÌNH HÔÏP NGÖÕ PIC16F84A VÔÙI CHÖÔNG TRÌNH BIEÂN DÒCH MPASM 77 IV.1/ Giôùi thieäu chöông trình bieân dòch MPASM 77 IV.2/ Caùch vieát moät chöông trình 77 IV.3/ Moät soá ví duï 81 CHÖÔNG V : ÖÙNG DUÏNG PIC 16F84A THIEÁT KEÁ VAØ THI COÂNG MAÏCH GHI AÂM ÑIEÄN THOAÏI 93 V.1. Sô ñoà khoái vaø nguyeân lyù hoaït ñoäng cuûa heä thoáng 93 V.2. Giôùi thieäu caùc IC söû duïng trong maïch 96 PHAÀN 2 : TÍNH TOAÙN VAØ THI COÂNG CHÖÔNG VI : THIEÁT KEÁ CHI TIEÁT 106 VI.1. Maïch nguoàn. 106 VI.2. Maïch caûm bieán chuoâng. 106 VI.3. Maïch ñieàu khieån Relay 108 VI.4. Maïch taïo taûi giaû 109 VI.5. Maïch Hybrid vaø Maïch loïc 112 VI.6. Maïch phaùt hieän Busy Tone 116 VI.7. Maïch thu & phaùt tieáng noùi 119 VI.8. Maïch khueách ñaïi coâng suaát aâm taàn 120 VI.9. Maïch ñieàu khieån trung taâm 121 CHÖÔNG VII : LÖU ÑOÀ GIAÛI THUAÄT 122 KEÁT LUAÄN 139 HÖÔÙNG PHAÙT TRIEÅN ÑEÀ TAØI 140 TAØI LIEÄU THAM KHAÛO 141 Lôøi noùi ñaàu Töø giöõa nhöõng naêm 80 ñeán nay coâng ngheä cheá taïo linh kieän baùn daãn coù nhöõng phaùt trieån ñaäm neùt ñeå hoã trôï cho söï phaùt trieån cuûa coâng ngheä thoâng tin vaø söï töï ñoäng hoaù trong coâng nghieäp. Vôùi söï tích hôïp ngaøy caøng cao( coù theå löu tröõ haøng traêm ngaøn transistor trong moät vi maïch ) coâng suaát tieâu taùn beù hôn, thoâng minh hôn. Nhöõng ñieàu kieän ñoù ñaõ taïo ra saûn phaåm vi ñieàu khieån. Ngaøy nay kyõ thuaät vi ñieàu khieån ñaõ trôû neân quen thuoäc trong caùc ngaønh kyõ thuaät vaø daân duïng. Töø caùc daây chuyeàn saûn xuaát lôùn ñeán caùc thieát bò ñieän gia duïng, ñeàu thaáy söï hieän dieän cuûa vi ñieàu khieån. Caùc boä vi ñieàu khieån coù khaû naêng xöû lyù nhieàu hoaït ñoäng phöùc taïp vôùi toác ñoä nhanh maø chæ caàn moät chip vi maïch nhoû, noù ñaõ thay theá caùc tuû ñieàu khieån lôùn vaø phöùc taïp baèng nhöõng maïch ñieän goïn nheï, thao taùc söû duïng deã daøng Trong chöông trình hoïc thì em ñaõ ñöôïc caùc thaày coâ daïy veà hoï vi ñieàu khieån 8051. Trong cuoán luaän vaên naøy em xin giôùi thieäu moät hoï vi ñieàu khieån khaùc ñoù laø PIC (Programmable Intelligent Computer ) cuûa haõng Microchip vaø öùng duïng PIC 16F84A ñeå thieát keá maïch töï ñoäng ghi aâm vaø traû lôøi ñieän. Maïch naøy söû duïng coâng ngheä soá ñeå löu tröõ tieáng noùi vôùi moät vi maïch ñieàu khieån trung taâm neân khaû naêng giao tieáp roäng, toác ñoä xöû lyù nhanh, maïch nhoû goïn. Do thôøi gian coù haïn vaø khaû naêng coøn haïn cheá neân trong quaù trình thöïc hieän cuoán luaän vaên naøy khoâng traùnh khoûi nhöõng thieáu xoùt kính mong caùc chaày coâ cuøng caùc baïn thoâng caûm vaø chæ baûo theâm. TOÙM TAÉT ÑEÀ TAØI Ñeà taøi khaûo saùt Chip vi ñieàu khieån môùi hoï PIC. Cuï theå laø chip PIC16F84A, vaø öùng duïng vaøo thieát keá, thi coâng maïch ghi aâm ñieän thoaïi. Ñeà taøi naøy ñöôïc chia thaønh 7 chöông vôùi noäi dung chính nhö sau : Chöông 1: Giôùi thieäu toång quan hoï vi ñieàu khieån PIC Chöông 2: Kieán truùc phaàn cöùng cuûa PIC16F84A Chöông 3: Taäp leänh cuûa PIC16F84A Chöông 4: Laäp trình hôïp ngöõ PIC16F84A vôùi chöông trình bieân dòch MPASM Chöông 5: ÖÙng duïng PIC16F84A thieát keá vaø thi coâng maïch ghi aâm ñieän thoaïi Chöông 6 : Thieát keá chi tieát Chöông 7 : Löu ñoà giaûi thuaät PHAÀN 1: CÔ SÔÛ LYÙ THUYEÁT CHÖÔNG I : GIÔÙI THIEÄU TOÅNG QUAN HOÏ VI ÑIEÀU KHIEÅN PIC I.1. Lòch söû phaùt trieån Hoï vi ñieàu khieån PIC laø teân vieát taét cuûa Programmable Intelligent Computer – “Maùy tính thoâng minh khaû trình “ do haõng General Instrument saûn xuaát vaø con vi ñieàu khieån ñaàu tieân laø PIC1650. Con vi ñieàu khieån naøy laø meï ñeû cuûa taát caû caùc vi ñieàu khieån hoï PIC sau naøy. Veà sau hoï vi ñieàu khieån naøy ñöôïc haõng Microchip tieáp tuïc phaùt trieån vaø hieän nay caùc saûn phaåm vi ñieàu khieån PIC ñaõ coù gaàn 100 loaïi saûn phaåm töø hoï 10Fxxx ñeán caùc hoï 12Cxxx, 12Fxxx, 16Cxx, 17Cxx, 16Fxx, 16Fxxx, 16FxxxA, 16LFxxxA, 18Fxxx, 18LFxxx, 18Fxxxx, 18LFxxxx ...... I.2. Caùc ñaëc ñieåm PIC laø hoï vi ñieàu khieån coù raát nhieàu chuûng loaïi, töø caùc doøng saûn phaåm cô baûn thích hôïp vôùi nhöõng öùng duïng nhoû ñeán caùc doøng saûn phaåm phoå thoâng vaø cao caáp, caùc saûn phaåm naøy coù nhieàu chaân xuaát/nhaäp hôn caùc doøng cô baûn vaø noù tích hôïp nhieàu thieát bò ngoaïi vi nhö : boä chuyeån ñoåi tín hieäu töông töï sang soá ( ADC : Analog-To-Digital Converter ), truyeàn noái tieáp vôùi hai chuaån laø MSSP ( Master Synchronous Serial Port ) vaø USART ( Universal Synchronous Asynchronous Receiver Transmitter ), truyeàn song song vôùi PSP ( Parallel Slave Port ). . . Maëc duø coù nhieàu loaïi nhöng chuùng ñeàu coù nhöõng ñaëc tính chung sau : Coù theå giao tieáp vôùi thieát bò ngoaïi vi thoâng qua caùc chaân xuaát/nhaäp Coù theå ñieàu khieån caùc chaân xuaát nhaäp maø khoâng laøm aûnh höôûng tôùi söï hoaït ñoäng cuûa boä vi xöû lyù Söû duïng coâng ngheä CMOS laøm giaûm doøng tieâu thuï, thôøi gian chuyeån maïch nhanh Coù tính oån ñònh cao Boä nhôù chöông trình : duøng ñeå löu tröõ maõ chöông trình, tuyø töøng loaïi FLASH : goàm caùc saûn phaåm xxFxxx OTP : goàm caùc saûn phaåm 14000, 16Cxxx, 16HV540 ROM/ROMless : goàm caùc saûn phaåm 16CRxxx, 18C601, 18C801 Kích thöôùc boä nhôù chöông trình (Bytes): tuyø töøng loaïi maø coù kích thöôùc boä nhôù khaùc nhau töø 0,5K ñeán 256K I.3. Phaân loaïi Döïa vaøo ñoä daøi cuûa töø leänh, hoï vi ñieàu khieån PIC naøy coù theå chia thaønh 3 loaïi sau : Doøng PIC cô baûn ( Base – Line ) goàm caùc PIC 12Cxxx. Caùc PIC thuoäc loaïi naøy coù ñoä daøi leänh laø 12 bit Doøng PIC phoå thoâng ( Mid – Range ) goàm caùc doøng PIC 10F, 12F vaø 16, loaïi naøy coù ñoä daøi leänh laø 14 bit Doøng PIC High – End goàm caùc doøng PIC 18, loaïi naøy coù ñoä daøi leänh laø 16 bit CHÖÔNG II : KIEÁN TRUÙC PHAÀN CÖÙNG PIC16F84A II.1. Giôùi thieäu PIC16F84A PIC16F84A laø moät vi ñieàu khieån 8 bit söû duïng caáu truùc RISC ( Reduced Instruction Set Computer = Maùy tính coù taäp leänh ruùt ngoïn ). Caùc bus döõ lieäu vaø leänh rieâng bieät theo caáu truùc Harvard cho pheùp töø leänh coù ñoä daøi 14 bit trong khi moät töø döõ lieäu coù ñoä daøi 8 bit. Vuøng ngaên xeáp coù ñoä saâu 8 möùc vaø ñoäc laäp vôùi boä nhôù RAM Caùc ñaëc ñieåm + Coù 35 leänh ñôn. + Moãi leänh ñöôïc thöïc hieän trong moät chu kyø maùy ( ngoaïi tröø caùc leänh reõ nhaùnh ñöôïc thöïc hieän trong hai chu kyø maùy ). + Boä nhôù chöông trình : 1024 töø, moãi töø coù ñoä daøi 14 bit. + Boä nhôù döõ lieäu RAM : 68 byte, moãi byte coù ñoä daøi 8 bit. + Boä nhôù döõ lieäu EEPROM : 64 byte, moãi byte coù ñoä daøi 8 bit. + 16 thanh ghi coù chöùc naêng ñaëc bieät. + 13 chaân xuaát/nhaäp ñöôïc chia thaønh 2 port. Port A coù 5 chaân, port B coù 8 chaân. + Coù 4 nguoàn ngaét Ngaét ngoaøi treân chaân RB0/INT. Hoaøn thaønh vieäc ghi döõ lieäu vaøo EEPROM. Ngaét traøn cuûa boä ñònh thôøi TMR0. Port B thay ñoåi traïng thaùi treân caùc chaân RB . Caùc tính naêng + PIC16F84A coù theå giao tieáp vaø ñieàu khieån thieát bò ngoaïi vi thoâng qua caùc chaân xuaát/nhaäp. + Coù theå ñaùp öùng caùc maïch ñoøi hoûi thôøi gian thöïc. + Söû duïng coâng ngheä CMOS neân doøng söû duïng thaáp 20mA. + Coù theå löïa choïn boä dao ñoäng. + Reset Chöùc naêng Reset PIC trong khi nguoàn cung caáp chöa oån ñònh. Khi baät nguoàn thì boä dao ñoäng thaïch anh luùc ñaàu chöa oån ñònh do ñoù ôû thôøi gian ñaàu caàn phaûi Reset PIC cho ñeán khi boä dao ñoäng thaïch anh oån ñònh. Coù hai boä ñònh thôøi laøm treã luùc baät ñieän, moät laø boä ñònh thôøi khôûi ñoäng boä dao ñoäng, hai laø Power-up Timer (PWRT) cung caáp khoaûng treã coá ñònh laø 72 ms chæ khi baät ñieän. Power-on Reset (POR) Power-up Timer (PWRT) Boä ñònh thôøi khôûi ñoäng boä dao ñoäng + Ngaét + Watchdog Timer (WDT) Cheá ñoä Watchdog Timer chæ ñöôïc choïn hoaëc taét thoâng qua caùc bit caáu hình. Chöùc naêng naøy duøng ñeå Reset PIC hay ñaùnh thöùc PIC ( khi ôû cheá ñoä SLEEP) sau moät khoaûng thôøi gian. + Cheá ñoä SLEEP Khi cheá ñoä naøy ñöôïc thöïc hieän noù laøm cho PIC ngöng xöû lyù chöông trình öùng duïng. Cheá ñoä naøy ñöa PIC vaøo traïng thaùi nghæ taïm thôøi vôùi moät doøng tieâu thuï raát thaáp. Coù theå cho PIC hoaït ñoäng trôû laïi baèng 3 caùch : reset taïi chaân MCLR , cho boä Watchdog timer hoaït ñoäng, duøng ngaét ngoaøi. + Söï baûo veä maõ + Cheá ñoä laäp trình noái tieáp ICSP ( In-Cicuit Serial Programming ) II.2. Sô ñoà boá trí chaân PIC16F84A coù taát caû 18 chaân thöôøng ñöôïc tìm thaáy laø loaïi DIP 18 nhöng cuõng coù theå tìm thaáy loaïi SMD, loaïi naøy coù kích thöôùc nhoû hôn DIP. DIP laø töø vieát taét cuûa Dual In Package, SMD laø töø vieát taét cuûa Surface Mount Devices. Hình 1 : Sô ñoà boá trí chaân PIC16F84A YÙ nghóa caùc chaân : Chaân 1: RA2 Chaân thöù hai cuûa port A, laø chaân nhaäp/xuaát. Chaân 2: RA3 Chaân thöù ba cuûa port A, laø chaân nhaäp/xuaát. Chaân 3: RA4/T0CKI Chaân thöù tö cuûa port A, laø chaân nhaäp/xuaát. T0CKI choïn ngoõ vaøo Clock tôùi boä ñònh thôøi TMR0. Chaân 4: MCLR Ngoõ vaøo Reset vi ñieàu khieån, tích cöïc möùc thaáp vaø coøn duøng ñeå laäp trình cho vi ñieàu khieån vôùi ñieän aùp laäp trình laø 13V. Chaân 5: Vss Chaân noái mass. Chaân 6: RB0/INT Chaân thöù 0 cuûa port B, laø chaân xuaát/nhaäp, ngoaøi ra coøn coù chöùc naêng laø chaân ngaét ngoaøi. Chaân 7:RB1 Chaân thöù nhaát cuûa port B, laø chaân nhaäp/xuaát. Chaân 8:RB2 Chaân thöù hai cuûa port B, laø chaân nhaäp/xuaát. Chaân 9:RB3 Chaân thöù ba cuûa port B, laø chaân nhaäp/xuaát. Chaân 10:RB4 Chaân thöù tö cuûa port B, laø chaân nhaäp/xuaát. Chaân 11:RB5 Chaân thöù naêm cuûa port B, laø chaân nhaäp/xuaát. Chaân 12:RB6 Chaân thöù saùu cuûa port B, laø chaân nhaäp/xuaát. Khi laäp trình noù laø ñöôøng ‘clock’. Chaân 13:RB7 Chaân thöù baûy cuûa port B, laø chaân nhaäp/xuaát. Khi laäp trình noù laø ñöôøng döõ lieäu. Chaân 14:VDD Chaân cung caáp nguoàn +5V. Chaân 15:OSC2/CLKOUT Chaân noái tôùi boä dao ñoäng. Chaân 16:OSC1/CLKOUT Chaân noái tôùi boä dao ñoäng. Chaân 17:RA0 Chaân thöù 0 cuûa port A, laø chaân xuaát/nhaäp. Chaân 18:RA1 Chaân thöù nhaát cuûa port A, laø chaân xuaát/nhaäp. II.3. SÔ ÑOÀ KHOÁI Hình 2 : Sô ñoà khoái PIC16F84A Ñôn vi xöû lyù trung taâm ( Central Processing Unit) CPU Ñôn vò xöû lyù trung taâm ( CPU ) laø boä naõo cuûa vi ñieàu khieån, noù coù nhieäm vuï phaùt hieän vaø tìm naïp thöù töï leänh caàn ñeå thöïc hieän, maõ hoaù leänh ñoù vaø cuoái cuøng noù cho leänh naøy thöïc hieän Hình 2.1 : Sô ñoà khoái CPU CPU keát noái vôùi taát caû caùc boä phaän cuûa vi ñieàu khieån taïo thaønh moät khoái thoáng nhaát. Chöùc naêng quan troïng nhaát cuûa CPU laø ñoïc vaø giaûi maõ caùc leänh chöông trình. Khi ta vieát moät chöông trình, chöông trình naøy bao goàm caùc doøng leänh ví duï MOVLW 0x20 . Tuy nhieân, vi ñieàu khieån seõ khoâng hieåu caùc kyù töï naøy maø noù chæ laøm vieäc vôùi caùc traïng thaùi ‘0’ vaø ‘1’, vì vaäy ta caàn moät chöông trình bieân dòch caùc doøng leänh naøy thaønh daõy ‘0’ vaø ‘1’ nhö laø chöông trình bieân dòch hôïp ngöõ. Nhö vaäy khi naïp vaøo boä nhôù chöông trình noù seõ ñöôïc CPU giaûi maõ thaønh caùc leänh. Khi caùc leänh naøy chæ ñònh söï chuyeån tieáp döõ lieäu töø boä nhôù naøy ñeán boä nhôù khaùc, töø boä nhôù leân caùc port hoaëc moät vaøi söï tính toaùn khaùc, CPU phaûi ñöôïc keát noái vôùi taát caû caùc boä phaän cuûa vi ñieàu khieån, söï keát noái naøy ñöôïc thöïc hieän qua bus döõ lieäu vaø bus ñòa chæ Ñôn vò soá hoïc – logic ( Arithmetic Logic Unit) ALU ALU thöïc hieän caùc thao taùc nhö coäng, tröø, di chuyeån ( traùi hay phaûi trong moät thanh ghi ) vaø caùc pheùp logic cô baûn. PIC16F84A bao goàm moät ALU 8 bit vaø thanh ghi W 8 bit Hình 2.2 : Sô ñoà khoái ALU ÔÛ caùc leänh coù hai toaùn haïn, thoâng thöôøng 1 toaùn haïn laø thanh ghi W vaø toaùn haïn kia coù theå laø moät haèng soá hoaëc laø moät trong caùc thanh ghi GPR hay SFR. GPR- General Purposes Registers laø caùc thanh ghi muïc ñích chung vaø SFR-Special Function Registers laø caùc thanh ghi coù chöùc naêng ñaëc bieät ÔÛ caùc leänh coù moät toaùn haïn, toaùn haïn naøy coù theå laø thanh ghi W hoaëc moät thanh ghi khaùc. Khi moät pheùp coäng trong hoaït ñoäng soá hoïc vaø logic, ALU ñieàu khieån caùc bit traïng thaùi ( caùc bit naøy trong thanh ghi traïng thaùi ‘STATUS’). Söï thöïc hieän cuûa moät vaøi leänh seõ aûnh höôûng ñeán caùc bit traïng thaùi. Söï aûnh höôûng naøy phuï thuoäc vaøo keát quaû cuûa leänh ñoù, ALU coù theå aûnh höôûng ñeán giaù trò cuûa caùc bit C (Carry), DC (Digit Carry), Z (Zero) trong thanh ghi traïng thaùi (STATUS). Thanh ghi chæ leänh ( Instruction Register) Thanh ghi naøy chöùa maõ leänh ñoïc töø boä nhôù chöông trình. Khi thöïc hieän vieäc ghi maõ leänh töø boä nhôù chöông trình tôùi thanh ghi chæ leänh thì ñòa chæ cuûa maõ leänh naøy ñöôïc ñoïc töø boä ñeám chöông trình. Giaûi maõ vaø ñieàu khieån leänh (Instruction Decode & Control) Khoái naøy coù nhieäm vuï giaûi maõ noäi dung cuûa thanh ghi chæ leänh thaønh leänh vaø noù thi haønh theo noäi dung cuûa leänh ñoù. Thanh ghi W ( W reg) Ñaây laø thanh ghi laøm vieäc, noù duøng ñeå löu tröõ taïm thôøi noäi dung cuûa ALU. Thanh ghi W caàn thieát cho caùc hoaït ñoäng tính toaùn. Noäi dung cuûa thanh ghi naøy coù theå ñöôïc chuyeån ñeán caùc thanh ghi khaùc vaø ngöôïc laïi, noù cuõng ñöôïc söû duïng ñeå ñieàu khieån coång I/O II.4. Caáu taïo boä dao ñoäng Maïch dao ñoäng duøng ñeå cung caáp cho vi ñieàu khieån moät dao ñoäng xung clock . Noù caàn thieát cho vi ñieàu khieån coù theå thöïc hieän moät chöông trình hay moät leänh cuûa chöông trình Caùc loaïi dao ñoäng PIC16F84A coù theå laøm vieäc vôùi 4 caáu hình dao ñoäng khaùc nhau. Ngöôøi laäp trình coù theå choïn caáu hình dao ñoäng khi laäp trình PIC hoaëc choïn baèng 2 bit caáu hình FOSC1 vaø FOSC0 LP tinh theå nguoàn thaáp XT tinh theå/coäng höôûng HS tinh theå toác ñoä cao/coäng höôûng RC ñieän trôû/ tuï ñieän Boä dao ñoäng tinh theå / hoäp coäng höôûng baèng goám : Trong kieåu XT, LP hoaëc HS moät tinh theå thaïch anh goàm coù hai chaân thöôøng ñöôïc giöõ trong voû boïc baèng kim loaïi ñöôïc noái tôùi caùc chaân OSC1/CLKIN vaø OSC2/CLKOUT theo kieåu song song. Hai tuï loaïi ceramic coù trò soá baèng nhau moät chaân ñöôïc noái mass chaân coøn laïi noái vôùi tinh theå ñöôïc trình baøy nhö hình sau Hình 3 : Sô ñoà keát noái boä dao ñoäng tinh theå Boä dao ñoäng tinh theå vaø tuï ñieän coù theå goäp chung trong moät voû boïc baèng goám vôùi 3 chaân, ñöôïc goïi laø hoäp coäng höôûng. Chaân ôû giöõa ñöôïc noái mass, hai chaân coøn laïi ñöôïc noái ñeán chaân OSC1 vaø OSC2 cuûa vi ñieàu khieån. Khi thieát keá moät thieát bò, theo nguyeân taéc laø phaûi ñaët boä taïo dao ñoäng gaàn con vi ñieàu khieån ñeå traùnh nhieãu treân ñöôøng maïch khi con vi maïch ñang nhaän clock. Hình 4 : Keát noái boä coäng höôûng tôùi vi ñieàu khieån Ngoaøi ra trong caùc kieåu XT, LP hoaëc HS, thieát bò coù theå söû duïng moät nguoàn clock ngoaøi ñeå ñieàu khieån chaân OSC1/CLKIN. Hình 5 : Keát noái vôùi nguoàn xung clock beân ngoaøi Baûng löïa choïn tuï cho boä dao ñoäng tinh theå Kieåu Taàn soá OSC1/C1 OSC2/C2 LP 32 kHz 200 kHZ 68-100 pF 15-33 pF 68-100 pF 15-33 pF XT 100 kHz 2 MHz 4 MHz 100-150 pF 15-33 pF 15-33 pF 100-150 pF 15-33 pF 15-33 pF HS 4 MHz 20 MHz 15-33 pF 15-33 pF 15-33 pF 15-33 pF Khi ñieän dung cao hôn seõ laøm taêng theâm söï vöõng vaøng cuûa boä dao ñoäng nhöng thôøi gian khôûi ñoäng cuõng taêng. Boä taïo dao ñoäng RC Boä dao ñoäng RC thöôøng ñöôïc duøng trong nhöõng öùng duïng khoâng caàn thôøi gian chính xaùc. Taàn soá coäng höôûng cuûa boä dao ñoäng RC ñöôïc quyeát ñònh bôûi möùc ñieän aùp nguoàn, ñieän trôû R, tuï ñieän C vaø nhieät ñoä hoaït ñoäng Hình 6 : Caáu taïo boä dao ñoäng RC Hình 6 bieåu dieãn caùch noái boä dao ñoäng RC vôùi PIC16F84A. Vôùi giaù trò cuûa ñieän trôû R döôùi 2,2K boä dao ñoäng coù theå baét ñaàu khoâng oån ñònh, hoaëc noù coù theå ngöng dao ñoäng. Vôùi giaù trò raát cao cuûa ñieän trôû R ( ví duï 1M) boä dao ñoäng raát deã bò hoûng bôûi taïp nhieãu vaø ñoä aåm. Ñieän trôû R neân choïn giaù trò naèm trong khoaûng 3K ñeán 100K. Maëc duø boä dao ñoäng laøm vieäc khoâng coù moät tuï ñieän beân ngoaøi, nhöng ñeå traùnh taïp nhieãu vaø cho maïch oån ñònh neân maéc moät tuï 20pF hoaëc lôùn hôn. Moät clock cuûa boä dao ñoäng ñöôïc phaân bieät bôûi 4 chu kyø. Boä dao ñoäng clock phaân bieät bôûi 4 chu kyø cuõng coù theå thu ñöôïc ôû chaân OSC2/CLKOUT, vaø cuõng coù theå duøng ñeå thöû hay ñoàng boä caùc maïch logic Caùc chu kyø maùy Moät chu kyø maùy cuûa PIC16F84A goàm coù 4 traïng thaùi ñöôïc ñaùnh soá töø Q1 ñeán Q4. moãi traïng thaùi chieám 1 chu kyø cuûa boä dao ñoäng. Nhö vaäy moät chu kyø maùy chieám 4 chu kyø cuûa boä dao ñoäng hay 1s neáu taàn soá cuûa boä dao ñoäng laø 4MHz Sau khi caáp nguoàn, boä dao ñoäng baét ñaàu dao ñoäng. Ôû chu kyø ñaàu tieân söï dao ñoäng khoâng oån ñònh nhöng sau ñoù vaøi chu kyø noù baét ñaàu hoaït ñoäng bình thöôøng Hình 8 : Tín hieäu cuûa boä dao ñoäng sau khi caáp nguoàn Ñeå ngaên chaën boä dao ñoäng hoaït ñoäng khoâng chính xaùc khi caáp nguoàn coù theå aûnh höôûng ñeán söï thöïc hieän chöông trình cuûa vi ñieàu khieån, neân reset vi ñieàu khieån trong suoát thôøi gian laøm oån ñònh boä dao ñoäng II.5. Hoaït ñoäng RESET PIC16F84A coù caùc nguoàn RESET sau : Reset trong thôøi gian môû nguoàn Power – On Reset ( POR) Reset trong thôøi gian thao taùc bình thöôøng baèng caùch taùc ñoäng möùc ‘0’ tôùi chaân cuûa vi ñieàu khieån Reset ôû chaân trong thôøi gian thöïc hieän cheá ñoä SLEEP Reset khi Watchdog Timer (WDT) traøn ôû cheá ñoä bình thöôøng. Reset khi WDT traøn ôû cheá ñoä SLEEP Chaân thöôøng ñöôïc noái qua moät ñieän trôû tôùi VDD, ñieän trôû naøy coù giaù trò trong khoaûng 5 ñeán 10k. khi mang moät möùc ‘0’ tôùi chaân naøy thì PIC seõ ñöôïc Reset. Ñieàu kieän Reset cho boä ñeám chöông trình ( PC ) vaø thanh ghi STATUS Ñieàu kieän PC Thanh ghi STATUS POR 000h 0001 1xxx Reset ôû thôøi gian thao taùc bình thöôøng 000h 000u uuuu Reset khi ñang ôû cheá ñoä SLEEP 000h 0001 0uuu Reset baèng WDT ( ôû thôøi gian hoaït ñoäng bình thöôøng ) 000h 0000 1uuu WDT Wake-up PC + 1 uuu0 0uuu Ngaét ngoaøi ôû thôøi gian thöïc hieän cheá ñoä SLEEP PC + 1 uuu1 0uuu Chuù thích : u : khoâng thay ñoåi x : khoâng bieát Khi duøng ngaét ngoaøi ôû thôøi gian thöïc hieän cheá ñoä SLEEP neáu bit GIE ñöôïc set thì PC ñöôïc naïp vôùi ñòa chæ 004h. Ñieàu kieän Reset caùc thanh ghi Thanh ghi Ñòa chæ Power-on Reset MCLR Reset trong : - Hoaït ñoäng bình thöôøng - Cheá ñoä SLEEP WDT Reset trong thôøi gian thao taùc bình thöôøng Wake-up töø SLEEP : - Thoâng qua ngaét ngoaøi - Thoâng qua traøn WDT W --- xxxx xxxx uuuu uuuu uuuu uuuu INDF 00h ---- ---- ---- ---- ---- ---- TMR0 01h xxxx xxxx uuuu uuuu uuuu uuuu PCL 02h 0000 0000 0000 0000 PC + 1(2) STATUS 03h 0001 1xxx 000q quuu uuuq quuu FSR 04h xxxx xxxx uuuu uuuu uuuu uuuu PORTA 05h ---x xxxx ---u uuuu ---u uuuu PORTB 06h xxxx xxxx uuuu uuuu uuuu uuuu EEDATA 08h xxxx xxxx uuuu uuuu uuuu uuuu EEADR 09h xxxx xxxx uuuu uuuu uuuu uuuu PCLATH 0Ah ---0 0000 ---0 0000 ---u uuuu INTCON 0Bh 0000 000x 0000 000u uuuu uuuu(1) INDF 80h ---- ---- ---- ---- ---- ---- OPTION_REG 81h 1111 1111 1111 1111 uuuu uuuu PCL 82h 0000 0000 0000 0000 PC + 1(2) STATUS 83h 0001 1xxx 000q quuu uuuq quuu FSR 84h xxxx xxxx uuuu uuuu uuuu uuuu TRISA 85h ---1 1111 ---1 1111 ---u uuuu TRISB 86h 1111 1111 1111 1111 uuuu uuuu EECON1 88h ---0 x000 ---0 q000 ---0 uuuu EECON2 89h ---- ---- ---- ---- ---- ---- PCLATH 8Ah ---0 0000 ---0 0000 ---u uuuu INTCON 8Bh 0000 000u 0000 000u uuuu uuuu(1) Ghi chuù : u = khoâng thay ñoåi x = khoâng bieát - = bit khoâng duøng ñoïc nhö ‘0’ q = giaù trò ñöôïc quyeát ñònh treân ñieàu kieän Chuù yù : (1) moät hay nhieàu bit trong thanh ghi INTCON seõ bò aûnh höôûng ( do thöïc hieän Wake-up) (2) khi WAKE-up ñöôïc thöïc hieän baèng ngaét ngoaøi vaø bit GIE ñöôïc set thì PC ñöôïc naïp vôùi vecto ngaét 004h II.6. Toå chöùc boä nhôù PIC16F84A coù hai khoái nhôù rieâng bieät, ñoù laø boä nhôù döõ lieäu vaø boä nhôù chöông trình , boä nhôù EEPROM vôùi caùc thanh ghi GPR vaø SFR trong boä nhôù RAM naèm trong khoái nhôù döõ lieäu, boä nhôù FLASH naèm trong khoái nhôù chöông trình Hình 9 : Toå chöùc boä nhôù cuûa vi ñieàu khieån PIC16F84A II.6.1. Khoái nhôù chöông trình Hình 10 : Toå chöùc boä nhôù chöông trình Boä nhôù chöông trình duøng coâng ngheä FLASH, ñaëc ñieåm cuûa boä nhôù FLASH laø döõ lieäu trong boä nhôù seõ khoâng bò maát ñi khi taét nguoàn vaø noù cho pheùp ghi laïi nhieàu laàn nhöng soá laàn ghi laïi ñöôïc giôùi haïn laø 1000 laàn. Boä nhôù FLASH ñöôïc duøng ñeå löu chöông trình, khoâng gian söû duïng boä nhôù laø 1024 töø, 1 töø coù chieàu daøi laø 14 bit (1024 Word 14 bit). Ñòa chæ cuûa boä nhôù FLASH töø 0000h ñeán 03FFh. Ñòa chæ 0000h : vectô Reset ( Reset Vector ). Khi coù moät ñieàu kieän Reset xaûy ra do môû nguoàn, baèng WDT (Watchdog timer) hay moät vaøi nguoàn Reset khaùc, chöông trình seõ baét ñaàu töø ñòa chæ naøy. Ñòa chæ 0004h : vectô ngaét (Interrupt Vector). Khi coù moät ñieàu kieän ngaét xaûy ra do thanh ghi TMRO traøn khi cho pheùp ngaét traøn cuûa boä ñònh thôøi hoaëc do moät nguoàn ngaét ngoaøi, chöông trình seõ thöïc hieän leänh taïi ñòa chæ naøy. Nhö vaäy khoâng gian söû duïng chöông trình seõ baét ñaàu töø ñòa chæ 0005h ñeán 03FFh. Ñòa chæ 0400h ñeán 1FFFh : khoâng gian boä nhôù naøy khoâng ñöôïc söû duïng. Ñòa chæ 2007h : ñòa chæ naøy chöùa nhöõng bit caáu hình. Nhöõng bit caáu hình Nhöõng bit caáu hình coù theå ñöôïc laäp trình (ñoïc nhö ‘0’) hoaëc khoâng ñöôïc laäp trình (ñoïc nhö ‘1’) ñeå choïn löïa caùc caáu hình thieát bò nhö caùc bit cho pheùp Power-up Timer vaø WDT cuõng nhö caùc bit choïn boä dao ñoäng. Nhöõng bit naøy ñöôïc aùnh xaï ñeán oâ nhôù 2007h. Ñòa chæ 2007h ôû beân ngoaøi phaïm vi söû duïng boä nhôù chöông trình vaø noù thuoäc veà tröôøng hôïp ñaëc bieät / caáu hình cuûa khoâng gian boä nhôù (2000h – 3FFFh). Khoâng gian naøy chæ coù theå truy caäp trong thôøi gian laäp trình CP WDTE FOSC1 FOSC0 Bit13 4 3 bit 0 Bit 13 – 4 : CP : Code Protection 1 = khoâng ñöôïc maõ baûo veä 0 = taát caû boä nhôù chöông trình ñöôïc maõ baûo veä Bit 3 : PWRTE Power-up Timer Enable bit 1 = khoâng cho pheùp Power-up Timer 0 = cho pheùp Power-up Timer Bit 2 : WDTE : Watchdog Timer Enable bit 1 = cho pheùp chöùc naêng Watchdog Timer 0 = khoâng cho pheùp chöùc naêng Watchdog Timer Bit 1-0 : FOSC1 – FOSC0 Oscillator Selection bits 11 = dao ñoäng RC 10 = dao ñoäng HS 01 = dao ñoäng XT 00 = dao ñoäng LP II.6.2. Khoái nhôù döõ lieäu Khoái nhôù döõ lieäu bao goàm boä nhôù döõ lieäu vaø boä nhôù EEPROM II.6.2.a. Boä nhôù döõ lieäu Hình 11 : Toå chöùc boä nhôù döõ lieäu Boä nhôù döõ lieäu goàm caùc thanh ghi file RAM (Random Access Memory-boä nhôù truy xuaát ngaãu nhieân), döõ lieäu trong caùc thanh ghi naøy seõ bò maát khi taét nguoàn Boä nhôù döõ lieäu coù taát caû laø 256 byte (00h ñeán FFh) ñöôïc chia thaønh 2 bank, moãi bank coù 128 byte. Bank 0 ôû ñòa chæ 00h ñeán 7Fh trong ñoù caùc byte coù ñòa chæ töø 50h ñeán 7Fh vaø byte ôû ñòa chæ 07h khoâng ñöôïc söû duïng vaø noù ñoïc nhö ‘0’. Bank 1 ôû ñòa chæ 80h ñeán FFh trong ñoù caùc byte coù ñòa chæ töø D0h ñeán FFh vaø byte ôû ñòa chæ 87h khoâng ñöôïc söû duïng vaø noù ñoïc nhö ‘0’. Khi muoán truy xuaát ñeán moät thanh ghi trong boä nhôù döõ lieäu thì tröôùc tieân phaûi choïn bank chöùa thanh ghi ñoù, vieäc choïn bank naøy ñöôïc qui ñònh trong thanh ghi STATUS ôû ñòa chæ 03h vaø 83h. Caùc thanh ghi trong boä nhôù döõ lieäu coù theå ñöôïc truy xuaát tröïc tieáp baèng ñòa chæ tuyeät ñoái cuûa moãi thanh ghi hoaëc giaùn tieáp qua thanh ghi FSR (File Select Register). Ñòa chæ giaùn tieáp söû duïng giaù trò hieän thôøi cuûa bit RP0 trong thanh ghi STATUS ñeå truy xuaát vaøo trong vuøng bank cuûa boä nhôù döõ lieäu Boä nhôù döõ lieäu ñöôïc phaân thaønh 2 phaàn : Phaàn 1 goàm 12 byte ñaàu tieân cuûa moãi bank ñöôïc goïi laø SFR ( Special Funstion Registers – caùc thanh ghi chöùc naêng ñaëc bieät ) vaø ñöôïc duøng ñeå ghi laïi traïng thaùi hoaït ñoäng cuûa PIC nhö laø ñieàu khieån choïn cheá ñoä coång ngoõ vaøo hay ngoõ ra... Coù 16 thanh ghi khaùc nhau trong SFR (11 thanh ghi trong bank 0 vaø 5 thanh ghi trong bank 1 ). Noäi dung cuûa moãi thanh ghi ñöôïc quaûn lyù bôûi PIC. Maëc duø coù toång coäng laø 24 thanh ghi nhöng moät vaøi thanh ghi naèm trong caû 2 bank. Khi vieát chöông trình caàn quan taâm ñeán vieäc choïn bank nhôù khi truy xuaát ñeán caùc thanh ghi naøy Phaàn 2 goàm 68 byte töø ñòa chæ 0Ch ñeán 4Fh ñöôïc goïi laø GPR ( General Purpose Registers – Caùc thanh ghi muïc ñích chung ) duøng ñeå löu tröõ keát quaû vaø ñieàu kieän trong khi chöông trình ñang chaïy. Noäi dung cuûa GPR trong 2 bank laø nhö nhau, vì theá khi truy xuaát ñeán caùc thanh ghi naøy khoâng caàn thöïc hieän vieäc choïn bank nhôù, toång dung löôïng cuûa RAM laø 68 byte. Noäi dung cuûa GPR bò maát khi taét nguoàn vaø khoâng coù giôùi haïn soá laàn ghi döõ lieäu Noäi dung caùc thanh ghi coù chöùc naêng ñaëc bieät SFR Ñòa chæ Teân Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Value on Power-on RESET Bank 0 00h INDF Söû duïng noäi dung cuûa SFR tôùi ñòa chæ boä nhôù döõ lieäu ---- ---- 01h TMR0 8-bit Real-Time Clock/Counter xxxx xxxx 02h PCL Ñaët 8 bit thaáp cuûa boä ñeám chöông trình (PC) 03h STATUS IRP RP1 RP0 Z DC C 0001 1xxx 04h FSR Ñòa chæ boä nhôù döõ lieäu giaùn tieáp pointer 0 xxxx xxxx 05h PORTA --- --- --- RA4/ T0CKI RA3 RA2 RA1 RA0 ---x xxxx 06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT xxxx xxxx 07h --- Ñoïc nhö ‘0’ --- 08h EEDATA Thanh ghi döõ lieäu EEPROM xxxx xxxx 09h EEADR Thanh ghi ñòa chæ EEPROM xxxx xxxx 0Ah PCLATH --- --- --- Boä ñeäm ghi cho 5 bit treân PC ---0 0000 0Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 0000 0000 Bank 1 80h INDF Söû duïng noäi dung cuûa FSR laøm ñòa chæ boä nhôù döõ lieäu ---- ---- 81h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 82h PCL Ñaët 8 bit thaáp cuûa boä ñeám chöông trình (PC) 0000 0000 83h STATUS IRP RP1 RP0 Z DC C 0001 1xxx 84h FSR Ñòa chæ boä nhôù döõ lieäu giaùn tieáp pointer 0 xxxx xxxx 85h TRISA --- --- --- Thanh ghi giaùn tieáp döõ lieäu PORTB ---1 1111 86h TRISB Thanh ghi giaùn tieáp döõ lieäu PORTB 1111 1111 87h --- Ñoïc nhö ‘0’ --- 88h EECON1 --- --- --- EEIF WRERR WREN WR RD ---0 x000 89h EECON2 Thanh ghi 2 ñieàu khieån EEPROM ---- ---- 0Ah PCLATH --- --- --- Boä ñeäm ghi cho 5 bit treân PC ---0 0000 0Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x Thanh Ghi Traïng Thaùi ( STATUS ) R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x IRP RP1 RP0 Z DC C bit 7 bit 0 Ghi chuù : R : bit coù theå ñoïc W : bit coù theå ghi -n : giaù trò khi Reset nguoàn (-x : chöa bieát ) Caáu truùc thanh ghi traïng thaùi ôû ñòa chæ 03h vaø 83h Bit 0 C ( Carry ) 1 = laáy ra bit quan troïng nhaát töø keát quaû 0 = khoâng laáy ra bit quan troïng nhaát cuûa keát quaû Bit 1 DC ( Digit Carry ) 1 = laáy bit thaáp thöù tö cuûa keát quaû 0 = khoâng laáy bit thaáp thöù tö cuûa keát quaû Bit 2 Z ( Zero bit ) 1 = keát quaû cuûa pheùp tính soá hoïc hoaëc logic laø zero 0 = keát quaû cuûa pheùp tính soá hoïc hoaëc logic khaùc zero Bit 3 :bit taét nguoàn 1 = sau khi baät nguoàn hoaëc duøng leänh CLRWDT 0 = khi duøng leänh SLEEP Bit 4 : Time-out bit 1 = sau khi môû nguoàn, khi thöïc hieän leänh CLRWDT hoaëc leänh SLEEP 0 = khi WDT traøn Bit 6:5 RP1:RP0 ( Register Bank Select bit ) bit choïn bank thanh ghi 01 = Bank 1 ( 80h - FFh) 00 = Bank 0 ( 00h – 7Fh) Bit 7 IRP Ñoái vôùi con PIC16F84A thì bit naøy khoâng duøng vaø noù ñöôïc duy trì ôû möùc ‘0’. Ñoái vôùi caùc doøng vi ñieàu khieån PIC cao hôn ( loaïi coù 4 bank thanh ghi ) thì noù duøng ñeå choïn bank thanh ghi 1 = bank 2 vaø 3 0 = bank 0 vaø 1 Thanh ghi traïng thaùi chöùa caùc traïng thaùi soá hoïc cuûa ALU ( C, DC, Z), traïng thaùi Reset ( , ) vaø nhöõng bit choïn bank nhôù (IRP, RP1, RP0) Thanh ghi tuøy choïn ( OPTION_REG) R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 INTEDG T0CS T0SE PSA PS2 PS1 PS0 bit 7 bit 0 Ghi chuù : R : bit coù theå ñoïc W : bit coù theå ghi -n : giaù trò khi Reset nguoàn (-x : chöa bieát ) Caáu truùc thanh ghi tuyø choïn ôû ñòa chæ 81h Thanh ghi tuyø choïn laø thanh ghi coù theå ñoïc vaø ghi ñöôïc noù bao goàm nhöõng bit ñieàu khieån khaùc nhau nhö laø ñònh caáu hình Prescaler tôùi TMR0/WDT, ngaét ngoaøi INT, TMR0, cheá ñoä ‘ Pull-up’ treân PORTB Bit 0:2 PS0, PS1, PS2 : bit choïn toác ñoä Prescaler 3 bit naøy duøng ñeå ñònh toác ñoä Prescaler (xem baûng döôùi). Vieäc ñònh toác ñoä Prescaler coù theå aûnh höôûng ñeán söï laøm vieäc cuûa vi ñieàu khieån, ñieàu naøy seõ ñöôïc ñeà caäp roõ hôn ôû phaàn TMR0 Giaù trò bit Möùc TMR0 Möùc WDT 000 001 010 011 100 101 110 111 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128 Bit 3 PSA ( Prescaler Assignment bit ) Bit chæ ñònh Prescaler tôùi TMR0 hay Watchdog 1 = Prescaler ñöôïc chæ ñònh tôùi Watchdog 0 = Prescaler ñöôïc chæ ñònh tôùi moâñun TMR0 Bit 4 T0SE ( TMR0 Source Edge Select bit) : bit choïn caïnh nguoàn TMR0 Neáu choïn moâñun TMR0 ôû cheá ñoä ñeám baèng nguoàn xung ôû chaân RA4/T0CKI thì bit naøy xaùc ñònh caïnh leân hay caïnh xuoáng cuûa tín hieäu 1 = kích caïnh xuoáng 0 = kích caïnh leân Bit 5 T0CS ( TMR0 Clock Source Select bit ) Bit löïa choïn nguoàn xung TMR0 Bit naøy cho pheùp boä ñeám TMR0 taêng baèng nguoàn dao ñoäng beân trong ôû moãi 1/4 dao ñoäng xung clock hay nguoàn xung beân ngoaøi ôû chaân RA4/T0CKI 1 = töø nguoàn xung beân ngoaøi 0 = 1/4 dao ñoäng xung clock beân trong Bit 6 INTEDG ( Interrupt Edge Select bit ) : bit choïn caïnh ngaét Neáu ngaét ngoaøi treân chaân RB0/INT ñöôïc cho pheùp thì bit naøy seõ xaùc ñònh caïnh ngaét taïi RB0/INT 1 = ngaét baèng caïnh leân 0 = ngaét baèng caïnh xuoáng Bit 7 RBPU ( PORTB Pull-up Enable bit) Bit naøy duøng ñeå môû hoaëc taét caùc chaân cuûa PORTB coù ñieän trôû beân trong keùo leân nguoàn VDD 1 = taét 0 = môû Thanh ghi INTCON R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x GIE EEIE T0IE INTE RBIE T0IF INTF RBIF bit 7 bit 0 Ghi chuù : R : bit coù theå ñoïc W : bit coù theå ghi -n : giaù trò khi Reset nguoàn (-x : chöa bieát ) Caáu truùc thanh ghi INTCON ôû ñòa chæ 0Bh vaø 8Bh Bit 0 RBIF ( RB Port Change Interrupt Flag bit ) Bit côø ngaét thay ñoåi port RB 1 = ít nhaát 1 trong caùc chaân RB4 : RB7 thay ñoåi traïng thaùi 0 = khoâng coù chaân naøo trong caùc chaân RB4 : RB7 thay ñoåi traïng thaùi Bit 1 INTF ( INT Enternal Interrupt Flag bit ) Bit côø ngaét ngoaøi ôû chaân RB0/INT 1 = xaûy ra ngaét ngoaøi 0 = khoâng xaûy ra ngaét ngoaøi Bit 2 T0IF ( TMR0 Overflow Interrupt Flag bit ) bit côø ngaét traøn TMR0 1 = boä ñeám thay ñoåi traïng thaùi töø FFh tôùi 00h 0 = traøn khoâng xaûy ra Bit 3 RBIE ( RB Port Change Interrupt Enable bit ) Cho pheùp ngaét xaûy ra khi thay ñoåi traïng thaùi treân caùc chaân 4,5,6 vaø 7 cuûa Port B 1 = cho pheùp ngaét khi thay ñoåi traïng thaùi 0 = khoâng cho pheùp ngaét khi thay ñoåi traïng thaùi Bit 4 INTE ( INT External Interrupt Enable bit ) Bit cho pheùp ngaét ngoaøi taïi chaân RB0/INT 1 = cho pheùp ngaét ngoaøi 0 = khoâng cho pheùp ngaét ngoaøi Bit 5 T0IE ( TMR0 Overflow Interrupt Enable bit ) Bit cho pheùp ngaét khi boä ñeám TMR0 traøn 1 = cho pheùp ngaét 0 = khoâng cho pheùp ngaét Neáu bit T0IE vaø T0IF ñöôïc set ñoàng thôøi thì ngaét xaûy ra Bit 6 EEIE ( EEPROM Write Complete Interrupt Enable bit) : Bit naøy cho pheùp ngaét xaûy ra khi keát thuùc vieäc ghi thoâng thöôøng tôùi EEPROM 1 = cho pheùp ngaét 0 = khoâng cho pheùp ngaét Neáu bit EEIE vaø EEIF ( bit EEIF naèm trong thanh ghi EECON1) ñöôïc set thì ngaét xaûy ra Bit 7 GIE ( Global Interrupt Enable bit ) bit cho pheùp ngaét toång theå 1 = cho pheùp taát caû caùc ngaét 0 = ñoùng taát caû caùc ngaét II.6.2.b. Boä nhôù EEPROM Boä nhôù döõ lieäu EEPROM coù theå ñoïc vaø ghi trong ñieàu kieän hoaït ñoäng bình thöôøng (VDD phaûi ñuû). Boä nhôù naøy khoâng coù baûn ñoà tröïc tieáp trong khoâng gian file thanh ghi. Thay vaøo ñoù noù ñöôïc ñònh vò giaùn tieáp qua caùc thanh ghi coù chöùc naêng ñaëc bieät. Coù 4 thanh ghi trong SFR ñöôïc söû duïng ñeå ñoïc vaø ghi boä nhôù EEPROM. Nhöõng thanh ghi naøy laø: EECON1 EECON2 (khoâng phaûi laø moät thanh ghi veà maët vaät lyù ñöôïc thöïc hieän) EEDATA EEADR EEDATA chöùa 8 bit döõ lieäu cho ñoïc/ghi, vaø EEADR chöùa ñòa chæ cuûa vò trí EEPROM duy trì ñòa chæ cuûa vò trí EEPROM ñöôïc truy caäp. Vi maïch PIC16F84A coù 64 byte cuûa döõ lieäu EEPROM vôùi phaïm vi ñòa chæ töø 00h ñeán 3Fh. Boä nhôù döõ lieäu EEPROM cho pheùp ñoïc vaø ghi töøng byte. Khi ghi moät byte thì döõ lieäu tröôùc ñoù taïi vò trí ghi seõ ñöôïc xoaù töï ñoäng tröôùc khi döõ lieäu môùi ñöôïc ghi vaøo. Boä nhôù döõ lieäu EEPROM coù soá laàn ghi xoùa lôùn . Thôøi gian ghi ñöôïc ñieàu khieån bôûi timer treân vi maïch. Thôøi gian ghi seõ thay ñoåi theo ñieän aùp vaø nhieät ñoä cuõng nhö töø maïch ñeán maïch. Khi vi maïch ñöôïc baûo veä, thì CPU coù theå tieáp tuïc ñoïc/ghi döõ lieäu boä nhôù EEPROM. Tuy nhieân boä laäp trình cho vi maïch khoâng theå truy xuaát vaøo boä nhôù naøy. U-0 U-0 U-0 R/W-0 R/W-x R/W-0 R/S-0 R/S-0 --- --- --- EEIF WRERR WREN WR RD bit 7 bit 0 Caáu truùc thanh ghi EECON1 (ñòa chæ 88h) bit 7-5 : Duy trì ôû möùc ‘0’ bit 4 : EEIF: EEPROM ghi hoaït ñoäng cuûa bit côø ngaét 1= ghi söï hoaït ñoäng ñöôïc hoaøn thaønh (phaûi ñöôïc clear trong phaàn meàm) 0= ghi söï hoaït ñoäng khoâng ñöôïc hoaøn thaønh hoaëc khoâng baét ñaàu bit 3 : WRERR: bit côø hieäu cuûa EEPROM bò loãi 1= ñoïc söï hoaït ñoäng ñuôïc keát thuùc sôùm 0= ñoïc söï hoaït ñoäng hoaøn thaønh bit 2 : WREN: bit maø EEPROM cho pheùp ghi 1= cho pheùp ghi chu trình 0= khoâng pheùp ghi tôùi EEPROM bit 1 : WR: bit ñieàu khieån ñoïc 1= chu trình ghi bò caám, khi hoaøn thaønh moät laàn ñoïc thì bit ñoù ñöôïc clear bôûi phaàn cöùng. Bit WR coù theå chæ ñöôïc set (khoâng clear) trong phaàn meàm. 0= hoaøn thaønh chu trình ghi tôùi EEPROM bit 0 : RD: bit ñieàu khieån ñoïc 1= caám EEPROM ñoïc RD ñöôïc clear trong phaàn cöùng. Bit RD coù theå chæ ñöôïc set (khoâng clear) trong phaàn meàm. 0=khoâng caám EEPROM ñoïc. Ñoïc boä nhôù döõ lieäu EEPROM Ñeå ñoïc 1 vò trí cuûa boä nhôù döõ lieäu ngöôøi laäp trình phaûi ghi ñòa chæ leân thanh ghi EEADR vaø sau ñoù taïo bit ñieàu khieån RD (EECON1 ). Döõ lieäu ñuôïc chuyeån vaøo thanh ghi EEDATA trong caùc chu kyø keá tieáp. Do ñoù döõ lieäu coù theå ñöôïc ñoïc trong nhöõng chu kyø tieáp theo. EEDATA seõ giöõ giaù trò döõ lieäu cho ñeán laàn ñoïc khaùc hoaëc laàn ghi döõ lieäu. Ví duï : Ñoïc döõ lieäu EEPROM BCF STATUS, RP0 ; Bank 0 MOVLW CONFIG_ADDR ; MOVWF EEADR ; Address to read BSF STATUS, RP0 ; Bank 1 BSF EECON1, RD ; EE Read BCF STATUS, RP0 ; Bank 0 MOVF EEDATA, W ; W=EEDATA Ghi tôùi boä nhôù döõ lieäu EEPROM Ñeå ghi moät vò trí döõ lieäu EEPROM ngöôøi laäp trình tröôùc heát phaûi ghi ñòa chæ ñeán thanh ghi EEADR vaø döõ lieäu ñeán thanh ghi EEDATA. Sau ñoù ngöôøi söû duïng phaûi theo moät söï noái tieáp ñaëc bieät ñeå baét ñaàu vieát cho moãi byte. Ví duï : ghi döõ lieäu vaøo EEPROM BSF STATUS, RP0 ;Bank 1 BCF INTCON, GIE ;Disable INTs BSF EECON1, WREN ;Enable Write MOVLW 55h ; MOVWF EECON2 ;Write 55h MOVLW AAh ; MOVWF EECON2 ;Write AAh BSF EECON1, WR ;Set WR bit begin write BSF INTCON, GIE ;Enable INTs Ghi seõ khoâng khôûi ñaàu neáu quaù trình treân chöa ñöôïc ñi theo chính xaùc (ghi 55h ñeán EECON2, ghi AAh ñeán EECON2, luùc ñoù set bit WR) cho moãi byte. Ngaét seõ khoâng theå taùc ñoäng trong khi thöïc hieän ñoaïn maõ treân. Ñoàng thôøi bit WREN trong EECON1 phaûi ñöôïc taïo ra ñeå cho pheùp ghi. Cô cheá naøy nhaèm ngaên ngöøa söï ghi döõ lieäu EEPROM thình lình bôûi söï thöïc hieän khoâng ñuùng maõ (i.e., maát chöông trình). Ngöôøilaäp trình caàn phaûi giöõ bit WREN troáng ôû taát caû thôøi gian, tröø khi naøo ñieàu chænh EEPROM. Bit WREN khoâng ñöôïc xoùa bôûi phaàn cöùng. Sau khi quaù trình ghi baét ñaàu, xoùa bit WREN seõ khoâng aûnh höôûng ñeán chu trình ghi naøy. Bit WR seõ khoâng ñöôïc thieát laäp tröø khi bit WREN ñöôïc thieát laäp. Luùc hoaøn thaønh chu trình vieát bit WR ñöôïc xoaù baèng phaàn cöùng vaø bit EEIF ñöôïc thieát laäp. Ngöôøi laäp trình coù theå cho pheùp moãi ngaét naøy hoaëc kieåm tra bit naøy. EEIF phaûi ñöôïc xoaù bôûi phaàn meàm. Kieåm tra quaù trình ghi: Phuï thuoäc vaøo öùng duïng, thöïc haønh laäp trình toát coù theå ñoïc chính taû giaù trò ñoù ñöôïc vieát cho döõ lieäu EEPROM caàn phaûi ñöôïc xaùc minh tôùi giaù trò mong muoán seõ ñöôïc vieát. Caùi naøy phaûi ñöôïc söû duïng trong nhöõng öùng duïng ôû nôi maø 1 bit EEPROM seõ ñöôïc nhaán maïnh gaàn giôùi haïn thieát minh. Noùi chung vieát EEPROM thaát baïi seõ laø moät bit maø ñöôïc vieát nhö laø ‘0’, nhöng ñoïc luøi nhö ‘1’ Ví duï : BCF STATUS, RP0 ; choïn Bank 0 : ; Any code : ; can go here MOVF EEDATA, W ; Must be in bank 0 BSF STATUS, RP0 ; Bank 1 READ BSF EECON1, RD ; YES, read the ; value written BCF STATUS, RP0 ; Bank 0 ; ; Is the value written ; (in W reg) and ; read (in EEDATA) ; the same? ; SUBWF EEDATA, W ; BTFSS STATUS, Z ; IS difference 0? GOTO WRITE_ERR ; NO, Write error Caùc thanh ghi / Caùc bit keát hôïp vôùi döõ lieäu EEPROM: Ñòa chæ Teân bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Giaù trò khi reset nguoàn Giaù trò cuûa caùc nguoàn reset khaùc 08h EEDATA Thanh ghi döõ lieäu EEPROM xxxx xxxx uuuu uuuu 09h EEADR Thanh ghi ñòa chæ EEPROM xxxx xxxx uuuu uuuu 88h EECON1 --- --- --- EEIF WRERR WREN WR RD ---0 x000 ---0 q000 89h EECON2 Thanh ghi 2 ñieàu khieån EEPROM ---- ---- ---- ---- Ghi chuù: x = khoâng bieát. u = khoâng thay ñoåi. - = khoâng duøng, ñoïc nhö ‘0’. q = tuyø thuoäc vaøo giaù trò treân traïng thaùi --- khoâng ñöôïc söû duïng bôûi döõ lieäu EEPROM Boä ñeám chöông trình (Program Counter) Boä ñeám chöông trình (PC) chöùa ñòa chæ cuûa leänh tieáp theo maø chöông trình seõ thöïc hieän. PC daøi 13 bit. 8 bit thaáp ñöôïc goïi laø thanh ghi PCL, thanh ghi naøy coù theå ñoïc vaø ghi ñöôïc. 5 bit cao ñöôïc goïi laø thanh ghi PCLATH, thanh ghi naøy khoâng theå ñoïc hoaëc ghi tröïc tieáp. PC seõ taêng moät giaù trò moãi laàn moät leänh ñöôïc thöïc hieän vaø vò trí cuûa leänh tieáp theo ñöôïc theå hieän trong PC. Nhöng khi thöïc hieän moät leänh yeâu caàu nhaûy thì boä ñeám naøy ñöôïc ghi laïi ñòa chæ nôi maø chöông trình nhaûy ñeán Ngaên xeáp (Stack) Ngaên xeáp duøng ñeå löu tröõ ñòa chæ ñeå trôû veà chöông trình khi chöông trình thöïc hieän leänh nhaûy ñeán chöông trình khaùc nhö khi thöïc hieän leänh CALL hoaëc khi coù moät ñieàu kieän ngaét xaûy ra. Ñòa chæ löu treân ngaên xeáp seõ ñöôïc laáy ra khi gaëp leänh RETURN, RETLW hay RETFIE Ví duï : neáu moät chöông trình xöû lyù moät vieäc ñöôïc thöïc hieän nhieàu laàn thì thöôøng söû duïng moät chöông trình con ñeå thöïc hieän rieâng taùc vuï ñoù. Leänh CALL ñöôïc duøng ñeå nhaûy ñeán chöông trình con vaø ñeå keát thuùc chöông trình con thì caàn thöïc hieän leänh RETURN. Khi chöông trình gaëp leänh CALL, ñòa chæ cuûa leänh sau leänh CALL ñöôïc löu ôû ñænh ngaên xeáp, hoaït ñoäng naøy goïi laø PUSH. Leänh RETURN ñöôïc thöïc hieän ñeå baùo keát thuùc moät chöông trình con vaø ñòa chæ ôû ñænh ngaên xeáp ñöôïc ñaët vaøo PC vaø chöông trình tieáp tuïc thöïc hieän taïi ñòa chæ naøy, hoaït ñoäng naøy goïi laø POP Ngaên xeáp goàm coù 8 thanh ghi, moãi thanh ghi daøi 13 bit. Boä nhôù cuûa ngaên xeáp khoâng naèm trong boä nhôù chöông trình hay boä nhôù döõ lieäu vaø caùc thanh ghi trong ngaên xeáp khoâng theå ñoïc hoaëc ghi Ngaên xeáp coù chieàu saâu 8 möùc (8 thanh ghi), ñieàu naøy coù nghóa laø ta coù theå thöïc hieän tuaàn töï 8 chöông trình con (bao goàm caû ngaét) lieân tieáp Caùch hoaït ñoäng cuûa ngaên xeáp ñöôïc theå hieän nhö giaûi thuaät sau : Hình 12 : Caùch löu ñòa chæ leänh vaøo ngaên xeáp Khi chöông trình ñang chaïy neáu baét gaëp leänh CALL hay ñieàu kieän ngaét xaûy ra thì ñòa chæ cuûa leänh sau noù seõ ñöôïc löu vaøo ñænh cuûa ngaên xeáp vaø caùc ñòa chæ tröôùc ñoù trong ngaên xeáp seõ giaûm xuoáng 1 möùc trong ngaên xeáp. Khi laáy ñòa chæ töø ngaên xeáp ra seõ laáy töø ñænh cuûa ngaên xeáp vaø caùc ñòa chæ phía döôùi trong ngaên xeáp seõ ñöôïc ñaåy leân 1 möùc. ÔÛ hình 12 khi chöông trình chính thöïc hieän ñeán leänh CALL SUB1 thì ñòa chæ cuûa leänh sau noù laø X1 ñöôïc löu vaøo ñænh cuûa ngaên xeáp. ÔÛ chöông trình con SUB1, khi gaëp leänh CALL SUB2 thì ñòa chæ cuûa leänh sau noù laø X2 ñöôïc löu vaøo ñænh cuûa ngaên xeáp vaø vò trí cuûa X1 bò giaûm xuoáng 1 möùc. Cöù tieáp tuïc nhö vaäy, ôû chöông trình con SUB7 khi gaëp leänh CALL SUB8 thì ñòa chæ cuûa leänh sau noù laø X8 ñöôïc löu vaøo ñænh cuûa ngaên xeáp. Nhö vaäy luùc naøy ngaên xeáp ñaõ ñaày, neáu trong chöông trình con SUB8 coù leänh CALL thì ñòa chæ cuûa leänh sau noù ví duï laø X9 seõ ñöôïc löu vaøo ñænh ngaên xeáp vaø ñòa chæ X1 seõ bò maát ñi. Nhö vaäy luùc naøy PC seõ göûi ñeán chöông trình chính ñòa chæ khoâng ñuùng. Cheá ñoä ñòa chæ Ñòa chæ vaät lyù boä nhôù RAM coù theå ñöôïc truy xuaát tröïc tieáp hay giaùn tieáp Ñònh ñòa chæ tröïc tieáp Ñònh ñòa chæ tröïc tieáp ñöôïc thöïc hieän qua 9 bit ñòa chæ. Ñòa chæ naøy thu ñöôïc baèng caùch noái 7 bit ñòa chæ tröïc tieáp cuûa moät leänh vôùi hai bit RP0, RP1 ( bit 5 vaø 6 cuûa thanh ghi STATUS ) ñöôïc bieåu dieãn nhö hình 13. Ví duï cuûa ñònh ñòa chæ tröïc tieáp laø vieäc truy xuaát tôùi caùc thanh ghi SFR BSF STATUS, RP0 ;choïn bank 1 MOVLW 0xFF ;w=0xFF MOVWF TRISA ;ñòa chæ cuûa thanh ghi ;TRISA ñöôïc laáy töø leänh ;MOVWF Hình 13 : Ñònh ñòa chæ tröïc tieáp Ñònh ñòa chæ giaùn tieáp Ñònh ñòa chæ giaùn tieáp khoâng gioáng vôùi ñònh ñòa chæ tröïc tieáp laø khoâng laáy ñòa chæ töø leänh maø laáy ñòa chæ töø bit IRP ( bit 7 cuûa thanh ghi STATUS ) vaø thanh ghi FSR ( thanh ghi FSR laø moät con troû noù chöùa ñòa chæ cuûa caùc thanh ghi ). Ñòa chæ INDF xaùc ñònh caùc thanh ghi maø ñòa chæ cuûa chuùng naèm trong thanh ghi FSR Ví duï : Giaû söû moät thanh ghi muïc ñích chung (GPR) ôû ñòa chæ 0Fh chöùa giaù trò laø 20, baèng vieäc ghi giaù trò 0Fh vaøo thanh ghi FSR seõ coù ñöôïc moät thanh ghi baùo ôû ñòa chæ 0Fh vaø khi ñoïc töø thanh ghi INDF seõ cho moät giaù trò laø 20. Ñieàu naøy coù nghóa laø ta khoâng coù truy suaát tröïc tieáp giaù trò cuûa thanh ghi ôû ñòa chæ 0Fh maø truy suaát giaùn tieáp qua thanh ghi FSR vaø INDF. Hình 14 : Ñònh ñòa chæ giaùn tieáp Nhö vaäy ñònh ñòa chæ giaùn tieáp khoâng thuaän lôïi hôn ñònh ñòa chæ tröïc tieáp nhöng noù raát thuaän tieän trong vaøi tröôøng hôïp ví duï nhö khi thao taùc treân moät daûi caùc thanh ghi GPR, trong tröôøng hôïp naøy chæ caàn ghi vaøo thanh ghi FSR ñòa chæ ñaàu tieân cuûa daûi vaø luùc naøy döõ lieäu coù theå ñöôïc truy xuaát baèng caùch taêng thanh ghi FSR Ví duï : ñoaïn chöông trình sau duøng xoùa RAM ôû ñòa chæ 0Fh ñeán 1Fh MOVLW 0Fh MOVWF FSR LOOP CLRF INDF INCF FSR BTFSS FSR, 5 GOTO LOOP CONTINUE . . Ñoïc giaùn tieáp döõ lieäu thanh ghi INDF khi noäi dung cuûa thanh ghi FSR laø 0 seõ cho giaù trò 00h. Vieäc ghi giaùn tieáp leân thanh ghi INDF khoâng hoaït ñoäng II.7. Caáu truùc coång I/O Coång I/O ñöôïc duøng ñeå PIC giao tieáp vôùi caùc thieát bò, vi maïch beân ngoaøi. PIC 16F84A coù 13 chaân I/O, ñöôïc chia thaønh 2 port goïi laø Port A vaø Port B. Port A goàm 5 chaân töông öùng vôùi thanh ghi PORTA, port B goàm 8 chaân töông öùng vôùi thanh ghi PORTB. Moãi thanh ghi goàm 8 bit, moãi bit töông öùng vôùi moät chaân. Thanh ghi PORTA coù 5 bit ñöôïc söû duïng (bit 0 ñeán bit 4 ) vaø 3bit khoâng söû duïng (bit 5, bit 6, bit 7). Thanh ghi PORTB coù 8 bit ñöôïc söû duïng taát caû. Vieäc choïn cheá ñoä ngoõ vaøo/ra cuûa moãi chaân thoâng qua thanh ghi TRISA cho port A vaø thanh ghi TRISB cho port B Ñòa chæ Thanh ghi Bit 7 Bit6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Giaù trò reset nguoàn Giaù trò ôû caùc reset khaùc 05H PORTA — — — RA4/ T0CKI RA3 RA2 RA1 RA0 ---x xxxx ---u uuuu 85H TRISA — — — TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 ---1 1111 ---1 111 06H PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/ INT xxxxxxxx uuuuuuuu 86H TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 11111111 11111111 Ghi chuù : — : bit khoâng söû duïng x : giaù trò khoâng xaùc ñònh ñöôïc u :giaù trò khoâng thay ñoåi Neáu set bit n (bit n = “1” : n = 0 ñeán 7) trong thanh ghi TRISx (x laø A hoaëc B) thì chaân töông öùng vôùi bit n trong thanh ghi PORTx ñöôïc choïn ôû cheá ñoä ngoõ vaøo, ngöôïc laïi neáu clear bit n (bit n = “0”) trong thanh ghi TRISx thì chaân töông öùng vôùi bit n trong thanh ghi PORTx ñöôïc choïn ôû cheá ñoä ngoõ ra. Ñeå deã nhôù ngöoøi vieát coù theå xem “0” laø O - Output vaø “1”laø I – Input. Ví duï : Neáu muoán thieát laäp chaân RA0 ôû cheá ñoä ngoõ vaøo, RA1 ôû cheá ñoä ngoõ ra cuûa thanh ghi port A thì ngöoøi laäp trình chæ caàn set bit TRISA0 vaø clear bit TRISA1 cuûa thanh ghi TRISA. Veà chöông trình khôûi taïo, truy xuaát caùc port seõ ñöôïc ñeà caäp chi tieát ôû phaàn laäp trình PIC. Ngoaøi ra port A vaø port B coøn coù caùc chöùc naêng khaùc treân caùc chaân ñaëc bieät. ÔÛ port A, chaân RA4/T0CKI coù theå söû duïng laø ngoõ vaøo xung clock cuûa moâñun TMR0 . ÔÛ port B, chaân RB0 coù chöùc naêng taïo ngaét ngoaøi, caùc chaân RB4 ñeán RB7 coù chöùc naêng nhaän bieát söï thay ñoåi tín hieäu ngoõ vaøo ñeå taïo ra ngaét. Caùc chöùc naêng naøy caàn phaûi ñöôïc thieát laäp (xem caùch thieát laäp vaø hoaït ñoäng ôû phaàn moâñun TIMER0 vaø Ngaét). II.7.1/ PORT A II.7.1.a. Caáu truùc chaân RA0 – RA3 Hình 15 : Sô ñoà maïch chaân RA0 – RA3 Maïch ngoõ ra döõ lieäu goàm coù thanh ghi choát döõ lieäu OUT ( duøng Flip – Flop loaïi D kích caïnh xuoáng ) vaø maïch ñieàu khieån ñaàu ra duøng coâng ngheä CMOS (Complementary-Metal Oxide Semiconductor) Maïch ngoõ vaøo goàm thanh ghi choát döõ lieäu IN ( duøng Flip – Flop loaïi D ) vaø caùc coång ñeäm Ngoaøi ra coøn coù thanh ghi choát TRIS ( duøng Flip – Flop loaïi D ) duøng choát döõ lieäu thanh ghi TRISA Hoaït ñoäng cuûa maïch ñieàu khieån ngoõ ra Hình 16 : Hoaït ñoäng cuûa P-FET vaø N-FET Ngoõ ra duøng CMOS laø maïch phoái hôïp giöõa MOSFET keânh N ( N-FET ) vaø MOSFET keânh P ( P-FET ). Ôû loaïi P-FET, khi cöïc G laø möùc L (möùc “0”) noù trôû thaønh ñieàu kieän ON vaø khi möùc H (möùc “1”) noù trôû thaønh ñieàu kieän OFF. Ñoái vôùi loaïi N-FET thì khi cöïc G laø möùc L thì noù trôû thaønh ñieàu kieän OFF vaø khi möùc H noù trôû thaønh ñieàu kieän ON Döõ lieäu trong thanh ghi PORTA ñöôïc choát bôûi thanh ghi choát döõ lieäu OUT. Cheá ñoä cuûa moãi chaân ñöôïc choïn bôûi thanh ghi TRISA. Giaù trò ñaët trong thanh ghi TRISA ñöôïc ñöa leân bus döõ lieäu vaø ñöôïc choát bôûi thanh ghi choát TRIS. Ngoõ ra ñaûo cuûa thanh ghi choát döõ lieäu OUT vaø ngoõ ra Q cuûa thanh ghi choát TRIS laø ngoõ vaøo maïch coång OR duøng ñeå ñieàu khieån P-FET. Ngoõ ra ñaûo cuûa thanh ghi choát döõ lieäu OUT vaø ngoõ ra cuûa thanh ghi choát TRIS laø ngoõ vaøo maïch coång AND duøng ñeå ñieàu khieån N-FET Hoaït ñoäng cuûa maïch ôû cheá ñoä ngoõ ra Hình 17 : Hoaït ñoäng cuûa maïch ñieàu khieän ngoõ ra ôû cheá ñoä ngoõ ra Ñeå thieát laäp cheá ñoä ngoõ ra cho bit töông öùng vôùi chaân caàn thieát laäp trong thanh ghi TRISA ôû möùc “0” . Nhö vaäy ngoõ ra Q cuûa thanh ghi choát TRIS laø möùc L vaø ngoõ ra ñaûo laø möùc H. Luùc naøy ngoõ ra cuûa chaân ñöôïc thieát laäp laø möùc H hay möùc L seõ phuï thuoäc vaøo ngoõ ra ñaûo cuûa thanh ghi choát döõ lieäu OUT . Khi ngoõ ra ñaûo cuûa thanh ghi choát döõ lieäu OUT laø möùc H thì ngoõ ra coång OR laø möùc H vaø ngoõ ra coång AND laø möùc H, ñieàu naøy daãn ñeán P-FET ôû ñieàu kieän OFF vaø N-FET ôû ñieàu kieän ON töùc laø ngoõ ra chaân I/O coù möùc L . Khi ngoõ ra ñaûo cuûa thanh ghi choát döõ lieäu OUT laø möùc L thì ngoõ ra coång OR laø möùc L vaø ngoõ ra coång AND laø möùc L , ñieàu naøy daãn ñeán P-FET ôû ñieàu kieän ON vaø N-FET ôû ñieàu kieän OFF töùc laø ngoõ ra chaân I/O coù möùc H Söï chuyeån giao cuûa ñaàu vaøo döõ lieäu tôùi ngoõ ra thanh ghi choát döõ lieäu OUT, söï thieát laäp döõ lieäu tôùi thanh ghi choát TRIS vaø döõ lieäu töø chaân I/O tôùi thanh ghi choát döõ lieäu IN ñöôïc laøm thoâng qua BUS döõ lieäu. Bus döõ lieäu coù 8 ñöôøng vaø söï chuyeån giao döõ lieäu vôùi caùc chaân laø song song. Bôûi vì bus döõ lieäu ñöôïc duøng phoå bieán, söï chuyeån giao thoâng tin ñöôïc ñieàu khieån bôûi xung tín hieäu tôùi moãi thanh ghi Hình 18 : Xung tín hieäu ñieàu khieån choát döõ lieäu ngoõ ra Khi muoán xuaát ra noäi dung cuûa thanh ghi PORTA, ñaàu tieân döõ lieäu cuûa thanh ghi PORTA ñöôïc ñaët tôùi bus döõ lieäu, tieáp ñeán tín hieäu ñieàu khieån WR PORT cuûa thanh ghi choát döõ lieäu OUT thay ñoåi töø möùc H xuoáng möùc L( kích caïnh xuoáng ) vaø döõ lieäu treân bus ñöôïc ghi tôùi thanh ghi choát döõ lieäu OUT. Sau ñoù döõ lieäu ñöôïc choát bôûi thanh ghi choát döõ lieäu OUT vaø noù seõ khoâng thay ñoåi cho tôùi khi coù moät caïnh xuoáng tieáp theo cuûa tín hieäu ñieàu khieån WR PORT Töông töï cho thanh ghi choát TRIS, ñaàu tieân noäi dung cuûa thanh ghi TRISA ñöôïc leân bus döõ lieäu, sau ñoù tín hieäu ñieàu khieån WR TRIS cuûa thanh ghi choát TRIS coù caïnh xuoáng, döõ lieäu seõ ñöôïc ghi vaø choát taïi ngoõ ra cuûa thanh ghi choát TRIS. Moät coång ñaûo ñöôïc duøng ñeå ñoïc noäi dung cuûa thanh ghi choát TRIS vaø ñöa leân bus döõ lieäu khi tín hieäu RD TRIS coù möùc “1” Hoaït ñoäng cuûa maïch ôû cheá ñoä ngoõ vaøo Hình 19 : Hoaït ñoäng cuûa maïch ñieàu khieån ngoõ ra ôû cheá ñoä ngoõ vaøo Ngoõ ra Q cuûa thanh ghi choát TRIS laø möùc H do ñoù ngoõ ra coång OR luoân laø möùc H vì theá P-FET luoân ôû ñieàu kieän OFF, töông töï ngoõ ra ñaûo cuûa thanh ghi choát TRIS laø möùc L do ñoù ngoõ ra cuûa coång AND luoân laø möùc L vì theá N-FET luoân ôû ñieàu kieän OFF . Nhö vaäy trong tröôøng hôïp naøy P-FET vaø N-FET luoân ôû ñieàu kieän OFF. Chaân I/O luùc naøy taùch rôøi vôùi maïch ñieàu khieån ngoõ ra vaø noù chæ nhaän tín hieäu töø beân ngoaøi ñöa vaøo Maïch ngoõ vaøo luoân ñöôïc noái vôùi chaân I/O, vì theá ngay caû khi chaân I/O naøy thieát laäp ôû cheá ñoä ngoõ ra thì maïch naøy cuõng laøm vieäc. Tín hieäu ñaàu vaøo naøy ñöôïc ñöa tôùi ngoõ vaøo thanh ghi choát döõ lieäu IN qua coång ñeäm TTL Hình 20 : Maïch ngoõ vaøo döõ lieäu vaø giaûn ñoà thôøi gian Moät coång Gate ôû giöõa thanh ghi choát döõ lieäu IN vaø bus döõ lieäu, coång naøy ñöôïc môû khi tín hieäu RD PORT thay ñoåi töø möùc “0” leân möùc “1” ñoàng thôøi tín hieäu naøy taïo caïnh xuoáng tôùi chaân EN cuûa thanh ghi choát döõ lieäu IN . Traïng thaùi cuûa chaân I/O ñöôïc ghi tôùi thanh ghi choát döõ lieäu IN vaø noù ñöôïc ñaët leân bus döõ lieäu thoâng qua coång Gate. Ôû ñaây thanh ghi choát döõ lieäu IN coù nhieäm vuï laø khoâng laøm aûnh höôûng ñeán döõ lieäu treân bus khi maø döõ lieäu treân chaân I/O thay ñoåi ôû cheá ñoä ngoõ ra. Ôû giaûn ñoà thôøi gian hình 20, luùc ñaàu ngoõ vaøo chaân I/O (A) laø möùc “1”, B ôû möùc “0” thì C möùc “1” thanh ghi choát döõ lieäu IN khoâng hoaït ñoäng neân D möùc “0”, vì B möùc “0” neân coång Gate khoâng môû neân E möùc “0”. Taïi thôøi ñieåm B thay ñoåi töø möùc “0” leân möùc “1” thì C noùi thay ñoåi töø möùc “1” xuoáng möùc “0” taïo canh xuoáng taïi chaân EN laøm cho thanh ghi choát döõ lieäu IN hoaït ñoäng vaø D = A = “1”, do B möùc “1” neân coång Gate môû vaø E = D = “1”. Veà sau khi A thay ñoåi traïng thaùi töø möùc “1” xuoáng möùc “0” ñieàu naøy seõ khoâng aûnh höôûng ñeán caùc traïng thaùi khaùc. Khi B töø möùc “1” trôû veà möùc “0” thì C trôû laïi möùc “1” vaø D seõ khoâng thay ñoåi vaãn laø möùc “1”, luùc naøy coång Gate bò ñoùng neân E ôû möùc “0”. Nhö vaäy taïi thôøi ñieåm B thay ñoåi töø möùc “0” leân möùc “1” thì E = A vaø thieát bò seõ phaùt hieän traïng thaùi naøy trong khoaûng xung B II.7.1.b. Caáu truùc chaân RA4 Hình 21 : Sô ñoà maïch chaân RA4 Trong port A chaân RA4 coù chöùc naêng ñaëc bieät, söï khaùc nhau vôùi chaân khaùc laø FET ñieàu khieån ngoõ ra chæ duøng N-FET vaø coù theâm boä ñeäm ngoõ vaøo Schmitt trigger Chaân naøy coù theå duøng cho ngoõ vaøo xung clock cuûa moâñun TMR0 ôû khoái ngoõ vaøo. Bôûi vì noù söû duïng boä ñeäm ngoõ vaøo loaïi Schmitt, noù coù theå nhaän bieát möùc H hay möùc L khi caïnh leân (hay xuoáng) cuûa tín hieäu beân ngoaøi khoâng xoùa Bôûi vì chaân naøy khoâng coù P-FET ôû maïch ñieàu khieån ngoõ ra, neân chaân naøy trôû thaønh loaïi cöïc maùng hôû ôû cheá ñoä ngoõ ra vì vaäy caàn moät ñieän trôû beân ngoaøi noái chaân naøy leân Vdd ñeå ngoõ ra laø möùc H II.7.2. PORTB II.7.2.a. Caáu truùc chaân RB0 - RB3 Hình 22 : Sô ñoà maïch chaân RB0 – RB3 Caáu taïo maïch ngoõ ra cuûa port B khaùc vôùi port A, noù khoâng söû duïng FET cho maïch ngoõ ra vaø noù thay ñoåi cheá ñoä thoâng qua caùc coång ñieàu khieån. Ñaëc ñieåm cuûa port B laø noù ñöôïc trang bò chöùc naêng “pull-up” chæ hoaït ñoäng ôû cheá ñoä ngoõ vaøo, chöùc naêng “pull-up” naøy khi ñöôïc môû seõ ñöa chaân I/O leân Vdd . Vì vaäy khi cheá ñoä ngoõ vaøo ñöôïc thieát laäp thì caùc chaân I/O naøy ôû möùc cao, thoâng thöôøng ñieän trôû ñöôïc duøng ñeå keùo leân Vdd nhöng ôû ñaây duøng FET. Neáu FET ôû ñieàu kieän ON thì chöùc naêng naøy ñöôïc môû. Khi chöùc naêng naøy aûnh höôûng ñeán söï hoaït ñoäng cuûa noù coù theå khoâng söû duïng Chaân RB0 coøn coù theå söû duïng laø ngoõ vaøo cuûa ngaét ngoaøi vaø noù ñöôïc keát noái qua boä ñeäm loaïi Schmitt Ôû cheá ñoä ngoõ ra thì bit töông öùng vôùi chaân ngoõ ra trong thanh ghi TRISB laø möùc “0”. Giaù trò naøy ñöôïc choát bôûi thanh ghi choát TRIS. Khi ngoõ ra Q cuûa thanh ghi choát TRIS laø möùc “0” thì ngoõ ra cuûa coång NAND luoân laø möùc “1” vaø luùc naøy P-FET trôû thaønh ñieàu kieän OFF, chöùc naêng “pull-up” khoâng ñöôïc söû duïng trong tröôøng hôïp naøy. Ñoàng thôøi möùc “0” cuûa ngoõ ra thanh ghi choát TRIS seõ môû coång ñeäm ôû giöõa thanh ghi choát döõ lieäu OUT vaø chaân I/O. Nhö vaäy luùc naøy döõ lieäu trong thanh ghi PORTB ñöôïc choát bôûi thanh ghi choát TRIS vaø noù xuaát ra chaân I/O qua coång ñeäm Ôû cheá ñoä ngoõ vaøo thì ngoõ ra thanh ghi choát TRIS laø möùc “1”, coång ñieàu khieån döõ lieäu ngoõ ra bò ñoùng vaø tín hieäu ngoõ ra seõ taùch rôøi vôùi chaân I/O, ñoàng thôøi möùc “1” ñeán ngoõ vaøo coång NAND. Luùc naøy ngoõ ra coång NAND laø möùc “0” (Môû chöùc naêng “pull-up”) hay möùc “1” (Taét chöùc naêng “pull-up”) laø tuyø thuoäc vaøo tín hieäu cuûa RBPU (RBPU laø bit 7 trong thanh ghi OPTION-REG ). Neáu tín hieäu RBPU laø möùc “0” thì chöùc naêng “pull-up” ñöôïc môû, neáu laø möùc “1” thì chöùc naêng “pull-up” bò taét. Nhö vaäy ôû cheá ñoä ngoõ vaøo döõ lieäu khoâng theå xuaát ra chaân I/O maø chæ nhaän tín hieäu töø chaân I/O vaøo II.7.2.b. Caáu truùc chaân RB4 – RB7 Hình 23 : Sô ñoà maïch chaân RB4 – RB7 Caùc chaân naøy coù chöùc naêng phaùt hieän söï thay ñoåi traïng thaùi tín hieäu ngoõ vaøo cuõng nhö chöùc naêng ngoõ vaøo döõ lieäu. Chöùc naêng naøy ñöôïc duøng ñeå taïo ra ngaét baèng caùch thay ñoåi traïng thaùi ôû caùc chaân naøy. Neáu nhö thieát laäp ngaét baèng söï thay ñoåi traïng thaùi cuûa caùc chaân naøy thì ngaét seõ xaûy ra neáu nhö ngoõ ra cuûa coång OR laø möùc “1” töùc laø set bit RBIF (bit 0 trong thanh ghi INTCON) nhö vaäy chæ caàn 1 trong 4 ngoõ vaøo coång OR laø möùc “1” ñieàu naøy coù nghóa chæ caàn thay ñoåi traïng thaùi moät trong caùc chaân RB4 - RB7 thì ngaét seõ xaûy ra. Chöùc naêng naøy chæ hoaït ñoäng trong cheá ñoä ngoõ vaøo vì ôû cheá ñoä ngoõ ra, ngoõ ra Q cuûa thanh ghi choát TRIS laø möùc “0” vaø ngoõ ra coång AND luoân laø möùc “0” do ñoù ngaét seõ khoâng xaûy ra. Maïch phaùt hieän söï thay ñoåi traïng thaùi cuûa chaân I/O goàm thanh ghi choát döõ lieäu OLD, thanh ghi choát döõ lieäu IN vaø coång XOR. Baûng Söï Thaät Cuûa Coång XOR Söï hoaït ñoäng cuûa maïch phaùt hieän söï thay ñoåi traïng thaùi ngoõ vaøo Hình 24 : Maïch phaùt hieän söï thay ñoåi traïng thaùi ngoõ vaøo Döõ lieäu ngoõ vaøo ñöôïc ñöa tôùi ngoõ vaøo thanh ghi choát döõ lieäu IN vaø thanh ghi choát döõ lieäu OLD. Khi tín hieäu RD PORT thay ñoåi töø möùc L leân möùc H thì thanh ghi choát döõ lieäu IN seõ choát döõ lieäu ngoõ vaøo vaø khi tín hieäu RD PORT thay ñoåi töø möùc H xuoáng möùc L thì thanh ghi choát döõ lieäu OLD seõ choát döõ lieäu ngoõ vaøo, nhö vaäy luùc naøy 2 ngoõ vaøo coång XOR cuøng möùc tín hieäu neân ngoõ ra laø möùc L. Hình 25 : Giaûn ñoà thôøi gian cuûa maïch phaùt hieän söï thay ñoåi traïng thaùi ngoõ vaøo (traïng thaùi ngoõ vaøo thay ñoåi ôû ngoaøi xung tín hieäu RD PORT) ÔÛ hình 25, luùc ñaàu ngoõ vaøo döõ lieäu A = “0”, B = “0” thì C = “1”, D = “0”, E = “0” thì F = “0”. Khi B thay ñoåi töø möùc “0” leân möùc “1” thì C seõ thay ñoåi töø möùc “1” xuoáng möùc “0”. Luùc naøy E = A = “0”, D vaãn ôû möùc “0” do ñoù F = “0”. Khi B thay ñoåi töø möùc “1” xuoáng möùc “0” thì D = A = “0”, C = “1”, E = “0”vaø F vaãn möùc “0”. Khi A thay ñoåi traïng thaùi leân möùc “1”, B coù söï thay ñoåi traïng thaùi tieáp töø möùc “0” leân möùc “1” thì C thay ñoåi töø möùc “1” xuoáng möùc “0”, luùc naøy thanh ghi choát döõ lieäu IN ñöôïc môû vaø E = A = “1” trong khi ñoù thanh ghi choát döõ lieäu OLD khoâng môû vaø D vaãn möùc “0” do ñoù ngoõ ra F luùc naøy laø möùc “1”. Khi B thay ñoåi töø möùc “1” veà möùc “0” thì thanh ghi choát döõ lieäu OLD ñöôïc môû vaø D = A = “1”, C = “1”, E ñöôïc choát vaãn laø möùc “1” vaø F trôû veà möùc “0”. Luùc naøy maïch trôû veà traïng thaùi chôø ngoõ vaøo döõ lieäu thay ñoåi tieáp Hình 26 : Giaûn ñoà thôøi gian cuûa maïch phaùt hieän söï thay ñoåi traïng thaùi ngoõ vaøo (traïng thaùi ngoõ vaøo thay ñoåi khi ñang ñoïc xung tín hieäu RD PORT) ÔÛ hình 26, luùc ñaàu ngoõ vaøo döõ lieäu A = “0”, B = “0” thì C = “1”, D = “0”, E = “0” thì F = “0”. Khi B thay ñoåi töø möùc “0” leân möùc “1” thì C seõ thay ñoåi töø möùc “1” xuoáng möùc “0, thanh ghi choát döõ lieäu IN ñöôïc môû E = A = “0”, D = “0” vaø F = “0”. Khi A thay ñoåi traïng thaùi leân möùc “1”, B chöa coù söï thay ñoåi traïng thaùi neân caùc ngoõ khaùc vaãn giöõ nguyeân traïng thaùi. Khi B thay ñoåi töø möùc “1” xuoáng möùc “0” thì thanh ghi choát döõ lieäu OLD ñöôïc môû vaø D = A = “1”, C thay ñoåi töø möùc “0” leân möùc “1” neân thanh ghi choát döõ lieäu IN khoâng môû vaø E vaãn möùc “0” do ñoù ngoõ ra F luùc naøy laø möùc “1”. Khi B thay ñoåi tieáp töø möùc “0” leân möùc “1” thì C thay ñoåi töø möùc “1” xuoáng möùc “0” thanh ghi choát döõ lieäu IN ñöôïc môû vaø E = A = “1” luùc naøy F trôû veà möùc “0” II.8. Boä ñònh thôøi (TMR0) PIC16F84A coù 1 boä ñònh thôøi 8 bit Hình 27 : Sô ñoà khoái keát noái giöõa Prescaler vôùi boä ñònh thôøi vaø watchdog timer TMR0 laø moät boä ñeám 8 bit nhö vaäy boä ñeám leân ñeán 256. Khi boä ñeám thay ñoåi töø 255 ( FFh ) xuoáng 0 ( 00h ) töùc laø boä ñeám traøn moät ngaét seõ xaûy ra vaø bit TOIF cuûa thanh ghi INTCON ñöôïc set = ‘1’. Neáu thieát laäp caû 2 bit GIE ( bit 7 ) vaø T0IE ( bit 5 ) cuûa thanh ghi INTCON laø ‘ 1 ’ thì khi ngaét xaûy ra PC seõ ñi tôùi ñòa chæ 004h, khôûi ñoäng chöông trình phuïc vuï ngaét taïi ñaây. Ngöôøi laäp trình coù ghi ñeán thanh ghi TMR0 ñeå choïn khoaûng ñeám cuûa TMR0 ví duï khi ghi giaù trò 156 ñeán thanh ghi TMR0 thì khoaûng ñeám cuûa TMR0 laø 256 – 156 = 100 töùc laø boä ñeám seõ taêng töø giaù trò 156 Ngoõ vaøo cuûa boä ñònh thì coù theå laø nguoàn xung clock beân ngoaøi hay beân trong. Ñeå söû duïng xung clock beân ngoaøi thì bit T0CS ( bit 6 ) cuûa thanh ghi OPTION_REG vaø bit 4 cuûa thanh ghi TRISA phaûi ñöôïc set = ‘ 1 ’. Ñieàu naøy seõ ñaët chaân RA4/T0CKI ôû cheá ñoä ngoõ vaøo vaø noù ñöôïc choïn laø ngoõ vaøo xung clock cuûa boä ñònh thì. Vieäc choïn caïnh leân hay caïnh xuoáng cuûa xung clock beân ngoaøi tuyø thuoäc vaøo vieäc löïa choïn bit TOSE ( bit 5 cuûa thanh ghi OPTION_REG ). Ñeå choïn caïnh taùc ñoäng laø caïnh leân thì xoaù bit T0SE ( = ‘0’), neáu caïnh taùc ñoäng laø caïnh xuoáng thì set bit T0SE ( = ‘1’) Ôû ngoõ vaøo TMR0 coù 1 maïch ñoàng boä xung clock. Khi söû duïng xung clock beân ngoaøi thì thôøi gian cuûa caïnh leân vaø caïnh xuoáng seõ khoâng ñöôïc ñoàng boä vôùi xung clock beân trong, ñieàu naøy seõ laøm roái loaïn thôøi gian ngaét. Maïch naøy ñoàng boä ngoõ vaøo TMR0 vôùi xung clock beân trong. Söï ñoàng boä ñaït ñöôïc lôùn nhaát 2 chu kyø maùy Khi ngoõ vaøo boä ñònh thì ñöôïc choïn laø nguoàn xung dao ñoäng beân trong thì taàn soá dao ñoäng cuûa ngoõ vaøo boä ñình thì ñöôïc tính baèng 1/4 taàn soá dao ñoäng cuûa CPU. Coù nghóa laø neáu duøng boä dao ñoäng thaïch anh coù taàn soá 20MHz thì taàn soá ngoõ vaøo boä ñònh thì laø 5MHz töông ñöông vôùi chu kyø cuûa moät xung laø 0,2us nhö vaäy thôøi gian traøn cuûa TMR0 luùc naøy laø 51,2us ( 0,2us256), neáu duøng boä dao ñoäng thaïch anh coù taàn soá 4MHz thì taàn soá ngoõ vaøo boä ñònh thì laø 1MHz töông ñöông vôùi chu kyø cuûa moät xung laø 1us nhö vaäy thôøi gian traøn cuûa TMR0 luùc naøy laø 256us ( 1us256) Khi söû duïng nguoàn clock beân ngoaøi thì khi coù 1 xung treân chaân RA4/T0CKI thì boä ñeám TMR0 seõ taêng moät giaù trò, chöùc naêng naøy coù theå ñöôïc söû duïng ñeå ñeám soá xung treân chaân RA4/T0CKI, khi soá xung baèng moät giaù trò caàn thieát keá thì ngaét seõ xaûy ra, ngoaøi ra coù theå söû boä ñònh thôøi ñeå ñònh khoaûng thôøi gian theo muïc ñích cuûa ngöôøi laäp trình ñeå taïo ra ngaét baèng caùch choïn nguoàn clock beân trong Prescaler (phaàn ôû trung taâm cuûa hình) coù theå söû duïng cho TMR0 hay WDT. Khi Prescaler ñöôïc söû duïng cho TMR0 thì khoâng coù Prescaler cho WDT. Hình ôû treân bieåu dieãn keát noái giöõa prescaler vôùi TMR0 vaø WDT, bit PSA ( bit 3 trong thanh ghi OPTION_REG ) xaùc ñònh prescaler ñöôïc duøng cho TMR0 hay WDT. Neáu bit PSA = ‘1’ thì prescaler ñöôïc duøng cho WDT, neáu PSA =’0’ thì prescaler ñöôïc duøng cho TMR0. Khi Prescaler ñöôïc gaùn cho TMR0 thì taát caû caùc leänh ghi tôùi thanh ghi naøy seõ xoaù Prescaler. Khi ñöôïc gaùn cho WDT, leänh CLRWDT seõ xoùa Prescaler cuøng vôùi WDT. Khi PSA = ‘1’ thì ngoõ vaøo xung clock cuûa boä ñònh thì seõ ñi thaúng tôùi maïch ñoàng boä xung clock, khi PSA = ‘0’ thì ngoõ vaøo xung clock cuûa boä ñònh thì seõ ñi qua boä Prescaler vaø ngoõ ra boä prescaler ñi ñeán maïch ñoàng boä xung clock Prescaler laø moät boä ñeám 8 bit coù theå laäp trình ñöôïc, tyû leä ñeám coù theå xaùc ñònh bôûi 3 bit PS0, PS1, PS2 cuûa thanh ghi OPTION_REG. Prescaler coù theå ñöôïc laäp trình vôùi tyû leä ñeám laø 1:2, 1:4, ..., 1:256 Ví duï : khi Prescaler ñöôïc choïn vôùi tyû leä 1:2 coù nghóa laø khi ngoõ vaøo Prescaler coù 2 xung thì ngoõ ra Prescaler coù 1 xung. Neáu choïn vôùi tyû leä 1:256, khi ngoõ vaøo Prescaler coù 256 xung thì ngoõ ra Prescaler coù 1 xung. Vì theá thôøi gian traøn cuûa TMR0 coù theå ñieàu chænh baèng caùch ñieàu chænh giaù trò cuûa boä Prescaler Thôøi gian traøn cuûa TMR0 leân ñeán 256us256 = 65536us ñoái vôùi thaïch anh 4MHz Khi muoán thöïc hieän moät taùc vuï naøo ñoù vôùi khoaûng thôøi gian lôùn hôn 65536us thì coù theå söû duïng theâm thanh ghi trong GPR ñeå taêng thôøi gian treân baèng caùch laø trong chöông trình phuïc vuï ngaét cho thanh ghi naøy taêng (hoaëc giaûm) 1 giaù trò, khi thanh ghi naøy chöa ñeán giaù trò ñaõ ñònh thì seõ thoaùt chöông trình ngaét, khi ñeán giaù trò ñaõ ñònh thì taùc vuï naøy seõ ñöôïc thöïc hieän II.9. Watchdog Timer ( WDT) Boä dao ñoäng WDT söû duïng nguoàn clock töø maïch dao ñoäng RC beân trong, noù ñoäc laäp vôùi maïch dao ñoäng RC cuûa heä thoáng. Ñieàu ñoù coù nghóa WDT vaãn coù clock ñeå hoaït ñoäng ngay caû khi maïch dao ñoäng cuûa heä thoáng bò döøng ( nhö ôû cheá ñoä SLEEP chaúng haïn ) Trong tröôøng hôïp hoaït ñoäng bình thöôøng thì khi traøn WDT seõ reset PIC Trong tröôøng hôïp ñang nguû ( ôû cheá ñoä SLEEP ) thì khi traøn WDT seõ chæ ñaùnh thöùc PIC vaø tieáp tuïc vôùi nhöõng hoaït ñoäng bình thöôøng Vieäc söû duïng hay khoâng söû duïng WDT ñöôïc thöïc hieän baèng bit WDTE ( choïn baèng phaàn cöùng khoâng thay ñoåi ñöôïc khi ñang chaïy chöông trình ) Thôøi gian time-out cuûa WDT laø khoaûng thôøi gian töø luùc timer chaïy ñeán luùc traøn. Thôøi gian time-out cuûa WDT ñoái vôùi con PIC16F84A laø 18ms. Thöïc teá thôøi gian naøy phuï thuoäc vaøo moät soá tham soá nhö nhieät ñoä, nguoàn cung caáp ... Thôøi gian time-out WDT coù theå ñieàu chænh baèng caùch cho boä dao ñoäng cuûa WDT qua boä chia Prescaler. Trong tröôøng hôïp naøy tyû leä ñeám cuûa WDT seõ khaùc vôùi tyû leä ñeám cuûa TMR0. Prescaler coù theå ñöôïc laäp trình vôùi 8 tyû leä ñeám 1:1, 1:2, ..., 1:128. khi tyû leä ñeám laø 1:128, thôøi gian time out cuûa WDT coù theå leân ñeán 18ms128 = 2,304s Khi chöùc naêng naøy ñöôïc môû. Trong khi chöông trình ñang chaïy neáu heát thôøi gian time-out cuûa WDT thì noù seõ reset PIC hoaëc khi PIC ñang ôû cheá ñoä SLEEP khi heát thôøi gian time-out thì WDT seõ ñaùnh thöùc PIC. Nhö vaäy ñeå ngaên chaën vieäc reset PIC khoâng mong muoán khi ñang chaïy chöông trình ngöôøi laäp trình phaûi reset ñònh kyø thôøi gian time-out baèng phaàn meàm bôûi leänh CLRWDT. Ngoaøi ra khi thöïc hieän leänh SLEEP hoaït ñoäng naøy seõ reset WDT vaø Prescaler töùc laø thôøi gian time-out seõ ñöôïc tính töø ñaàu Chöùc naêng cuûa WDT laø ngaên chaën söï hoaït ñoäng khoâng chính xaùc cuûa phaàn meàm. Chöùc naêng naøy khoâng thöïc söï caàn thieát vì khi coù moät loãi trong chöông trình ngöôøi laäp trình coù theå nhaän bieát baèng söï hoaït ñoäng khoâng chính xaùc cuûa noù ( töùc laø chöông trình khoâng thöïc hieän theo caùch thöùc mong muoán ). Neáu WDT reset PIC thì khoâng theå bieát ñöôïc chöông trình ñaõ bò loãi gì, vì theá chöùc naêng naøy thöôøng khoâng söû duïng trong laäp trình II.10. Ngaét PIC16F84A coù 4 nguoàn ngaét Ngaét ngoaøi treân chaân RB0/INT cuûa vi ñieàu khieån Hoaøn thaønh vieäc ghi döõ lieäu vaøo EEPROM Ngaét traøn cuûa boä ñònh thì TMR0 Port B thay ñoåi traïng thaùi treân caùc chaân RB Vieäc ñieàu khieån caùc ngaét ñöôïc thöïc hieän bôûi thanh ghi INTCON. Thanh ghi naøy chöùa caùc bit cho pheùp caùc nguoàn ngaét vaø caùc bit côø ngaét Bit cho pheùp ngaét toaøn cuïc GIE (INTCON), cho pheùp ( = ‘1’) taát caû caùc ngaét hoaëc khoâng cho pheùp ( = ‘0’) taát caû caùc ngaét. Caùc ngaét rieâng leû coù theå ñöôïc voâ hieäu hoaù thoâng qua caùc bit cho pheùp töông öùng cuûa chuùng trong thanh ghi INTCON. Bit GIE ñuôïc xoùa khi RESET. Leänh “trôû laïi töø ngaét” RETFIE, xuaát hieän trong baûng ngaét seõ thieát laäp bit GIE, ñeå coù theå Interrupt trôû laïi. Ngaét ôû chaân RB0/INT, ngaét thay ñoåi port RB vaø côø ngaét traøn TMR0 ñöôïc chöùa trong thanh ghi INTCON. Khi moät ngaét ñöôïc ñaùp öùng, bit GIE ñöôïc xoùa ñeå huûy boû baát kyø ngaét naøo, ñòa chæ hieän taïi ñöôïc ñaåy leân ñænh ngaên xeáp vaø PC ñöôïc naïp vôùi giaù tròa 0004h. Ñoái vôùi ngöõng bieán coá ngaét beân ngoaøi nhö ngaét thay ñoåi chaân RB0/INT hoaëc PORTB, ngaét tieàm aån seõ laø 3 hoaëc 4 chu kyø leänh. Söï tieàm aån chính xaùc khi söï kieän ngaét xuaát hieän. Söï tieàm aån cuõng cho caû moät hoaëc hai chu kyø leänh. Ngay trong baûng ñònh tuyeán phuïc vuï ngaét caùc nguoàn ngaét ñöôïc xaùc ñònh baèng côø ngaét. Caùc côø ngaét ñöôïc xoùa baèng phaàn meàm tröôùc khi Interrupt ñöôïc kích hoaït trôû laïi. Ngaét INT Ngaét ngoaøi treân chaân RB0/INT ñöôïc kích hoaït baèng caïch leân neáu bit INTEDG (OPTION_REG) ñöôïc thieát laäp, hhoaëc caïch xuoáng neáu bit INTEDG ñöôïc xoùa. Khi caïch hôïp leä ñöôïc xuaát hieän treân chaân RB0/INT, bit INTF (INTCON) ñöôïc thieát laäp. Ngaét naøy coù theå ñöôïc huûy boû bôûi xoùa bit ñieàu khieån INTE (INTCON). Bit côø INTF phaûi ñöôïc xoaù trong phaàn meàm qua trình con cuûa dòch vuï ngaét tröôùc khi ngaét naøy cho pheùp laïi. Ngaét INT coù theå khôûi ñoäng boä xöû lyù töø SLEEP chæ khi neáu bit INTE ñöôïc theát laäp tröôùc khi ñi vaøo SLEEP. Traïng thaùi cuûa bit GIE quyeát ñònh lieäu coù phaûi boä xöû lyù phaân nhaùnh tôùi ngaét vector wale-up. Ngaét TMR0 Moät söï traøn (FFh 00h) trong TMR0 seõ thieát laäp bit côø T0IF (INTCON). Ngaét coù theå ñöôïc cho pheùp hoaëc khoâng cho pheùp bôûi vieäc thieát laäp hoaëc xoaù bit cho pheùp T0IE (INTCON). Ngaét khi PORTB thay ñoåi traïng thaùi treân caùc chaân RB Moät söï thay ñoåi ngoõ vaøo treân PORTB thieát laäp bit côø hieäu RBIF (INTCON). Ngaét coù theå cho pheùp hoaëc khoâng cho pheùp bôûi vieäc thieát laäp hoaëc xoaù bit RBIE (INTCON). Ngaét khi hoaøn thaønh vieäc ghi döõ lieäu vaøo EEPROM Khi hoaøn thaønh chu kyø ghi cuûa döõ lieäu EEPROM, bit côø EEIF (EECON1) seõ ñöôïc thieát laäp. Ngaét coù theå ñöôïc cho pheùp hoaëc khoâng bôûi vieäc thieát laäp hoaëc xoùa bit cho pheùp EEIE (INTCON). CHÖÔNG III : TAÄP LEÄNH CUÛA PIC16F84A III.1. Baûng toùm taét taäp leänh cuûa PIC16F84A PIC16F84A coù 35 leänh ñôn vôùi ñoä daøi cuûa töø leänh laø 14 bit Leänh Toaùn haïn Moâ taû Chu kyø 14 bit töø leänh Traïng thaùi aûnh höôûng Chuù yù MSB LSB CAÙC LEÄNH HOAÏT ÑOÄNG TREÂN THANH GHI ÑÒNH HÖÔÙNG BYTE ADDWF f,d ANDWF f,d CLRF f CLRW _ COMF f,d DECF f,d DECFSZ f,d INCF f,d INCFSZ f,d IORWF f,d MOVF f,d MOVWF f NOP _ RLF f,d RRF f,d SUBWF f,d SWAPF f,d XORWF f,d Add W and f AND W with f Clear f Clear W Complement f Decrement f Decrement f. Skip if 0 Increment f Increment f. Skip if 0 Inclusive OR W with f Move f Move W to f No Operation Rotate Left f through Carry Rotate Right f through Carry Subtract W from f Swap nibbles in f Exclusive OR W with f 1 1 1 1 1 1 1(2) 1 1(2) 1 1 1 1 1 1 1 1 1 00 0111 df f f f f f f 00 0101 df f f f f f f 00 0001 1f f f f f f f 00 0001 0xxx xxxx 00 1001 df f f f f f f 00 0011 df f f f f f f 00 1011 df f f f f f f 00 1010 df f f f f f f 00 1111 df f f f f f f 00 0100 df f f f f f f 00 1000 df f f f f f f 00 0000 1f f f f f f f 00 0000 0xx0 0000 00 1101 df f f f f f f 00 1100 df f f f f f f 00 0010 df f f f f f f 00 1110 df f f f f f f 00 0110 df f f f f f f C,DC,Z Z Z Z Z Z Z Z Z C C C,DC,Z Z 1 1 1 1 1 1,2 1 1,2 1 1 1 1 1 1 1 CAÙC LEÄNH HOAÏT ÑOÄNG TREÂN THANH GHI ÑÒNH HÖÔÙNG BIT BCF f,b BSF f,b BTFSC f,b BTFSS f,b Bit Clear f Bit Set f Bit Test f. Skip if Clear Bit Test f. Skip if Set 1 1 1(2) 1(2) 01 00bb bf f f f f f f 01 01bb bf f f f f f f 01 10bb bf f f f f f f 01 11bb bf f f f f f f 1 1 2 2 CAÙC LEÄNH HOAÏT ÑOÄNG TREÂN LITERAL VAØ ÑIEÀU KHIEÅN ADDLW k ANDLW k CALL k CLRWDT _ GOTO k IORLW k MOVLW k RETFIE _ RETLW k RETURN _ SLEEP _ SUBLW k XORLW k Add literal and W AND literal with W Call subroutine Clear Watchdog Timer Go to address Inclusive OR literal with W Move literal to W Return from interrupt Return with literal in W Return from Subroutine Go into standby mode Subtract W from literal Exclusive OR literal with W 1 1 2 1 2 1 1 2 2 2 1 1 1 11 111x kkkk kkkk 11 1001 kkkk kkkk 10 0kkk kkkk kkkk 00 0000 0110 0100 10 1kkk kkkk kkkk 11 1000 kkkk kkkk 11 00xx kkkk kkkk 00 0000 0000 1001 11 01xx kkkk kkkk 00 0000 0000 1000 00 0000 0110 0011 11 110x kkkk kkkk 11 1010 kkkk kkkk C,DC,Z Z Z C,DC,Z Z Chuù yù 1 : Neáu caùc leänh naøy thöïc hieän treân thanh ghi TMR0, boä prescaler seõ bò xoùa neáu noù ñöôïc aán ñònh tôùi moâñun Timer0 2 : Neáu boä ñeám chöông trình thay ñoåi hay moät ñieàu kieän kieåm tra laø ñuùng thì leänh naøy seõ thöïc hieän trong hai chu kyø maùy vaø chu kyø thöù hai xem nhö laø leänh NOP III.2. Ñònh daïng toång quaùt cuûa töø leänh III.2.1. Caùc leänh hoaït ñoäng treân thanh ghi ñònh höôùng byte Caùc leänh cuûa daïng naøy xöû lyù treân 1 byte thanh ghi 14 bit töø leänh 13 8 7 6 0 OPCODE d f OPCODE : Maõ ñeå phaân bieät caùc leänh d : Duøng ñeå choïn thanh ghi caùi maø löu keát quaû thöïc hieän cuûa leänh d = 0 löu ñeán thanh ghi W d = 1 löu ñeán thanh ghi f f : Noù chæ roõ ñòa chæ cuûa thanh ghi caùi maø ñöôïc ñeà caäp ñeán trong leänh f coù theå chæ roõ ñòa chæ töø 0(00h) ñeán 127(7Fh) bôûi vì noù coù 7 bit Khi vieát baèng ngoân ngöõ assembler, coù theå söû duïng nhaõn ñaõ ñöôïc ñònh nghóa ñeå thay ñòa chæ cuûa thanh ghi Ví duï ADDWF COUNT, 1 (COUNT laø nhaõn cuûa thanh ghi ) III.2.2. Caùc leänh hoaït ñoäng treân thanh ghi ñònh höôùng bit Caùc leänh cuûa daïng naøy xöû lyù treân 1 bit cuûa thanh ghi 14 bit töø leänh 13 10 9 7 6 0 OPCODE b f OPCODE : Maõ ñeå phaân bieät caùc leänh b : Duøng ñeå chæ vò trí bit cuûa file thanh ghi Bôûi vì file thanh ghi laø moät byte, do ñoù noù caàn 3 bit b ñeå coù theå chæ taát caû vò trí bit cuûa file thanh ghi f : Noù chæ roõ ñòa chæ cuûa thanh ghi caùi maø ñöôïc ñeà caäp ñeán trong leänh f coù theå chæ roõ ñòa chæ töø 0(00h) ñeán 127(7Fh) bôûi vì noù coù 7 bit Khi vieát baèng ngoân ngöõ assembler, coù theå söû duïng nhaõn ñaõ ñöôïc ñònh nghóa ñeå thay ñòa chæ cuûa thanh ghi Ví duï ADDWF COUNT, 1 (COUNT laø nhaõn cuûa thanh ghi ) III.2.3. Caùc leänh hoaït ñoäng treân Literal vaø ñieàu khieån Caùc leänh cuûa daïng naøy xöû lyù vôùi moät con soá coá ñònh (k) caùi maø ñöôïc ghi trong leänh 14 bit töø leänh 13 8 7 0 OPCODE k (literal) OPCODE : Maõ ñeå phaân bieät caùc leänh k : laø moät soá coá ñònh duøng ñeå tính toaùn. Bôûi vì coù 8 bit(tröø caùc leänh nhaûy vaø leänh CALL) neân giaù trò cuûa k naèm trong khoaûng 0(00h) ñeán 255(FFh) 14 bit töø leänh (chæ rieâng leänh CALL vaø GOTO) 13 11 10 0 OPCODE K (literal) k : ñoái vôùi hai leänh naøy coù 11 bit neân giaù trò naèm trong khoaûng 0(00h) ñeán 2047(7FFh) III.3/ Moâ taû chi tieát töøng leänh III.3.1. ADDLW Add Literal and W Cuù phaùp : [label] ADDLW k Toaùn haïn : 0 ≤ k ≤ 255 Söï hoaït ñoäng : (W) + k –> (W) 11 111 x k kkk kkkk Opcode Moâ taû : Noäi dung cuûa thanh ghi W ñöôïc coäng vôùi ‘k’keát quaû ñaët trong thanh ghi W Traïng thaùi taùc ñoäng C, DC, Z Chu kyø : 1 Thí duï : ADDLW 0x15 Tröôùc khi thöïc hieän leänh W = 0x10 Sau khi thöïc hieän leänh W = 0x25 III.3.2. ADDWF Add W and f Cuù phaùp : [label] ADDWF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (W) + (f) –> (destination) 00 0111 d f f f f f f f Opcode : Moâ taû : Coäng noäi dung ccuûa thanh ghi W vôùi thanh ghi (f) Neáu d = 0 keát quaû ñöïôc löu trong thanh ghi W Neáu d = 1 keát quaû ñöôïc trong thanh ghi (f) Traïng thaùi taùc ñoäng C, DC, Z Chu kyø : 1 Thí duï : ADDWF FSR,0 Tröôùc khi thöïc hieän leänh W = 0x17 FSR = 0xC2 Sau khi thöïc hieän leänh W = 0xD9 FSR = 0xC2 III.3.3. ANDLW And Literal with W Cuù phaùp : [label] ANDLW k Toaùn haïn : 0 ≤ k ≤ 255 Söï hoaït ñoäng : (W) . AND . (k) –> (W) 11 1001 kkkk kkkk Opcode : Moâ taû : Noäi dung cuûa thanh ghi W ñöôïc AND vôùi ‘k’keát quaû ñaët trong thanh ghi W Traïng thaùi taùc ñoäng Z Chu kyø : 1 Thí duï : ANDLW 0x5F Tröôùc khi thöïc hieän leänh W = 0xA3 Sau khi thöïc hieän leänh W = 0x03 III.3.4. ANDWF And W with f Cuù phaùp : [label] ANDWF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (W) . AND . (f) –> (destination) 00 0101 dfff ffff Opcode : Moâ taû : AND thanh ghi W vôùi thanh ghi (f) Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : ANDWF FSR,1 Tröôùc khi thöïc hieän leänh W = 0x17, FSR = 0xC2 Sau khi thöïc hieän leänh W = 0x17, FSR = 0x02 III.3.5. BCF Bit Clear f Cuù phaùp : [label] BCF f,b Toaùn haïn : 0 ≤ f ≤ 127 0 ≤ b ≤ 7 Söï hoaït ñoäng : 0 –> (f) 01 00bb bfff ffff Opcode : Moâ taû : Bit ‘b’ trong thanh ghi (f) bò xoaù Traïng thaùi taùc ñoäng : Khoâng Chu kyø : 1 Thí duï : BCF REG , 7 Tröôùc khi thöïc hieän leänh REG = 0xC7 Sau khi thöïc hieän leänh REG = 0x47 BCF INDF , 3 Tröôùc khi thöïc hieän leänh W = 0x17 FSR = 0xC2 Noäi dung ñòa chæ (FSR) = 0x2F Sau khi thöïc hieän leänh W = 0x17 FSR = 0xC2 Noäi dung ñòa chæ (FSR) = 0x27 III.3.6. BSF Bit set f Cuù phaùp : [label] BSF f , b Toaùn haïn : 0 ≤ f ≤ 127 0 ≤ b ≤ 7 Söï hoaït ñoäng : 1 –> (f) 01 01bb bfff ffff Opcode : Moâ taû : Bit ‘b’ trong thanh ghi (f) ñöôïc set Traïng thaùi taùc ñoäng : Khoâng Chu kyø : 1 Thí duï : BSF REG , 7 Tröôùc khi thöïc hieän leänh REG = 0x07 Sau khi thöïc hieän leänh REG = 0x87 BSF INDF , 3 Tröôùc khi thöïc hieän leänh W = 0x17 FSR = 0xC2 Noäi dung ñòa chæ (FSR) = 0x20 Sau khi thöïc hieän leänh W = 0x17 FSR = 0xC2 Noäi dung ñòa chæ (FSR) = 0x28 III.3.7. BTFSC Bit Test, Skip if Clear Cuù phaùp : [label] BTFSC f , b Toaùn haïn : 0 ≤ f ≤ 127 0 ≤ b ≤ 7 Söï hoaït ñoäng : Boû qua neáu (f = 0) 01 10bb bfff ffff Opcode : Moâ taû : Neáu bit ‘b’ trong thanh ghi (f) laø ‘1’ thì leänh keá seõ ñöôïc thöïc hieän Neáu bit ‘b’trong thanh ghi (f) laø ‘0’ seõ boû qua leänh keá vaø leänh ñoù xem nhö laø leänh NOP Traïng thaùi taùc ñoäng : Khoâng Chu kyø : 1 hay 2 Thí duï : LAD_01 BTFSC REG , 1 ;kieåm tra ;bit 1 ;trong thanh ghi REG LAD_02 . . . . . . . . . . . . . . LAD_03 . . . . . . . . . . . . . . Tröôùc khi thöïc hieän leänh : Boä ñeám chöông trình(PC) ôû ñòa chæ LAD_01 Sau khi thöïc hieän leänh Neáu REG = 0 PC ôû ñòa chæ LAD_03 Neáu REG = 1 PC ôû ñòa chæ LAD_02 III.3.8. BTFSS Bit Test, Skip if Set Cuù phaùp : [label] BTFSS f , b Toaùn haïn : 0 ≤ f ≤ 127 0 ≤ b ≤ 7 Söï hoaït ñoäng : Boû qua neáu (f = 1) 01 11bb bfff ffff Opcode : Moâ taû : Neáu bit ‘b’ trong thanh ghi (f) laø ‘0’ thì leänh keá seõ ñöôïc thöïc hieän Neáu bit ‘b’trong thanh ghi (f) laø ‘1’ seõ boû qua leänh keá vaø leänh ñoù xem nhö laø leänh NOP Traïng thaùi taùc ñoäng : Khoâng Chu kyø : 1 hay 2 Thí duï : LAD_01 BTFSS REG , 1 ;kieåm tra bit 1 ; trong thanh ghi REG LAD_02 . . . . . . . . . . . . . . LAD_03 . . . . . . . . . . . . . . Tröôùc khi thöïc hieän leänh Boä ñeám chöông trình(PC) ôû ñòa chæ LAD_01 Sau khi thöïc hieän leänh Neáu REG = 1 PC ôû ñòa chæ LAD_03 Neáu REG = 0 PC ôû ñòa chæ LAD_02 III.3.9. CALL Call subroutine Cuù phaùp : [label] CALL k Toaùn haïn : 0 ≤ k ≤ 2047 Söï hoaït ñoäng : (PC) + 1 –> TOS k –> PC (PCLATH) –> PC 10 0kkk kkkk kkkk Opcode : Moâ taû : leänh goïi chöông trình con. Ñaàu tieân ñòa chæ (PC + 1) ñöôïc ñaåy leân ngaên xeáp. 11 bit ñòa chæ töùc thôøi ñöôïc naïp leân PC. Nhöõng bit cao hôn cuûa PC ñöôïc naïp töø PCLATH Traïng thaùi taùc ñoäng : khoâng Chu kyø : 2 Thí duï : LAD_00 CALL LAD_01 ;goïi chöông trình ;LAD_01 : : LAD_01 . . . . . . . . . . . Tröôùc khi thöïc hieän leänh :PC ôû ñòa chæ LAD_00 TOS = x Sau khi thöïc hieän leänh : PC ôû ñòa chæ LAD_01 TOS = LAD_00 III.3.10. CLRF Clear f Cuù phaùp : [label] CLRF f Toaùn haïn : 0 ≤ f ≤ 127 Söï hoaït ñoäng : 00h –> (f) 1 –> Z 00 0001 1 f f f f f f f Opcode : Moâ taû : noäi dung cuûa thanh ghi (f) bò xoaù vaø set bit zero (Z) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : CLRF FLAG_REG Tröôùc khi thöïc hieän leänh FLAG_REG = 0x5A Sau khi thöïc hieän leänh FLAG_REG = 0x00 Z = 1 III.3.11. CLRW Clear W Cuù phaùp : [label] CLRW Söï hoaït ñoäng : 00h –> (W) 1 –> Z 00 0001 0xxx xxxx Opcode : Moâ taû : Xoaù noäi dung thanh ghi W, set bit zero(Z) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : CLRW Tröôùc khi thöïc hieän leänh : W = 0x4F Sau khi thöïc hieän leänh W = 0x00 Z = 1 III.3.12. CLRWDT Clear Watchdog Timer Cuù phaùp : [label] CLRWDT Söï hoaït ñoäng : 00h –> WDT 0 –> WDT prescaler 1 –> 1 –> 00 0000 0110 0100 Opcode : Moâ taû : Leänh CLRWDT seõ reset boäWatch-dog Timer. Noù cuõng reset Prescaler cuûa WDT. Nhöõng bit traïng thaùi T0 vaø PD ñöôïc set Muïc ñích cuûa watchdog timer laø ñeå reset PIC neáu chöông trình öùng duïng chaïy khoâng nhö mong muoán Traïng thaùi taùc ñoäng : , Chu kyø : 1 Thí duï CLRWDT Tröôùc khi thöïc hieän leänh WDT counter = x Sau khi thöïc hieän leänh WDT counter = 0x00 WDT prescaler = 0 = 1 , = 1 III.3.13. COMF Complement f Cuù phaùp : [label] COMF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : –> (destination) 00 1001 dfff ffff Opcode : Moâ taû : Laáy buø noäi dung thanh ghi (f) Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : COMF REG,0 Tröôùc khi thöïc hieän leänh REG = 0x13 Sau khi thöïc hieän leänh REG = 0x13 W = 0xEC COMF INDF,1 Tröôùc khi thöïc hieän leänh FSR = 0xC2 Noäi dung ñòa chæ (FSR) = 0xAA Sau khi thöïc hieän leänh FSR = 0xC2 Noäi dung ñòa chæ (FSR) = 0x55 III.3.14. DECF Decrement f Cuù phaùp : [label] DECF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (f) - 1 –> (destination) 00 0011 dfff ffff Opcode : Moâ taû : Giaûm noäi dung cuûa thanh ghi (f) Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : DECF REG,1 Tröôùc khi thöïc hieän leänh REG = 0x01, Z = 0 Sau khi thöïc hieän leänh REG = 0x00 , Z = 1 III.3.15. DECFSZ Decrement f, Skip if 0 Cuù phaùp : [label] DECFSZ f , d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (f) - 1 –> (destination) 00 1011 dfff ffff Opcode : Moâ taû : Giaûm noäi dung cuûa thanh ghi (f) Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Neáu keát quaû laø 1 leänh keá tieáp ñöôïc thöïc hieän Neáu keát quaû laø 0 thì leänh Nop ñöôïc thay theá leänh keá Traïng thaùi taùc ñoäng : khoâng Chu kyø : 1 hay 2 Thí duï : LAD_01 DECFSZ CNT , 1 ;giaûm noäi dung ;thanh ghi CNT LAD_02 . . . . . . . . . . . . . . LAD_03 . . . . . . . . . . . . . . Tröôùc khi thöïc hieän leänh : Boä ñeám chöông trình(PC) ôû ñòa chæ LAD_01 Sau khi thöïc hieän leänh CNT = CNT - 1 Neáu CNT = 0 PC ôû ñòa chæ LAD_03 Neáu CNT ≠ 0 PC ôû ñòa chæ LAD_02 III.3.16. GOTO Unconditional Branch Cuù phaùp : [label] GOTO k Toaùn haïn : 0 ≤ k ≤ 2047 Söï hoaït ñoäng : k –> PC PCLATH –> PC 10 1kkk kkkk kkkk Opcode : Moâ taû : GOTO laø leänh reõ nhaùnh khoâng ñieàu kieän. Giaù trò töùc thôøi cuûa 11 bit ñöôïc naïp leân nhöõng bit PC. Nhöõng bit cao hôn cuûa PC ñöôïc naïp töø PCLATH Traïng thaùi taùc ñoäng : khoâng Chu kyø : 2 Thí duï : LAD_00 GOTO LAD_01 ;nhaûy tôùi : ;LAD_01 : LAD_01 . . . . . . . . . . . Tröôùc khi thöïc hieän leänh : PC ôû ñòa chæ LAD_00 Sau khi thöïc hieän leänh : PC ôû ñòa chæ LAD_01 III.3.17. INCF Increment f Cuù phaùp : label] INCF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (f) + 1 –> (destination) 00 1010 dfff ffff Opcode : Moâ taû : Noäi dung cuûa thanh ghi (f) ñöôïc taêng leân Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : INCF REG, 1 Tröôùc khi thöïc hieän leänh REG = 0xFF, Z = 0 Sau khi thöïc hieän leänh REG = 0x00 , Z = 1 INCF REG, 0 Tröôùc khi thöïc hieän leänh REG = 0x10 , W = x , Z = 0 Sau khi thöïc hieän leänh REG = 0x10 , W = 0x11 , Z = 0 INCF REG, 0 Tröôùc khi thöïc hieän leänh REG = 0x13 , W = x , Z = 0 Sau khi thöïc hieän leänh REG = 0x13 , W = 0x12 , Z = 0 III.3.18. INCFSZ Increment f, Skip 0 Cuù phaùp : [label] INCFSZ f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (f) + 1 –> (destination) 00 1111 dfff ffff Moâ taû : Noäi dung cuûa thanh ghi (f) ñöôïc taêng leân Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Neáu keát quaû laø 1 leänh keá tieáp ñöôïc thöïc hieän Neáu keát quaû laø 0 thì leänh Nop ñöôïc thay theá leänh keá Traïng thaùi taùc ñoäng : khoâng Chu kyø : 1 hay 2 Thí duï : LAD_01 INCFSZ REG , 1 ;taêng noäi dung LAD_02 . . . . . . . . . . . . . . . ;thanh ghi REG LAD_03 . . . . . . . . . . . . . . . Tröôùc khi thöïc hieän leänh : Boä ñeám chöông trình(PC) ôû ñòa chæ LAD_01 Sau khi thöïc hieän leänh REG = REG + 1 Neáu REG = 0 PC ôû ñòa chæ LAD_03 Neáu REG ≠ 0 PC ôû ñòa chæ LAD_02 III3.19. IORLW Inclusive OR Literal with W Cuù phaùp : [label] IORLW k Toaùn haïn : 0 ≤ k ≤ 255 Söï hoaït ñoäng : (W) . OR . (k) –> (W) 11 1000 kkkk kkkk Opcode : Moâ taû : Noäi dung cuûa thanh ghi W ñöôïc OR vôùi 8 bit ‘k’keát quaû ñaët trong thanh ghi W Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : IORLW 0x35 Tröôùc khi thöïc hieän leänh W = 0x9A Sau khi thöïc hieän leänh W = 0xBF Z = 1 III3.20. IORWF Inclusive OR W with f Cuù phaùp : [label] IORWF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (W) . OR . (f) –> (destination) 00 0100 dfff ffff Opcode : Moâ taû : OR thanh ghi W vôùi thanh ghi (f) Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : IORWF REG,0 Tröôùc khi thöïc hieän leänh W = 0x91 , REG = 0x13 Sau khi thöïc hieän leänh W = 0x93 , REG = 0x13 III.3.21. MOVF Move f Cuù phaùp : [label] MOVF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (f) –>(destination) 00 1000 d f f f f f f f Opcode : Moâ taû : Noäi dung cuûa thanh ghi (f) ñöôïc chuyeån ñeán nôi maø phuï thuoäc traïng thaùi cuûa ‘d’ Neáu d = 0 nôi ñeán laø thanh ghi W Neáu d = 1 nôi ñeán laø thanh ghi (f) , leänh movf ñöôïc duøng ñeå set côø zero theo noäi dung cuûa thanh ghi Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : MOVF FSR,0 Sau khi thöïc hieän leänh W = giaù trò trong thanh ghi FSR Z = 1 III.3.22. MOVLW Move Literal to W Cuù phaùp : [label] MOVLW k Toaùn haïn : 0 ≤ k ≤ 255 Söï hoaït ñoäng : k –> (W) 11 00xx kkkk kkkk Opcode : Moâ taû : 8 bit cuûa k (k laø haèng soá ) ñöôïc naïp vaøo thanh ghi W Traïng thaùi taùc ñoäng : khoâng Chu kyø : 1 Thí duï : MOVLW 0x5A Sau khi thöïc hieän leänh W = 0x5A III.3.23. MOVWF Move W to f Cuù phaùp : [label] MOVWF f 0 ≤ f ≤ 127 Söï hoaït ñoäng : (W) –> (f) 00 0000 1 f f f f f f f Opcode : Moâ taû : Chuyeån döõ lieäu töø thanh ghi W tôùi thanh ghi chæ thò (f) Traïng thaùi taùc ñoäng : khoâng Chu kyø : 1 Thí duï : MOVWF OPTION_REG Tröôùc khi thöïc hieän leänh OPTION = 0xFF , W = 0x4F Sau khi thöïc hieän leänh OPTION = 0x4F , W = 0x4F III.3.24. NOP No Operation Cuù phaùp : [label] NOP Söï hoaït ñoäng : Khoâng hoaït ñoäng 00 0000 0xx0 0000 Opcode : Moâ taû : Khoâng hoaït ñoäng Traïng thaùi taùc ñoäng : khoâng Chu kyø : 1 Thí duï : NOP III.3.25. RETFIE Return from Interrupt Cuù phaùp : [label] RETFIE Söï hoaït ñoäng : TOS –> PC 1 –> GIE 00 0000 0000 1001 Opcode : Moâ taû : Trôû veà töø chöông trình ngaét. Vuøng ngaên xeáp ñöôïc laáy ra vaø ñænh cuûa ngaên xeáp ñöôïc naïp vaøo PC. Ngaét ñöôïc cho pheùp baèng caùch set bit GIE Traïng thaùi taùc ñoäng : khoâng Chu kyø : 2 Thí duï : RETFIE Tröôùc khi thöïc hieän leänh PC = x , GIE = 0 Sau khi thöïc hieän leänh PC = TOS , GIE = 1 III.3.26. RETLW Return with Literal in W Cuù phaùp : [label] RETLW k 0≤ k ≤ 255 Söï hoaït ñoäng : k –> (W) TOS –> PC 11 01xx kkkk kkkk Opcode : Moâ taû : Naïp 8 bit cuûa ‘k’ vaøo thanh ghi W. Boä ñeám chöông trình ñöôïc naïp töø ñænh cuûa vuøng ngaên xeáp Traïng thaùi taùc ñoäng : khoâng Chu kyø : 2 Thí duï : RETLW 0x43 Tröôùc khi thöïc hieän leänh W = x , PC = x , TOS = x Sau khi thöïc hieän leänh W = 0x43 , PC = TOS TOS = TOS – 1 III.3.27. RETURN Return from Subroutine Cuù phaùp : [label] RETURN Söï hoaït ñoäng : TOS –> PC 00 0000 0000 1000 Opcode : Moâ taû : Trôû veà töø chöông trình con. Vuøng ngaên xeáp öôïc laáy ra vaø ñænh cuûa ngaên xeáp ñöôïc naïp vaøo PC Traïng thaùi taùc ñoäng : khoâng Chu kyø : 2 Thí duï : RETURN Tröôùc khi thöïc hieän leänh PC = x , TOS = x Sau khi thöïc hieän leänh PC = TOS , TOS = TOS – 1 III.3.28. RLF Rotate Left f through Carry Cuù phaùp : [label] RLF f,d 0 ≤ f ≤ 127 d = [0,1] C Register f Söï hoaït ñoäng : 00 1101 dfff ffff Opcode : Moâ taû : Noäi dung cuûa thanh ghi (f) quay traùi 1 bit thoâng qua côø Carry Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : C Chu kyø : 1 Thí duï : RLF REG, 0 Tröôùc khi thöïc hieän leänh REG = 1110 0110 , C = 0 Sau khi thöïc hieän leänh REG = 1110 0110 , C = 1 W = 1100 1100 III.3.29. RRF Potate Right f through Carry Cuù phaùp : [label] RRF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] C Register f Söï hoaït ñoäng : 00 1100 dfff ffff Opcode : Moâ taû : Noäi dung cuûa thanh ghi (f) quay phaûi 1 bit thoâng qua côø Carry Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : C Chu kyø : 1 Thí duï : RRF REG, 0 Tröôùc khi thöïc hieän leänh REG = 1110 0110 , C = 0 Sau khi thöïc hieän leänh REG = 1110 0110 , C = 0 W = 0111 0011 III.3.30. SLEEP Cuù phaùp : [label] CLEEP Söï hoaït ñoäng : 00h –> WDT 0 –> WDT prescaler 1 –> 0 –> 00 0000 0110 0011 Opcode : Moâ taû : Bit traïng thaùi taét nguoàn vaø bò xoaù, bit traïng thaùi Timer-out, ñöôïc set. Watchdog Timer vaø boä prescaler cuûa noù bò xoaù. Leänh naøy laøm cho PIC ngöng xöû lyù chöông trình vaø ôû traïng thaùi nghæ taïm thôøi ñeå PIC hoaït ñoäng trôû laïi thì moät trong 3 ñieàu kieän sau xaûy ra : reset chaân MCLR, boä watchdog timer hoaït ñoäng, duøng ngaét ngoaøi Traïng thaùi taùc ñoäng : , Chu kyø : 1 Thí duï : SLEEP Tröôùc khi thöïc hieän leänh WDT counter = x WDT prescaler = x Sau khi thöïc hieän leänh WDT counter = 0x00 WDT prescaler = 0 = 1 , = 0 III.3.31. SUBLW Subtract W from Literal Cuù phaùp : [label] SUBLW k Toaùn haïn : 0 ≤ k ≤ 255 Söï hoaït ñoäng : k - (W) –> (W) 11 110x kkkk kkkk Opcode : Moâ taû : Laáy 8 bit cuûa ‘k’ tröø cho thanh ghi W(phöông phaùp buø nhò phaân) keát quaû ñöôïc löu trong thanh ghi W Traïng thaùi taùc ñoäng : C, DC, Z Chu kyø : 1 Thí duï : SUBLW 0x03 Tröôùc khi thöïc hieän leänh W = 0x01 , C = ? , Z = ? Sau khi thöïc hieän leänh W =0x02 , C = 1 , Z = 0 ; keát quaû >0 Tröôùc khi thöïc hieän leänh W = 0x03 , C = ? , Z = ? Sau khi thöïc hieän leänh W =0x00 , C = 1 , Z = 1 ; keát quaû =0 Tröôùc khi thöïc hieän leänh W = 0x04 , C = ? , Z = ? Sau khi thöïc hieän leänh W =0xFF , C = 0 , Z = 0 ; keát quaû <0 III.3.32. SUBWF Subtract W from f Cuù phaùp : [label] SUBWF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (f) - (W) –> (destination) 00 0010 dfff ffff Opcode : Moâ taû : Laáy thanh ghi (f) tröø cho thanh ghi W Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : C, DC, Z Chu kyø : 1 Thí duï : SUBLW REG,1 Tröôùc khi thöïc hieän leänh REG = 3, W = 2, C = ?, Z = ? Sau khi thöïc hieän leänh REG = 1, W = 2, C = 1, Z = 0 ;keát quaû>0 Tröôùc khi thöïc hieän leänh REG = 2, W = 2, C = ?, Z = ? Sau khi thöïc hieän leänh REG = 0, W = 2, C = 1, Z = 1 ; keát quaû=0 Tröôùc khi thöïc hieän leänh REG = 1, W = 2, C = ?, Z = ? Sau khi thöïc hieän leänh REG = 0xFF, W = 2, C = 0, Z = 0 ;keát quaû<0 III.3.33. SWAPF Swap Nibbles in f Cuù phaùp : [label] SWAPF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (f ) –> (destination ) (f ) –> (destination ) 00 1110 d f f f f f f f Opcode : Moâ taû : Ñoåi noäi dung ñòa chæ cao vaø thaáp cuûa thanh ghi (f) Neáu d = 0 keát quaû ñaët vaøo thanh ghi W Neáu d = 1 keát quaû ñaët vaøo thanh ghi (f) Traïng thaùi taùc ñoäng : khoâng Chu kyø : 1 Thí duï : SWAPF REG,0 Tröôùc khi thöïc hieän leänh REG = 0xF3 Sau khi thöïc hieän leänh REG = 0xF3 W = 0x3F III.3.34. XORLW Exclusive OR Literal with W Cuù phaùp : [label] XORLW k Toaùn haïn : 0 ≤ k ≤ 255 Söï hoaït ñoäng (W) . XOR . (k) –> (W) 11 1010 kkkk kkkk Opcode : Moâ taû : Noäi dung cuûa thanh ghi W ñöôïc XOR vôùi 8 bit ‘k’keát quaû ñaët trong thanh ghi W Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : XORLW 0xAF Tröôùc khi thöïc hieän leänh W = 0xB5 Sau khi thöïc hieän leänh W = 0x1A III.3.35. XORWF Exclusive OR W with f Cuù phaùp : [label] XORWF f,d Toaùn haïn : 0 ≤ f ≤ 127 d = [0,1] Söï hoaït ñoäng : (W) . XOR . (f) –> (destination) 00 0110 dfff ffff Opcode : Moâ taû : XOR noäi dung thanh ghi W vaø thanh ghi (f) Neáu d = 0 keát quaû löu trong thanh ghi W Neáu d = 1 keát quaû löu trong thanh ghi (f) Traïng thaùi taùc ñoäng : Z Chu kyø : 1 Thí duï : XORWF REG,1 Tröôùc khi thöïc hieän leänh W = 0xB5 REG = 0xAF Sau khi thöïc hieän leänh W = 0xB5 REG = 0x1A CHÖÔNG IV : LAÄP TRÌNH HÔÏP NGÖÕ PIC16F84A VÔÙI CHÖÔNG TRÌNH BIEÂN DÒCH MPASM IV.1. Giôùi thieäu chöông trình bieân dòch MPASM MPASM laø chöông trình bieân dòch cho caùc file vieát baèng hôïp ngöõ vôùi nhieàu tính naêng cho taát caû caùc loaïi PIC. Chöông trình naøy naèm trong phaàn meàm MPLAB. MPASM coù theå taïo ra file maõ HEX ñeå naïp vaøo vi ñieàu khieån. Noù coù giao dieän treân caùc heä ñieàu haønh WINDOW MPASM chöùa nhieàu file hoã trôï giuùp cho vieäc vieát chöông ñôn giaûn hôn Khi bieân dòch, MPASM taïo ra caùc file: ‘*.OBJ’, ‘*.HEX’, ‘*.MAP’ file naøy theå hieän chi tieát boä nhôù ñaõ söû duïng, ‘*.LST’ file naøy chöùa noäi dung cuûa chöông trình ñaõ vieát vaø maõ maùy cuûa noù vaø file ‘*.COD’ xaùc ñònh vò trí vaø noäi dung cuûa caùc loãi trong chöông trình IV.2. Caùch vieát moät chöông trình IV.2.1. Caùch bieåu dieãn caùc heä soá thöôøng duøng trong chöông trình Thaäp phaân : D’’ hay . Ví duï : D’100’ hay .100 Thaäp luïc phaân : H’’ hay 0x hay 0h Ví duï H’A8’ hay 0xA8 hay 0A8h Nhò phaân : B’’ Ví duï B’01100110’ IV.2.2. Caùch trình baøy moät leänh Moät doøng leänh thöôøng coù boán phaàn ñöôïc trình baøy nhö sau : Nhaõn Leänh Toaùn haïn ;chuù thích ;chuù thích Khoaûng caùch giöõa hai coät lieân tieáp baèng phím TAB . Moät doøng leänh cuõng coù theå baét ñaàu baèng daáu chaám phaåy Nhaõn : Phaûi ñöôïc ghi baét ñaàu ôû coät 1 Theo sau noù coù theå laø daáu chaám phaåy ( ; ), khoaûng traéng, phím TAB hoaëc keát thuùc doøng Nhaõn phaûi ñöôïc baét ñaàu baèng kyù töï alpha hay moät thanh gaïch döôùi ( _ ) Nhaõn coù theå chöùa caùc kyù töï soá, thanh gaïch döôùi ( _ ) vaø daáu chaám hoûi ‘? ‘ Nhaõn coù theå daøi 32 kyù töï Nhaõn khoâng theå söû duïng töø daønh rieâng cuûa nhaõn trong chöông trình hôïp ngöõ. Ví duï nhaõn laø “B” thì khoâng ñöôïc vì noù laø töø daønh rieâng bieåu dieãn “soá nhò phaân” noù khoâng theå söû duïng cho nhaõn Leänh : Caùc leänh phaûi ñöôïc vieát trong coät thöù hai hoaëc lôùn hôn Neáu nhaõn vaø leänh vieát cuøng moät haøng thì phía sau nhaõn phaûi coù daáu hai chaám ( :) hoaëc moät hay nhieàu khoaûng traéng hoaëc moät khoaûng TAB, thöôøng duøng khoaûng TAB Toaùn haïn : Phaûi ñöôïc vieát sau leänh vaø caùch leänh bôûi moät hay nhieàu khoaûng traéng hoaëc moät khoaûng TAB Khi coù hai toaùn haïn phaûi ñöôïc caùch nhau baèng daáu phaåy ( , ) caùc khoaûng traéng coù theå ñaët sau daáu phaåy ñeå deã quan saùt Chuù thích : Taát caû moïi thöù vieát sau daáu chaám phaåy ( ; ) ñeàu voâ nghóa vaø noù xem nhö keát thuùc doøng ví duï ;Vi ñieàu khieån PIC16F84A LIST P=16F84A ;loaïi VÑK ORG 0 CLRF 0C LOOP INCF 0C, 1 GOTO LOOP END IV.2.3. Noäi dung cuûa moät chöông trình Moät chöông trình vieát baèng MPASM coù noäi dung chính nhö sau: ;************** KHÔÛI TAÏO PIC*********************** TITLE “ TEÂN CHÖÔNG TRÌNH “ LIST P=PIC16F84A INCLUDE P16F84A.INC __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ;**************KHAI BAÙO NHAÕN****************** ;**************BAÉT ÑAÀU CHÖÔNG TRÌNH************ ORG 000H GOTO MAIN ORG 004H GOTO ISR ORG 005H MAIN . . . ISR . . . RETFIE . . END Maãu chöông trình treân laø daïng cô baûn cuûa moät chöông trình vieát baèng MPASM. Moät chöông trình coù 3 phaàn chính Khôûi taïo PIC Phaàn naøy duøng ñeå khai baùo loaïi vi ñieàu khieån ñöôïc duøng vaø caùch hoaït ñoäng cuûa noù ñeå chöông trình bieát ñöôïc laø noù ñang laøm vieäc vôùi con vi ñieàu khieån naøo. TITLE : duøng ñeå ghi chuù teân chöông trình, teân chöông trình phaûi naèm trong daáu ngoaëc keùp “”. Ngoaøi ra coù theå vieát teân chöông trình hay caùc lôøi giôùi thieäu baèng caùch ñaët daáu chaám phaåy ( ; ) phía tröôùc LIST : khai baùo loaïi vi ñieàu khieån ñang söû duïng söû duïng INCLUDE : duøng ñeå ñöa vaøo caùc file hoã trôï trong chöông trình, neáu caùc file naèm trong thö muïc goác cuûa chöông trình MPLAB thì ngöôøi laäp trình chæ caàn ghi teân file ñoù keøm theo phaàn ñuoâi laø ‘.INC’ nhö treân laø P16F84A.INC . Neáu caùc file naøy ñaët ôû nôi khaùc thì phaûi chæ roõ ñöôøng daãn, teân file naøy (keå caû phaàn môû roäng ) khoâng ñöôïc quaù 60 kyù töï __CONFIG : duøng ñeå thieát laäp caùc cheá ñoä hoaït ñoäng cuûa PIC, caùc cheá ñoä naøy coù theå ñöôïc thieát laäp khi naïp chöông cho vi ñieàu khieån. Tuy nhieân, neáu duøng chæ thò CONFIG thì caùc cheá ñoä naøy seõ töï thieát laäp. Trong MPASM caùc ñònh nghóa nhaõn naøy ñöôïc hieåu nhö sau: _XT_OSC 0011 1111 1111 1101 (3FFDH) _WDT_OFF 0011 1111 1111 1011 (3FFBH) _PWRTE_ON 0011 1111 1111 0111 (3FF7H) _CP_OFF 0011 1111 1111 1111 (3FFFH) Vì caùc nhaõn naøy ñöôïc AND vôùi nhau cho neân keát quaû cuûa chæ thò CONFIG laø 0011 1111 1111 0001 (3FF1H) Coù theå vieát : __CONFIG h’3FF1’ Khai baùo nhaõn Nhaõn ñöôïc duøng ñeå khai baùo ñòa chæ cuûa oâ nhôù hay moät giaù trò haèng naøo ñoù Ví duï : tgdem EQU Oc ;khai baùo tgdem laø oâ nhôù coù ñòa chæ 0ch Baét ñaàu chöông trình ORG duøng chæ ñònh ñòa chæ laøm vieäc. Khi môû nguoàn hoaëc Reset PIC noù seõ nhaûy ñeán ñòa chæ 000h, khi

Các file đính kèm theo tài liệu này:

  • docLuanVan.doc
Tài liệu liên quan