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
...
138 trang |
Chia sẻ: hunglv | Lượt xem: 1136 | Lượt tải: 0
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:
- LuanVan.doc