You are on page 1of 178

TRƯỜNG SĨ QUAN CHKT THÔNG TIN

NGUYEN VĂN TÌNH Ko h¸ HÖ ®μo to ¹ DH12

dμi h ¹n ĐAI HỌC

TAI LIỆU VI ĐIỀU KHIỂN
PIC 16F877A

N ¨m 2008 SI QUAN CHI HUY KI THUẬT THÔNG TIN

LỜI NÓI ĐẦU Chào các đồng chí.Mình tên là nguyễn văn tình là hoc viên tiểu đoàn 18 khóa ĐH12 .Sau nhiều thời gian nghiên cứu về vi điều khiển,và nhận thấy là chúng ta học ĐIỆN TỬ VIỄN THÔNG nhưng chúng ta chưa được các thầy dạy nhiều về vi điều khiển .Chính vì điều đó nên hôm nay mình quyết định cho xuất bản quyển sách về một loại vi điều khiển mà nó có những tính năng vượt trội so với nhiều dòng vi điều khiển trước như:8051,AVR,P89v51….Đó là dòng vi điều khiển của hãng MICROCHIP .Vi điều khiển hiện nay cũng như tương lai là có rất nhiều ứng dụng trong cuộc sống,không chỉ cho những đồng chí thích nghiên cứu về tự động hóa hay về robocon …v..v..Vì hiện tại là dòng vi điều khiển này cũng chưa được đưa vào dạy trong các trường đại học mà đa số các trường chỉ dạy về 8051 và cũng chưa có tài liệu chính thống nào.Nay mình cho ra đời quyển sách này với mục đích giúp chúng ta tiếp cận công nghệ mới chứ không để lạc hậu so với những sinh viên bên ngoài.Vì nhiều lý do và khả năng có hạn nên quá trình biên soạn có nhiều sai sót.mong các đồng chí đọc và cho ý kiến để chúng ta cùng sửa chữa. Mọi thắc mắc sin liện hệ với mình NGUYỄN VĂN TÌNH c3/d18/dh12h.Hay qua email henlagka@yahoo.com. DT:0583743625

Nha Trang ,ngay 25 tháng 12 năm 2008

4.4 RISC V A Ø CISC 1.2 PORTB 2.10 COMPARATOR 2.2 THANH GHI MUÏCÑÍCH CHUNG GPR 2.9 ADC 2.4.2.3 SÔ Ñ O À H O Á VI Ñ IEÀ U H IE PIC16F877A K I K ÅN 2.6 C A Ù C D O Ø N G V A Ø A Ù CH PIC C LÖÏA CHOÏNVI Ñ IE À U H IEÅ N K PIC 1.1 B O Ä H Ô Ù N CHÖÔNG TRÌNH 2.4 PORTD 2.MUÏCLUÏC CHÖÔNG 1 TOÅNG QUAN VEÀ VI Ñ IE À U KHIE Å NPIC 1.5 PORTE 2.10.1 SÔ Ñ O À H A Â N Ñ IEÀ U H IEÅ N C VI K PIC16F877A 2.1 B O Ä ÏO Ñ IE Ä N Ù P S A Ù N H TA A SO 2.4.7 TIMER1 2.2 B O Ä H Ô Ù Ö Õ IE Ä U N D L 2.3 K IE Á N R U Ù C T PIC 1.7 NGO N G Ö Õ A Ä P ÂN L TRÌNH CHO PIC 1.6 TIMER 0 2.3 PORTC 2.5 C A Ù C C O Å N G A Á T H A Ä P U Û A XU N C PIC16F877A 2.2 TAÏISAO L A Ø PIC M A Ø KHOÂNG L A Ø A Ù C O Ï VI Ñ IEÀU K H IEÅ N C H KHAÙC?? 1.8 TIMER2 2.4.2 M O Ä T A Ø T H O Â N G O Á VI Ñ IE À U H IE Å N V I S VEÀ K PIC16F877A 2.5.8 MAÏCHNAÏPPIC 1.5.5.1 THANH GHI CH Ö Ù C A Ê N GÑ A Ë CBIE Ä T N SFR 2.3 STACK 2.2.4.4 T O Å Ö Ù C O Ä H Ô Ù CH B N 2.5.12 GIAO T IE Á P O Á T IE Á P N I .11 CCP 2.1 PIC L A Ø ?? GÌ 1.9 BOOTLOADER V A Ø ICP (In Circuit Programming) CHÖÔNG 2 VI Ñ IEÀU K H IEÅ N PIC16F877A 2.1 PORTA 2.5 PIPELINING 1.5.

12.1.2 SPI SLAVE MODE 2.1.1.14.1 “ÑA ÙN H ÖÙ C ” Ñ IE À U H IEÅ N TH VI K CHÖÔNG 3 T A Ä P E Ä N H C U Û A Ñ IE À U L VI KHIE Å NPIC 3.1 TRUYEÀN Ö ÕL IE Ä U D QUA C H U AÅ N GIAO T IE Á P USART B A Á T O À N G O Ä Ñ B 2.4.14.3 TRUYEÀN Ö ÕL IE Ä U D QUA C H U AÅ N GIAO T IE Á P USART Ñ O À N G O Ä B SLAVE MODE 2.4.1 N G A ÉT INT 2.12.1.2.1 SPI 2.6 C H E Á O Ä Ñ SLEEP 2.2 C A Ù C A Ë CTÍNH C U Û A Ñ OSCILLATOR 2.12.3 C A Á U R U Ù C C U Û A Ä T T M O CHÖÔNG TRÌNH ASSEMBLY V IE Á T CHO VI Ñ IE À U H IE Å N K PIC .12.1.2 I2C 2. M S 2.1.12.1.2 T A Ä P E Ä N H C U Û A Ñ IE À U H IE Å N L VI K PIC 3.1 CONFIGURATION BIT 2.2 USART Ñ O À N G O Ä B 2.2.14.1.12.2.2 N G A ÉT SÖ ÏTHAY Ñ O Å TRAÏNGT H A ÙC A Ù C DO I I PIN TRONG PORTB 2.12.12.2.12.14.2 I2C MASTER MODE 2.1.2.2 MSSP 2.5 WATCHDOG TIMER (WDT) 2.12.1.2.2.12.1 V A Ø N E Ù T LÖÔÏCV E À A Ä P E Ä N H U Û A Ñ IEÀ U H IE Å N I SÔ T L C VI K PIC 3.14.1 TRUYEÀN Ö ÕL IE Ä U D QUA C H U AÅ N GIAO T IE Á P USART Ñ O À N G O Ä B MASTER MODE 2.1.2 N H A Ä N Ö Õ IE Ä U D L QUA C H UA Å N GIAO T IE Á P USART Ñ O À N G O Ä B MASTER MODE 2.1 SPI MASTER MODE 2.1.13 C O Å N G GIAO T IE Á P SONG SONG PSP (PARALLEL SLAVE PORT) 2.4 N H A Ä N Ö Õ IE Ä U D L QUA C H UA Å N GIAO T IE Á P USART Ñ O À N G O Ä B SLAVE MODE 2.1 USART 2.2.2.2 N H A Ä N Ö Õ IE Ä U D L QUA C H UA Å N GIAO T IE Á P USART B A Á T O À N G O Ä Ñ B 2.1 USART B A Á T O À N G O Ä Ñ B 2.12.12.6.2.14.14.12.1.14.14.2.12.3 C A Ù C H E Á O Ä C Ñ RESET 2.14 T O Å N G QUAN V E À O Ä T O ÁÑ A Ë CTÍNH CUÛ ACPU.1 I2C SLAVE MODE 2.1.2.12.4 N GA ÉT (INTERRUPT) 2.

5 TIMER V A Ø Ù N G Ö DUÏNG 4.1 Ñ IE À U H IE Å N A Ù C K C PORT I/O 4.1.2 M O Ä T O ÁÖ Ù N G S DUÏNGV E À A Ë CTÍNH I/O C U Û A A Ù C Ñ C PORT Ñ IE À U H IEÅ N K 4.4 N GA ÉT A Ø A Á U R U Ù C C U Û A Ä T V C T M O CHÖÔNG TRÌNH N GA ÉT 4.2 VI Ñ IE À U H IEÅ N K PIC16F877A V A Ø GHI DÒCH74HC595 IC 4.3 PIC16F877A V A Ø LED 7 ÑOAÏN 4.1 TIMER V A Ø O A Ñ O Ä N G Ò N HTH Ô Ø I H ÏT Ñ PHUÏLUÏC 1 SÔ Ñ O À H O Á C A Ù C K I PORT C U Û A Ñ IE À U H IE Å N VI K PIC16F877A PHUÏLUÏC 2 THANH GHI SFR (SPECIAL FUNCTION REGISTER) .1.CHÖÔNG 4 M O Ä T O ÁÖ Ù N G S DUÏNGCUÏT H E Å U Û A C PIC16F877A 4.5.1 CHÖÔNG TRÌNH DELAY 4.

CHÖÔNG 1 T O Å N G QUAN V E À ÑIE À UK H IE Å N VI PIC
1.1 PIC LA ØGÌ ?? PIC la ø v ieá t ta ét cu û a “Programable Intelligent Computer”, coù theå taïm d òch laø “m aùy tính thoâng minh k haû trình” do haõng Genenral Instrument ñaët teân cho vi ñieàu khieån ñaàu tieân cuûa hoï: PIC1650 ñöôïc thieát keá ñeå duønglaøm caùcthieát bò ngoaïi vi cho vi ñieàu khieån CP1600. Vi ñieàu khieån naøy sau ñoù ñöôïc nghieân cöùu phaùt trieån theâm vaø tö ø ñ o ù hình thaønh neân doøng vi ñieàu khieånPIC ngaøynay. 1.2 TA ÏISAO L A Ø PIC M A Ø O Â NG C A Ù C O ÏVI Ñ IE À U H IE Å N KH LAØ H K KHAÙC?? Hieän nay treân thò tröôøng coù raát nhieàu hoï vi ñieàu khieån nhö 8051, Motorola 68HC, AVR, ARM,... N goaøi hoï 8051 ñöôïc höôùng daãn m oät caùch caên baûn ô û m oâi tröôøng ñaïi hoïc, baûn thaân ngöôø i v ieát ñaõ choïn hoï vi ñieàu khieån PIC ñeå m ôû roäng voán kieán thöùcvaø phaùt trieån caùc öùng duïng treâncoângcuï naøyvì caùcnguyeânnhaânsau: Hoïvi ñieàukhieånnaøyco ùth e åtìm mua deã daøngtaïi thò tröôøngV ieätNam. G iaùthaønh khoângquaùñaét. C o ùñ a à yñ u ûc aù ctính naêngcuûam oätvi ñieàukhieånkhi hoaït ñoängñoäclaäp. L aø m o ät sö ï b oå sung raát toát v eà k ieán th ö ùc cuõng nhö v eà ö ù ng duïng cho hoï vi ñieàu khieån mang tính truyeàn thoáng:hoï vi ñieàukhieån8051. Soá löôïng ngöôøi söû duïng hoï vi ñieàu khieån PIC. Hieän nay taïi Vieät Nam cuõngnhö treân theá giôùi,hoï vi ñ ieàu k h ie ån n aøy ïc sö ûduïng khaùroäng raõi.Ñieàu naøytaïo nhieàu thuaän lôïi trong ñ öô qu aùtrình tìm hieåu vaø p haù ttrieån caù cö ùn gduïng nhö: soá löôïng taøilieäu, soá löôïng caùcöùngduïng m ô ûñaõ ñö ô ïc p h aù ttrieån th aø nh co âng , deã d aø ng trao ñoåi,hoïc taäp,deã daøngtìm ñöôïc söï chæ daãn khi g aëpkhoùkhaên,… S öï hoãtrôï cu û anhaøsaû nxu aátv eàtrình bieândòch, caùccoângcuï laäptrình, naïp chöông trình t ö ø ñôn giaûnñeánp höùctaïp ,… C aùctính naêng ña daïng cuûavi ñieàu khieån PIC, v a ø ca ù ctính naêng naøy khoângngöøngñöôïc phaùttrieån. 1.3 K IE Á N U Ù CPIC TR C aáu truùcphaàn cöùngcuûam oätvi ñieàu khieån ñöôïc thieát keá theo hai daïng kieán truùc:kieán truùc Von Neuman v aøk ieán tru ù cHavard.

Hình 1.1: K ieántruùcHavard vaøk ie án truù cVon-Neuman T oå chöùc haàn cöùng cuûa PIC ñöôïc thieát keá theo kieán truùc Havard. Ñieåm khaùc bieät giöõa kieán p truùcHavard v a økieántruùcVon-Neuman laø caáutru ù cb o än h ô ùd ö õlieä u v a øb o än h ôùchöông trình. Ñ oáivôùikieán truù cVon-Neuman, b o ä n h ô ù d ö õlieäu v aø b o ä n h ô ùchöông trình naèm chung trong m o ät b oä nh ô ùdo ñ o ùta co ùth e å to å ch ö ù c,ca ân ñ o áim o ätcaù c hlinh hoaït boä nhôùchöông trình v a øb o än h ôùd ö õ , lieä u . Tuy n h ieân ñ ie àu n aøyc hæ co ùy ù nghóa khi to á cñ o ä x ö ûlí cu ûaCPU p haû iraát cao, vì v ôù icaáu tru ùc ño ù , trong cuøng m oät thôøi ñieåm CPU chæ coù theå töông taù c v ô ù i b o ä n h ô ù d ö õ lieäu h o aë c b o ä n h ô ù chöông trình. Nhö vaäy co ù th eå no ù ik ieán tru ù c Von-Neuman khoâng thích hôïp v ô ù icaáu tru ùc cu ûa m o ätvi ñieàukhieån. Ñ oáivôù ik ieán truù c Havard, b o ä n h ô ù d ö õ lie ä u v a ø b o ä n h ô ù chöông trình taùch ra thaønh hai boä nhôù rieâng bieät. Do ñ o ù trong cuøngm oätthôøiñieåm CPU c o ùth eå töông taù cv ô ù ic a û hai b o ä nh ô ù,nhö v a ä y to á cñ o äx ö ûlí cu ûavi ñieàukhieånñöôïc caûithieänñaùngkeå. M oätñieåm caà n c h u ù y ù nö õ alaø taäp leän h trong kieán truùcHavard co ù theå ñö ô ïc to öu tu ø ytheo yeâu ái caàu kieán tru ù ccu ûa vi ñieàu khieån m aø khoâng phuï thuoäc vaøo caáu truùcdöõ lieäu. Ví du ï, ñoái vôù ivi ñieàu khieån doøng 16F, ñ o ä d aø i leänh luoân l a ø 14 bit (trong khi döõ lieäu ñöôïc toå c thaønh töøng chöù byte), co ø nño ái vô ù ik ieán tru ùcVon-Neuman, ñ o ä d aø ileän h lu o ân laø b o äi so á cu û a 1 byte (do döõ lieäu ñöôïc to åch ö ù cth aø n htö ø n gbyte). Ñ aëcñieåm naøyñöôïc minh hoïa cuï theåtrong hình 1.1. 1.4 RISC v a øCISC Nhö ñ a õ trình b a ø y ô û treân, kieán truùc Havard laø khaùi nieäm m ôùi hôn so vôùi k ieán truù c VonNeuman. K haùinieäm naøyñöôïc hình thaønhnhaèm caûitieán toácñoä thöïc thi cuûam oätvi ñieàu khieån. Qua v ie äc taùc h rôø ib o ä n h ôù chöông trình v a ø b o ä n h ôù d ö õ lieä u , bus chöông trình v a ø bus dö õ lieäu , CPU coùthe å c uø n g m o ät luù ctruy x uaát caû b oä nh ô ùchöông trình v aø b o ä n h ô ùd ö õ lie äu , g iu ù p taê n g to ác ñ o äx ö ûlí cu ûavi ñieàu khieån leân gaáp ñoâi.Ñ oàngthôøicaáu truùcleänh k ho âng co ø np hu ï th u oäc vaø ocaáu tru ùcdö õlieäu nö õm aøco ùth eålinh ñoängñieàuchæ nhtuøytheo k haûnaêng v aøto ácño äcu ûatöøngvi ñieàu a

k hieån. V aø ñeå tieáp tuïc caûi tieán to á c ñoä thöïc thi leänh, taäp leänh cu û a hoï vi ñieàu khieån PIC ñöôïc thieátkeá sao cho chieàu daøim aõleänh luoân coá ñònh (ví du ï ñoáivôùihoï 16Fxxxx chieàu d aøim aõleänh lu oân laø 14 bit) v a ø cho pheùp thöïc thi leänh trong m oätchu kì cu ûaxung clock ( ngoaïi trö øm o ätso á trö ô ø ng hô ïp ñaëc b ieätnhö leänh nhaû y ,leänh goïi chöông trình con … c a à n hai chu kì xung ñ o à n g h o à). Ñ ie àu n a ø yco ùnghóa taäp leänh cuûavi ñieàu khieån thuoäc caáu truùcHavard se õ ít leänh hôn, ngaén hôn, ñôn giaûnhôn ñeåñaùpöù ngy eâucaàum aõ hoùleänhbaèng m o ätso álöôïng bit nhaátñònh. a Vi ñieàu khieån ñöôïc to å c h ö ù c theo kieán truùc Havard co ø n ñöôïc goïi la ø vi ñieàu khieån RISC (Reduced Instruction Set Computer) hay vi ñieàu khieån coù taäp leänh ruùt goïn. Vi ñieàu khieån ñöôïc thieát k eá theo kieán truùc Von-Neuman coø n ñöôïc goïi l a ø vi ñieàu khieån CISC (Complex Instruction Set Computer) hay vi ñieàu khieån co ù taäp leänh phöùctaïp vì m aõ leänh cu û a noù khoâng p haû ila øm o ä tso ác o áñònh m aøluoânla øb o ä iso ác u û a8 bit (1 byte). 1.5 PIPELINING Ñ aâychính la ø cô ch e á x ö û lí leänh cuûacaùcvi ñieàu khieån PIC. M oätchu kì leänh cuûavi ñieàu k hieån seõ bao goàm 4 xung clock. Ví duï ta söû du ïng oscillator c o ù ta à n so á 4 MHZ, thì xung le ä n h seõ c o ù ta à nso á1 MHz (chu kì leänh se õl a ø1 us). G ia û sö û c o ùmoätñoaïn chöông trình nhö sau: ta 1. MOVLW 55h 2. MOVWF PORTB 3. CALL SUB_1 4. BSF PORTA,BIT3 5. instruction @ address SUB_1 Ô Ûñaây ta chæ baønñeán qui trình vi ñieàu k hieån xöûlí ñoaïn chöông trình treân thoângqua töøngchu kì leänh.Q uaùtrình treânseõñö ô ïc thö ïc thi nhö sau:

Hình 1.2: Cô cheápipelining

Q uaùtrình naøyñöôïc thöïc hieäntöông tö ï cho caùcleänhtieáptheo cu û achöông trình. m oãi cô leänh xem nhö chæ ñöôïc thöïc thi trong m oätchu kì leänh. ngoaøira c o ø nc o ùcaù cvi ñieàukhieån28.6 C A Ù C O Ø N G D PIC V A Ø A Ù CH ÏA C HO ÏNVI Ñ IE À U H IE Å N C LÖ K PIC C aùckí hieäucuûavi ñieàukhieånPIC: PIC12xxxx: ño ädaø ileänh12 bit PIC16xxxx: ño ädaø ileänh14 bit PIC18xxxx: ño ädaø ileänh16 bit C: PIC c o ùb o än h ô ùEPROM (c h æc o ù16C84 la øEEPROM) F: PIC c o ùb o än h ô ùflash LF: PIC c o ùb o än h ô ùflash hoaït ñoängô ûñ ie än aù pthaáp LV: töông töï nhö LF. C aùchlöïa choïn m oätvi ñieàukhieånPIC p hu øhôïp: T röôù cheátcaànchuùy ùñeánsoáchaâncu ûavi ñieàukhieåncaànthieátcho öùngduïng. TCY5: thöïc thi leänhñaàutieâncuûaSUB_1 vaøñ o ïc leänh tieáptheo cu û aSUB_1. 40. Thoâng thöôøng.v aø m o ät chu kì xung clock nöõañ eå g iaû i m a õ v a øthöïc thi leänh. ta caàn m oät chu kì leänh ñeå goïi leänh ño ù. c oø nPIC16F877A l a øflash). m oãileänhchæcaànm oätchu kì leänhñeå thöïc thi xong. ñoïc leänh4. ñ a â ylaøkí hieäu cu õ Beâncaïnh ñ o ùm o ä tso ávi ñieäu k h ie ånco ùkí hieäuxxFxxx laø EEPROM. Nhö v aäy co ù the å xem leânh 3 caàn2 chu kì xung clock ñeå thöïc thi. Ñ oáivôùicaùcleänh m aø quaù trình thöïc thi n o ùla ø m thay ño åig iaùtrò thanh ghi PC (Program Counter) caàn hai chu kì leä n h ñeå thöïc thi vì phaûi thöïc hieän vieäc goïi leänh ô û ñòa ch æ thanh ghi PC chæ tô ù i. neáu co ùth eâm ch öõA ô ûc u o áila øflash (ví duï PIC16F877 la øEEPROM. C o ùnhieàu vi ñieàu khieån PIC vôùi soá löôïng chaân khaùc nhau. V ôùi cheá pipelining ñöôïc trình b a ø y ô û treân. TCY4: vì leänh 4 khoângphaûila ø le ä n h se õ ñöôïc thöïc thi theo qui trình thöïc thi cu ûachöông trình (leänh tieáp theo ñöôïc thöïc thi p haû ilaø leänh ñaàu tieân taïi label SUB_1) neân chu kì thöïc thi leänh naøy chæ ñöôïc duøng ñeå ñoïc leänh ñaàu tieân taïi label SUB_1. Ô ÛVieätNam phoåbieánnhaátlaø caùchoï vi ñieàukhieånPIC do haõngMicrochip saûnxuaát. . 44. Ngoaøira c o ø nc o ùth eâ m m o ä td o ø n gvi ñieàukhieånPIC m ô ù ila ødsPIC. 1.TCY0: ñoïc leänh1 TCY1: thöïc thi leänh1.ñeå thöïc thi m oät leänh.Sau khi ñ a õ x a ù c ñònh ñuùngvò trí leänh trong thanh ghi PC. … chaân. thaäm chí c o ù vi ñieàu k hieån chæ coù 8 chaân. ñoïc leänh3 TCY3: thöïc thi leänh3. ñoïc leänh2 TCY2: thöïc thi leänh2.

1.Caàn choïn vi ñieàu khieån PIC c o ù b o ä n h ô ù flash ñ eå c o ù th eå naïp xoùa chöông trình ñöôïc nhieàulaànhôn. caù c ngoân ngöõlaäp trình caáp cao hôn bao goàm C. Sau cuøngcaànchuùy ùñeánb o änh ô ùchöông trình m aøvi ñieàukhieåncho pheùp. töông thích v ô ù itrình bieân dòch MPLAB. c o ø nc o ùra á tnhieàu m aï h naïp ñöôïc cheá c thieátkeá daønhcho vi ñieàukhieånPIC. Pascal.chaúnghaïn nhö ICprog. … Ngoaøira c o ø n c o ù m o ät soá ng o ân ng ö õ laäp trình ñöôïc phaùttrieån daønh rieâng cho PIC nhö PICBasic. . Ngoaøira moïi thoângtin veà caùchlöïa choïn vi ñieàu khieån PIC co ù th eå ñö ô ïc tìm thaáy trong cuoánsaùch“Select PIC guide” do nhaø saûnxuaátMicrochip cung caáp. WARP-13A v a ø MCP-USB: hai maïch naïp naøy gioáng vôùimaïch naïp PICSTART PLUS do nh aø saû n xuaát Microchip cung caáp. D oøng saûn phaåm chính th oáng naø y co ù öu th e á la ø naïp ñöôïc cho ta á t ca û c a ù c vi ñieàu khieån PIC. C où theå du øng saû n p haåm naøy naïp cho vi ñieàu caùc ñeå khieån khaùc thoâng qua chöông trình MPLAB. tuy nhieân giaù thaø n h raát cao vaø thöôøng gaëp raát nhieàuk hoùk haêntrong qu aùtrình mua saû nphaåm. Basic. Ngoaøira do tính naêngcho pheùp nhieàu ñoä naïp khaù cnhau. H aàuheátcaùcmaïch naïp ñeàuhoãtrôï tính naêngnaïp chöông trình naøy. tuy nhieânta c u õ n gc o ùth eåsö ûduïng chöông trình naïp Icprog. Ngoân ngöõlaäp trình caáp thaáp co ù MPLAB (ñöôïc cung caáp m ieãn phí b ô û inhaø saûn xuaát Microchip).7 N G O Â N G Ö Õ L A Ä P N TRÌNH CHO PIC N goânngöõlaä p trình cho PIC raát ña daïng. C o ùth e åsô löô ïc m o ätsoámaïch naïp cho PIC nhö sau: JDM programmer: maïch naïp naøy duøngchöông trình naïp Icprog cho pheùp naïp c aù c vi ñieàu khieån PIC c où h o ã trô ï tính naêng naïp chöông trình ñieän aùp thaáp ICSP (In Circuit Serial Programming). nghóa l a ø ta c où th eå trö ïc tieá p d u ø n g chöông trình MPLAB ñeå naïp cho vi ñieàu khieån PIC m aøkhoâng caàn s ö ûduïng moätchöông trình naïp khaùc.… 1. Tieáp theo c a à n c h u ù y ù ñeán caùc khoái chöùcnaêng ñöôïc tích hôïp saü n trong vi ñieàu khieån. PRO MATE II. MPLAB ICD 2.8 MAÏCHNAÏPPIC Ñ a â y c u õ ng la ø m oätdoøngsaûnphaåm raát ña daïng daønhcho vi ñieàu khieån PIC. P16PRO40: maïch naïp naøy do Nigel thieát k eá v aø cuõ n g k haù n oåi tieáng . C o ùth e å sö ûduïng caùc m aïch naïp ñöôïc cung caáp b ôû inh aøsaû n x uaát laø h aõ ng Microchip nhö: PICSTART plus. MikroBasic. caùcchuaångiao tieápbeântrong. O Â ngcoø nth ie át keá caûchöông trình naïp. MPLAB PM 3.

vaø m oïi thoâng tin v e à sô ñoà maïch naïp. hoaøn toaøn coù theå laép raùp töï m oätcaùch deã daøng. beân caïnh ñ o ùm o ã imaïch naïp caànñöôïc s ö ûduïng vôùim oätchöông trình naïp thích hôïp. thi coâng. C aùcmaïch naïp k eå tre ân co ù öu ñ ie å m raát lô ù n laø ñôn g iaû n. reû tieàn. Tuy deã nhieân caùcm aïch naïp treân c o ùnhöôïc ñieåm la ø haïn ch e á v e à so ávi ñieàu khieån ñöôïc hoã trôï.Maïch naïp Universal cu û aWilliem: ñaâykhoângphaûila ømaïch naïp chuyeânduïng daønhcho PIC nhö P16PRO40. 1.9 BOOTLOADER V A Ø ICP (In Circuit Programming) . caùchthieát keá.kieåm tra vaø chöông trình naïp ñeàu daøng tìm ñöôïc vaø download mieãn phí thoângqua maïng Internet.

CHÖÔNG 2 VI Ñ IE À U KHIEÅ NPIC16F877A
2.1 SÔ Ñ O À H A Â N Ñ IE À U H IEÅ N C VI K PIC16F877A

Hình 2.1 Vi ñieàukhieånPIC16F877A/PIC16F874A v a øc a ù cdaïng sô ñ o àchaân

2.2 M O Ä T A Ø T H O Â N G O Á E ÀVI Ñ IE À U H IE Å N V I S V K PIC16F877A Ñ a â yla øvi ñieàu khieånthuoächoï PIC16Fxxx vôùitaäp leänh goàm 35 leä n h c o ùñ o äd a ø i14 bit. M oãileänhñeàu ñöôïc thöïc thi trong m oätchu kì xung clock. T o ácñ o ähoaït ñoängtoáiña cho p h eù pla ø 20 MHz vô ù im o ätchu kì le ä n h la ø 200ns. B oä n hô ùchöông trình 8Kx14 bit, b o ä n h ô ùd ö õlie äu 368x8 byte RAM v a ø b o ä n hô ùdö õlieäu EEPROM v ôù idung löôïng 256x8 byte. S o á PORT I/O l a ø 5 v ô ù i33 pin I/O. C aùcñaëctính ngoaïi vi bao goàm caùc khoáichöùcnaêngsau: Timer0: boäñeám 8 bit v ô ù ib o ächia ta à nso á8 bit. Timer1: b oä ñeám 16 bit v ô ù ib o ä chia taàn soá,co ù theå thöïc hieän chöùcnaêng ñeám döïa vaøo xung clock ngoaïi vi ngay khi vi ñieàukhieånhoaït ñoängô ûch eáñ o äsleep. Timer2: boäñeám 8 bit v ô ù ib o ächia taànso á,b o äpostcaler. Hai b o äCapture/so saù nh/ñieàu ñoäroângxung. cheá C aùcchuaångiao tieápnoái tieápSSP (Synchronous Serial Port), SPI v a øI2C. Chuaångiao tieápnoáitieápUSART v ô ù i9 bit ñòa chæ. Coånggiao tieápsong song PSP (Parallel Slave Port) vôùicaùc chaân ñieàu khieån RD, WR, CS ô ûbeânngoaøi. C aùcñaëctính Analog: 8 keânhchuyeånñoåiADC 10 bit. Hai b o äso saùnh. Beâncaïnh ñ o ùla øm o ä tv a ø iñ a ë ctính khaùccuûavi ñieàukhieånnhö: B oänh ô ùflash vôùikhaûnaêngghi xoùañöôïc 100.000 laàn. B o ä n h ôù EEPROM vôùikhaûnaêngghi xoùañöôïc 1.000.000 laàn. D öõlieäub o ä n hôEEPROM c o ùth eålöu trö õtreân40 naêm. ù K haûnaêngtöï naïp chöông trình vôùisöï ñieàukhieåncuûaphaànmeàm. Naïp ñöôïc chöông trình ngay treân maïch ñieän ICSP (In Circuit Serial Programming) thoângqua 2 chaân. Watchdog Timer v ô ù ib o ädao ñoängtrong. C höùcnaêngbaûom aätm aõchöông trình. C h eá ño äSleep. C o ùth e åh o aït ñ o ä n gv ô ù inhieàudaïng Oscillator khaùcnhau.

2.3 SÔ Ñ O À H O Á VI ÑIE À UK H IE Å N K I PIC16F877A

Hình 2.2 Sô ño àk h oáivi ñieàukhieånPIC16F877A.

2.1 B O Ä H Ô Ù N CHÖÔNG TRÌNH B o ä n h ôù chöông trình cu ûa vi ñieàu khieån PIC16F877A la ø b o ä n h ô ù flash. b o ä ñeám chöông trình seõ chæ ñeán ñòa chæ 0000h (Reset vector).4.3 B oän hô ùchöông trình PIC16F877A . B oä n h ô ùstack se õ ñöôïc ñeàcaäpcuï theåtrong phaànsau. bao goàm caùc thanh ghi c où c h ö ù c naêng ñaëc bieät SFG (Special Function Register) naèm ô û caùc vuøng ñòa ch æ th aáp v aø c aùc thanh ghi muïc ñích chung GPR (General Purpose Register) naèm ô û vuøng ñòa chæ coønlaïi trong bank. Ñ eå m aõ hoùañöôïc ñòa chæ cuûa8K word b oä nh ô ù chöông trình.2. Ñ oái v ô ùi PIC16F877A b o ä nhôùd öõ lieäu ñöôïc chia ra laøm 4 bank. M oãibank c o ùdung löôïng 128 byte.2 B O Ä H Ô Ù Ö Õ IE Ä U N D L B o ä n hô ù d ö õ lie äu cu ûa PIC la ø b o ä n h ô ù EEPROM ñöôïc chia ra laøm nhieàu bank. B o ä nh ô ù chöông trình khoâng bao goàm b o ä nh ô ùstack vaø khoâng ñöôïc ñòa ch æ h o ù a b ô û i b o ä ñeám chöông trình. Sô ñ o à cu ï the å cu ûa b oä n h ôù dö õ lieäu PIC16F877A nhö sau: Hình 2. Khi co ù ng aét x aû y ra.4. C aùc thanh ghi SFR thöôøng xuyeân ñöôïc söû duïng (ví duï nhö thanh ghi STATUS) se õ ñöôïc ñ a ë t ô û ta á t c a ø c a ù c bank cu û a b oä nhôù döõ lieäu giuùp thu aän tieän trong qu aù trình truy xu aát vaø laøm giaû m b ôùt leänh cu û a chöông trình. 2. Nhö v aäy b o ä nh ô ù chöông trình coù k haû naêng chöùa ñöôïc 8*1024 = 8192 leänh (vì m oät leänh sau khi m a õ h où a seõ co ùdung löôïng 1 word (14 bit). dung löôïng b o ä n h ô ù8K word (1 word = 14 bit) vaø ñöôïc phaân thaønh nhieàu trang (tö ø page0 ñeán page 3) . boä ñeám chöông trình se õ ch æ ñeán ñòa c hæ 0004h (Interrupt vector). b oä ñeám chöông trình c o ù dung löôïng 13 bit (PC<12:0>). Khi vi ñieàu khieån ñöôïc reset.4 T O Å H Ö Ù C O Ä H Ô Ù C B N C aáu tru ùc b o ä nh ô ù cu û a vi ñieàu khieån PIC16F877A bao g o àm b oä nh ô ù chöông trình (Program memory) v a øb o änh ô ùd ö õlie äu (Data Memory).

4 Sô ñ o àb o än h ôùd ö õlie ä u PIC16F877A .Hình 2.

Thanh ghi PIR1 (0Ch) chöùacôøngaét cuûacaùckhoáichöùcnaêng ngoaïi vi. 18Bh):thanh ghi cho p h eù p ñ o ïc vaø ghi. caùcngaét naøy ñöôïc cho pheùp b ô û icaù cbit ñieàukhieå n chöùatrong thanh ghi PIE1. C oùtheå phaân thanh ghi SFR laøm hai loïai: thanh ghi SFR lieân quan ñeán caùcchöùcnaêng beân trong (CPU) v a ø thanh ghi SRF d u øn g ñ eå th ie át laä p vaø ñ ieàu k hie ån caùck h oáich ö ùcnaêngbeân ngoaøi(ví duï nhö ADC. xaù claäpcaù ctham so áv e àxung taùc ñoäng. Thanh ghi INTCON (0Bh.Chi tieátveàcaù cthanh ghi SFR seõñö ô ïc lieätk eâcu ï th eåtrong baûngphuï luïc 2.1 THANH GHI C H Ö Ù C A Ê N G A Ë CB IE Ä T N Ñ SFR Ñ a â y la ø c a ù cthanh ghi ñöôïc söû duïng bôûiCPU hoaëc ñöôïc duøngñeå thieát laäp vaø ñieàu khieån caùc k hoái chöùcnaêng ñöôïc tích hôïp beân trong vi ñieàu khieån. 183h):thanh ghi chöùa keát quaû thöïc hieän pheùp toaùncuûakhoáiALU. traïng thaùireset v a øc a ù cbit choïn bank caàntruy xuaáttrong b o än h ô ùd ö õlieäu. Thanh ghi STATUS (03h. . ng aétcu û ab oäso saùnhvaø ngaétghi v aø ob o än h ô ùEEPROM.2. …). 8Bh. 181h): thanh ghi naøycho p he ùpño ïc vaøghi. 83h. ngaétngoaïi vi RB0/INT vaø ng aét interrputon-change taï i caùcchaâncuûaPORTB.caïnh taùcñoängcuûangaét ngoaïi vi v aøb o äñ e ám Timer0. 103h. Thanh ghi OPTION_REG (81h. cho pheùp ñieàu khieån chöùcnaêngpull-up cuûacaùcchaântrong PORTB.2. SSP bus. C aùcthanh ghi du ø ngñeå th ieát laäp v aø ñieàu k h ieån caù ck ho áich ö ù cnaêng seõ ñö ô ïc nhaé c ñeán khi ta ñeà caäp ñeán caùckhoáichöùcnaêng ñoù. Thanh ghi PIE1 (8Ch): chöùa caùcbit ñieàu khieån chi tieát caùcngaét cuûacaùckhoáichöùc naêngngoaïi vi. PWM.10Bh. Thanh ghi PIE2 (8Dh): chöùa caùc bit ñieàu khieån c a ù ngaét cuûa caùckhoái chöùcnaêng c CCP2. chöùacaùc bit ñieàu khieån v a øc aù cbit c ô øh ieä u khi timer0 bò traøn.4. P h aàn naø yseõ ñeà caäp ñeán caù cthanh ghi lieân quan ñeán caùcchöùcnaêng beân trong.

Thanh ghi PIR2 (0Dh): c h ö ù ac aù cc ô øng a étcu û acaù ckhoáichöùcnaêngngoaïi vi, caùcngaét naøyñöôïc cho pheùp bôû i bit ñieàukhieånchöùatrong thanh ghi PIE2. caùc

Thanh ghi PCON (8Eh): c h ö ù a c aù cc ô øhieäu cho bieát traïng th aù icaù cch eá ño ä reset cu ûavi ñieàukhieån.

2.4.2.2 THANH GHI M UÏCÑÍCH CHUNG GPR C aùcthanh ghi n a ø yc o ùtheå ñöôïc truy xuaáttröïc tieáp hoaëc giaùntieáp thoângqua thanh ghi FSG (File Select Register). Ñ a ây la ø c a ù cthanh ghi d ö õlieäu hoâng thöôøng,ngöôøis ö ûduïng c o ùth e å t tu ø ytheo muïc ñích chöông trình m aøc où th eå d u ø n g c aù cthanh ghi naøyñeå chöù acaù cbieán soá,haèng soá,k eátqu aûhoaëccaù ctham soáp hu ïc v uï cho chöông trình. 2.4.3 STACK Stack khoâng naèm trong b o ä n h ô ù chöông trình hay b o ä n h ôùd öõ lieäu m aø laø m oä t vu ø ng nh ô ù ñaëc b ieätkhoâng cho pheùpñoïc hay ghi. Khi leänh CALL ñöôïc thöïc hieän hay khi m oätngaétxaûyra laøm chöông trình b ò reõ nhaù nh, g iaù trò cuû aboä ñeám chöông trình PC töï ñoäng ñöôïc vi ñieàu khieån caátvaøotrong stack. Khi m oättrong caùcleänh RETURN, RETLW hat RETFIE ñöôïc thöïc thi, g iaù trò PC seõ töï ñoäng ñöôïc ra tö øtrong stack, vi ñieàu k hieån seõ thöïc hieän tieáp chöông trình theo laáy ñuùngqui trình ñònh tröôùc. B o än h ô ùStack trong vi ñieàu khieån PIC hoï 16F87xA c o ùkhaûnaêng chöùañöôïc 8 ñ ò a ch æ vaø hoaït ñoäng theo cô cheá xoay voøng.Nghóa l a ø gia ù trò caát vaø o b o ä nh ô ùStack laàn th öù9 s e õ ghi ñe ø leân g iaù trò caát v aø o Stack laàn ñaàu tieân v aø g iaù trò caát v aø o b o ä n h ô ùStack laà n th ö ù10 se õ ghi ñ e ø le ân g iaùtri6 caátv aøoStack laànth ö ù2. C aàn chuùy ù la ø khoângc o ùc ô øhieäu naøocho bieát traïng th aù stack, do ñ o ùta khoângbieát ñöôïc i khi naøo stack traøn. Beân caïnh ñ o ù taä p leänh cuûa vi ñieàu khieån doøng PIC cuõng khoâng coù leänh POP hay PUSH, caù cthao ta ù cv ôù ib o än h ôùstack seõh o aø nto aø nñö ô ïc ñieàuk hieånb ô û iCPU.

2.5 C A Ù C Å N G U A Á T H A Ä P U Û A CO X N C PIC16F877A Coång xuaát nhaäp (I/O port) chính la ø phöông tieän m aø vi ñieàu khieån duøng ñeå töông taù c vôùi theá g iôù ibeân ngoaøi. Söï töông taù c naø y raát ña daïng vaø thoâng qua qu aù trình töông taù c ñoù, chöù cnaêngcu û avi ñieàukhieån ñöôïc theåhieänm oätcaùchr o õraøng. M oätcoångxuaátnhaäpcuûavi ñieàukhieånbao goàmnhieàuchaân(I/O pin), tu ø ytheo caù chb o átrí v a øchöùcnaêng cu ûavi ñieàu khieån m aøsoá löôïng coångxuaátnhaäp vaø soá löôïng chaân trong m oãicoång coù theå khaù c nhau. Beân caïnh ñ o ù ,do vi ñieàu khieån ñöôïc tích hôïp saü n beân trong caù c ñaëc tính giao tieáp ngoaïi vi neân beân caïnh chöùc naênga ø coång xuaátnhaäp thoâng thöôøng,m oätsoá ch aâ n x uaát l nh aäp c oø nco ùth eâm caù cch öù cn aêng k h aù c ñ eå theå hieän sö ï taù cñoäng cu û acaù cñaëc tính ngoaïi vi neâu treân ñoáivôùitheá giôùibeân ngoaøi. C höùcnaêng cuûatöøngchaân xuaátnhaäp trong m oãicoångh o aø n to aø n co ùtheå ñö ô ïc x aù claäp v aøñieàu k hieån ñö ô ïc th oâng qua caù cthanh ghi SFR lieân quan ñeán chaânxuaát nhaäpñoù. Vi ñieàu khieån PIC16F877A c o ù 5 coång xuaá t nhaäp, bao goàm PORTA, PORTB, PORTC, PORTD v a ø PORTE. C aáu truùcvaø chöùc naêng cuûa töøng coång xuaát nhaäp seõ ñöôïc ñeà caäp cuï theå trong phaànsau. 2.5.1 PORTA PORTA (RPA) bao goàm 6 I/O pin. Ñ a â y la ø c aùc chaân “hai chieàu” (bidirectional pin), nghóa l a ø c o ù theå x ua át v aø nhaä p ñöôïc. Chöùcnaêng I/O naøyñöôïc ñieàu khieån bôûithanh ghi TRISA (ñòa chæ 85h). M uoán xaùclaäp chöùcnaêng cuûa m oät chaân trong PORTA la ø input, ta “set” bit ñieàu khieån töông ö ù ngv ô ùich aâ n ñ où trong thanh ghi TRISA vaø ngöôïc laïi, m uoán xaùc laäp chöùcnaêng cuûam oätchaân trong PORTA l a ø output, ta “clear” bit ñieàu khieån töông ö ùngv ô ùich aân ño ùtrong thanh ghi TRISA. Thao taùc naøy hoaøn toaøn töông tö ï ño ái vô ù icaùc PORT vaø caùc thanh ghi ñieàu khieåntöông öù ngTRIS (ño áiv ôù iPORTA la ø TRISA, ñ o á iv ô ù iPORTB la øTRISB, ñ o á iv ô ù iPORTC l a ø TRISC, ñ o ái v ô ù iPORTD la ø TRISD v a ø ñ o áv ôù iPORTE l a ø TRISE). B eân caïnh ñoù PORTA c o ø nla ø i n g o õ ra c u û a b o ä ADC, b o ä so saùnh, ngoõvaøo analog ng o õvaø oxung clock cu ûaTimer0 v a ø n g o õv a ø o c u û ab o ägiao tieápMSSP (Master Synchronous Serial Port). Ñ aëctính naø y seõ ñöôïc trình baøycuï theå trong phaànsau. C aáutruùcbeântrong v aøch öù cnaên gcu ï th eåcuû atöø ngch aântrong PORTA seõñö ô ïc trình baøycuï theåtrong Phuï luïc 1. C aùcthanh ghi SFR lieân quan ñeánPORTA bao goàm: PORTA (ñòa chæ 05h) TRISA (ñòa chæ 85h) CMCON (ñòa chæ 9Ch) CVRCON (ñòa ch æ9Dh) : chöù agiaù trò cpin trong PORTA. caù : ñieàukhieånxuaátnhaäp. : thanh ghi ñieàukhieånboäso saùnh. : thanh ghi ñieàukhieånboäso saùnhñieänaùp.

ADCON1 (ñòa chæ 9Fh) : thanh ghi ñieàuk hieånboäADC. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. 2.5.2 PORTB PORTB (RPB) goàm 8 pin I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông ö ù n g la ø TRISB. B eân caïnh ñoù m o ätso á ch aân cu û aPORTB coønñöôïc s ö ûduïng trong qu aùtrình naïp chöông trình cho vi ñieàu k hieån vôùicaùccheá ñoä naïp khaùcnhau. PORTB coønlieân quan ñeán ngaét ngoaïi vi v a ø b o ä Timer0. PORTB coønñöôïc tích hôïp chöùcnaêng ñieän trôûkeùoleân ñöôïc ñieàu khieån bôûichöông trình. C aáutruùcbeântrong vaøch öù cnaêngcuï th eåcu û atö ø ngchaântrong PORTB seõñö ô ïc trình baøy cuï theåtrong Phuï luïc 1. C aùcthanh ghi SFR lieân quan ñeánPORTB bao goàm: PORTB (ñòa chæ 06h,106h) : chöùag iaù trò pin trong PORTB caùc TRISB (ñòa chæ 86h,186h) : ñieàukhieånxuaátnhaäp OPTION_REG (ñòa chæ 81h,181h) : ñieàukhieånngaétngoaïi vi v a øb o äTimer0. Chi tieátv e àcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. 2.5.3 PORTC PORTC (RPC) goàm 8 pin I/O. Thanh ghi ñieàu khieån xuaát nhaäp töông ö ù n g la ø TRISC. B eân caïnh ñoù PORTC coønchöùacaùcchaân chöùcnaêng cuûaboä so saù nh, boä Timer1, b o ä PWM v a ø c aù cchuaångiao tieápnoáitieápI2C, SPI, SSP, USART. C aáutruùcbeântrong vaøch öù cnaêngcuï th eåcu û atö ø ngchaântrong PORTC seõñö ô ïc trình baøy cuï theåtrong Phuï luïc 1. C aùcthanh ghi ñieàukhieånlieânquan ñeánPORTC: PORTC (ñòa chæ 07h) : chöù agiaù trò cpin trong PORTC caù TRISC (ñòa chæ 87h) : ñieàukhieånxuaátnhaäp. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. 2.5.4 PORTD PORTD (RPD) goàm 8 chaânI/O, thanh ghi ñieàu khieånxuaátnhaäptöông ö ù n gla øTRISD. PORTD c o ø nla øco ån gx u aátd ö õlieäucuûachuaångiao tieápPSP (Parallel Slave Port). C aáutruùcbeântrong vaøch öù cnaêngcuï th eåcu û atö ø ngchaântrong PORTD se õ ñöôïc trình baøy cuï theåtrong Phuï luïc 1. C aùcthanh ghi lieânquan ñeánPORTD bao goàm: Thanh ghi PORTD : chöù agiaù trò cpin trong PORTD. caù Thanh ghi TRISD : ñieàukhieånxuaátnhaäp. Thanh ghi TRISE : ñieàukhieånxuaátnhaäpPORTE v a øchuaångiao tieápPSP. Chi tieátveà caù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2.

2. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. C aáutruùcbeântrong v a øchöùcnaêngcuï theåcuûa töøng chaântrong PORTE se õ ñöôïc trình baøycuï theåtrong Phuï luïc 1. Beân caïnh ñ o ù PORTE co ø nlaø caùc chaân ñieàu khieån cuûachuaångiao tieápPSP. Bit TMR0IE (INTCON<5>) la ø bit ñieàu khieån cu û a Timer0. ADCON1 : thanh ghi ñieàukhieånkhoáiADC.5 Sô ño àk h oáicu û aTimer0.Sô ño àk ho áicu ûaTimer0 nhö sau: Hình 2.5.6 TIMER 0 Ñ a â yla øm o ä ttrong ba b oäñeám hoaëcboäñònh th ô ø icu û avi ñieàukhieånPIC16F877A. TMR0IF= 0 khoâng cho pheùp ngaét Timer0 taùc ñoäng. C aáu truùc cuûa Timer0 cho pheùp ta löïa choïn xung clock taù c ñ oäng vaø caïnh tích cöïc cuûa xung clock. Ngaét Timer0 seõ x uaát hieän khi Timer0 bò traøn. . C aùcthanh ghi lieânquan ñeánPORTE bao goàm: PORTE : chöùagiaùtrò caùcchaântrong PORTE. C aùc chaân cuûa PORTE c où ng o õ v a ø o analog. Thanh ghi ñieàu khieån xuaát nhaäp töông ö ù n g la ø TRISE. TRISE : ñieàukhieån xuaátnhaäpv aøx aù claäpcaù cth oân gso ácho chuaångiao tieáp PSP. Timer0 laø b o ä ñ e á m 8 bit ñöôïc keát noái vôùi boä chia ta à n so á (prescaler) 8 bit.2.5 PORTE PORTE (RPE) goàm 3 chaân I/O. TMR0IE=1 cho pheùp ngaét Timer0 taùc ñoäng.

Prescaler ñöôïc ñieàu khieån bôûi thanh ghi OPTION_REG. leänhCLRWDT seõx o ù aprescaler. 181h): ñieàukhieånprescaler. Xem laïi thanh ghi OPTION_REG ñeå xaùcñònh laïi m oätcaùchchi tieátv eàcaù cbit ñieàukhieåntreân. Khi g iaù trò thanh ghi TMR0 t ö ø FFh trô û v eà 00h. 101h) : chöùagiaùtrò ñeám cuûaTimer0. C ôø ng aét naøy p haû i ñöôïc xoùa baèng chöông trình tröôùc khi boä ñeám baét ñaàu thöïc hieän laïi quaùtrình ñeám. INTCON (ñòa chæ 0Bh.C aïnh taùcñoängse õ la ø caïnh leân neáu TOSE=0 v a ø caïnh ta ù cñ o ä n gseõla øcaïnh xuoángneáuTOSE=1.bit TMR0IF (INTCON<2>) seõ ñöôïc set. ñoàngthôøiprescaler se õngöng taùcvu ï ho ãtrô ï cho WDT. ngaét Timer0 seõ xuaát hieän. khi ñ o ùg ia ùtrò thanh ghi TMR0 seõ taên g theo töø ngchu kì xung ño àng h o à (taàn so á v aøoTimer0 baèng ¼ ta à n so á oscillator). leân Khi ño ái töôïng ta ù c ñ o ä n g la ø Timer0. Bit ñieàu khieån cu ûa Timer1 s e õla øTMR1IE (PIE<0>). Bit PSA (OPTION_REG<3>) xaù c ñònh ñoái töôïng ta ù c ñoäng cu û a prescaler. NgaétTimer0 khoâng theå “ñaùnh thöùc”vi ñieàu k h ieån tö øch eá ño ä sleep. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. Khi ñ o ù xung taù c ñoäng leân boä ñeám ñöôïc laáy tö ø c h a â n RA4/TOCK1. C ô ø ngaét cu ûa Timer1 l a ø bit TMR1IF (PIR1<0>). C aùc bit PS2:PS0 (OPTION_REG<2:0>) xaù c ñònh t æ s o á chia taà n soá cu ûa prescaler. Ñ aây chính la ø c ô ø ngaét cuûa Timer0. Ñ ie à u ñ o ùc o ùnghóa l a ø neáu prescaler ñ öô ïc sö ûduïng cho Timer0 thì WDT seõ k ho âng co ùñö ô ïc ho ã trôï cu ûa prescaler v a ø ngöôïc laïi.M uoán Timer0 hoaït ñoäng ô û c h e á ñ o ä Timer ta clear bit TOSC (OPTION_REG<5>). Bit TOSE (OPTION_REG<4>) cho pheùplöïa choïn caïnh taùc ñoängvaøoboätñeám . C aùcthanh ghi ñieàukhieånlieânquan ñeánTimer0 bao goàm: TMR0 (ñòa chæ 01h. 10Bh. M uoán Timer0 hoaït ñoäng ô û c h e á ñ o ä counter ta set bit TOSC (OPTION_REG<5>). Thanh ghi TMR0 cho pheùp ghi v a ø x o ù añöôïc giuùpta a á n ñònh thôøi ñieåm ngaétTimer0 xuaáthieän m oätcaùchlinh ñoäng. C aùcleänh taùc ñoäng giaù trò thanh ghi TMR0 seõ xoù acheá ñoä hoaïtñoäng cuû aprescaler. Timer1 c u õ ng c o ù hai cheá ñoä hoaït ñoäng:cheá ñoä ñònh thôøi(timer) v ôù ixung kích l a ø xung clock cu ûa oscillator (taàn so á cu ûa timer baèng ¼ taàn so á cu û a oscillator) vaø cheá ñoäñeám (counter) v ô ù ixung kích la ø xung phaû n aùnhcaùcsöï k ieäncaàn ñeám laáy tö ø beân ngoaøi . 2. Khi ñoái töôïngtaùc ñoäng la ø WDT. OPTION_REG (ñòa chæ 81h. Töông töï nhö Timer0. g iaù trò cu û a Timer1 se õ ñöôïc löu trong hai thanh ghi (TMR1H:TMR1L). B o ächia ta à n so á (prescaler) ñöôïc chia seû g iö õ a Timer0 v a ø WDT (Watchdog Timer).7 TIMER1 Timer1 la ø b o ä ñònh thôøi 16 bit. 18Bh): cho pheùpngaéthoaït ñoäng(GIE v a øPEIE). 8Bh. taù c ñoäng leân g iaù thanh ghi TMR0 seõ x o ù a prescaler trò nhöng khoânglaøm thay ño åiño áitöôïng taùc ñoängcuûaprescaler. Khi thanh ghi TMR0 bò traøn.

Timer1 seõ la á y xung clock tö ø hai chaân RC1/T1OSI/CCP2 v a ø RC0/T1OSO/T1CKI laøm xung ñeám. C aùcthanh ghi lieânquan ñeánTimer1 bao goàm: INTCON (ñòa chæ 0Bh. Khi =0 xung ñeám vaøoTimer1 seõñö ô ïc ño àngboä h o ùav ôù ixung clock beântrong.Ô Ûcheá ñoä ñeám baátñoàngboä. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. Timer1 se õ tieáp tuïc quaùtrình ñeám khi vi ñieàu khieån ñang ô û c h e á ñ o ä sleep v aøng aét do Timer1 taïo ra khi b ò traø nco ùk h aûnaêng “ñaù n hthöùc”vi ñieàu khieån. PIE1( ñòa chæ8Ch): cho pheùpngaétTimer1 (TMR1IE). 10Bh. . T1CON (ñòa ch æ10h): x aù claäpcaù cth oângso ácho Timer1. Khi ñ o ù PORTC s e õ b o û qua söï taùc ñoäng cuûa hai bit TRISC<1:0> v a øPORTC<2:1> ñöôïc gaù ng iaùtrò 0. Timer1 seõ b aét ñaàu ñeám sau caïnh xuoáng ñaàu tieân cu ûa xung ngoõ vaøo. TMR1L (ñòa chæ 0Eh): chöùagiaù trò 8 bit thaáp cuû ab oä ñeám Timer1. C h eáño äñeám ñöôïc quyeátñònh bôûibit ñieàukhieån (T1CON<2>). Khi =1 xung ñ e ám laáy tö ø beân ngoaøi seõ khoâng ñöôïc ñoàng boä hoùavôùixung clock beân trong.thoâng qua chaân RC0/T1OSO/T1CKI (caïnh taù c ñ o ä n g la ø caïnh leân). Sau ñ aâ yla øsô ño àk h oáicu û aTimer1: Hình 2. Ô Û cheáño änaø yTimer1 seõk ho ângh o aït ño ängkhi vi ñieàukhieånñang ô ûche áñ oäsleep. Khi bit T1OSCEN (T1CON<3>) ñöôïc set.6 Sô ño àk h oáicu û aTimer1. PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øn g a étTimer1 (TMR1IF). Timer1 c o ù hai ch eá ñ oä ñe ám laø ño àn g b o ä (Synchronous) v aø b aát ño àn g bo ä (Asynchronous). Khi clear bit T1OSCEN Timer1 seõ la á y xung ñ e á m tö øoscillator hoaëct ö øchaânRC0/T1OSO/T1CKI. 18Bh): cho pheùpngaéthoaït ñoäng(GIE v a øPEIE). Vieäc löïa choïn xung taùc ñoäng (töông ö ù ng v ôù iv ieäc löïa choïn cheá ñoä hoaït ñ o ä n g la ø timer hay counter) ñöôïc ñieàu k hieån bôûibit TMR1CS (T1CON<1>). Timer1 khoâng theå ñöôïc s ö û duïng ñ e å laøm nguoàn xung clock cho khoái CCP (Capture/Compare/Pulse width modulation). Ngoaøira Timer1 co ø n co ù ch öù c naêng reset input beân trong ñöôïc ñieàu khieån bôûi m oät trong hai khoáiCCP (Capture/Compare/PWM). TMR1H (ñòa chæ 0Eh): chöùagiaù trò 8 bit cao cu ûab o ä ñeám Timer1. 8Bh.

Timer2 coønñöôïc hoãtrôï bôû ithanh ghi PR2. C ô ø ng aét cu ûa Timer2 la ø bit TMR2IF (PIR1<1>). N goõra cu ûaTimer2 ñöôïc ñöa qua b o ächia ta à nso ápostscaler vô ù icaù cm ö ù cchia tö ø1:1 ñeán 1:16. Ngoaøira ng o õ ra cu ûa Timer2 coøn ñöôïc keát noái vôùikhoái SSP. 8Bh. Gia ù trò ñeám trong thanh ghi TMR2 se õta ê n gtö ø 00h ñeán giaù trò chöùatrong thanh ghi PR2. Hình 2. PIE1 (ñòa chò 8Ch): chöùabit ñieàukhieånTimer2 (TMR2IE).8 TIMER2 Timer2 la ø b o ä ñònh thôøi 8 bit v a ø ñöôïc h o ã trôï b ô û i hai b o ä chia ta à n so á prescaler va postscaler. Thanh ghi chöùa giaù trò ñeám cuûa Timer2 l a ø TMR2. 18Bh): cho pheùp toaøn caù cng aét(GIE v a øPEIE). cho C aùcthanh ghi lieânquan ñeánTimer2 bao goàm: INTCON (ñòa chæ 0Bh. Xung ng oõ v aøo(taàn soábaèng ¼ ta à n so áoscillator) ñöôïc ñöa qua b o ächia ta à n so áprescaler 4 bit (v ô ù ic a ù ctæ s o á chia ta à n so á la ø 1:1. Kh I reset thanh ghi PR2 ñöôïc nhaängiaùtrò m aëcñònh FFh. do ñ o ù Timer2 coøn ñoùng vai troøtaïo ra xung clock ñoàng boä khoáigiao tieápSSP. sau ñoùñöôïc reset v e à 00h. .7 Sô ño àk ho áiTimer2. 1:4 hoaëc 1:16 vaø ñöôïc ñieàu khieån bôûi caùc bit T2CKPS1:T2CKPS0 (T2CON<1:0>)).2. N goõ ra cu ûa postscaler ñoùngvai tro øquyeátñònh trong vieäcñieàukhieånc ô øngaét. T2CON (ñòa ch æ12h): x aù claäpcaù cth oângso ácho Timer2. Postscaler ñöôïc ñieàu khieån bôûi4 bit T2OUTPS3:T2OUTPS0. Bit cho pheùp ngaét Timer2 taù c ñ o ä n g la ø TMR2ON (T2CON<2>). boä PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øn g a étTimer2 (TMR2IF). 10Bh. TMR2 (ñòa ch æ11h): chöùagiaùtrò ñeám cuûaTimer2.

Khi k h oâng sö û duïng b o ä chuyeån ñoåi ADC. Ta c o ùm oätv aøi nhaän tveà Timer0. Timer0. Thieátla ä pc a ù cc ô øn g a étcho b o äAD Clear bit ADIF. bit (ADCON0<2>) ñöôïc xoùaveà0 v a øc ô øn g a é tADIF ñöôïc set. Set bit ADIE. Timer2 ñöôïc hoã trôï bôûihai b o ä chia ta à n so á prescaler v a ø postcaler ñoäc laäp.tuy nhieâncaïnh taùcñoängvaã n ñöôïc coáñònh laø caïnh leân. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. . Set bit GIE. Set bit PEIE. VSS hay hieäu ñieän theå chuaån ñöôïc xaùclaäp treân hai chaân RA2 v a ø RA3. Timer1 v a øTimer2 nhö sau: xeù Timer0 v a ø Timer2 la ø b o ä ñ eá m 8 bit (giaù trò ñeám toáiña la ø FFh). caù c thanh ghi naøy coù theå ñöôïc söû du ïng nhö caù cthanh ghi thoâng thöôøngkhaùc.PR2 (ñòa chæ 92h): thanh ghi h o ãtrôï cho Timer2. Xung clock c o ùta à nso ábaèng¼ taànso ácu û aoscillator. trong khi Timer1 la ø b o ä ñ e á m 16 bit (g iaùtrò ñeám toáiña la øFFFFh). M oätv aøiso saù nhseõg iu ù pta deã daønglöïa choïn ñöôïc Timer thích hôïp cho öù ngduïng.Khi quaù trình chuyeån ñoåi hoaøn taát. Timer1 c o ùquan h eävô ù i k h oái CCP.9 ADC ADC (Analog to Digital Converter) la ø b o ä chuyeån ñoåi tín hieäu giöõa hai daïng töông tö ï v a ø á . 2. trong khi Timer2 ñöôïc keátnoáivôùikhoáiSSP. ch oïn ñ ieän aùpm aãu(d öïa treâncaù cth oângso ácu û athanh ghi ADCON1) C hoïnh keânhchuyeånñoåiAD (thanh ghi ADCON0). Thieátlaäpcaùcthoângso á cho b o ächuyeånñoåiADC: C hoïn ngoõvaøoanalog. Hieäu ñieän theá chuaånVREF c o ùthe å ñö ô ïc lö ïa ïn laø DD. so PIC16F877A c o ù8 ng o õv aøoanalog (RA4:RA0 v a øRE2:RE0). Qui trình chuyeånñoåit ö øtöông töï sang so ábao goàmcaùcböôùcsau: 1. Xung taùcñoäng leân Timer0 ñöôïc hoã trôï bôûiprescaler vaø coù theå ñöôïc thieát laäp ô û nhieàu cheá ñoä khaùcnhau (taàn soá taùc ñoäng. 2. caïnh taùcñoäng) trong khi caù ctho âng soá cu ûaxung taùcñoäng leân Timer1 laø coá ñònh. Choïnh xung clock cho keânhchuyeånñoåiAD (thanh ghi ADCON0). Cho pheùp b o ächuyeånñoåiAD hoaït ñoäng(thanh ghi ADCON0). cho V K eát quaû chuyeån ñoåi t ö ø tín tieäu töông tö ï sang tín h ie äu so á laø 10 bit so á töông öùng vaø ñöôïc löu trong hai thanh ghi ADRESH:ADRESL. Timer1 v a ø Timer2 ñ e àu co ù hai cheá ño ä hoaït ñ o ä n g la ø timer v a ø counter. k eát q u aû seõ ñöôïc löu v aøo hai thanh ghi ADRESH:ADRESL.

set bit (neáucaàntieáp tuïc chuyeån ñoåi). Hình 2. B aétñaàuquaùtrình chuyeånñoåi(set bit ). vieäclöïa choïn caùchlöu ñöôïc ñieàukhieån bôûibit ADFM v a øñöôïc minh hoïa cuï theåtrong hình sau: . 7. N eáu =0. Ñôïi cho tô ù ikhi qu aùtrình laáym aãuhoaøntaát.8 Sô ñ o àk h o áib o ächuyeånñoåiADC. 5. K ie åm tra c ô øngaét.3. Ñ oïc keátquaûchuyeånñ o å iv a øx o ù ac ô øn g a ét. 4. Tieáptuïc thöïc hieäncaùcböôùc1 v a ø2 cho qu aùtrình chuyeånñoåitieáptheo. Ñôïi cho tô ù ikhi quaùtrình chuyeånñoåihoaøntaátbaèngcaùch: Kieåmtra bit . qu aùtrình chuyeånñ o åiñ aõh o aø ntaát. C aànchuùy ùl a øc o ùhai caùchlöu keátquaûchuyeånñoå iAD. 6.

Caù cbit CM2:CM0 trong thanh ghi CMCON ñoùng vai troø choïn löïa caù ccheá ñoähoaït ñoängcho b o äComparator (hình 2.10). Thanh ghi ñieàu khieån b oäso sa ù n h la ø CMCON.10 COMPARATOR B o äso saùnhbao goàm hai b o äso so saùnhtín hieäu analog v aø ñö ô ïc ñaëtô û PORTA. C aùcthanh ghi lieânquan ñeánb oächuyeånñoåiADC bao goàm: INTCON (ñòa chæ 0Bh.Hình 2. 2. PIE1 (ñòa chæ 8Ch): chöùabit ñieàukhieånAD (ADIE). ADRESH (ñòa chæ 1Eh) v a ø ADRESL (ñòa chæ 9Eh): caùc thanh ghi chöùakeát quaû chuyeån ñoåiAD. PEIE). 18Bh): cho pheùpcaùcnga é t(caùcbit GIE. 8Bh. ADCON0 (ñòa ch æ 1Fh) v a ø ADCON1 (ñòa ch æ 9Fh): x aù c laäp caù c th oâng so á cho b o ä chuyeånñoåiAD. N g o õv aø o b oäso saùnhla ø caùcchaânRA3:RA0. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. 10Bh. PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øn g a étAD (bit ADIF). ng o õra la ø hai chaânRA4 v a øRA5. PORTA (ñòa ch æ 05h) v a ø TRISA (ñòa chæ 85h): lieân quan ñeán caùcng oõv aøo analog ô û PORTA. PORTE (ñòa ch æ 09h) v a ø TRISE (ñòa chæ 89h): lieân quan ñeán caù cngoõvaøo analog ô û PORTE. Cô cheáhoaït ñoäng cu û a Comparator nhö sau: b oä .9 C aùccaùchlöu keátquaûchuyeånñoåiAD.

Hình 2. Cöïctính cu û acaù cb o äso saù n hc oùth eåthay ñoåidöïa vaøocaùcgia ù trò ñaëtvaøocaù cbit C2INV v a øC1INV (CMCON<4:5>).v a ø tín hieäu ô û ng o õra b o ä so saùnhse õ thay ño åitöông ö ù ngnhö hình v eõ .10 Nguyeânlí hoaït ñoäng cu û a oätb oäso saùnhñôn giaûn. C aànchuùy ùñeánkhoaûngthôøigian ñaù pöù ngnaø ykhi s ö ûd uïng b oäso saùnh.Tín hieäu analog ô û chaân VIN + se õ ñöôïc so ù saù nh vô ù iñieän aù p ch uaån ô û chaân VIN. D öïa vaøohình v e õ ta thaáy ñaùp öùngtaïi ngoõra k h oâng p haû i laø töù cthô ø iso v ô ù ithay ñoåi taïi ngoõvaøom aøcaàn c o ùm oätkhoaûng thôøigian nhaátñònh ñeå ngoõra thay ñoåi traïngthaùi(toáiña la ø 10 us). m .Khi ñieän aùp ô û chaân VIN+ lô ù nhôn ñieän aù pô ûchaânVIN+ ng o õra s e õ ô ûm öùc1 v a øngöôïc laïi.

Hình 2. boä C aùcbit C2OUT v a øC1OUT (CMCON<7:6>) ñoùngvai tro øghi nhaänsöï thay ño åitín hieäuanalog so v ôùiñieän aù p ñaët tröôùc. C ôøngaét naøyp haûiñöôïc reset v e à0.C ô øng aét cu û ab oä so sa ù n h laø bit CMIF (thanh ghi PIR1). Bit ñieàukhieånboäso saùnhl a øbit CMIE (Tranh ghi PIE). .C aùcbit naøycaàn ñöôïc xöû lí thích hôïp baèng chöông trình ñ e å ghi nhaän söï thay ño åicu û atín hieäu ngoõvaø o .11 C aù ccheáñoähoaït ñoäng cuû a comparator.

Chi tieátveàcaù cthanh ghi seõñö ô ïc trình baøycuï theåtrong phuï luïc 2. 8Bh. Thanh ghi PIE2 (ñòa chæ 8Dh): chöùabit cho pheùp b oä saùnh(CNIE). 10Bh.10). Thanh ghi INTCON (ñòa ch æ 0Bh. 2. N eáuCVRR ô ûm öùclogic 1.Sô ñ o à k h o á icu û ab o ätaïo ñieän aùpso saùnhñöïôc trình baøytrong hình v e õsau: Hình 2.10.C aùcthanh ghi lieânquan ñeánb oäso saùnhbao goàm: CMCON (ñòa ch æ 9Ch) v a ø CVRCON (ñòa ch æ 9Dh): x aù claäp caù cth oâng so á b o ä so cho saùnh.cu ûa2 b o äso saùnhC1 v a ø õ C2 (xem chi ti e á t ô û hình 2. 18Bh): chöùacaùcbit cho pheùp caùcngaét (GIE v a øPEIE). b ñ B oätaïo ñieän aùp so saùnhnaøybao goàm m oätthang ñieän trôû16 m öùcñoùngvai tro ø la ø caà u p haân aù p chia nh o ûñieän aù p VDD thaønh nhieàu m öùckhaùcnhau (16 m ö ùc). Khi ñ o ù c a ù c pin RA0/AN0 v a ø RA1/AN1 (khi CIS = 0) hoaëc pin RA3/AN3 v a ø RA2/AN2 (khi CIS = 1) se õla ø n g o v a ø oanalog cu û añieän aù pcaànso saùnhñöa vaø ong o õVIN. Thanh ghi PIR2 (ñòa chæ 0Dh): c h ö ù ac ô øng a étcu û ab o äso saùnh(CMIF). ñieän trôû 8R seõk ho âng co ùtaùcd uïng nhö m oätthaønhphaàncu û acaàup haân aù p(BJT daãnmaïnh v aød o ø ngñieän .12 Sô ño à k hoáio ä taïo ie än aùpso saùnh.1 B O Ä A ÏOÑ IE Ä N Ù P S A Ù N H T A SO B o ä so saùnh naøy chæ hoaït ñoäng khi b o ä Comparator ñöïôc ñònh daïng hoaït ñoäng ô û c h e á ñ o ä ‘110’. Trong khi ñ o ùñieän a ù p ñöa v aøong o õVIN+ seõ ñöôïc laáy tö ø m o ätb o ä taïo ñ ie än aù pso saùnh. so Thanh ghi PORTA (ñòa ch æ 05h) v a ø TRISA (ñòa ch æ 85h): caùcthanh ghi ñieàu khieån PORTA.M oãim ö ù cco ùg iaùtrò ñieän aù pk h aù c nhau tuøythuoäcvaøobit ñieàukhieån CVRR (CVRCON<5>).

Chi tieátv eà caù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. So saùnh(Compare). Tuy nhieân trong m oät soá tröôøng hôïp ngoaïi le ä CCP1 v a ø CCP2 coù khaû naêng phoái hôïp vôùinhau ñeå ñeå taïo ra caùchieän töôïng ñaëc bieät (Special event trigger) hoaëc caùctaùcñoäng leânTimer1 v a øTimer2. Thanh ghi CMCON (ñòa chæ 9Ch): thanh ghi ñieàukhieånb oäComparator. khi ñ o ù 1 m öù c ñ ieän aù p co ù g iaù trò VDD/24. 2. pin ñieàu khieån duøng t cho khoáiCCPx l a øRC2/CCP1 v a øRC1/T1OSI/CCP2.G iaùtrò ñieän aù pc aàn so saùnhô ûn g o õ v a ø o Analog seõ ñö ô ïc so saù n hvô ù icaù cm ö ùcñ ieän aù pdo b oä taïoñieän aù p taïo ra cho tô ù ikhi hai ñieän aùp naøy ñaït ñöôïc giaù trò xaáp xæ baèng nhau.Moãi CCP c où m o äthanh ghi 16 bit (CCPR1H:CCPR1L v a ø CCPR2H:CCPR2L). B oätaïo ñieän aùp so saùn h n aøy c oùth eå xem nhö m oätboä chuyeån ñoåiD/A ñôn giaûn. Ñ ieàucheáñoäroängxung PWM (Pulse Width Modulation). C a ûCCP1 v a ø CCP2 veà nguyeântaéc hoaït ñoäng ñeàu gioáng nhau v aø c h ö ù c n a ê n g cu û a tö ø n g k h o á i laø k h a ù ñ o ä c la ä p . C aùcthanh ghi lieânquan ñ eánb o ä taïo ieän aù pso saùnhnaøybao goàm: ñ Thanh ghi CVRCON (ñòa ch æ 9Dh): thanh ghi tröïc tieáp ñieàu khieån boä so saùnh ñieänaùp. CaùcchöùcnaêngcuûaCCP bao goàm: Capture. d oøng ñieän seõ qua ñieän trôû 8R v aø 1 m ö ù cñ ie än aùp coùg iaù trò VDD/32.khoâng ñi qua ñieän trôû 8R). PIC16F877A ñöôïc tích hôïp saün hai khoái CCP : CCP1 v a ø CCP2. C aù cm ö ùcñieän aù pn aøyñö ô ïc ñöa qua b o äMUX cho pheùpta ch o ïn ñö ô ïc ñ ie än aùpñöa ra pin RA2/AN2/VREF-/CVREF ñ e å ñöa vaø o ng o õ VIN+ c u û a b o ä so saù n h baèng caùch ñöa caù c g iaù trò thích hôïp vaøocaùcbit CVR3:CVR0. Ngöôïc laïi khi CVRR ô û m öù clogic 0. H oaït ñoäng ñoäc laäp H oaït ñoäng ñoäc laäp . Caùctröôønghôïp naøyñöôïc lieätk e âtrong baûngsau: CCPx Capture Capture Compare PWM PWM PWM CCPy Capture Compare Compare PWM Capture Compare T aùcñoäng D uøngchung nguoànxung clock tö øTMR1 Taïo ra hieäntöôïng ñaëcbieätlaømxoùaTMR1 Taïo ra hieäntöôïng ñaëcbieätlaømxoùaTMR1 D uøngchung ta à nso áxung clock vaøcuøng taùcñoängcuûangaét chòu TMR2.11 CCP CCP (Capture/Compare/PWM) bao goàm caùcthao taùctreân caù cxung ñeám cung caáp b ôû icaù cb o ä ñeám Timer1 v a ø Timer2. Khi ñ o ù k e át q u aû chuyeån ñoåixem nhö ñöôïc chöùatrong c aù cbit CVR3:CVR0.

13 Sô ño àk ho áiCCP (Capture mode). C aùc “hieän töôïng” ñöôïc ñònh nghóa bôûi caùc bit CCPxM3:CCPxM0 (CCPxCON<3:0>) v a ø c o ù th e å la ø m oät trong caùchieäntöôïng sau: M oãi khi c o ù caïnh xuoáng taïi caù c pin CCP. Khi a á n ñònh caù c pin duøng cho khoái CCP la ø output. . giaùtrò tieáptheo nh aänñö ô ïc seõtöï ño ängñö ô ïc ghi ñ e øle âng iaùtrò cu õ . CCP c oø n ñöôïc tích hôïp b o ä chia taàn soá prescaler ñöôïc ñieàu khieån b ô û i caù c bit CCPxM3:CCPxM0. g iaù trò cu ûa thanh ghi TMR1 se õ ñöôïc ñöa vaøothanh ghi CCPR1 (CCPR2). Hình 2.Prescaler ñöôïc xoùakhi CCP khoânghoaït ñoänghoaëckhi reset. Xem caùcthanh ghi ñieàukhieånkhoáiCCP (phuï luïc 2 ñeå bieáttheâm chi tieát). cô ø n g aé t CCPIF neân ñöôïc xoùa baèng phaàn m eàm m oãi khi ñöôïc set ñeå tieáp tuïc nhaän ñònh ñöôïc traïng thaùihoaït ñoängcuûaCCP. M oãicaïnh leânthöù4. Timer1 phaûiñöôïc hoaït ñoängô ûche áñ oäTimer hoaëccheáñoäñeám ñoàng boä. M oãikhi c o ùcaïnh leân. Vieäc thay ñoåi ñoái töôïng taùc ñoäng cuûa prescaler c o ù th eå taïo ra hoaït ñoäng ngaét. vieäc ñöa g iaù trò v aøo PORTC cu õ ng co ù th eå gaây ra caùc “hieän töôïng” taù c ñoäng leân khoái CCP do traïng thaù i cu ûa pin thay ñoåi. Sau khi g iaù trò cu û a thanh ghi TMR1 ñöôïc ñöa vaøo thanh ghi CCPRx.Khi hoaït ñoäng ô û c h e á ñ o ä Capture thì khi c o ù m oät “hieän töôïng” xaûy ra taïi pin RC2/CCP1 (hoaëc RC1/T1OSI/CCP2). Neáu hieän töôïng tieáp theo xaûy ra m aø g iaù trò trong thanh ghi CCPRx chöa ñöôïc x ö ûlí. M oãicaïnh leânthöù16. Traùnhs ö û duïng ngaétCCP baèng caùchclear bit CCPxIE (thanh ghi PIE1). cô ø ngaét CCPIF ñöôïc set v aø p haûiñöôïc xoùa baèng chöông trình. M oätsoáñieåm caànch uùy ùkhi s ö ûduïng CCP nhö sau: C aùc pin duøng cho khoái CCP phaûi ñöôïc a á n ñònh l a ø input (set caùc bit töông ö ù ng trong thanh ghi TRISC).

Khi hoaït ñoäng ô û c h e á ñ o ä Compare. Hình 2. Ñ ieàunaøycho pheùpta ñieàuk hieångiaùtrò thanh ghi TMR1 m oätcaùchlinh ñoänghôn.N goaøira. CCP co ùk haûnaêng taïo ra hieän töôïng ñaëc bieät (Special Event trigger) laøm reset g iaù trò thanh ghi TMR1 vaø khôûiñoäng boä chuyeån ñoåi ADC.ñoàng thôøicô øn g aé t CCPIF cu õ n g se õ ñöôïc set. Khi hai thanh ghi chöùagiaùtrò baèng nhau. caù cpin cu û a CCP ñöôïc thay ño åi traïng thaùi (ñöôïc ñöa leân m öùccao. Söï thay ñoåitraïng thaùicuûapin coù theå ñöôïc ñieàukhieånbôûicaùcbit CCPxM3:CCPxM0 (CCPxCON <3:0>). Töông tö ï nhö ô û c h e á ñ o ä Capture. ñöa xuoáng m öùcthaáp hoaëc giöõ nguyeân traïng thaùi). Timer1 p haû iñö ô ïc aán ñò nh ch eá ño ä ho aït ño äng laø timer hoaëcñeám ñoàngboä. khi ô ûc h e á ñ o ä Compare.14 Sô ño àk h oáiCCP (Compare mode). g iaù trò trong thanh ghi CCPRx seõ thöôøng xuyeân ñöôïc so saùnh vôùigiaùtrò trong thanh ghi TMR1. .

5. Khi g iaùtrò thanh ghi PR2 baèng v ôù igiaùtrò thanh ghi TMR2 thì qu aùtrình sau xaûyra: Thanh ghi TMR2 töï ñoängñöôïc xoùa. Cho pheùpCCP hoaït ñoängô û cheá ñ o äPWM. Hình 2. Ñ e å sö û duïng chöùc ø naêng ñieàu cheá naøy tröôùc tieân ta caàn tieán haønhcaùcböôùccaøiñaëtsau: 1. Pin cuûakhoáiCCP ñöôïc set. T hieát laäp ñoä roäng xung caàn ñieàu cheá (duty cycle) baèng caùch ñöa g iaù trò vaøo thanh ghi CCPRxL v a øc a ù cbit CCP1CON<5:4>. 3. Ñ oäroängcuû axung ñieàucheá(duty cycle) ñöôïc tính theo coângthöùc: PWM duty cycle = (CCPRxL:CCPxCON<5:4>)*TOSC*(g iaùtrò b o ächia ta à nso áTMR2) . tín hieäu sau khi ñieàu cheá seõ ñöôïc ñöa ra caùc pin cuûa khoái CCP (caàn aán ñònh caùc pin n a ø y laoutput). 2.16 C aùctham so ác u û aPWM Trong ñ o ùg ia ùtrò 1 chu kì (period) cu û axung ñieàucheáñöôïc tính baèngcoângthöùc: PWM period = [(PR2)+1]*4* OSC*(giaù trò b oächia taànso ácu û aTMR2).4 hoaëc 16 (xem laïi Timer2 ñeå bieát theâm chi tieát). T hieát laäp g iaù trò boä chia ta à n so á prescaler cu û a Timer2 v a ø cho pheùp Timer2 hoaït ñoäng baèng caùch ñöa g iaù trò thích hôïp vaøo thanh ghi T2CON. 4.15 Sô ño àk h oáiCCP (PWM mode). Thieát laäp thôøigian cu û a 1 chu kì cu ûa xung ñieàu cheá cho PWM (period) baèng caùch ñöa g iaù trò thích hôïp vaøothanh ghi PR2. G iaùtrò thanh ghi CCPR1L (chöù ag iaùtrò aán ñònh ño ä ro äng xung ñieàu cheá duty cycle) ñöôïc ñöa vaøothanh ghi CCPRxH. T B o ächia ta à n so á prescaler cu û aTimer2 ch æ co ù th eå nh aän caù cg iaù trò 1. Hình 2. Ñ ieàu khieån caùc pin cu ûa CCP l a ø output baèng caùch clear caùc bit töông ö ù ng trong thanh ghi TRISC.Khi hoaït ñoäng ô û c h e áñ o ä PWM (Pulse Width Modulation _ k hoái ñieàu cheá ñoä roäng xung).

Ô Û daïng ñoàng b oä taù c ñoäng cuû a bit BRGH ñöôïc b o ûqua.12. BRG c oø n ñöôïc ñieàu khieån bôûibit BRGH ( TXSTA<2>). . M oätsoáñieåm caànch uùy ùkhi s ö ûduïng khoáiPWM: Timer2 c o ù hai b o ä chia ta à n so á prescaler v a ø postscaler. Hai pin duøngcho giao d ie ä n n a ø y la ø RC6/TX/CK v a ø RC7/RX/DT. Ñoàngboä_Master mode.USART c oø nñ ö ôïc g oïi laø giao dieän giao tieáp noáitieáp noáitieáp SCI (Serial Communication Interface). Thanh ghi CCPRxL chöùabyte cao cuûagiaùtrò quyeát ñònh ñoä roäng xung.12 GIAO T IE Á P O Á T IE Á P N I 1. Ô Ûdaïng baátñoàngboä. Khi g iaù trò trong thanh ghi CCPRxH baèng v ô ù i g iaù trò trong thanh ghi TMR2 v a ø hai bit CCPxCON<5:4> baèng vôù ig iaù trò 2 bit cu û a b o ä chia taàn so á prescaler. C aùc daïng cu û a giao dieän USART ngoïai vi bao goàm: B aátñoäng boä (Asynchronous). C o ù th e å sö û duïng giao dieän naøy cho c aù c giao tieáp vôù icaù c thieát bò ngoïai vi.14. nhö vaäy ta coù ñöôïc hình aû nh cu û a xung ñieàu cheá taïi ng o õ ra cuûa khoái PWM nhö hình 2. 2. v ô ù i caù c vi ñieàu khieån khaùc hay vô ù i m aù y tính. BRG thöïc chaát laø m oät boä ñeám coù theå ñöôïc söû d uïng cho c a û hai d aïng ñoàng boäv aøbaátñoàng boävaø ñöôïc ñieàu khieån bôûithanh ghi PSBRG. pin cuûa khoái CCP laïi ñöôïc ñöa veà m öùc thaáp.Nhö vaäy2 bit CCPxCON<5:4> seõc hö ù a2 bit LSB. trong ñ o ùRC6/TX/CK duøng ñeå truyeàn xung clock (baud rate) v a ø RC7/RX/DT duøng ñeå truyeàn data. T o ácñ oäbaud do BRG taïo ra ñöôïc tính theo coângthöùcsau: Trong ñ o ùX la øg ia ùtrò c u û athanh ghi RSBRG ( X la øs o ánguyeânv a ø0<X<255). Thanh ghi CCPRxH ñoùngvai tr o ø la ø buffer cho khoáiPWM. Trong tröôøng hôïp naøyta phaûiset bit TRISC<7:6> v a øSPEN (RCSTA<7>) c0ñeåcho pheùpgiao dieänUSART.1 USART USART (Universal Synchronous Asynchronous Receiver Transmitter) la ø m o ä t trong hai chuaån giao tieáp noáitieáp. Tuy nhieân boä postscaler khoâng ñöôïc s ö ûduïng trong quaùtrình ñieàucheá ño äro ängxung cuûakhoáiPWM. PIC16F877A ñöôïc tích hôïp saü n boä taïo toác ñoä baud BRG (Baud Rate Genetator) 8 bit duøngcho giao dieän USART. Ñ oàng boä_Slave mode. N eáuthôøigian duty cycle d aø ihôn thôøigian chu kì xung period thì xung ng o õra tieáptuïc ñöôïc giöõô ûm öùccao sau khi g iaùtrò PR2 baèngvôùig iaù trò TMR2.

d ö õlie ä u tö øthanh ghi TXREG seõ ñöôïc ñöa vaøo thanh ghi TSR.12. Ngay sau khi bit Stop cu û ad ö õlieäu caàn truyeàn tröôùcñoù ñöôïc truyeàn xong. RCSTA (ñòa chæ 18h): cho pheùphoaït ñoängcoångnoáitieáp(bit SPEN). 8 hay 9 bit döõlieäu (thoâng thöôøng laø 8 bit) v a ø 1 bit Stop. v a ø ñ e å ñaûm baûo tính h ie äu q u aû cu û ad ö õlie äu thì hai khoáitruyeànv a ønhaä n phaûiduøngchung moätñònh daïng d ö õlieäu.17 Sô ñ o àkhoáicuûakhoáitruyeànd ö õlie äu USART. ï 2. nghóa la ø c a ù c bit truyeàn ñi s e õ bao goàm 1 bit Start.1. N gaétnaøyñöôïc ñieàu khieån bôûibit TXIE (PIE1<4>).1.1 USART B A Á T O À N G O Ä Ñ B Ô Û cheá ñoä truyeàn naøy USART hoaït ñoäng theo chuaån NRZ (None-Return-to-Zero). Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b aøt cutheåtrong phuï luïc 2. 2. ngaét xaûy ra v a ø cô ø hieäu TXIF (PIR1<4>) ñöôïc set.1.12. thanh ghi TXREG bò roãng. Thanh ghi TSR se õ la á y d ö õlie ä u tö ø thanh ghi ñeäm duøngcho quaùtrình truyeàn d ö õ lie äu TXREG. D öõlieäu caàn truyeàn phaûiñöïôc ñöa tröôùcvaøothanh ghi TXREG. Bit LSB se õ ñöôïc truyeàn ñi tröôùc. RSBRG (ñòa ch æ99h): quy eátñònh toácñoäbaud. Hình 2. .C aùcthanh ghi lieânquan ñeánBRG bao goàm: TXSTA (ñòa ch æ98h): choïn cheáñoäñoøngboähay baátñoàngboä( bit SYNC) v aøch o ïn m ö ù c toácño äbaud (bit BRGH). C ôøhieäu TXIF vaãn ñöôïc set baát chaáp traïng thaù i cu ûa bit TXIE hay taùc ñoäng cuû a chöông trình (khoâng theå xoùa TXIF baèng chöông trình) m aøch æreset v e à0 khi c o ùd ö õlieäum ôùiñöôïc ñöa vaøothanhh ghi TXREG. C aùc khoái truyeàn vaø nhaän data ñ oäc laäp vô ù inhau seõ du ø ng chung ta à n so á töông öù n gv ô ù ito á c ñ o ä baud cho qu aù trình d òch döõ lieäu (toác ñoä baud gaáp 16 hay 64 laàn to ác ño ä d ò ch d ö õlieäu tu øy theo g iaù trò cu ûa bit BRGH).1 TRUYEÀN Ö Õ I E Ä U D L QUA CH UAÅN GIAO T IE Á P USART B A Á T O À N G O Ä Ñ B Thaønhphaàn quan troïng nhaátcuûa kho á itruyeàn d ö õ lie ä u la ø thanh ghi dòch dö õ lieäu TSR (Transmit Shift Register).

Thanh ghi PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øh ieä u TXIF. 6. Taïi thô ø iñieåm ño ù .d ö õ lieäu ñöa vaøo thanh ghi TXREG ngay laäp töùc ñöôïc load vaøo thanh ghi TSR v a ø thanh ghi TXREG bò roãng. 10Bh. Q uaùtrình truy eàn döõ lieäu ch æ thöïc söï baét ñaàu khi ñ a õ c o ù d ö õlie ä u trong thanh ghi TXREG v a ø xung truyeàn baud ñöôïc taïo ra. T oùmlaïi. thanh ghi TSR roãng. 7. 18Bh): cho p h eù ptaátcaûcaù cngaét. Taïo xung truyeànbaud baèngcaùchñöa caù cg iaùtrò caànthieátvaøothanh ghi RSBRG v a øbit ñieàukhieån m ö ù cto ácñ o äbaud BRGH. Ñöa 8 bit d ö õlieäucaàntruyeànvaûothanh ghi TXREG. bit TX9 (TXSTA<6>) ñöôïc set v a øbit d ö õlieäu th ö ù 9 seõ ñöôïc löu trong bit TX9D (TXSTA<0>). quaù trình truyeàn keát thuùc. N eân ghi bit d ö õlie äu th ö ù9 vaøo tröôùc. C aùcthanh ghi lieânquan ñeánquaùtrình truyeànd ö õlie äu b aè n ggiao dieänUSART baátñoàngboä: Thanh ghi INTCON (ñòa ch æ0Bh. 5.ta caàn thöïc hieän tuaàn töï caùc böôùcsau: 1. Khoáitruyeàn d ö õlieäu ñö ô ïc cho pheùp hoaïtñoäng khi bit TXEN (TXSTA<5>) ñöôïc set. L uùcnaøy ta co ù th eå hình thaønh m oät chuoãi döõ lieäu lieân tuïc cho qu aùtrình truyeàn döõ lieäu. 3. 4. Trong qu aùtrình truyeàn döõ lieäu neáu bit TXEN bò reset v e à 0. M oät ñieåm caàn chuù y ù n ö õ a la ø thanh ghi TSR khoâng c o ù trong b oâ nhôù döõ lieäu vaø chæ ñöôïc ñieàu k hieånbôû iCPU.vì khi ghi 8 bit d öõ lieäu v aøo thanh ghi TXREG trö ô ù c co ù th eå xaûy ra tröôønghôïp noäi dung thanh ghi TXREG seõ ñöôïc load vaøo thanh ghi TSG tröôùc. Set bit TXIE neáucaànsö ûduïng ngaéttruyeàn. Trong tröôønghôïp d ö õlieäucaàntruyeànla ø9 bit. ñöa bit d ö õlie äu th ö ù9 vaøobit TX9D. Neáuñònh daïng d ö õlie ä u la ø9 bit. bit TRMT se õ ñöôïc set. 2. Khi thanh ghi TSR roãng. Khi khoáitruyeàn döõ lieäu ñöôïc khôûiñoäng laàn ñaàu tieân. Neáu s ö û duïng ngaét truyeàn. Cho pheùpcoånggiao dieän noáitieáp noáitieáp baá t ñoàng boäbaèng caùchclear bit SYNC v a øset bit PSEN. caàn kieåm tra laïi caù c bit GIE v a ø PEIE (thanh ghi INTCON). ñeå truyeàn döõ lieäu theo giao dieän USART baá t ñoàng boä.Trong khi côø hieäu TXIF ñoùngvai troø chæ thò traïng thaùithanh ghi TXREG thì c ôø h ieäu TRMT (TXSTA<1>) c o ù nhieäm vuï theå hieän traïng thaùi thanh ghi TSR. nhö vaäy döõ lieäu truyeàn ñi seõ b ò sai khaùc so vôùiy eâu caàu. 8Bh. 8. . Set bit TX9 neáu ñònh daïng d ö õlieäucaàntruyeànl a ø9 bit. Set bit TXEN ñ e åcho pheùptruyeànd ö õlie äu (lu ù cnaøybit TXIF cu õ ngseõñö ô ïc set).khoái truyeàn döõ lieäu ñöôïc reset v a ø pin RC6/TX/CK chuyeån ñeán traïng thaùihigh-impedance. Bit naøy ch æ ñoïc v aø k ho âng co ù ng aét naø o ñöôïc g aén v ô ù itraïng thaùicuûa noù.

18 Sô ñ o àk h o á icu û ak h o áin h aän d ö õlie äu USART. RCIF chæ reset v e à 0 khi d ö õlie äu nhaän v a ø o ô û thanh ghi RCREG ñaõñöôïc ñoïc v aøkhi ñ o ùthanh ghi RCREG roãng. Thanh ghi RCSTA (ñòa ch æ 18h): chöùa bit cho pheùp coång truyeàn döõ lieäu (hai pin RC6/TX/CK v a øRC7/RX/DT).d ö õlieäu nhaän ñöôïc trong thanh ghi RSR seõ ñöôïc ñöa v aøo thanh ghi RCGER.Thanh ghi RCREG l a ø thanh ghi . N gaét naøy ñöôïc ñieàu khieån bôûibit RCIE (PIE1<5>). Sau khi nhaän dieän bit Stop cu û ad ö õlieäu truyeàn tô ù i. Bit ñieàu khieån cho p h eù p k h o á i n h aä n d ö õlie äu la ø bit RCEN (RCSTA<4>). Hình 2. Bit c ô ø hieäu RCIF l a ø bit ch æ ñ o ïc vaø khoâng theå ñöôïc taùcñoäng bôûichöông trình.Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaéttruyeànTXIE. K ho áip hu ïc ho ài d ö õlieäuthöïc chaátlaø m o ätb o ädò ch d ö õlieäu ctoácñ oäcao va co ùtaànso á ho aïtño änggaáp 16 laànhoaëc 64 laàntaànso ábaud. Thanh ghi TXSTA (ñòa chæ 98h): xaù claäpcaù ctho ângsoácho giao dieän.2 N H A Ä N Ö Õ I E Ä U D L QUA CHUAÅ NGIAO T IE Á P USART B A Á T O À N G O Ä Ñ B D öõlieäu ñö ô ïc ñöa v a ø o töcøh aâ n RC7/RX/DT se õ kích ho aït k ho áip h uïc h o àidö õlieäu .12.1. Trong khi ño ùto ácñ o äd òch cu ûathanh thanh ghi n haänd öõlieäuseõb aèngv ô ùitaànso á baud hoaëctaàn so ác u û aoscillator. Thanh ghi TXREG (ñòa chæ 19h): thanh ghi ch ö ù ad ö õlieäu caàn truyeàn.1. Thaønhphaàn quan troïng nhaát cuûakhoái nhaän döõ lieäu laø thsnh ghi nhaän döõ lieäuRSR (Receive Shift Register). Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. sau ñ o ù cô ø h ie äu RCIF (PIR1<5>) seõ ñöôïc set vaø ngaét nhaän ñöôïc kích hoaït. 2. Thanh ghi SPBRG (ñòa ch æ99h): quy eátñònh toácñoäbaud.

N e áud ö õlieäutruyeànnhaänc o ùñònh daïngla ø9 bit. Cho p h eù pn h aän d ö õlie äu b aèn gcaù chset bit CREN. Toùmlaïi. 3. Thanh ghi SPBRG (ñòa chæ 99h): ñieàuk hieåntoácñoäbaud. Bit OERR phaûi ñöôïc xoùa baèng phaàn m eàm vaø thöïc hieän baèng caùch clear bit RCEN ro à iset laïi. 18Bh): chöùa caùcbit cho pheùp toaøn boä caùcnga é t(bit GIER v a øPEIE). 6. côøhieäu baù o traø n d ö õ lie äu (Overrun Error bit) OERR(RCSTA<1>) se õ ñöôïc set. Bit FERR (RCSTA<2>) seõ ñöôïc set khi phaùthieän bit Stop d u û a d ö õ lieäu ñöôïc nhaän vaøo Bit d ö õ lieäu thöù 9 seõ ñöôïc ñöa vaøo bit RX9D (RCSTA<0>). 8Bh. N eá u c a à nsö ûduïng ngaétnhaänd ö õlie äu . 2. Thanh ghi PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øh ieä u RCIE. 5. lie äu tö ø thanh ghi RCREG. Cho pheùpcoånggiao tieápUSART b aátñoàng b oä (clear bit SYNC v a øset bit SPEN). 4. xoù alo ã ibaèngcaùchxoùabit CREN.set bit RCIE. Ñoïc 8 bit d ö õlie ä u tö øthanh ghi RCREG.c o ùb o ä ñ eä m k eù p (double-buffered register) vaø hoaït ñoäng theo cô cheá FIFO (First In First Out) cho pheùp nhaän 2 byte v a ø byte th öù 3 tieáp tuïc ñöôïc ñöa vaøo thanh ghi RSR. N eáu sau khi nhaän ñöôïc bit Stop cu ûabyte d ö õlie äu th ö ù3 m aø thanh ghi RCREG vaãn coønñaày . 9. Ñ oïc giaùtrò thanh ghi RCSTA ñeå ñoïc bit d ö õlie äu th ö ù9 vaøk ieåm tra xem quaùtrình n h aä nd ö õlie äu co ùb ò lo ãikhoâng.Do ñ o ùc a à n ñ o ïc d ö õ lie ä u tö øthanh ghi RCSTA tröôùckhi ñ o ïc d ö õlie ä u tö øthanh ghi RCREG ñ eåtraù n hb ò m aátd ö õlieäu. khi söû duïng giao dieän nhaän döõ lieäu USART baát ñoàng boä caàn tieán haønh tuaàn töï caùc böôùcsau: 1. Thanh ghi RCSTA (ñòa chæ 18h): xaùcñònh caùctrang thaùitrong qu aùtrình n h aän d ö õlie äu . bit RCIF seõ ñöôïc set vaøngaét ñöôïc kích hoaït (neáu bit RCIE ñöôïc set). 10. Sau khi döõlieäu ñöôïc nhaän. d ö õ lie äu trong thanh ghi RSR seõ b ò m aát ñi v a ø q u a ù trình ñöa d ö õ lie ä u tö ø thanh ghi RSR vaøo thanh ghi RCREG seõ bò giaùn ñoaïn. 7. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. C aùcthanh ghi lieânquan ñeánquaùtrình n h aänd ö õlie äu b aè n ggiao dieänUSART baátñoàngboä:Thanh ghi INTCON (ñòa c hæ 0Bh. . Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaétRCIE. Thanh ghi TXSTA (ñòa chæ 98h): chöùacaùcbit ñieàukhieånSYNC v a øBRGH. hai bit FERR v a ø RX9D seõ nh aän caù cg iaùtrò m ô ù i. T hieátlaäptoácñoäbaud (ñöa g iaùtrò thích hôïp vaøothanh ghi SPBRG v a øbit BRGH. N eá u sö ûduïng ngaétnhaäncaànset bit GIE v a øPEIE (thanh ghi INTCON). Trong tröôøng hôïp naøy caàn laáy h eát d ö õ lieäu ô û thanh ghi RSREG vaøo tröôùc khi tieáp tuïc nhaän byte d ö õ lieäu tieáp theo. 8. 10Bh. N eáuquaùtrình truyeànnhaänco ùlo ã ix aû yra. Thanh ghi RCREG (ñòa chæ 1Ah): ch ö ù ad ö õlie äu n h aä nñöôïc. Khi ñ o ïc d ö õ . set bit RX9.

1 TRUYEÀND Ö ÕL I E Ä U QUA CH UAÅNGIAO T IE Á PUSART Ñ O À N GB O ÄMASTER MODE Töông tö ï nhö giao dieän USART baât ñoàng boä. caàn kieåm tra laïi caù c bit GIE v a ø PEIE (thanh ghi INTCON). Neáu s ö û duïng ngaét truyeàn. C aùcböôùccaàntieánhaønhkhi truyeànd ö õlie äu qua giao dieänUSART ñoàng b oä Master mode: 1. 2.1. 8.1. Slave mode ñöôïc kích hoaït baèng caùch clear bit CSRC.12. 7. 4. Ñ ieåm khaùcbieät duy nhaát giöõa hai ch eá ño ä naøy l a ø Master mode seõ la á y xung clock ñ o à n g b o ä tö ø b o ä tao xung baud BRG c oø nSlave mode laáy xung clock ñ o à n g b o ä tö ø beân ngoaøiqua chaânRC6/TX/CK. 2. 5. Ñ ieàu naøycho pheùpSlave mode hoaït ñoängngay c a ûkhi vi ñieàu khieån ñang ô û che áño äsleep. Master mode ñöôïc kích hoaït baèng caùch set bit CSRC (TXSTA<7>). Coång giao tie á p n o á i tieá p v a ã n la ø hai chaân RC7/RX/DT. USART cho pheùphai cheá ñoä truyeàn nhaän d ö õlie äu la ø Master mode v a ø Slave mode. .2.2 USART Ñ O À N G O Ä B Giao dieän USART ñoàng boä ñöôïc kích hoaït baèng c aùch set bit SYNC.thaønh phaàn quan troïng nhaát cuûahoáitruyeàn d ö õ lie ä u la ø thanh ghi dòch TSR (Transmit Shift Register). C aùcthanh ghi lieân quan ñeán quaùtrình truyeàn d ö õ lieäu b aèng giao dieän USART ñoàng boä Master mode: Thanh ghi INTCON (ñòa ch æ0Bh. Set bit TX9 neáu ñònh daïng d ö õlieäucaàntruyeànl a ø9 bit.12. D ö õ lieäu ñöa vaøo thanh ghi TSR ñöôïc chöùa trong thanh ghi TXREG.1. 18Bh): cho p h eù pta átc aûcaù cng aét. Neáuñònh daïng d ö õlie ä u la ø9 bit. Bit TXEN cho pheùphay khoângcho pheùptruyeànd ö õlieäu. Set bit TXIE neáucaànsö ûduïng ngaéttruyeàn. 8Bh. 6. Ñöa 8 bit d ö õlieäucaàntruyeànvaøothanh ghi TXREG. Thanh ghi PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øh ieä u TXIF. C ôøhieäu chæ thò traïng thaùithanh ghi TSR la ø bit TRMT. côø hieäu naøy ñöôïc g aén vôù i m oätngaét vaøbit ñieàu k h ieån ng aét naøy laø TXIE. Set bit TXEN ñ e åcho pheùptruyeànd ö õlieäu. ñöa bit d ö õlie äu th ö ù9 vaøobit TX9D. Taïo xung truyeànbaud baèngcaùchñöa caù cg iaùtrò caànthieátvaøothanh ghi RSBRG v a øbit ñieàukhieån m ö ù cto ácñ o äbaud BRGH. 10Bh. Cho pheùpcoånggiao dieännoáitieápnoáitieápñoàngboäbaèngcaùchset bit SYNC. PSEN v a øCSRC. C ôø hieäu cuûa khoái truyeàn d ö õ lie ä u la ø bit TXIF (chæ thò trang thaùithanh ghi TXREG). RC6/TX/CK vaø ñö ô ïc cho pheùpbaèng caùchset bit SPEN. Thanh ghi naøy chæ ñöôïc ñieàu khieån bôûi CPU. 3.2.

Ñoïc 8 bit d ö õlie ä u tö øthanh ghi RCREG.Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaéttruyeànTXIE.set bit SREN. Cho pheùpcoånggiao tieápUSART b aátñoàng b oä bit SYNC. neáu nhaän1 chuoãiword d ö õlieäu. ng aét nh aän v aøcaù cthao taùctreân caùcthaønh phaàn ñoù. 2.12. bit RCIF seõ ñöôïc set vaøngaét ñöôïc kích hoaït (neáu bit RCIE ñöôïc set). 2. xoù alo ã ibaèngcaùchxoùabit CREN. 8Bh. (set Clear bit CREN v a øSREN. N eáuquaùtrình truyeànnhaänc o ùlo ã ix a û yra. Sau khi döõlieäu ñöôïc nhaän. 18Bh): chöùa caùcbit cho p heù p toaøn boä caù cnga é t(bit GIER v a øPEIE).1. Thanh ghi SPBRG (ñòa ch æ99h): quy eátñònh toácñoäbaud. N eá u c a à nsö ûduïng ngaétnhaänd ö õlie äu .set bit RCIE. set bit RX9. C aùcböôùccaàntieánhaønhkhi n h aän d ö õlie äu b aè n ggiao dieänUSART ñoàng boä Master mode: 1.set bit 1 CREN. Thanh ghi TXREG (ñòa chæ 19h): thanh ghi ch ö ù ad ö õlieäu caàn truyeàn. 8. N eáuchæ nhaän word dö õlieäu . C aùcthanh ghi lieân quan ñeán quaùtrình nhaän döõlieäu baèng giao dieän USART ñoàng boäMaster mode: Thanh ghi INTCON (ñòa ch æ 0Bh.Ñ ieåm khaùcbieät duy n h a á t la ø giao dieän naøy cho pheùphai ch e á ñ o än h aän sö õlieäu. k eå caû caù c cô ø h ieäu. 10. N e áud ö õlieäutruyeànnhaänc o ùñònh daïngla ø9 bit. Thanh ghi RCSTA (ñòa ch æ 18h): chöùa bit cho pheùp coång truyeàn döõ lieäu (hai pin RC6/TX/CK v a øRC7/RX/DT). N eáu caû hai bit ñeàu ñöôïc set.2 N H A Ä N Ö Õ I E Ä U D L QUA CHUAÅ NGIAO T IE Á P USART Ñ O À N G O Ä B MASTER MODE C aáu truùckhoái truyeàn dö õ lieä u la ø khoâng ñoåi so v ô ù igiao dieä n b aát ño àng b o ä. 11. 4. 3. 6. Thanh ghi PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øh ieä u RCIE.2. 5. . Thanh ghi TXSTA (ñòa chæ 98h): xaù claäpcaù ctho ângsoácho giao dieän. ñ o ùla øc h æ n h a ä n 1 word d ö õlie äu (set bit SCEN) hay nhaänm oät chuoãi döõ lieäu (set bit CREN) cho tô ù ikhi ta clear bit CREN. Ñ oïc giaùtrò thanh ghi RCSTA ñeå ñoïc bit d ö õlie äu th ö ù9 vaøk ieåm tra xem quaùtrình n h aä nd ö õlie äu co ùb ò lo ãikhoâng. 9. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. 10Bh. SPEN v a øCSRC). N eá u sö ûduïng ngaétnhaäncaànset bit GIE v a øPEIE (thanh ghi INTCON). T hieátlaäptoácñoäbaud (ñöa g iaùtrò thích hôïp vaøothanh ghi SPBRG v a øbit BRGH). 7. bit ñieàukhieånCREN seõñö ô ïc öu tieân.

set bit GIE v a øPEIE (thanh ghi INTCON). 2. N eáu coù hai word d ö õ lieäu ñöôïc ñöa vaøo thanh ghi TXREG tröôùckhi leänh sleep ñöôïc thöïc thi thì qu aùtrình sau seõx a û yra: 1. SPEN v a øclear bit CSRC. 6. 2. Word d ö õlie äu ñ a àutie ânse õngay laäptöù cñöôïc ñöa vaøothanh ghi TSR ñeå truyeàn ñi. 10Bh. ngaétnaøyseõ ñaùnhthöùcvi ñ ieàu k hieån vaø n eáu toaø n bo ä caù cngaét ñöôïccho pheùp hoaït ñoäng.boä ñeám chöông trình seõ ch æ tôù iñ ò a ch æch ö ù achöông trình ngaét (0004h).1. 3. Neáungaéttruyeànñöôïc s ö ûduïng. . Set bit TXEN. Sau khi word d ö õlie äu ñ aàu tieân ñaõ dòch ra khoûithanh ghi TSR. söï khaùcbieät ñöôïc theåhieän roõ raøng. Thanh ghi RCSTA (ñòa chæ 18h): xaùcñònh caùctrang thaùitrong qu aùtrình n h aän d ö õlie äu . Thanh ghi SPBRG (ñòa chæ 99h): ñieàuk hieåntoácñoäbaud.2. 8. Tuy nhieân khi vi ñieàu khieån ñang ô û traïng thaùisleep. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. Set bit SYNC. Word d ö õlie äu th ö ùhai vaãnnaèmtrong thanh ghi TXREG. Ñöa 8 bit d ö õlieäu v aø othanh ghi TXREG. N eá u c a à nsö ûduïng ngaét. 3. Neáu ngaéttruyeàn ñöôïc cho pheùphoaït ñoäng.3 TRUYEÀN Ö Õ I E Ä U D L QUA CH UAÅN GIAO T IE Á P USART Ñ O À N G O Ä B SLAVE MODE Q uaùtrình naøykhoâng coùsöï khaùcbieätso v ô ù iMaster mode khi vi ñieàu khieån hoaït ñoängô ûc h e á ñ o ä bình thöôøng. 8Bh. 4. Ñöa bit d ö õlie äu th ö ù9 vaøobit TX9D tröôùc(neáuñònh daïng d ö õlie ä u la ø9 bit). 5. 2. C aùcthanh ghi lieân quan ñeán quaùtrình truyeàn döõlieäu baèng giao dieän USART ñoàng b oäSlave mode: Thanh ghi INTCON (ñòa ch æ0Bh. C ôøhieäuTXIF seõk h oângñö ô ïc set. 5. Thanh ghi PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øh ieä u TXIF. 4. 18Bh): cho p h eù pta átc aûcaù cng aét. Neáuñònh daïng d ö õlie ä u la ø9 bit. C aùcböôùccaàntieánhaønhkhi truyeànd ö õlie äu b aèn ggiao dieänUSART ñoàng b oä Slave mode: 1. Thanh ghi RCREG (ñòa chæ 1Ah): ch ö ù ad ö õlie äu n h aä nñöôïc.set bit TXIE.12. Clear bit CREN v a øSREN.Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaétRCIE. Thanh ghi TXSTA (ñòa chæ 98h): chöùacaùcbit ñieàukhieånSYNC v a øBRGH. set bit TX9. 7. thanh ghi TXREG tieáptuïc truyeànword th ö ùhai vaøothanh ghi TSR v a øc ô øh ieä u TXIF ñöôïc set.

sau khi nhaän xong bit thanh ghi RSR se õ chuyeån d öõ lieäu vaø o thanh ghi RCREG v a ø bit RCIF ñöôïc set. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. Set bit CREN ñ e åcho pheùpquaùtrình n h aänd ö õlieäu b aétñaàu. N eáuquaùtrình truyeànnhaänco ùlo ã ix aû yra. 9.12.2.4 N H A Ä N D Ö ÕL IE Ä U QUA CH UAÅN GIAO T IE Á P USART Ñ O À N G B O ÄSLAVE MODE S öï khaùcbieät cuûaSlave mode so v ôù iMaster mode ch æ th eå h ie än ro õ raø n g khi vi ñieàu khieån hoaït ñoängô ûch eáñ o äsleep. 5. 1 word d ö õlieäu vaãn ñöôïc tieáp tuïc nhaän.ng aét seõ ñöôïc thöïc thi v a øvi ñieàu khieån ñöôïc “ñaùnh thöùc. 8Bh. 3. 4. Ngoaøira c heáñ oäSlave mode khoângquan taâm tô ù ibit SREN. Thanh ghi RCSTA (ñòa ch æ 18h): chöùa bit cho pheùp coång truyeàn döõ lieäu (hai pin RC6/TX/CK v a øRC7/RX/DT). 8. Sau khi döõlieäu ñöôïc nhaän. 18Bh): chöùa caùcbit cho p heù p toaøn boä caù cnga é t(bit GIER v a øPEIE). Ñ oïc giaùtrò thanh ghi RCSTA ñeå ñoïc bit d ö õlie äu th ö ù9 vaøk ieåm tra xem quaùtrình n h aä nd ö õlie äu co ùb ò lo ãikhoâng. 2.set bit RCIE. SPEN clear bit CSRC). Khi bit CREN (cho pheùp nhaän chuoãi döõ lieäu) ñöôïc set tröôùc khi leänh sleep ñöôïc thöïc thi. N e áud ö õlieäutruyeànnhaänc o ùñònh daïngla ø9 bit. 6. set bit RX9. bit RCIF seõ ñöôïc set vaøngaét ñöôïc kích hoaït (neáu bit RCIE ñöôïc set). 2.boä ñeám chöông trình seõ chæ ñeánñòa chæ0004h v a øchöông trình ng aétseõñö ô ïc th öïc thi. Thanh ghi TXSTA (ñòa chæ 98h): xaù claäpcaù ctho ângsoácho giao dieän. Thanh ghi TXREG (ñòa chæ 19h): thanh ghi ch ö ù ad ö õlieäu caàn truyeàn. C aùcböôùccaàntieánhaønhkhi n h aän d ö õlie äu b aè n ggiao dieänUSART ñoàng boä Slave mode: 1. N eá u c a à nsö ûduïng ngaétnhaänd ö õlie äu . Cho pheùp coång giao tieáp USART baát ñoàng boä (set bit SYNC. 10Bh.Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaéttruyeànTXIE. N eá u sö ûduïng ngaétnhaäncaànset bit GIE v a øPEIE (thanh ghi INTCON). C aùc thanh ghi lieân quan ñeán quaù trình nhaän döõ lieäu baèng giao dieän USART ñoàng boä Slave mode: Thanh ghi INTCON (ñòa ch æ 0Bh.1. . Ñoïc 8 bit d ö õlie ä u tö øthanh ghi RCREG. Thanh ghi SPBRG (ñòa ch æ99h): quy eátñònh toácñoäbaud. xoù alo ã ibaèngcaùchxoùabit CREN. N eáu bit RCIE (cho pheùp ngaét nhaän) ñaõ ñöôïc set trö ô ùcño ù . 7.

… )hay c aù cvi ñieàu khieån khaùc.MSSP c o ù theå hoaït ñoäng döôùihai daïng giao tieáp: SPI (Serial Pheripheral Interface).2 MSSP MSSP ( Master Synchronous Serial Port) l a ø giao dieän ñoàng boä noái tieáp duøng ñeå giao tieáp vôù icaùc thieát bò ngoaïi vi (EEPROM. RC4/SDI/SDA: ng oõv aøodö õlieäu daïng noáitieáp(Serial Data Input).Thanh ghi PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øh ieä u RCIE. C aùc thanh ghi ñieàu khieån giao chuaån giao tieáp naøy bao goàm thanh ghi traïng thaùi SSPSTAT v a ø hai thanh ghi ñieàu khieån SSPSON v a ø SSPSON2.19 Sô ño àk h oáiMSSP (giao dieänSPI) RC3/SCK/SCL: xung ñoàng b oä tieáp(Serial Clock). chuyeån ñoåi ADC. Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaétRCIE. Thanh ghi TXSTA (ñòa chæ 98h): chöùacaùcbit ñieàukhieånSYNC v a øBRGH. Ta c aà n sö õ duïng 4 pin cho chuaångiao tieápnaøy: RC5/SDO: ng o õ ra d ö õ lie äu daïng noái tieáp(Serial Data output). 2.1 SPI Chuaån giao tieáp SPI cho pheùp truyeàn nhaän ñoàng boä.12. C aùcthanh ghi lieânquan ñeánMSSP khi hoaï t ñoängô ûchuaångiao tieápSPI bao goàm: .2. Thanh ghi RCSTA (ñòa chæ 18h): xaùcñònh caùctrang thaùitrong qu aùtrình n h aän d ö õlie äu . ghi dòch. 2.12. Thanh ghi RCREG (ñòa chæ 1Ah): ch ö ù ad ö õlie äu n h aä nñöôïc. Thanh ghi SPBRG (ñòa chæ 99h): ñieàuk hieåntoácñoäbaud. Hình 2. I2C (Inter-Intergrated Circuit). T uøy theo chuaån giao tieáp ñöôïc s ö û duïng (SPI hay I2C) m aø chöùc naêng caùc thanh ghi naøy ñöôïc theå hieän khaùc nhau. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. noái RA5/AN4/SS/C2OUT: choïn ñoáitöôïng giao tieáp(Serial Select) khi giao tieápô ûche áñ oä Slave mode.

khi ñ o ùc ô øh ie ä u BF . Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. d ö õlieäutruyeànñi h o aëcnh aän ñö ô ïc seõñöôïc ñöa v aøotranh ghi naøy. Thanh ghi dòch d ö õ lie äu SSPSR du øng ñeå dòch döõ lieäu v aøo hoaëc ra. Khi söû duïng chuaån giao tieáp SPI tröôùctieân ta caàn thieát laäp caù ccheá ñoä cho giao dieän baèng caùch ñöa caù c g iaù trò thích hôïp vaøo hai thanh ghi SSPCON v a ø SSPSTAT. T o ácño äxung clock (khi hoaït ñoängô ûMaster mode). Bit BF seõ tö ï ñoäng reset v e à 0 khi d ö õlie äu trong thanh ghi SSPBUF ñöôïc ñoïc vaøo. C aïnh taùcñoäng cu û axung clock ñoàng boä (caïnh leân hay caïnh xuoáng). M öùclogic cu û axung clock khi ô ûtrang thaùitaïm ngöng quaùtrình truyeànnhaän(Idle). xung clock ñ o àn g b o ä seõ ñi ra t ö ø chaân RC3/SCK/SCL. do ñ o ùd ö õlieä u ghi v aøothanh ghi SSPBUF seõlaäptöù cñö ô ïc ghi vaøothanh ghi SSPSR. khi d ö õlie äu ñöa v a ø o tö øchaân RC4/SDI/SDA trong thanh ghi SSPSR ñ a õsaünsaø ng (ñ aõnh aän ñu û8 bit). xung clock ño àng b oäseõ ñö ô ïc nh aän tö øbeân ngoaøiqua chaânRC3/SCK/SCL. Hai thanh ghi naøy taïo thaønh boä ñeäm döõ lieäu keùp (doubled-buffer). Q uaùtrình truyeàn dö õ lieäu cu õ ngh o aø n toaø ntöông töï nhöng ngöôïc laïi. C aù c tho âng so á caànth ieátlaäpbao goàm: Master mode hay Slave mode. bit MSB ñöôïc dòch tröôùc. ñoàngthôøingaétseõx a û yra. Thanh ghi ñoùngvai tr o øla øbuffer truyeànnhaänSSPBUF. D öõ lieäu caàn truyeàn seõ ñöôïcñöa vaøothanh ghi SSPBUF ñoàngthôøiñöa vaøothanh ghi SSPSR. D öõlieäu seõ ñöôïc dòch vaøo hoaëc ra qua thanh ghi SSPSR.6 bit coønlaïi chæ cho pheùpñoïc. Trong qu aùtrình nhaän döõ lieäu. dö õlieäu seõ töø thanh ghi SSPSR chuyeån qua thanh ghi SSPBUF v a ø c ô ø hieäuñöôïc set. Ñ aây laø m oättrong nhöõngñieåm khaùc bieät g iö õhai giao dieänMSSP v a øUSART (USART dòch bit LSB tröôùc). C aù ccheáño äcu û aSlave mode. ño àng thô ø i cô ø ng aét SSPIF (PIR1<3>) cuõngñöôïc set.Tuy nhieân ta neân ño ïc tröô ù c d ö õ lieäu töø thanh ghi SSPBUF tröôùc khi nhaänbyte d ö õlie äu tieáptheo.B oä ñeäm keùp cho pheùp ñoïc tieáp byte tieáp theo tröôùckhi byte d ö õ lie äu trö ô ù c ñ o ù ñöôïc ñoïc vaøo. Thôøiñieåm xaùc ñònh m öùclogic cu û a d ö õ lieäu (ô û giöõa hay ô û cuoái thôøigian 1 bit döõ lieäu ñöôïc ñöa vaøo). bit chæ thò traïng thaùiboä ñeäm BF (SSPSTAT<0>) seõ ñöôïc set ñeå b aùoh ieäu b oä ñeäm ñaõ ñaày . Slave mode v aøcaù cch eá ñ o äcu û aSlave mode ñöôïc ñieàukhieån bôûicaùcbit SSPM3:SSPM0 (SSPCON<3:0>). thanh ghi naøych æcho p heù pñ o ïc v aøghi ô û2 bit treân. thanh ghi naøycho p h eù pño ïc v aøghi. Ñ o ái v ô ù iMaster mode.SSPBUF khoângc o ùc a á utru ù cñ eä m hai lô ù p(doubledbuffer). Master mode. Ñ oáivô ù iSlave mode. Thanh ghi traïng thaùiSSPSTAT. Khi 1 byte döõ lieäu ñöôïc nhaän ho aø n ch æ nh. d ö õlieäu seõ ñöôïc ñöa vaøothanh ghi SSPBUF. Xem chi t ie á tô ûphuï luïc 2. MSSP bao goàm m oätthanh ghi dò ch d ö õlieäu SSPSR v a ø thanh ghi ñeäm d ö õlieäu SSPBUF.Thanh ghi ñieàukhieånSSPCON.

N g aét seõ x aû yra khi qu aùtrình dòch d ö õlieäu ho aø n taát. ra Khi SPI ô û daïng Slave mode. Beân caïnh ñ o ùcaàn ñieàu khieån chieàu xuaátnhaäp cuûaPORTC thoângqua thanh ghi TRISC sao cho p huø hôïp v ôùich ieàucuûagiao dieän SPI. caàn clear bit TRISC<3> ñ eå cho pheùp ñöa xung clock ñoàng boä chaânRC3/SCK/SCL. Khi SPI ô û daïng Master mode. Khi quaù trình truyeàn nhaän döõ lieäu ñang dieãn ra. caàn set bit TRISC<3> ñ e å cho pheùp nhaän xung clock ñoàngb o ätö øbeânngoaøiqua chaânRC3/SCK/SCL.do ñ o ùc a à nclear bit TRISC<5>. Set bit TRISC<4> ñ e å cho pheùp chaân nhaän tín hieäu ñieàu khieån truy x u aátd ö õlie äu khi SPI ô ûcheá ñoä Slave mode. D öõlieäuseõd ò ch tö øc a ûhai thanh ghi SSPSR ñöa ra n g o a ø in eá u c o ùm oätcaïnh cuûaxung ñoàng boä ñ o ängv aøngöng dòch khi c o ùta ù cñ o ä n gc u û acaïnh coønlaïi. Coånggiao tieáp cuûagiao dieän SPI ñöôïc ñieàu khieån bôûibit SSPEN (SSPSON<5>). Chaân naøyñoùngvai troø choïn ñoáitöôïng giao tieápkhi SPI ô ûch eáñ o äSlave mode. D öõlieäu ñöôïc dòch tö ø thanh ghi SSPSR v a ø ñöa ra ngoaøiqua chaân RC5/SDO.Tuy nh ieân dö õlieäu trö ô ùckhi ñöôïc ñöa ra ngoaøiphaûi ñöôïc cho p heùp bôûitín h ieä u tö ø chaân . giao RS5/SDO la øn g o õra d ö õlieäu .ñöôïc set.20 Sô ñoàkeátnoáicuû achuaångiao tieápSPI.khoáiMaster seõb aétñaàuq u aùtrình truyeànnhaänd ö õlie äu b aè n gcaù ch g ö û itín hieäu xung ñoàng boä SCK. taùc . M oätñieàu caàn chuùy ù n ö õ a la ø thanh ghi SSPSR khoâng cho pheùp truy xuaát tröïc tieáp m aø phaûithoâng qua thanh ghi SSPBUF. ta khoâng ñöôïc pheùp ghi d ö õ lieäu v aø o thanh ghi SSPBUF. Thao ta ù c ghi d öõ lie äu n aøy se õ set bit WCON (SSPCON<7>). Sô ño à k eát o áicu ûachuaå n giao tieápSPI nhö sau: n Hình 2. C uï theånhö sau: RC4/SDI/SDA seõtöï ño ängñö ô ïc ñieàuk hieånb ô û i k h oái iteápSPI. Theo sô ñoàkeátnoáinaøy.

D öõ lieäu seõ ñöôïc truyeàn nhaän ngay th ô ø iñieåm d ö õ lieäu ñöôïc ñöa vaø o thanh ghi SSPBUF.2. vi ñieàu k hieån co ùquyeàn aán ñònh thôøiñieåm trao ñ o åid ö õlieäu (v aø ño ái töôïng trao ñoåi döõ lieäu neáu caàn) vì noù ñieàukhieån xung clock ñoàng boä. 2. Ô Ûche á ñ o äMaster mode. N e áu ch æ ca àn n h aän d ö õ lie äu .1 SPI MASTER MODE. . D öõlieäu seõ ñöôïc dòch vaøo thanh ghi SSPSR theo m oättoác ñoä ñöôïc ñònh saün cho xung clock ñoàng b oä.Sau khi nhaän ñöôïc m oätbyte d ö õlieäu hoaøn chænh. bit BF ñöôïc set vaøn g aétx aû yra.byte d ö õlie äu se õ ñöôïc ñöa d aøothanh ghi SSPBUF.1.traïng thaùicuûaquaùtrình seõ ñö ô ïc g iö õnguyeânv aøtieáptuïc sau khi vi ñieàukhieånñöôïc ñaùnhthöùc.21 G iaû nño àxung SPI ô ûche áño äMaster mode.12. Khi leänh SLEEP ñöôïc thöïc thi trong quaùtrình truyeàn nhaän. ta c o ù th eå a á n ñònh chaân SDO la ø n g o õ v a ø o (set bit TRISC<5>).C a ûhai khoáiMaster v a øSlave neânñöôïc aánñònh chung caù cqui taéctaùcñoäng cuû a xung clock ñ o àn gb o äñ e åd ö õlie ä u c o ùtheådòch chuyeånñoàngthôøi. G iaû nño à xung cu û aMaster mode v aøc a ù cta ù cñoäng cuûacaùcbit ñieàu khieån ñöôïc trình baøy trong hình v e õsau: Hình 2.

1. å Slave mode cho pheùpsöï taùcñoängcuûachaânñieàuk hieån (SSPCON<3:0> = 0100). Slave mode hoaït ñoängngay c a ûkhi vi ñieàukhieånñang ô ûcheáñ o äsleep.2 SPI SLAVE MODE Ô Ûch eáño änaø ySPI se õtruyeànv aøn h aä nd ö õlie äu khi c o ùxung ñoàng boä hieänô ûchaânSCK.Khi ch æcaànn h aä nd ö õlie äu . Khi chaân ô ûm öùcthaáp. 10Bh.ñoàngthôøiSPI ñöôïc reset (boäñeám bit d ö õlieäuñöôïc gaùngiaùtrò 0). Hình 2.12. 8Bh.chaânRC5/SDO ñöôïc cho p h eù px u aátd ö õlieäu v aø khi ô ûm öùccao. . Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaétSSPIE.ta c o ù th ea á nñònh RC5/SDO laøn g o õv a ø o(set bit TRISC<5>).2. 18Bh): chöùabit cho pheùp toaønoäcaùc b ng aét(GIE vaø PEIE).22 G iaû nño àxung chuaångiao tieápSPI (Slave mode). C aùcthanh ghi lieânquan ñeán chuaån giao tieápSPI bao goàm: Thanh ghi INTCON (ñòa ch æ0Bh.2.c ô øn g a étSSPIF seõñö ô ïc set. Khi xuaát truyeànnhaänxong bit d ö õlieä u cu o á ic u ø n g . d ö õlie äu ra ô ûchaânRC5/SDO bò khoùa. v a øngaéttruyeànnhaäncho pheùp“ñaùnhthöùc”vi ñieàu khieån. Thanh ghi PIR1 (ñòa chæ 0Ch): chöùangaétSSPIE.

Thanh ghi SSPSR: thanh ghi dòch duøngñeå truyeànnhaänd ö õlieäu . . Thanh ghi SSPSTAT (ñòa chæ 94h): chöùacaùcbit chæ thò traïng thaùichuaångiao tieápSPI. I2C s e õs ö ûduïng 2 pin ñ e åtruyeànnhaänd ö õlie äu : RC3/SCK/SCL: chaân truyeàn daãn xung clock. Tuy nhieân I2C coøn coù theâm khoái phaùt hieän bit Start v a ø bit Stop cu û a d ö õ lieäu (Start and Stop bit detect) v a ø khoái xaùc ñònh ñòa ch æ (Match detect).23 Sô ño àk h oáiMSSP (I2Cslave mode).6 bit coønlaïi chæcho pheùpñoïc. RC4/SDI/SDA: chaân truyeàn d a ãn d ö õ lieäu. C aùckhoáicô b aû ntrong sô ño àk ho áicu û a I2C khoâng coù nhieàu khaùc bieät so v ô ù i SPI. Hình 2. Thanh ghi SSPADD chöùa ñòa chæ cu ûa thieát b ò ngoaïi vi caàn truy x uaát d ö õ lieäu cu û a I2C khi hoaït ñoäng ô û Slave mode. C aùcthanh ghi SSPCON. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. thanh ghi SSPADD chöù a giaù trò taïo ra to ácñ o äbaud cho xung clock duøngñeå truyeànnhaänd ö õlieäu. Thanh ghi TRISA (ñòa chæ 85h):ñieàukhieånxuaátnhaäpchaân . C aùcthanh ghi lieânquan ñeánI2C bao goàm: Thanh ghi SSPCON vaø SSPCON2: ñieàukhieånMSSP. SSPCON2 cho pheùp ñoïc v a ø ghi. Thanh ghi SSPSTAT: thanh ghi chöùa caùctraïng thaùihoaït ñoängcuûaMSSP. Thanh ghi SSPBUF: buffer truyeànnhaännoáitieáp. Slave v a øcuõngñöôïc keátnoáivôùingaét. Khi hoaït ñoängô û Master mode. Chuaån giao tieáp I2C cu õ n g c où hai ch eá ño ä Master. Thanh ghi SSPBUF (ñòa chæ 13h): thanh ghi ñ e äm d ö õlieäu. Thanh ghi SSPBUF chöùa döõ lieäu seõ ñöôïc truyeàn ñi hoaëc nhaän ñöôïc vaø ñoùng vai tro ø nhö m oätthanh ghi ñeäm cho thanh ghi d ò ch d ö õlie äu SSPSR.Thanh ghi TRISC (ñòa chæ 87h): ñieàukhieånxuaátnhaäpPORTC.12.2. Thanh ghi SSPCON (ñòa chæ 14h): ñieàukhieånchuaångiao tieápSPI. Thanh ghi SSPADD: thanh ghi chöùañòa chæcuûagiao dieänMSSP. Thanh ghi SSPSTAT c hæ cho ph eù pño ïc vaøghi ô û2 bit ñaàu. 2.2 I2C Ñ aây laø m o ät daïng khaùc cuûa MSSP.

ñeå xaùcñònh thao taùc (ñoïc Khi löïa choïn giao dieän I2C v a økhi set bit SSPEN.vi ñieàu khieån seõ taïo ra xung ñeå baùo hieäu k eát thuùc dö õ lieäu. Trong quaù trình truyeàn d ö õ lieäu. Tuy nhieân xung seõk ho ângñö ô ïc taïo ra neáum oättrong caùctröôønghôïp sau xaûyra: Bit BF (SSPSTAT<0>) baùo hieäu buffer ñaà y ñ a õ ñöôïc set tröôùc khi quaù trình truyeàn nhaänxaûyra. 10 bit ñòa chæ . I2C cu ûavi ñieàuk hieån seõ ñöôïc ñieàukhieån bôûim oätvi ñieàukhieånhoaëcm oätthieátbò ngoaïi vi khaùcthoângqua caùc ñòa chæ . bao goàm: ñ I2C Master mode.cho pheùpngaétkhi phaùthieänbit Start v a øbit Stop. Chi tieátveàcaù cthanh ghi seõñö ô ïc trình b a ø yc u ï th e å ô ûphuï luïc 2. thì taïi thôøiñieåm naøy vaø taïi thôøiñieåm döõ lieäu ñaõ ñöôïc truyeàn nhaän xong sau ñ o ù .2. d ö õ lieäu caàn truyeàn khi ñöôïc ñöa vaøo thanh ghi SSPBUF c uõng seõño àngth ô ø iñöa v aøothanh ghi SSPSR.Trong qu aùtrình nhaän döõ lieäu. V ieäctröôùctieân la øp h a û iset c aù cpin SCL v a øSDA l a øinput (set bit TRISC<4:3>). Thanh ghi SSPSR khoâng ñoïc vaø ghi ñöôïc. I2C Slvae mode. sau khi nhaän ñöôïc 1 byte döõ lieäu hoaøn chæ nh. Trong caùc tröôøng hôïp treân.12. . Ñ eå qu aù trình truyeàn nhaän döõ lieäu ñöôïc tieáp tuïc.Do ñ o ùtrong tröôønghôïp caàn thieát ta p h aû isö ûd uïng ñieän ûk eùoleân ô û beân ngoaøivi trô ñieàu khieån. beân caïnh ñ o ù c a à n a á n ñònh caù c g iaù trò p hu ø hôïp cho caù c bit TRISC<4:3> (bit ñieàu khieånxuaátnhaäpcaùcchaânSCL v a øSDA). 10 bit ñòa chæ. quaùtrình truy xuaátthanh ghi naøyphaûithoângqua thanh ghi SSPBUF. 7 bit ñòa chæ. 2. khi ñ o ù bit BF seõ töï ño äng ñöôïc xoù a. xung clock = fosc/4*(SSPADD+1).cho pheùpngaétkhi phaùthieänbit Start v a øbit Stop.1 I2C SLAVE MODE. coøn bit SSPOV phaûiñöôïc xoùabaèngchöông trình. 7 bit ñòa chæ. I2C c o ùnh ieàuch eáñ o ä h oaït oän gv aøñö ô ïc ñ ieàuk hieånb ôû icaù cbit SSPCON<3:0>. thanh ghi SSPSR se õ chuyeån d öõ lieäu vaø o thanh ghi SSPBUF. Bit SSPOV (SSPCON<6>) ñöôïc set tröôùc khi quaù trình truyeàn nhaän xaûy ra (SSPOV ñöôïc set trong tröôønghôïp khi m oätbyte khaùcñöôïc nhaän vaøo trong khi d ö õlie äu trong thanh ghi SSPBUF tröôùc ñ o ùv aãnchöa ñöôïc laáyra). I2C Slave mode. nhöng bit SSPIF (PIR1<3>)seõ ñöôïc set. Ñòa chæ truyeàn ñi se õ bao goàm caùcbit ñòa chæ v aø m oätbit hay ghi d ö õlieäu )v ô ù iñoáitöôïng caàntruy x u aátd ö õlieäu.Khi ñòa chæ naø y ch æ ñeán vi ñieàu khieån. I2C Firmware Control Master mode. caàn ñoïc d ö õ lie ä u tö ø thanh ghi SSPBUF vaøo tröôùc.2. caùcpin SCL v a ø SDA s e õ ô û traïng thaùi cöïc thu h ôû . I2C Slave mode. I2C Slave mode. g iaù trò trong thanh ghi SSPSR seõ ñöôïc ñöa vaøo thanh ghi SSPBUF. thanh ghi SSPSR seõ k hoâng ñöa g iaù trò vaø o thanh ghi SSPBUF.

M oätxung ñöôïc taïo ra. Trong ñ o ù caù c b ö ô cù 7. BF v a øUA ñöôïc set. neáu ñòa chæ nhaän ñöôïc laø ñuùng(address match). C aäp nhaät vaøo8 bit ñòa chæ thaáp cuûathanh ghi SSPADD. BF v a ø UA (SSPSTAT<1>) ñöôïc set (byte ñòa chæñaà u tieâ n c o ùñònh daïngl a ø‘11110 A9 A8 0’) . . C aäp nhaät 8 bit ñòa chæ ñaõ nhaän ñöôïc vaøo8 bit ñòa chæ cao cu ûa thanh ghi SSPADD. C ô øng aétSSPIF ñöôïc set (ngaét ñöôïc kích hoaït neáu ñöôïc cho pheùp tröôùcñoù)taïi caïnh xuoángcuûaxung clock th öù9.Byte th öù2 l a ø8 bit ñòa chæ coøn laïi. Ñ aàu tieân 2 bit MSB cu û a 10 bit ñòa ch æ ñöôïc nhaän tröôùc. Bit BF töï ñoängñöôïc set. bit BF v a øSSPOV seõñö ô ïc x o ùaveà0 v aøg aâyra caù ctaù cñoängsau: 1. bit SSPIF. 3. 6.8. 2. 4. vi ñieàu khieån caàn phaûinhaän vaøo 10 bit ñòa ch æ ñ eå saùnh. 5. A8 la ø hai bit MSB cu ûa10 bit ñòa chæ. bit UA seõ ñö ô ïcxo ù ab ô û ivi ñieàukhieånñeå khôûitaïo xung clock ô ûpin SCL sau khi qu aùtrình caäpnhaäthoaøntaát. N eáu keát quaû so saùnh baèng nhau. 9. Bit so (SSPSTAT<2>) phaûi ñöôïc x o ùa v eà 0 ñ eå cho pheùp nhaän 2 byte ñòa chæ. Ñ oïc giaùtrò thanh ghi SSPBUF (bit BF ñöôïc xoùaveà0) v a øx où ac ô øn g a étSSPIF. 2.9 xaû y ra trong qu aù trình truyeàn döõ ô û c h e á ñ o ä Slave mode. n o ùs e õ c h ô øtín hieäu ñeå baét ñaàu hoaït ñoäng. Quaùtrìnhnhaändaïng ñòa ch æcu ûaMSSP ô ûch eáñ o äI2C Slave mode 10 bit ñòa chænhö sau: 1. Ñ oïc giaùtrò thanh ghi SSPBUF (bit BF seõñö ô ïc x o ùaveà0) v a øx o ù ac ô øn g a étSSPIF. 8. G iaùtrò trong thanh ghi SSPSR ñöôïc ñöa vaøothanh ghi SSPBUF. Giaùtrò nhaän ñöôïc t ö ø thanh ghi SSPSR seõ ñöôïc so saùnhvôùigiaùtrò trong thanh ghi SSPADD taïi caïnh xuoáng cuûa xung clock th öù 8. 4. Nhaän8 bit ñòa chæ cao. tö ù c la ø I2C Master chæ ñònh ñoái töôïng giao tieá p la ø vi ñieàu khieån ñang ô û c h e á ñ o ä Slave mode (ta goïi hieän töôïng n a ø y la ø address match). C aùcbit ñöa v aøoseõ ñöôïc laáy maã u taïi caïnh leân cuûaxung clock. Ñ oïc giaùtrò thanh ghi SSPBUF (bit BF seõñö ô ïc x o ùaveà0) v a øx o ù ac ô øn g a étSSPIF. bit SSPIF. Khi MSSP ô ûc h e á ñ o ä I2C Slave mode 10 bit ñòa chæ .Sau khi nhaân ñöôïc tín hieäu baétñaàu hoaït ñoäng(caïnh xuoángñaàu tieân cuûapin SDA).Byte ñaàu tieân coù ñònh daïng l a ø ‘11110 A9 A8 0‘ trong ñ o ùA9. Nhaäntín hieäuStart.Khi MSSP ñöôïc kích hoaït. 7. d ö õlie äu 8 bit seõ ñöôïc dòch vaøo thanh ghi SSPSR. 3. xung clock ô û chaân SCL ñö ô ïc kh ô û i taïo v aøbit UA ñöôïc set. lieäu Xem g iaûn ñ oà xung cu ûaI2C ñeå co ù ñö ô ïc hình aû n h cuï theå hôn veà caùcböôùctieán haønh trong quaù trình nhaändaïng ñòa chæ. Nhaänbyte ñòa chæcao (bit SSPIF v a øBF ñöôïc set).

c ô øngaét SSPIF seõ ñöôïc set vaø ph aû iñö ô ïc x où ab aèngchöông trình. Hình 2. sau khi 1 byte döõ lieäu ñöôïc nhaän. bit cu ûa thanh ghi SSPSTAT ñöôïc x o ùa v eà 0 vaø ñöôøngdöõ lieäu SDI ñöôïc ñöa v eà m ö ùc logic thaáp (xung ). Ñ ieàu naøy seõ laøm cho hieän töôïng traøn döõ lieäu khoâng xaû y ra vì bit SEN cho pheùpta ñieàu khieån ñöôïc xung clock dòch d ö õlie äu th o âng qua bit CKP (tham k haû og iaû n ñoàxung ñeå bieát theâm chi tieát). muoán khôûitaïo laïi xung clock ta set bit CKP (SSPCON<4>). bit BF hoaëcbit SSPOV seõ ñö ô ïc set. xung clock tö ø c h a â n RC3/SCK/SCL seõ ñöôïc ñöa xuoáng m öùcthaáp.Khi hieän töôïng traø n dö õlieäu x aûyra.24 G iaû nño àxung cu û aI2C Slave mode 7 bit ñòa chætrong qu aùtrình n h aän d ö õlie äu (bit SEN = 0). Khi bit SEN (SSPCON<0>) ñöôïc set. . N g aét seõ xaûyra khi m oätbyte döõlieäu ñöôïc nhaän xong. caù c bit ñòa chæ seõ ñöôïc I2C Master ñöa vaøo tröôùc.X eùtqu aù trình nhaän döõ lieäuô û c h e á ñ o ä Slave mode. Khi bit trong caù cbit ñ ò a ch æ co ùg iaùtrò baèng0 (bit naøyñöôïc nhaändaïng sau khi caù cbit ñòa chæ ñaõ ñöôïc nhaän xong) vaøñò a ch æ ñö ô ïc ch æ ñò nh ñu ù ng (address match).

Hình 2. . Hình 2.26 G iaû nño àxung cu ûaI2C Slave mode 7 bit ñòa chætrong qu aùtrình n h aän d ö õlie äu (bit SEN = 1).25 G iaû nño àxung cu ûaI2C Slave mode 10 bit ñòa chætrong qu aùtrình n h aänd ö õlieäu (bit SEN = 0).

Sau ñ o ùxung ñöôïc taïo ra. Tieáp theo cho pheùp xung ô û pin RC3/SCK/SCL baèng caùchset bit CKP (SSPCON<4>). C aùcbit ñòa chæ ñöôïc nhaän tröôùcv aøñöa vaøothanh ghi SSPBUF. giuùpcho I2C Master nhaän ñöôïc döõ lieäu taïi m oãicaïnh leân cuûaxung clock. xung clock ô û chaân RC3/SCK/SCL ñöôïc ñöa xuoáng m öùc thaáp baát chaáp traïng thaùi cu û a bit SEN. thanh ghi SSPSTAT seõñöôïc reset. Trong tröôønghôïp xung ñöôïc choátbôûiI2C Slave.27 G iaû nño àxung cu ûaI2C Slave mode 10 bit ñòa chætrong qu aùtrình n h aänd ö õlieäu (bit SEN = 1). döõ lieäu ñaõ ñöôïc dòch hoaøn toaøn vaøo I2C Master. Nhö v aäy d ö õlieäu se õ saü n saøngô û n g o õ ra khi xung clock ô û m öùclogic cao. I2C Slave . bit cu ûathanh ghi SSPSTAT seõ ñöôïc set. ñoàng thôøipin SDA se õ ñöôïc g i ö õ ô û m öùc logic cao. xung se õ ñöôïc taïo ra ô û I2C Master. Taïi caïnh leân xung clock th öù 9.Hình 2. Khi ñ o ù I2C Master seõ khoâng ñöôïc ñöa xung clock vaøoI2C Slave cho ñeán khi d ö õlie äu ô û thanh ghi SSPSR ô û traïng thaùi w saün saûng cho qu aù trình truyeàn döõ lieäu(döõ lieäu ñöa vaøo thanh ghi SSPBUF seõ ño àng thô ø i ñöôïc ñöa vaøo thanh ghi SSPSR). Nhö vaäy trong qu aù trình truyeàn d ö õ lie äu bit SEN khoâng ñoùngvai tro ø quan troïng nhö trong qu aù trình n h aän d ö õ lieäu.khi bit trong caù cbit d ö õlie äu mang g iaùtrò 1 vaø ñò a ch æ ñö ô ïc ch æ ñònh ñuùng(address match). X eùtqu aùtrình truyeànd öõlieäu . Töøngbit cu ûabyte d ö õlie ä u se õ ñöôïc dòch ra ngoaøitaïi m oãi caïnh xuoángcuûaxung clock.

Hình 2. Hình 2.se õ c h ô øtín hieäu cuûabit Start ñeå tieáp tuïc truyeàn byte dö õlieäu tieáp theo (ñöa byte dö õlieäu tieáp theo vaøothanh ghi SSPBUF v a øset bit CKP. bit SSPIF ñöôïc set taïi caïnhxuoáng cu ûaxung clock th ö ù9 v aø p haû iñö ô ïc xo ù ab aèng chöông trình ñeå ñaû m b aûoseõ ñöôïc set khi byte d ö õlie äu tie áp theo truyeànxong. .29 G iaû nño àxung cu û aI2C Slave mode 10 bit ñòa chætrong qu aùtrình truyeànd ö õlieäu. NgaétMSSP xaûy ra khi m oätbyte döõ lieäu keát thu ù c qu aù trình truyeàn.28 G iaû nño àxung cu ûaI2C Slave mode 7 bit ñòa chætrong quaùtrình truyeànd ö õ lieäu.

Q uaù trình truyeàn nhaän caùc bit ñòa ch æ cho pheùp I2C Master choïn löïa ño ái töôïng I2C Slave caàn truy xuaát döõ lieäu. Hình 2. caù c pin SCK v a ø SDA seõ ñöôïc ñieàukhieånbôûiphaàncöùngcuûaMSSP. Q uaùtrình nhaän daïng ñòa c hæ GCA cuõngtöông tö ï nhö khi nhaän daïng caù c ñòa ch æ k haù c vaøkhoângc o ùsöï k h aù cb ie ä tro õra ø n gkhi I2C hoaït ñoängô ûcheáñoäñòa chæ7 bit hay 10 bit. Ñ aây laø m o ät trong 8 ñòa chæ ñaëc bieät cuûa protocol I2C.12. Khi ñ o ù ñòa chæ nh aän v aøo seõ ñöôïc so saùnh v ôù ithanh ghi SSPADD v aøvô ù iñ ò a ch æGCA. B eân caïnh ñoù I2C co ø n cung caáp theâm m oätñòa chæ GCA (General Call Address) cho pheùp choïn taát c a û c a ù c I2C Slave.2 I2C MASTER MODE I2C Master mode ñöôïc xaùclaäp baèng caùch ñöa caù cg iaù trò thích hôïp vaøocaùcbit SSPM cu ûa thanh ghi SSPCON v a ø set bit SSPEN. 2. Ô Û ch eá ñ oä Master. .30 G iaû nño àxung cu ûaI2C Slave khi nhaänñòa chæ GCA.2. Ñ òa chæ naøyñöôïc ñònh daïng l a ø m oätchuoãi‘0’ v ô ù i =0 v aø ñö ô ïc cho pheùpbaèng caùch set bit GCEN (SSPCON2<7>).2.

K hi döõ lieäu tieáp theo ñöôïc ñöa vaøo. I2C Master ñoùngvai tro øtích cöïc trong qu aùtrình giao tieáp vaø ñieàu khieån caùcI2C Slave thoâng qua vieäc c hu ûñoäng taïo ra xung giao tieáp v aø c a ù ñieàu kieän Start. BRG seõ caàn m oät k hoaûng thôøigian TBRG töï ñoäng reset laïi g iaù trò ñeå tieáp tuïc quaù trình ñeám ngöôïc. M oãi voøng leänh(coùthôøigian TCY ) BRG seõg iaû mg iaùtrò 2 laàn. bit BF ñöôïc set v a ø BRG töï ñoäng ñeám ngöôïc veà 0 v aø d öø n g laïi.31 Sô ño àk h oáiMSSP (I2C Master mode). Xung giao tieáp noáitieáp seõ ñöôïc taïo ra tö ø BRG (Baud Rate Generator). Hình 2. C aùc giaùtrò cuï th eåc uû ataànso áxung noáitieápdo BRG taïo ra ñöôïc lieätkeâtrong baûngsau: . Khi döõ lieäu ñöôïc ñöa v aøo thanh ghi SSPBUF.Hình 2. g iaù trò aán ñò nh taàn so á xung clock no ái tieáp ñö ô ïc laáy tö ø 7 bit thaáp cuûa thanh ghi SSPADD. c M oätbyte d ö õlie ä u c oùth eå ñöôïc baétñaàu baèng ñieàu kieän Start.32 Sô ño àk ho áiBRG (Baud Rate Benerator) cu ûaI2C Master mode. pin SCL ñöôïc giöõ nguyeân traïng thaùi tröôùc ñoù. Stop khi truyeàn nhaän d ö õ lieäu. keát thuùc baèng ñieàu kieän Stop h o aëc b aé tñ aàuv aøk eátth uù cvô ù ic uø n gm o ätñ ieàu k ieän khô û iñoänglaëplaïi (Repeated Start Condition).

ñieàukieän Start seõk ho ângñö ô ïc hình thaønh. Khi ñ o ù bit S (SSPSTAT<3>) se õ ñöôïc set.cô øn g aétBCLIF seõñö ô ïc set vaø I2C s e õ ô ûtraïng thaùitaïm ngöng hoaït ñoäng(Idle). Tieáp theo BRG tieáp tuïc laáy g iaù tö ø thanh ghi SSPADD ñeå tieáp tuïc qu aù trình ñeám.Trong ñ oùg ia ùtrò BRG la øg ia ùtrò ñöôïc laáyt ö ø7 bit thaápcuûathanh ghi SSPADD. pin SDA ñöôïc ñöa xuoáng m öùclogic thaáp. thanh ghi SSPADD seõ k h oâng ñö ô ïc sö ûd uïng ñeå ch öù añò a ch æ . Do I2C ô û c h e á ñ o äMaster mode. h o aë c laø trong qu aùtrình taïo ñieàu kieän Start. Sau khoaûng thôøi gian TBRG. bit SEN ñöôïc tö ï trò ñ o ä n gx o ù av a øc ô øn g a étSSPIF ñöôïc set.33 G iaû nño àxung I2C Master mode trong qu aùtrình taïo ñieàukieänStart. cuû Ñ eå taïo ñöôïc ñieàu kieän Start. tröôùcheát caàn ñöa hai pin SCL v a ø SDA leân m öùclogic cao v a ø bit SEN (SSPCON2<0>) phaûiñöôïc set.thay v aø oñ o ù ch ö ù cn aê n gcu û aSSPADD l a øthanh ghi chöùag iaù trò aBRG. Khi ñ o ù BRG seõ töï ñoäng ñoïc g iaù trò 7 bit thaáp cuûa thanh ghi SSPADD v aø baét ñaàu ñeám . pin SCL ñöôïc ñöa v e à traïng thaùi logic thaáp tröôùc khi pin SDA ñöôïc ñöa v eà trang thaùilogic thaáp. Hình 2. Traïng thaùipin SDA ô û m öùc logic thaáp v aø pin SCL ô û m öùclogic cao chính laø ñ ieà u k ie ä n Start cu ûa I2C Master mode. Trong tröôønghôïp pin SCL v a ø SDA ô û traïng thaùilogic th aáp . .

Ngay thô ø iñieåm ñ oùbit S (SSPSTAT<3>) ñöôïc set ñeå baùo hieäu ñieàu kieän Start ñöôïc hình thaønh. bit RSEN tö ï ñoäng ñöôïc xoùa vaø côø ngaét SSPIF se õ ñöôïc set sau m oät khoaûng thôøigian TBRG nöõa. nghóa la ø ñ ieà u k ieä n Stop ñaõñö ô ïc taïo ra.bit PEN töï ñoängñöôïc x où av a øc ô øng a étSSPIF ñöôïc set.L uùc naøy ñòa chæ cuûa I2C Slave c o ù th e å ñöôïc ñöa vaøo thanh ghi SSPBUF. C aàn chuùy ù l a ø b a á t c ö ù m o ä t trình töï naø osai trong qu aùtrình taïo ñieàu kieän Start laëp laïi seõ laø mcho bit BCLIF ñöôïc set v a øI2C ñöôïc ñöa veà traïng thaùi“Idle”. Sau caïnh xuoáng cuûa xung clock th ö ù 9 vaø vô ù i taùc ño äng cu û a bit ñieàu khieån PEN. pin SCL ñöôïc ñöa leân m öùc logic cao v a ø sau m oät khoaûng thôøi gian TBRG nöõapin SDA cuõngñöôïc ñöa leân m öùccao. Sau m oätkhoaûng thôøigian TBRG nöõa. pin SCL cuõng ñöôïc ñöa leân m öùc logic cao trong khoaûng thôøigian TBRG tieáptheo. pin SDA cuõng ñöôïc ñöa xuoáng m öùc thaáp. Ngay taï i thôøiñieåm ño ù bit P (SSPSTAT<4>) ñöôïc set. Ñ eå taïo ñöôïc dieàu kieän Start laëp laïi lieân tuïc trong qu aù trình truyeàn döõ lieäu. Trong khoaûng thôøigian TBRG keá tieáp.34 G iaû nño àxung I2C Master mode trong qu aùtrình taïo ñieàukieänStop. . Sau khoaûng thôøi gian TBRG. I2C Master seõtöï ño ängtaïo tín hieäuStart laëplaïi lieântuïc cho qu aùtrình truyeànd ö õlie äu lie ân tuïc. Sau khi set bit RSEN.Tín hieäu Stop seõ ñöôïc ñöa ra pin SDA khi ke á t thöùc döõ lieäu baèng caù c h set bit PEN (SSPCON2<2>). BRG laá y g iaùtrò tö øthanh ghi SSPADD vaøoñeå baéty ñaàu quaù trình ñeám. pin SCL ñöôïc ñöa xuoáng m öùclogic thaáp. Hình 2. Sau m oät khoaûng thôøigian TBRG.pin SDA ñöôïc ñöa leân m öùclogic cao. BRG laïi baét ñaàu quaù trình ñeám.pin SDA laïi ñöôïc ñöa xuoángm öùclogic thaáptrong khi SCL vaãnñöôïc giöõô ûm öùclogic cao. sau ñ o ù ta chæ vieäc ñöa tieáp ñòa chæ hoaëc d öõ lieäu tieáp theo vaøo thanh ghi SSPBUF m oãi khi nhaän ñöôïc tín hieäu tö ø I2C Slave. tröôùcheát caàn set bit RSEN (SSPCON2<1>).

. BRG baét ñaàu ñeám ngöôïc veà 0. bit BF töï ñoäng ñöôïc set leân 1 v a ø b o ä ñeám taïo xung clock noái tieáp BRG (Baud Rate Generator) baét ñaàu hoaït ñoäng. bit BF ñöôïc töï ñoäng clear. dö õlieäu h oaëc ñ ò a ch æ seõ tieáptuïc ñöôïc truyeànñi taïi caïnh xuoángcuûaxung clock tieáptheo. cô ø n g aé t SSPIF ñöôïc set v a ø BRG taïm ngöng hoaït ñoäng cho tô ù ikhi d ö õlieäu hoaëcñòa chæ tieáp theo ñöôïc ñöa vaøothanh ghi SSPBUF. I2C Master se õ ngöng taùc ñoäng leân pin SDA ñeå chôø ñôïi tín h ieä u tö ø I2C Slave (tín hieäu xung ). I2C Master seõ laáy m aãu tín h ieä u tö øpin SDA ñeå kieåm tra xem ñòa chæ ñaõ ñöôïc I2C Slave nhaän daïng chöa. Byte d ö õlieäu ñ aàu tieân ph aû ilaø byte ñòa chæ xaùcñònh I2C Slave caàn giao tieáp vaø bit (trong tröôønghôïp naøy = 0). Khi ta á t c a û c a ù c bit cu ûa byte d ö õlieäu ñö ô ïc ñaõ ñöôïc ñöa ra ngoaøi. Ñ aàu tieân caù cg iaùtrò ñòa chæ seõ ñöôïc ñöa v aøothanh ghi SSPBUF. xung clock se õ ñöôïc ñöa ra t ö ø pin SCL vaø d ö õ lieäu ñö ô ïc ñöa ra t ö øpin SDA. Taïi caïnh xuoáng cuûa xung clock thö ù 9. X eùtquaù trình truyeàn döõ lieäu.taïi caïnh xuoáng cuûa xung clock th ö ù 8.Hình 2.Khi ñ o ùtö ø n g bit dö õlieäu (ho aëc ñò a chæ v a ø bit ) seõ ñöôïc dòch ra ngoaøitheo töøngcaïnh xuoángcuûaxung clock sau khi caïnh xuoáng ñaàu tieân cuûapin SCL ñöôïc nhaän dieän (ñieàu kieän Start).35 G iaû nño àxung I2C Master mode trong quaù trình taïo ñieàukieänStart lieântuïc. Sau ñoù. C uõngtaïi thô ø iñieåm caïnh xuoáng cuûa xung clock th öù 9. boä ñeám BRG mang gia ù trò 0. traïng thaùi ñöôïc ñöa vaøo bit ACKSTAT (SSPCON2<6>).

Khi ñ o ù BRG baét ñaàu quaù trình ñ eám . X eùtqu aù trình nhaän döõ lieäu ô û c h e á ñ o ä I2C Master mode. d ö õ lieäu seõ ñöôïc dòch v aøo I2C Master qua pin SDA taïi caïnh xuoáng cuûa pin SCL. . BRG ngöng ñeám vaø pin SCL ñöôïc ñöa veà m ö ùc logic thaáp. Khi ñ o ù MSSP ô û traïng thaùi taïm ngöng hoaït ñoäng ñe å chôø ñôïi leänh tieáp theo. Tröôùc tieân ta caàn set bit cho p heùp nhaän döõ lieäu RCEN (SSPCON2<3>). cô øh ie äu BF ñöôïc set. Sau khi ñoïc giaù trò thanh ghi SSPBUF.Ta c o ø nc oùth eåg ö û itín hieäu baèngcaùchset bit ACKEN (SSPCON2<4>).Hình 2. cô ø hieäu BF tö ï ñoäng ñöôïc xoùa. cô øn g aé t SSPIF ñöôïc set. Taïi caïnh xuoáng cuûa xung clock th ö ù8.dö õlieäu trong thanh ghi SSPSR ñöôïc ñöa v aøo thanh ghi SSPBUF. bit cô øh ieäu cho pheùpnhaän RCEN tö ï ño äng ñö ô ïc xo ù a.36 G iaû nño àxung I2C Master mode trong quaùtrình truyeànd ö õlieäu.

PORTD lu ù cnaø yño ù ng vai tr o ø la ø thanh ghi choátd ö õ lieäu 8 bit. Do coång song song chæ hoaïtñoäng ô û c h e á ñ o ä Slave mode neân vi ñieàu khieån khi giao tieáp qua giao d ieän naø yseõ ch òu sö ï ñieàu khieån cuûathieátbò beân ngoaøi thoâng qua caùcpin cu û aPORTE. vi ñieàu khieån PIC16F877A co øn ñöôïc h o ã trôï m oät coång giao tieáp song song vaø chu aån giao tieáp song song thoâng qua PORTD v a ø PORTE. Ngoaøira caàn ñöa g iaùtrò thích hôïp c aùc bit PCFG3:PCFG0 (thanh ghi . 2. trong khi d ö õlieäu se õ ñöôïc ñoïc hoaëcghi theo daïng b aátñoàng boä thoângqua 8 pin cu ûaPORTD. PSPMODE ñöôïc set seõ thieát laäp chöù c naêng caùcpin cu û aPORTE la ø c a ù cpin cho pheùp ñoïc döõlieäu ( ). Bit ñieàu khieån PSP la ø PSPMODE (TRISE<4>). PORTE vaãn chòu söï taù c ñoäng cuûa thanh ghi TRISE.Hình 2. do ñ o ù caà n x aù c laäp traïng thaù icaù c pin PORTE la ø input baèng caùch set caùcbit TRISE<2:0>. cho pheùp ghi d ö õ lieäu ( ) v a ø pin choïn vi ñieàu khieån ( ) phuïc vuï cho vieäc truyeàn nhaän d ö õlie äu song song thoângqua bus d ö õlie äu 8 bit cu û aPORTD. ñoàng thôøitaùcñoäng cuûathanh ghi TRISD cu õ ngseõ ñö ô ïcb o ûqua do PORTD lu ù c n aø y chòu söï ñieàu khieån cuûa c aùc thieát bò beân ngoaøi.13 C O Å N G GIAO T IE Á P SONG SONG PSP (PARALLEL SLAVE PORT) N g oaøicaùccoång noáitieáp vaø caù cgiao ñieän noáitieáp ñöôïc trình b a ø y ô û phaàn treân.37 G iaû nño àxung I2C Master mode trong qu aùtrình n h aä nd ö õlieäu.

Khi caùc pin v aø cu ø n g ô û m öùc logic thaáp. Chi tieátveà caù cthanh ghi seõñö ô ïc trình b a ø yc u ï t h e å ô ûphuï luïc 2. C aànchuùy ù l a ø ngaétSSPIF ñöôïc ñieàu khieån bôûi PSPIE (PIE1<7>) vaø phaûiñöôïc xoùa bit baèngchöông trình. Khi caùc pin v aø cu ø n g ô û m öùc thaáp.Bit BOF vaãn ñöôïc giöõô û m öùclogic 0 cho ñeánkhi d ö õlieäutieáptheo ñöôïc ñöa vaøoPORTD. seõñöôïc set ñeå b aù ohieäu qu aùtrình ño ïc d ö õlieäu hoaøntaát. bit baù o hieäu buffer truyeàn d ö õ lie äu ñ a õ ñ a ày BOF (TRISE<6>) seõ ñöôïc xoùa ngay laäp töù cñeå b aùoh ieäu PORTD ñ a õsaü nsaøngcho qu aù trình ñoïc döõ lieäu. C aùcthanh ghi lieânquan ñeánPSP bao goàm: Thanh ghi PORTD (ñòa chæ 08h): ch ö ù ad ö õlieäu caànñ o ïc h o aëcghi. . Khi m oät trong hai pin treân chuyeån leân m öùclogic cao. c ô ø hieäu b aùo d öõ lieäu trong buffer ñ a õ ñ a ày BIF (TRISE<7>) ñöôïc set v aø c ô ø n g a é t PSPIF (PIR1<7>) ñöôïc set ñ e å baùo hieäu keát thuùc ghi d ö õ lieäu.38 Sô ño àk h oáicu û aPORTD v a ø PORTE khi hoaït ñoängô ûch eáño äPSP Slave mode. döõ lieäu tö ø b e ân n g o aø i seõ ñöôïc ghi leân PORTD. Bit baùo hieäu d öõ lieäu nhaän ñöôïc trong buffer bò tra ø n IBOV (TRISE<5>) se õ ñöôïc set khi vi ñieàu khieån nhaän tieáp döõ lieäu tieáp theo trong khi chöa ñ o ïc v aø od ö õlie äu ñ aõnhaänñöôïc tröôùcñoù. Thanh ghi PIE1 (ñòa chæ 8Ch): chöùabit cho pheùpngaétPSP. Thanh ghi PIR1 (ñòa chæ 0Ch): c h ö ù ac ô øn g a étPSPIF. Bit BIF chæ ñöôïc xoùa v eà 0 khi dö õ lieäu v öø a nhaän ñöôïc ô û PORTD ñöôïc ñoïc vaøo. Thanh ghi PORTE (ñòa chæ 09h): chöù ag iaù trò cpin PORTE. Khi m oättrong hai pin treân chuyeånsang m öùclogic cao.ADCON1<3:0>) ñ eå a á n ñònh c aù cpin cu ûaPORTE laø caùcpin I/O daïng digital (PORTE co ø nlaø caùcpin chöùcnaêngcuûakhoáiADC). caù Thanh ghi TRISE (ñòa chæ 89h): chöùacaùcbit ñieàu khieånPORTE v a øPSP. Thanh ghi ADCON1 (ñòa chæ 9Fh): ñieàukhieånkhoáiADC taïi PORTE. c ô øn g a étPSPIF Hình 2.

14. Bit 8 CPD Data EEPROM Memory Write Protection bit 1: Taétchöùcnaêngbaû ov eäm aõcu û aEEPROM. Bit 7 LVP Low-Voltage (Single supply) In-Circuit Serial Programming Enable bit 1: Cho pheùpcheá ñoä naïpñieän aùpthaá p .pin RB3/PGM ñö ô ïc sö ûd uïng cho ch eá ñ oä naøy.14 T O Å N G QUAN V E ÀM O Ä T O Á A Ë CTÍNH C U Û A S Ñ CPU. Bit 11 DEBUG (In-circuit debug mode bit) 1:khoângcho pheùp. 2.2. 0: cho pheùpPWR. 0: khoângcho pheùpWDT. Bit 10-9 WRT1:WRT0 Flash Program Memory Write Enable bit 11: Taétchöùcnaêng choáng ghi. Bit 3 Power-up Timer Enable bit 1: khoângcho pheùpPWR. 0: B aätchöùcnaêngbaûoveäm aõ.RB7 v a øRB6 ñöôïc xem nhö caù cpin xuaátnhaäpbình thöôøng.RB7 v a øRB6 la øc a ù cpin ñöôïc s ö ûduïng cho quaùtrình debug.ñieän aùpcao ñöôïc ñöa v a ø otö øpin . 4: khoângquan taâm v aøñ öô ïc m aëcñ òn h mang g iaùtrò 0.1 CONFIGURATION BIT Ñ a â y la ø c a ù c bit d uøng ñeå löïa choïn caùcñaëc tính cu û a CPU. EECON seõñieàu khieån quaùtrình ghi leân toaø nb oä nh ô ùchöông trình. 0: Khoângcho pheùp cheá ñoänaïp ñieän aùpthaá p . 10: chæchoángtö øñ ò a c h æ 0000h:00FFh. 5. pin RB3 la øpin I/O bình thöôøng. 0: b aätch eáñ o ä b aûv eäm aõchöông trình. 01: chæchoángghi tö øñ ò a c h æ0000h:07FFh. 00: chæchoángghi tö øñ ò a c h æ0000h:0FFFh. Bit 6 BODEN Brown-out Reset Enable bit 1: cho pheùpBOR (Brown-out Reset) 0: khoângcho pheùpBOR. 0:cho pheùp. Bit 2 WDTEN Watchdog Timer Enable bit 1: cho pheùpWDT. o Bit 12.Chi tieátveàcaù cbit naøynhö sau: Bit 13 CP: (Code Protection) 1: taé tch e áñ o äb aû ov e äm aõchöông trình. . Caù c bit naøy ñöôïc chöùatrong b o ä n h ôù chöông trình taïi ñòa ch æ 2007h v aø chæ co ù theå ñ ö ôïc truy xuaát trong qu aù trình laäp trình cho vi ñieàukhieån.

reset trong quaùtrình hoaït ñoäng. Ñ oáivôùicaùcloaïi oscillator LP. 01: s ö ûduïng XT oscillator.14. XT. löôïng cuûacaùclinh kieän.14. Chi tieátveàcaù cñaëctính seõñö ô ïc ñeàcaäpcuï theåtrong caùcphaàntieáptheo. Ñ oáivôùi caùc öùng duïng khoâng caàn caùc loaïi oscillator to á c ñ o ä cao. 10: s ö ûduïng HS oscillator. XT: Thaïch anh bình thöôøng. tö øc h e á ñ o äsleep.3 C A Ù C H E Á C ÑOÄRESET C o ùnhieàucheáñoäreset vi ñieàukhieån. Brown-out reset (BOR). chaát Hình 2. HS. RC: (Resistor/Capacitor) dao ñoängdo maïch RC taïo ra. Taàn soá taïo ra phuï thuoäc vaøocaùcgiaù trò ñieän aùp.Bit 1-0 FOSC1:FOSC0 löïa choïn loaïi oscillator 11: s ö ûduïng RC oscillator. WDT wake up tö øc h e áñ o äsleep. b eân caïnh ñ o ùla ø sö ï aû nh h ö ôû ng cu ûa caù c y eáu to á nhö nhieät ñoä. C aùclinh kieän s ö ûduïng cho maïch RC oscillator p haû ib aû oñaû mcaù cg iaù trò sau: 3 K < REXT < 100 K CEXT >20 pF 2.g iaù trò ñieän trôûvaø tu ï ñieän. . 2. oscillator ñöôïc gaénvaøovi ñieàukhieånthoâng qua caù cpin OSC1/CLKI v a øOSC2/CLKO.2 C A Ù C A Ë CTÍNH C U Û A Ñ OSCILLATOR PIC16F877A c oùk h aûn a ên gsö ûduïng moättrong 4 loaïi oscillator. ta co ù theå sö û du ïng maïch dao ñoäng RC laøm nguoàn cung caáp xung hoaït ñoäng cho vi vi ñieàu khieån. HS: (High-Speed Crystal). ñ o ùla ø : LP: (Low Power Crystal).39 RC oscillator. 00: s ö ûduïng LP oscillator.bao goàm: Power-on Reset POR (Reset khi caápnguoànhoaït ñoängcho vi ñieàukhieån). WDT reset (reset do khoáiWDT taïo ra trong qu aùtrình hoaït ñoäng).

xung reset do POR taïo ra se õ ñöa vi ñieàu khieån veà traïng thaùireset vaø chæ tieáp tuïc hoaït ñoängkhi naø ocaù ctham so átreânñöôïc ñaûmbaûo. Oscillator Start-up Timer (OST): OST cung caáp m oätkhoaûng thôøigian delay baèng 1024 chu kì xung cu ûa oscillator sau khi PWRT ngöng taùc ñoäng ñieàu k h ieån ñaõ ñu û ñieàu kieän hoaït (vi ñoäng) ñeå ñaûm baûo söï oån ñònh cu û a xung do oscillator phaùtra. Power-on reset (POR): Ñ a ây la ø xung reset do vi ñieàu khieån taïo ra khi phaùthieän nguoàn cung caáp VD D. PWRT ñöôïc kích hoaït ñ e å taïo ra m oät khoaûngthôøigian delay (khoaûng72ms). Power-up Timer (PWRT): ñ aây laø b o äñò n h th ô ø ihoaït ñoängdöïa vaøomaïch RC beân trong vi ñieàu khieån. Taùc ñoäng cu û a OST co ø nx aû y ra ñ o áiv ô ù iPOR reset v a økhi vi ñieàu khieån ñöôïc ñaùnhthöùctö øc h eá ñ ô ï sleep. vi ñieàu k hieån seõ ñöôïc ñöa v e à traïng thaùi reset. HS v a øLP. Khi hoaït ñoäng ô û c h e á ñ o ä bình thöôøng. N eáutrong khoaûngthôøigian naøyñieän aù pcung caápcho . Khi PWRT ñöôïc kích hoaït. reset coønñöôïc choáng nhieãu bôûim oät boä loïc ñeå traùnh caùc tín hieäu nhoûtaùc ñoäng leânpin .C aùcbit vaø chæ thò traïng thaùihoaït ñoäng. c aù c ch eá ño ä reset co øn laïi ñeàu ñöa g iaù trò caù c thanh ghi v eà g iaùtrò ban ñaàu ñöôïc aán ñònh saün. Tín hieäu reset ñöôïc cung caáp bôûi m oät maïch ngoaïi vi vôù i caù cy eâucaàucu ï theåsau: K hoâng noái pin tröïc tieáp leân nguoànVDD. reset: Khi pin ô û m öùclogic thaáp.40 Maïch reset qua pin . PWRT se õ taïo ra m oät khoaûng thôøi gian delay (khoaûng 72 ms) ñ eå VDD taêng ñeán giaù trò thích hôïp. BOR ñöôïc kích hoaït v a ø vi ñieàu khieån ñöôïc ñöa v eà traïng thaùiBOR reset. v aøovi ñieàukhieån.Nhöng neáu caùctham soá naøyk hoâng ñöôïc ñaûm baû o.Ngoaïi trö ø reset POR traïng th aù i caù c thanh ghi laø k ho âng x aù c ñònh vaøWDT wake up khoâng aû nh höôûng ñeán traïng thaù icaù c thanh ghi. N eáu ñieän aùp cung caáp cho vi ñieàu khieån haï xuoáng thaáp hôn VBOR trong khoaûng thôøigian ngaén hôn TBOR. vi ñieàu khieån seõ khoâng ñöôïc reset. ñieän aù p ñ eå hoaït ñoäng bình thöôøng. Brown-out reset (BOR): Neáu VDD haï xuoáng thaáp hôn g iaùtrò VBOR (khoaûng4V) v a ø k eù o d a ø i trong khoaûng thôøigian lô ù n hôn TBOR (khoaûng 100 us). traïng thaùireset cu û avi ñ ieàu k h ie ånvaøñ ö ôïc ñieàu khieån b ôû iCPU. OST chæ taù cñoäng ñoái v ôùicaù cloïai oscillator laø XT. R2 p h aû ilôù nhôn 1 K ñ e å haïn doøngñi Hình 2. Khi ñieän aù p cung c a áp ñu û cho vi ñieàu khieån hoaït ñoäng. vi ñieàu k hieån seõ ñöôïc reset. R1 phaûi nhoû hôn 40 K ñeå ñaûm baû o caùcñaëctính ñieäncuûavi ñieàukhieån.vi ñieàu khieån caà n ñöôïc ñaû m o caù c baû thoâng soá veà doøngñieän.

BOR reset seõ laïi ñöôïc kích hoaït khi vi ñieàu khieånñu ûñieän aù ph oaït ñ oän g .Bit ñieàu khieånngaétRB0/INT v a øTMR0 naèmtrong thanh ghi INTCON. Hình 2. Ñ eánthôøiñieåm naøyvi ñieàukhieånm ôùibaétñaàuhoaït ñoängbình thöôøng. T oùmlaïi ñeåvi ñieàukhieånhoaït ñoängñöôïc tö økhi caápnguoàncaàntraûiqua caù cböôù csau: POR ta ù cñoäng.41 Sô ñ o àcaù cch e áñ o äreset cu û aPIC16F877A.M oätñieåm ca àn ch uùy ù la ø khi BOR reset ñöôïc cho pheùp. Thanh ghi ñieàu k hieån vaøchæ thò traïng thaùinguoàn cung caáp cho vi ñieàu k hieån laø thanh ghi PCON (xem phuï luïc 2 ñeåbieáttheâmchi tieát).vi ñieàu khieån laïi tieáp tuïc haï xuoáng döôùim öùcñieän aùp VBOR. PWRT (neáu ñöôïc cho pheùphoaït ñoäng)taïo ra khoaûng thôøigian delay TPWRT ñ e å oån ñònh nguoàncung caáp. thanh ghi naøycoønchöù abit cho . OST (neáu ñöôïc cho pheùp) taïo ra khoaûng thôøigian delay baèng 1024 chu kì xung cu ûa oscillator ñeå o å nñò nh taànsoácu ûaoscillator. tuy nhieân hoaït ñoängngaétvaã n phuï thuoâcvaøo bit GIE v aøc a ù cbit ñieàu khieån khaùc. 2.4 N G A É T (INTERRUPT) PIC16F877A co ù ñ e án 15 nguoàn taïo ra hoaït ñoäng ngaét ñöôïc ñieàu khieån bôûithanh ghi INTCON (bit GIE). PWRT cu õ ngseõho aït ño ängb aátchaáp traïng thaùicuûabit PWRT. Beân caïnh ñ o ùmoã ingaétcoønco ù m oätbit ñieàu khieån v a øc ô øngaét rieâng. C a ù c c ô ø ngaétvaãn ñöôïc set bình thöôøng khi thoûam aõnñieàu kieän ngaétxaûyra baát chaáptraïng th aù icu ûabit GIE.14.

42 Sô ñ o àlogic c u û ata á tc aûcaù cngaéttrong vi ñieàukhieånPIC16F877A. Leänh RETFIE ñöôïc duøng ñeå thoaùtkhoûichöông trình ng aét v aø quay trô û v eà chöông trình chính. Trong m oät thôøi ñieåm chæ coù m oät chöông trình ngaét ñöôïc thöïc thi. Bit ñieàu khieån caùcngaétnaèm trong thanh ghi PIE1 v a øPIE2. C aù ccô øhieäu ñöôïc duøng kieåm tra ngaétnaøoñang xaû yra v a ø phaûiñöôïc ñeå xoùa baèng chöông trình tröôùc khi cho pheùp ngaét tieáp tuïc hoaït ñoäng trôû laïi ñ e å ta c où th eå ph aùt hieän ñöôïc thôøiñieåm tieáptheo m aø ng aét ra. xaûy Ñ oáivôùicaùcngaétngoaïi vi nhö ngaé t tö øc h a â n INT hay n g aé t tö ø sö ï thay ñoåitraïng thaùicaùc pin cu ûa PORTB (PORTB Interrupt on change). trong khi m o ät so á thanh ghi quan troïng seõ k ho âng ñö ô ïc caát vaø co ù th eå b ò thay ño åi g iaù trò trong qu aù trình thöïc thi chöông trình ngaét. Ñieàu naøy neân ñöôïc x ö û lí baèng chöông trình ñeå traùnhhieäntöôïng treân xaûyra. vieäc xaùc ñònh ngaét naøo xaûy ra caàn 3 hoaëc 4 chu kì leänhtuøythuoäcvaøothôøiñieåmxaûyra ngaét. bit GIE töï ñoäng ñöôïc xoùa.ñòa chæ leänh tieáp theo cu ûachöông trình chính ñöôïc caát vaøotrong b o ä n h ô ùStack v aøb o ä ñ e ám chöông trình seõ ch æ ñe án ñòa ch æ 0004h. Khi chöông trình ngaét ñöôïc thöïc thi. chöông trình ngaét ñöôïc keát thuùc baèng leänh RETFIE. C aàn chuùy ù laø trong qu aùtrình thöïc thi n g aé t. . ñoàng thôøibit GIE cuõngseõ ñöôïc set ñ e å cho p h eù p caù c n g aé t h o aït ñ o än g trô ûlaïi. ch æ c oùg iaùtrò cu û ab o äñ eám chöông trình ñöôïc caát vaøo trong Stack.pheùpcaùcnga é tngoaïi vi PEIE. C ô ø ng aétcu ûacaù cngaétnaèmtrong thanh ghi PIR1 v a øPIR2. Hình 2.

WDT coøn ñöôïc hoã trôï m oät b oä chia ta à n so á prescaler ñöôïc ñieàu khieån bôûithanh ghi OPTION_REG (prescaler naøy ñöôïc chia x eû v ô ù i Timer0).2. C aïnh taùcñoänggaâyra n g a é t i c o ùth eåla øcaïnh leânhay caïnh xuoángv a øñöôïc ñieàukhieånb ô û ibit INTEDG (thanh ghi OPTION_ REG <6>). N gaétnaø yco ùk h aûnaêng ñaù nhthö ù cvi ñieàu khieåntö øc h eá ñ o äsleep neáubit cho pheùpngaétñöôïc set tröôùckhi leänh SLEEP ñöôïc thöïc thi.14.N eáu vi ñieàu khieån ñang ô û c h e á ñ o ä sleep thì WDT seõ ñaù nh thö ù cvi ñieàu khieån (Watchdog Timer Wake-up) khi boä ñeám bò traøn.Nhö vaäy WDT co ùtaù c du ïng reset vi ñieàu khieån ô û thôøiñieåm caàn thieát m aø k hoâng caàn ñeán söï taùc ñoäng t ö ø beân ngoaøi. 2. vi ñieàu khieån bò “keït” ô û m oät choå naøo ñoù m aø k hoâng thoaù t ra ñöôc. Khi c o ùcaïnh taùcñoäng thích hôïp xuaáthieäntaïi pin RB0/INT. cô øn g aétINTF ñöôïc set baátchaáptraïng thaùicaùcbit ñieàukhieånGIE v a øPEIE. do ño ù icaàn tính toaùn thôøigian thích hôïp ñeå xoùa WDT (duøngleänh CLRWDT). 2.14. Tuy nhieân khi söû duïng WDT cuõng coù söï p hieàn toaù ivì vi ñieàu khieån seõ thöôøngxuyeân ñöôïc reset sau m oät thôøigian nhaát ñònh. M oätñieåm caàn chuùy ù n ö õ a laø le än h sleep se õ xoùa boä ñeám WDT v a ø prescaler. C ô øn g a étc u û an g a é tn a ø yla øbit RBIF (INTCON<0>). .4.14.5 WATCHDOG TIMER (WDT) Watchdog timer (WDT) la ø b o ä ñeám ñoäclaäp duøngnguoàn xung ñeám tö ø boä taïo xung ñöôïc tích hôïp saü n trong vi ñieàu khieån vaø khoâng phuï thuoäc vaøo baát kì nguoàn xung clock ngoaïi vi n a ø o . WDT seõ tö ï ño äng reset vi ñieàu khieån (Watchdog Timer Reset) khi b o ä ñeámcu ûaWDT bò traøn (neáu WDT ñöôïc cho pheùp hoaït ñoäng). Ngoaøira leänh xoùa CLRWDT chæ xoù aboä ñeám chöùkhoâng laøm thay ñoåiñoáitöôïng taùc ñoäng cuûaprescaler (WDT hay Timer0). khi ñ o ù vi ñieàu khieån seõ töï ñoäng ñöôïc reset khi WDT b ò tra ø n e å chöông trình hoaït ñoäng ñuùng trôû laïi. Bit ñieàu khieån cuûaWDT la ø bit WDTE naèm trong b o ä n h ôùchöông trình ô û ñòa chæ 2007h (Configuration bit). ñoàng thôøibit töï ñoäng ñöôïc xoùa.1 NGA É TINT N gaétnaøydöïa treânsöï thay ñoåitraïng th aù cu û apin RB0/INT.4. Xem laïi Timer0 v a øthanh ghi OPTION_REG (phuï luïc 2) ñeåbieáttheâmchi tieát. V aø ñeå v ieäc aán ñònh thôøigian reset ñöôïc linh ñoäng. Ñ ie àu ñ o ù co ù nghóa la ø WDT vaãn hoaït ñoäng ngay c a û khi xung clock ñöôïc la á y tö ø pin OSC1/CLKI v a ø pin OSC2/CLKO cu ûa vi ñie àu khieån ngöng hoaït ñoäng (chaúng haïn nhö do taùc ñoäng cuûaleänh sleep).chaúnghaïn nhö trong qu aùtrình thöïc thi leänh.2 N G A ÉT S Ö ÏTHAY Ñ O Å TRAÏNGT H A Ù C A Ù C DO I I PIN TRONG PORTB C aùc pin PORTB<7:4> ñöôïc duøng cho ng aét naøy v aø ñöôïc ñieàu khieån bôûi bit RBIE (thanh ghi INTCON<4>).

2. H oaøntaátquaùtrình ghi vaøoEEPROM. SSP hoaït ñ oäng ô ûche áñ oäSlave mode khi truyeànhoaëcnhaänd ö õlieäu. Ñ e åy ùñeánchöùcnaêngkeùoleânñieäntrô ûô ûPORTB. Taïm ngöng hoaït ñoäng cuû khoái A/D vaø k hoâng cho pheùp caùc xung clock tö ø b eânng o aø i taù cño ängv aøovi ñieàukhieån. Ngoaøira co ø nc o ùm o ä tso ánguoàntaùcñoängkhaù ctö øcaùcchöùcnaêngngoaïi vi bao goàm: 1. Pin phaûiô ûm öùclogic cao. 9. T aùcñoängcuûaWDT khi bò traøn. boä ñeám cuûaWDT se õ b ò x o ù a nhöng WDT vaãn tieáp tuïc hoaït ñoäng. 8. bit ñöôïc set. Ñoïc hay ghi d ö õlieäuthoâng qua PSP (Parallel Slave Port). T aùcñoängcuûareset ngoaïi vi thoângqua pin . Khi ñoùneáu ñöôïc cho pheùp hoaït ñoäng.2. Do khi ô û c h e ñ o äSLEEP. K hoáichuyeånñoåiA/D khi nguoànxung clock hoaït ñoängô ûdaïng RC. 3.6 C H E Á O Ä Ñ SLEEP Ñ aây laø ch eá ñ o ä hoaït ñoäng cuûavi ñieàu khieån khi leänh SLEEP ñöôïc thöïc thi. NgaétSSP khi bit Start/Stop ñöôïc phaùthieän. Taùc ñoäng tö ø caùcngaét ngoaïi vi t ö ø PORTB (PORTB Interrupt on change hoaëc pin INT). 2. 10.14. 7. T aùcñoäng cuûaUSART tö øc a ù cpin RX hay TX khi hoaït ñoängô ûc h e á ñ o ä Slave mode ñoàngboä. bit (STATUS<3>) ñöôïc reset v eà 0. doøngcung caápcho vi ñieàu khieånlaøraátn h o ûn eân ta caànthöïc hieäncaùc á böôùcsau tröôùckhi vi ñieàukhieånthöïc thi leänhSLEEP: Ñöa ta á tc aûc aù cpin veà traïng thaùiVDD hoaëcVSS C aàn b aûoñaû m raèng k ho âng co ømaïch ngoaïi vi naøoñöôïc ñieàu khieån bôûidoøngñieän cuûavi ñieàukhieånvì doøngñieännhoûkhoângñ u ûk h aûn aê n g cung caápcho caùcm aïch ngoaïi vi hoaït ñoäng.6. 5. 4. 6. . C aùcbit vaø ñöôïc duøngñeå theå hieän traïng thaùicuûa vi ñieàu khieån vaø ñeå phaùthieän nguoàn taùc ñoäng laøm reset vi ñieàu khieån. 2. Bit ñöôïc set khi vi ñieàu k hieån ñöôïc caáp nguoàn vaø ñöôïc reset v e à 0 khi vi ñieàu khieån ô û c h e á ñ o ä sleep. Bit ñöôïc reset v eà 0 khi WDT taùcñoäng do b o ä ñeám bò traøn. oscillator ngöng taù c ñ oän g vaø caùc PORT g iö õnguyeântraïng thaùinhö tröôùckhi leänhSLEEP ñöôïc thöïc thi. Caùchieän töôïng ñaëc bieätlaøm reset Timer1 khi hoaït ñoäng ô û cheá ñoä ñeám baátñoàng b oädu ø ngnguoàn xung clock ô ûbeânngoaøi). NgaétTimer1 khi hoaït ñoängô ûcheáñoäñeám b aátñoàng b oä. 3.1 “ÑAÙNH THÖÙC” VI KHIEÅN Ñ IE À U Vi ñieàukhieånc o ùtheåñöôïc “ñaùnhthöùc”döôùitaùcñoängcuûam oättrong so áca ù chieäntöôïng sau: 1.14. N goõra b o äso saùnhthay ñoåitraïng thaùi. NgaétCCP khi hoaït ñoängô ûche áñ oäCapture.

Beân caïnh ñ o ù ta caàn xoùaWDT ñ e å chaéc chaén raèng WDT ñaõ ñöôïc xoùatröôùc khi thöïc thi leänh SLEEP. . c N eáu bit GIE mang g iaù trò 0. Trong tröôøng hôïp leänh tieáp theo khoâng ñoùngvai tro øquan troïng trong chöông trình. N eáu bit GIE ñöôïc set tröôùc khi leänhSLEEP ñöôïc thöïc thi. vaø leänh SLEEP se õ ñöôïc thöïc thi ngay sau khi vi ñieàu khieån ñöôïc ñaùnhthöùc. ta kieåm tra bit . V ieäc ñaùnh thöùcvi ñieàu k hieån tö ø c a ù ngaét vaãn ñöôïc thöïc thi baát chaáp traïng thaùicu û abit GIE. Ñ eå kieåm tra xem leänh SLEEP ñaõ ñöôïc thöïc thi hay chöa. leänh SLEEP seõ khoâng ñöôïc thöïc thi v a ø thay vaøo ñ o ù la ø le ä n h NOP. N eáungaétxaû y ra trong khi hay sau khi leänh SLEEP ñöôïc thöïc thi.Tuy nhieâncuõngc o ùm o ä tso áñ ieå m c a à nlöu y ù nhö sau: N eáu ngaétxaû y ra tröôùc khi leänh SLEEP ñöôïc thöïc thi. vi ñieàu khieån seõ thöïc thi leänh tieáp theo sau leänh SLEEP cu ûa chöông trình (vì chöông trình ngaét khoâng ñöôïc cho pheùpthöïc thi). vi ñieàu khieån laäp töùc ñöôïc ñaùnh thöùc tö ø c h e á ñ o ä sleep. ta caà n ñaëttheâm leänh NOP sau leänh SLEEP ñ e å b o û qua taùc ñoängcuûaleänh naøy. vi ñieàuk hieånseõthöïc thi leänhtieáptheo cu û achöông trình v a øsau ñ o ù nhaûy tô ù i ñòa chæ chöùa chöông trình ngaét (0004h).C aùctaùc ñoängngoaïi vi khaùckhoângc o ùta ù cduïng ñaùnhthöùcvi ñieàu khieån vì khi ô û che á ño ä sleep caù cxung clock cung caáp cho vi ñieàu khieån ngöng hoaït ñoäng. N eáu bit vaãn mang g iaùtrò 1 tö ù cla ø le ä n h SLEEP ñ a õkhoângñöôïc thöïc thi v a øthay v a ø oñ o ùlaø leä n h NOP.ñoàngthôøigiuùpta deã daøng trong vieäc kieåm soaùthoaït ñoängcuûa hôn chöông trình ngaét. ñoàng thôøic aùc taùcñoäng cuûaleänh SLEEP cu õ n g se õ ñöôïc b o û qua.Beân caïnh ñ oùc a à n cho pheùp caùc ngaét hoaït ñoäng tröôùc khi leänh SLEEP ñöôïc thöïc thi ñ eå b aûo ñaû m taùc ñoäng cuûa caùc ngaé t. qua ñ o ù cho pheùp ta xaù c ñònh ñöôïc thôøiñieåm vi ñieàu khieån ñöôïc ñaùnh thöùc do taùc ñoängcuûaWDT.

Ñ oáivôùinhoùm leänh thao taù ctreân byte. Ñ oái vôùi nhoùm leänh thao taùc treân bit. keát quaû seõ ñöôïc ñöa vaøo thanh ghi W. ngoaïi trö ø c a ù cleänhlaøm thay ño åig iaùtrò b oäñeám chöông trình PC caàn2 chu kì leänh. ta c o ù 2 tham s o á f (xaùc ñònh ñòa c hæ byte caàn thao taùc) v a ø d (xaùc ñònh nôi chöùa keát quaû thöïc thi leänh). Nhoùmleänhthao taù ctreânbyte. Sau ñaâyta s e õñi saâuvaøocaáutruùc. M oätchu kì leänhgoàm 4 xung clock cu û aoscillator. nhö vaäym oätchu kì leä n h c o ùth ô ø igian 1 uS. m o äth aèngso ánaøoñoù). Ví duï ta s ö û duïng oscillator co ù taàn so á 4 MHz thì taàn soá thöïc thi le ä n h se õla ø 4MHz/4 = 1 MHz. Ví duï nhö khi thöc thi leänh “CLRF PORTB”. Neáu d = 0. vi ñieàu k h ieån seõ ño ïc g iaùtrò thanh ghi PORTB. Hình 3. Ñ oái v ôù i doøng vi ñieàu khieån PIC16Fxxx. bao goàm caùc bit opcode (du øng ñeå xaùc ñònh leänh naøo ñöôïc m aõ h o ù a) v aø caù c bit m o âta û m o ä t hay v aø i tham so ác u û aleänh. keát quaû ñöôïc ñöa vaøothanh ghi ñöôïc m o âtaûb ô û itham so áf. x o ù ata á tc a û c a ùbit v a øghi c k eátqu aûtrôûlaïi thanh ghi PORTB. M oãileänh seõ ñöôïc vi ñieàu khieån thöïc thi xong trong voøng m oät chu kì leänh.cuù p haù pv aøtaù cñ oän gc uï theåcu ûatöø n gleänh.CHÖÔNG 3 T A Ä P E Ä N H U Û A Ñ IE À U L C VI KHIEÅ NPIC 3. C aùcleänh thao taùc treân oät thanh ghi b aát kì ñeàu thöïc hieän cô cheá Read-Modify-Write. m oãi leänh ñöôïc m aõ hoùa thaønh 14 bit word. Ñ oáivôùinhoùmleänh ñieàu khieån c h æ c oùm o ä ttham so áduy n h a á t la ø k (k co ù th e å la ø8 bit trong tröôøng hôïp caùc leänh bình thöôønghay 11 bit trong tröôøng hôïp laø leänh CALL v aø leänh GOTO) d u ø n gñ eåm o âtaûñ o á itöôïng taùcñoäng cu û avi ñieàukhieån(m oätlabel. PIC la øvi ñieàukhieånc o ùta äple ä n h ru ù tg o ïn RISC (Reduced Instruction Set Computer). ta c o ù hai tham so á b (xaùc ñònh bit caàn thao taù c ) v a ø f (xaùc ñònh ñòa ch æ byte d ö õ lieäu caàn thao taùc). . bao goàm35 leänhvaø c o ùtheå ñöôïc phaânra thaønh3 nhoùmcô baûn: N hoùmleänhthao taùctreânbit.1 V A Ø N E Ù T LÖÔÏCV E À A Ä P E Ä N H U Û A Ñ IE À U H IE Å N I SÔ T L C VI K PIC Nhö ñ a õtrình b a ø yô ûchöông 1. Nhoùmleänhñieàukhieån. döõ lieäu ñöôïc thao taù cv aø keát quaû ñöôïc ñöa vaøo thanh ghi chöùa k eát quaû (nôi chöù a k eát qu aû tuøy thuoäc vaøo leänh thöïc thi v a ø tham so á d). m tö ù c la ø thanh ghi seõ ñöôïc ñoïc.1 Cô cheám aõh o ùaleänhcu ûa PIC16Fxxx. N eáu d = 1.

2.b (0≤f≤127.3 LeänhANDLW C u ùp h aù p :ANDLW k (0≤k≤255) T aùc duïng: thöïc hieän pheùp toaùn AND giöõa thanh ghi ¦ v aø g iaù trò k.1]). T aùcduïng: thöïc hieän pheùp toaùnAND giöõa caù cg iaù trò chöù atrong hai thanh ghi W v a ø f. 0≤b≤7) Taùc duïng: kieåm tra bit b trong thanh ghi f. d ∈[0. DC. N eáu bit b baèng 1. Z 3.4 LeänhANDWF C u ùp h aù p :ANDWF f. Bit traïng thaùi:khoângcoù.5 LeänhBCF C u ùp h aù p :BCF f. Bit traïng thaùi:Z 3. 0≤b≤7) Taùcduïng: set bit b trong trnh ghi f. leänh tieáp theo ñöôïc b o ûqua v a øthay v aø oñ o ùla øle ä n h NOP. DC. leänh tieáp theo ñöôïc thöïc thi.3.b (0≤f≤127.2. Bit traïng thaùi:Z 3.b (0≤f≤127.2.2 LeänhADDWF C u ùp h aù p :ADDWF f. K eát quaû ñöôïc chöùatrong thanh ghi W neáu d = 0 hoaëc thanh ghi f neáu d =1. Bit traïng thaùi:C. Bit traïng thaùi:khoângcoù 3.1]). Taùcduïng: coänggiaùtrò hai thanh ghi W v a ø thanh ghi f.b (0≤f≤127.1 LeänhADDLW C u ùp h aù p :ADDLW k (0 ≤ k≤255) Taùcduïng: coänggiaùtrò k vaøothanh ghi W. 0≤b≤7) T aùc duïng: xoù a bit b trong thanh ghi f v e à giaù trò 0.2.8 LeänhBTFSC C u ùp h aù p :BTFSC f.7 LeänhBTFSS C u ùp h aù p :BTFSS f. Bit traïng thaùi:C.2. Bit traïng thaùi:khoângcoù . N eáu bit b baèng 0. k eátqu aûñöôïc chöùatrong thanh ghi W. leänh tieáp theo ñöôïc b o ûqua v a øthay v aø oñ o ùla øle ä n h NOP. N eáu bit b baèng 1.2.6 LeänhBSF C u ùp h aù p :BSF f.2.d (0≤f≤127. Bit traïng thaùi:khoângcoù 3. K eát qu aû ñöôïc ñöa vaø o thanh ghi W neáu d=0 hoaëc thanh ghi f neáud = 1. 3. d∈[0.2 T A Ä P E Ä N H U Û A Ñ IE À U IE Å NPIC L C VI KH 3. Z 3.2. keát quaû ñöôïc chöùa trong thanh ghi W. N eáu bit b baèng 0.d (0≤f≤255. leänh tieáp theo ñöôïc thöïc thi. 0≤b≤7) Taùc duïng: kieåm tra bit b trong thanh ghi f.

15 LeänhDECFSZ C u ùp h aù pCLRF f (0≤f≤127) T aùcduïng: xoù a thanh ghi f v a ø bit Z ñöôïc set. Bit traïng thaùi:Z C u ùp h aù p :DECF f.12 LeänhCLRWDT C u ùp h aù p :CLRWDT T aùc duïng: reset Watchdog Timer. K eátquaûñöôïc ñöa vaøothanh ghi W neáu d = 0 hoaëcthanh ghi f neáud = 1. Bit traïng thaùi:khoângcoù. 3.2.11 LeänhCLRW C u ùp h aù pCLRW T aùcduïng: xoù athanh ghi W v a ø bit Z ñöôïc set. Bit traïng thaùi:Z 3. K eát quaû ñöôïc ñöa vaø o thanh ghi W neáu d=0 hoaëcthanh ghi f neáud=1.10 LeänhCLRF 3.3.17 LeänhINCF C u ùp h aù p :INCF f. Taùcduïng: giaùtrò thanh ghi f ñöôïc giaûmñi 1 ñôn vò.d (0≤f≤127. ñoàng thôøi prescaler cuõng ñöôïc reset.1]).2. Bit traïng thaùi:khoângcoù 3. K eát quaû ñöôïc ñöa vaøo thanh ghi W neáu d = 0 hoaëc thanh ghi f neáud = 1.1]) Taùcduïng: taênggiaùtrò thanh ghi f leân1 ñôn vò. d∈[0. Bit traïng thaùi:Z C u ùp h aù p :DECFSZ f.2. T aùc duïng: ñaû o caù c bit trong thanh ghi f. Bit traïng thaùi:Z 3.13 LeänhCOMF C u ùp h aù p : COMF f.2. Bit traïng thaùi:Z . g iaù trò ñòa chæ m ôùiñöôïc ñöa vaøo boä ñeám goàm 11 bit cuûabieánk v a ø2 bit PCLATH<4:3>. d∈[0.d (0≤f≤127.9 LeänhCALL 3. Bit traïng thaùi: .d (0≤f≤127.14 LeänhDECF C u ùp h aù p :CALL k (0≤k≤2047) Taùc duïng: goïi m oätchöông trình con. neáu keát quaû baèng 0. d ∈[0. K eát quaûñöôïc ñöa vaøothanh ghi W neáud = 0 hoaëcthanh ghi f neáud = 1. leänh tieáp theo ñöôïc thöïc thi.16 LeänhGOTO C u ùp h aù p :GOTO k (0≤k≤2047) T aùc duïng: n h aûy tôù i mo ä t label ñöôïc ñònh nghóa b ô û i tham so á k v a ø 2 bit PCLATH <4:3>. caùc bit vaø ñöôïc set leân1. Tröôùc heát ñòa ch æ quay trô ûv e à tö ø chöông trình con (PC+1) ñöôïc caát vaø o trong Stack.d (0≤f≤127. d∈[0. Bit traïng thaùi:khoângcoù 3. leänh tieáp theo khoâng ñöôïc thöïc thi v a ø thay v a ø o ñ o ùla ø leänh NOP.2. N eáu keát quaû sau khi giaûm khaùc 0.1]) T aùcduïng: gía trò thanh ghi f ñöôïc giaûm 1 ñôn vò.2.2. 3.1]).2.2.

K eát qu aû seõ ñöôïc ñöa vaøo thanh ghi f neáu d=1 hoaëcthanh ghi W neáud = 0. Bit traïng thaùi:C 3. leänh tieáp theo ñöôïc thay baèng leänh NOP. d∈[0.18 LeänhINCFSZ 3.2. d∈[0.d (0≤f≤127.23 LeänhRRF C u ùp h aù p :RRF f.21 LeänhRLF C u ùp h aù p :RLF f. . bit ñöôïc set leân 1 v a ø oscillator khoâng ñöôïc cho pheùphoaït ñoäng. d∈[0. d∈[0. Bit traïng thaùi:C.3.2.1]) Taùcduïng: taênggiaùtrò thanh ghi f leân1 ñôn vò.2.22 LeänhRETURN C u ùp h aù p : INCFSZ f.25 LeänhSUBLW C u ùp h aù p :SUBLW k T aùc duïng: laáy g iaù trò k trö ø g iaù trò trong thanh ghi W.2.d (0≤f≤127.19 LeänhIORLW C u ùp h aù p :IORLW k (0≤k≤255) T aùc duïng: thöïc hieän pheùp toaùn OR giöõa thanh ghi W v aø g iaù trò k. K eátquaû ñöôïc löu trong thanh ghi W neáud=0 hoaëcthanh ghi f neáud=1.d (0≤f≤127.1]) Taùcduïng: dòch phaûicaùcbit trong thanh ghi f qua c ô ø carry. C u ùp h aù p :RETURN T aùcduïng: quay trô û v eà chöông trình chính t ö øm oätchöông trình con Bit traïng thaùi:khoâng coù 3.2. neáu keát quaû baèng 0. Z .2. DC.2. Bit traïng thaùi:khoângcoù. K eát quaû ñöôïc löu trong thanh ghi W neáu d=0 hoaëc thanh ghi f neáu d=1. 3. Khi ñ o ù WDT b ò xo ù a veà 0. Neáu k eát quaû khaùc 0. Bit traïng thaùi:C 3.1]) Taùcduïng: dòch traùicaùcbit trong thanh ghi f qua c ô øcarry.20 LeänhIORWF C u ùp h aù p :IORWF f.d (0≤f≤127. K eát quaû ñöôïc chöùatrong thanh ghi W. K eát quaû ñöôïc ñöa v aøo thanh ghi W neáu d=0 hoaëc thanh ghi f neáud=1. Bit traïng thaùi:Z 3. leänh tieáp theo ñöôïc thöïc thi. Bit traïng thaùi:Z 3. K eát quaû ñöôïc chöùa trong thanh ghi W. Bit traïng thaùi: .2. bit ñöôïc x o ù v e à 0.24 LeänhSLEEP C u ùp h aù p :SLEEP T aùc duïng: ñöa vi ñieàu khieån v eà c heá ño ä sleep.1]) T aùc duïng: thöïc hieän pheùp toaùn OR giöõa hai thanh ghi W v a ø f.

d T aùc duïng: thöïc hieän pheùp toaùn XOR giöõa hai g iaù trò chöùa trong thanh ghi W v a ø thanh ghi f. K eát quaûñöôïc löu trong thanh ghi W. d∈[0. . trình bieân dòch seõ töï ñoäng thay theá chuoãikí tö ï ñ o ùb aè n gch u o ã ikí töï <text2>.2.1]) Taùcduïng: ñaûo4 bit thaápvôù i4 bit cao trong thanh ghi f.31 LeänhINCLUDE C u ùp h aù p :#INCLUDE <filename> hoaëc#INCLUDE “filename” Taùcduïng: ñính keøm m oätfile khaùcvaøochöông trình. 3.28 LeänhXORLW C u ùp h aù p :SUBWF f. Bit traïng thaùi:k h oângco ù C u ùp h aù p :XORWF f. Bit traïng thaùi:C. thanh ghi F.29 LeänhXORWF Ngoaøic a ù cleä n h treâ n c o ø nc oùm o ä tso ále ä n h d u ø ngtrong chöông trình nhö: 3.1]) T aùcduïng: laáygiaù trò trong thanh ghi f ñem trö ø cho thanh ghi W.c o ùnghóa la ø m o ã i khi chuoãikí töï text1 xuaát hieän trong chöông trình. N eáu duøngcu ù phaùp<filename> thì file ñình k eø m la ø file heä thoáng (sýtem file).) v aø caù cñò a ch æ caû ucaù cthanh ghi chöùcnaêng ñaëc bieättrong b o än h ô ùd ö õlieäu.2. K eát quaû ñöôïc löu vaøotrong thanh ghi W neáud=0 hoaëcthanh ghi f neáud=1.2. neáu duøng cu ùp h aù p “filename” thì file ñính k e ø m laø file cuûa ngöôøisö û duïng. Thoâng thöôøngchöông trình ñöôïc ñính keøm theo m oät “header file” chöùa caùc thoâng tin ñònh nghòa caùc bieán (thanh ghi W. Bit traïng thaùi:Z C u ùp h aù p :XORLW k (0≤k≤255) T aùc duïng: thöïc hieän pheùp toaùn XOR g iöõa g iaù trò k v aø g iaù trò trong thanh ghi W.d (0≤f≤127.30 Leänh#DIFINE C u ùp h aù p :#DEFINE <text1> <text2> Taùcduïng: thay theá m oätchuoãikí töï naøybaèng m oätchuoãikí töï khaùc. d∈[0.. Z 3.26 LeänhSUBWF 3.3.2. K eát quaû ñöôïc löu trong thanh ghiaW neáu d=0 hoaëcthanh ghi f neáud=1.2. K eátquaûñöôïc chöùatrong thanh ghiaW neáud=0 hoaëcthanh ghi f neáud=1.2. DC.d (0≤f≤127.. töông tö ï nhö vieäc ta copy file ñ o ù v aø o v ò trí xuaát hieän leänh INCLUDE. chöông trình seõ k ho ùño ïc vaø k h oùh ieåu c hôn.27 LeänhSWAP C u ùp h aù p :SWAP f. Bit traïng thaùi:Z 3. Neáu khoâng o ùheader file.

3.2.33 Leänh VARIABLE C u ùp h aù p :VARIABLE <name>=< value> T aùc duïng: töông töï nhö leänh CONSTANT.2.35 LeänhEQU C u ùp h aù p :<name constant> EQU <value> T aùcduïng: gaùn giaù trò cho teân cuûa teân cuûa haèng soá.2. 3.2. T eân cuûa haèng soá khoâng thay ño åi trong qu aùtrình thöïc thi chöông trình. 3. 3. 3.37 LeänhEND C u ùp h aù p :END Taùcduïng: ñaùnhdaáukeátthuùcchöông trình. ch æ co ù ñieåm khaùc bieät duy n h aát laø g iaù trò “value” khi duøngleänh VARIABLE co ùth e å thay ñoåi ñöôïc trong qu aùtrình thöc thi chöông trình coønleänhCONSTANT thì khoâng.39 LeänhPROCESSOR C u ùp h aù p :PROCESSOR <processor type> Taùcduïng: ñònh nghóa vi ñieàukhieånnaøos ö ûduïng chöông trình.34 LeänhSET C u ùp h aù p :<name variable> SET <value> T aùcduïng: gaùn giaù trò cho m oätteân bieán.3. 3. co ù nghóa l a ø khi phaùthieän chuoãikí tö ï “name” trong chöông trình. Teân cuûa bieán c o ù th e å thay ñoåi ñöôïctrong qu aù trình thöïc thi chöông trình.2.2.2.32 LeänhCONSTANT C u ùp h aù p :CONSTANT <name>=< value> Taùc duïng: khai b aù o m o äth aèng so á.36 LeänhORG C u ùp h aù p :ORG <value> Taùcduïng: ñònh nghóa m oät ñòa chæ chöùachöông trình trong b o ä n h ôù chöông trình cu ûa vi ñieàukhieån.2.38 Leänh CONFIG C u ùphaùp: Taùcduïng: thieát laäp caùc ñieàu khieån caùckhoáichöùcnaêng cuûavi ñieàu khieån ñöôïc chöùa bit trong b oänh ô ùchöông trình (Configuration bit). trình bieân dòch seõ töï ño äng thay baèng chuoãi kí töï baèng giaù trò “value” ñaõ ñöôïc ñònh nghóa tröôùcñoù. 3. .

Ta nhaän thaáy raèng khoâng coù sö ï khaùc bieät lôùn trong caáu truù c cu û a m oät chöông trình Assembly vieát cho vi ñieàu khieån PIC so v ôù ivi ñieàu k hieån k h aù c.Ñ aây la ø m o ä t lô ïi th e á ra átlô ù nkhi s ö û duïng MPLAB ñeåsoaïn thaûocaùcchöông trình vieátcho vi ñieàukhieånPIC. chöông trình ngaét.2 C aáutruùcm oätchöông trình Asembly vieátcho vi ñieàukhieånPIC. ngoaøi ra neáu caàn thieát ta v aãn co ù th eå khai b aù o th eâm caù cbieán . Tuy nhieân neáu söû duïng trình bieân dòch MPLAB.ta chæ vieäc vieát ñoaïn chöông trình ñieàu khieån vaøo caùcvò trí thích hôïp treân m aãuchöông trình ñöôïc vieáttröôùcñoù. caá u tru ù c cu ûa chöông trình daønh cho m oät vi ñieàu khieån PIC nhaátñònh ñaõ ñöôïc vieát saün.… Ô ñ aây ch æ trình baøycaáu truùcm oätchöông trình ñôn giaûn Û nhaátkhi m ôù ib aétñaàulaømquen v ô ù ivieäc laäptrình cho vi ñieàukhieånPIC. Hình treâ n la ø ví duï veà m oät chöông trình ñôn g iaû n vôù icaù c böôù c k hôû i taïo cô baû n ban ñaàu. Trong tröôønghôïp caàn sö û duïng ñeán chöông trình ngaé t . ta caàn m oätcaáu truùcchöông trình phöùctaïp hôn vôùinhieàu böôùckhôûitaïo phöùctaïp vaø phaûituaân theo m oät thöù töï leänh nhaát ñònh. ch æ co ùsö ï k haùc b ieät v eà caù c leänh sö û du ïng trong chöông trình. .” ñöôïc duøngñeå ñöa m oätghi ch uùv aøochöông trình vaø chæ c oùhieäu lö ïc treân m o ät h aø ng c uû achöông trình.chöông trình co n . D aáu “.3 C A Á U R U Ù C U Û A O Ä T T C M CHÖÔNG TRÌNH ASSEMBLY V IE Á T CHO VI Ñ IE À U K H IEÅ N PIC M oät chöông trình Assembly bao goàm nhieàu thaønh phaàn nhö chöông trình chính. Hình 3.h aèn gvaøcaù ctham so á khaùctröôùcchöông trình chính (label “Main”).3.

Khi ñ o ùpin mang giaùtrò m öùclogic 1 seõ la ø m cho LED saù ng v aø pin mang g iaùtrò m öùclogic 0 seõ la ø mcho LED taét.33 K). Ñ aây laø m o ät trong nhöõng öùng duïng ñôn giaûn nhaát giuùpta laøm quen v ô ù ivi ñieàu khieån. Do trong taäp leänh cuûavi ñieàu khieån PIC khoâng coù leänh naøo cho pheùp ñöa m oät byte vaøom oät thanh ghi cho tröôùc.Tuy nh ieân trö ô ùc tieân seõ laø m oät soá öùng duïng ñôn giaûn giuùp ta böôùc ñaàu laøm quen vô ù itaäpleänh v aøcaù chv ieátchöông trình cho vi ñieàu khieånPIC.8 ñeán 2. Do ñ o ù ta caàn coù theâm ñieän trôû m aéc noái tieáp v ôù iLED ñeå haïn doøng(coùtheåduøngñieäntrô û0. Ngoaøira caàn duøngleänh ORG ñ e å ch æ ra ñòa chæ b aétñaàu chöông trình khi vi ñieàu khieånñöôïc reset. Ñ eåxuaátñöôïc giaùtrò ra PORTB. Sau ñ a ây la øm oätvaøiñieåm caànchuùy ùcho öùngduïng naøy: Ñ eå LED saùngbình thöôøngthì ñieän aù p ñaët leân LED vaøokhoaûng1.2 Volt tu ø y theo m aøu saéc cuû a LED. Tuy nhieânhai thanh ghi PORTB v a ø TRISB naèm ô û hai bank khaùcnhau trong b o ä n h ô ùd ö õlie äu . Thoângthöôøngñòa chæ baétñaàuchöông trình se õla øñ ò a c h æ0000h. qua ñ o ù g iu ù p ta naé m r o õ hôn vaø ñieàu k hieån ñöôïc caùc k hoái chöùcnaêng ñoù. G iaù trò naø y seõ ñöôïc kieåm tra baèng caùch gaén vaøo caùc pin cu û a PORTB caùc LED.1 Ñ IE À U H IE Å N A Ù C K C PORT I/O. Ñieàu naøy ñöôïc thöïc hieän baèng caùchclear caùcbit trong thanh ghi TRISB.do ñ o ùc a à n sö û dung m oätthanh ghi trung gian (thanh ghi W) vaø d u ø ng hai leänh MOVLW (ñöa byte vaøo thanh ghi W) vaø leänh MOVWF (ñöa g iaù trò trong thanh ghi W vaøothanh ghi f n a ø oñ o ùm a øta muoán). tröôùc heát ta caà nkhôûitaïo caùcpin cu û aPORTB l a ø output. ta coù theå thieát keá theâm m oät maïch reset ngoaïi vi (vi ñieàu khieån seõ ñöôïc reset khi pin MCLR chuyeån tö ø m ö ù c logic 1 xuoángm öùclogic 0). Do ñ o ùtrö ô ù c khi muoán truy xuaát giaù trò trong m oät thanh ghi naøo ñoù caàn choïn bank d ö õlieäu ch ö ù a thanh ghi ñoù b aèng caùch ñöa caù cg iaùtrò thích hôïp vaøo2 bit RP1:RP0 cu ûathanh ghi STATUS (xem phuï luïc 2 v a øsô ñ o àb o än h ô ùd ö õlieäu). Trong tröôøng hôïp caàn duøng ñeán cheá ñoä reset cu ûa pin MCLR. .CHÖÔNG 4 M O Ä T O Á Ù DUÏNGC U ÏT H E Å U Û A S Ö NG C PIC16F877A Trong chöông naøy ta se õ ñi saâu v aø o m o ät so á ö ùn g duïng cuï theå cuû a vi ñieàu khieån PIC16F877A. trong khi ñieän aùp taïi ngoõra cu ûa 1 pin trong PORTB neáu ô û m öù clogic 1 thö ô ø ng laø 5 volt. C aù c öù ng duïng naøy ñöôïc xaây döïng döïa treân caùc chöùcnaêng ngoaïi vi ñöôïc tích hôïp saün beân trong vi ñieàu khieån. chaúnghaïn nhö PORTB. 4. Trong ö ù ngduïng naøyta seõ xu aát m o ätgia ù trò n aø o ñ o ùra m oätPORT cu û avi ñieàu khieån.

.33 K 0. M oätñieåm caànchuùy ùl a øvi ñieàukhieånPIC16F877A c oùñ eá n 2 pin VDD v a ø2 pin GND. Trong tröôøng hôïp naøyta phaûicaápnguoànv a ø ota á tc a ûc aù cpin treân.Sau ñ a âyla øsô ñ o àm aïch cuûaöùngduïng treân: 5V 0.33 K 0.33 K 5V HI 8 9 10 11 12 13 14 15 16 17 18 RE0/ RD/ AN5 RE1/ WR/AN6 RE2/CS/AN7 VDD GND OSC1/CLK OSC2/CLKOUT RC0/T1OSO/T1CLK RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL VDD GND RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA RD3/PSP3 RD2/PSP2 22 21 32 31 30 29 28 27 26 25 24 23 5V 0.33 K 0.1 Maïch nguyeânlí cuûaöùngduïng ñieàukhieåncaùcPORT cu û avi ñieàukhieån.33 K R1 R U1 1 2 3 4 5 6 7 MCLR/VPP RA0/AN0 RA1/AN1 RB7/PGD RB6/PGC RB5 RB4 40 39 38 37 36 35 34 33 0.33 K HI SW1 RA2/AN2/VREF-/CVRE FRB3/PGM RA3/AN3/VREF+ RB2 RA4/T0C LK/C1OUT RB1 RA5/AN4/SS/C20UT RB0/INT 0.33 K 0 4 MHz XTAL 0 19 20 RD0/PSP0 RD1/PSP1 PIC16F877A Hình 4.khi ñ o ùvi ñieàukhieånm ô ù ic o ù ñ u ûñ ie ä naù pñ e åhoaït ñoäng.33 K 0 0.

N eáu ñeå k ho âng co ù loãinaø oxaûy ra. xoù aPORTB . RB2. ñòa chæbaétñaàuchöông trình . LED g aén v aøocaù cpin co ønlaïi seõtaé t(do gia ù trò ta ñöa ra PORTB l a ø8Fh). khai b aùocaù c“Configuration bits” ORG GOTO Start BCF BCF CLRF BSF MOVLW MOVWF BCF MOVLW MOVWF loop END GOTO STATUS.1. header file ñính keøm CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF . choïn BANK0 . v o ø nglaëpvo âhaïn .1 .8Fh .RP0 0x00 TRISB STATUS. g iaù trò ñöa ra PORTB caàn .chöông trình 4. RB1.RP1 STATUS. choïn BANK0 . keátthuùcchöông trình C aùcböôùctieáp theo ñeå hoaøntaát öùngduïng treân laø b ieân d ò ch chöông trình treân baèng m oät trình bieân dòch Assembly daønh cho vi ñieàu khieån PIC (trình bieân dòch MPLAB chaúng haïn).inc> .Chöông trình vieátcho öùngduïng treânnhö sau: . Tuy nh ieân coùm oätñieàu caàn chuùy ù l a ø ñ o á i v ô ù iPORTA. do pin . H oaøntoaøntöông töï ta co ù theå vieát chöông trình ñöa m oätg iaùtrò baát kì v aøocaù cPORT cu øavi ñieàu khieån PIC16F877A. RB0 seõ saù ng. RB3. choïn BANK1 . LED g aén vaøocaùcpin RB7. khai baù ovi ñieàukhieån . PORTB <.outputs .ASM processor include 16f877a <p16f877a. PORTB <. chöông trình chính baétñaàutaïi ñaây .PORTBTEST.RP0 0x8F PORTB loop 0x000 start . sau ñoù duøngm aïch naïp naïp chöông trình vaøo vi ñieàu khieån PIC vaø k ieåm tra k eát qu aû.RP0 PORTB STATUS.

1. giaûmgiaùtrò thanh ghi delay-reg 1 ñôn vò . B aây g iôø laïi m uoán caùcLED se õ ch ô ù p taé t ta sau m oät khoaûng thôøi gian ñònh tröôùc. C oâng thöùcnaøychæ gaàn ñuùngvì ta ñ a õ b o ûqua thôøigian thöïc thi caùcleänh tröôùclabel “loop” v aø m o ät chu kì leänh phaùtsinh khi thanh ghi delay-reg mang g iaù trò 0 (tröôøng hôïp naøy caànhai chu kì leänhñeå thöïc thi leänhDECFSZ).hay cuï theåhôn laødö ïa vaø othô ø igian cuû am oätchu kì leänh. thöc thi dìng leänhnaøyneáudelay-reg baèng0 Loop1 MOVLW 0Xff MOVWF delay-reg2 DECFSZ delay-reg2 . 4. tv la ø g ia ù trò ñöa v aøo thanh ghi delay-reg v a ø ti la ø th ô ø i gian cu ûam oätchu kì leänh v aøñ ö ôïc tính theo coângthöùc: ti = 4/f0 V ôù if0 la øta à n so ác u û a oscillator. n h aûy tô ùilabel “loop” neáu thanh ghi delay-reg . Do thanh ghi delay-reg c hæ mang g iaù trò lô ù n n h aát laø FFh neân thôøigian delay chæ giôùi haïn ô û m oät khoaûng thôøigian nhaát ñònh tuøythuoäc vaøo xung clock s ö û duïng ñeå caáp cho vi ñieàu khieån. M uoán taêng thôøigian delay ta co ù th e å goïi chöông trình delay nh ieàu laàn ho aëc taêng soá löôïng voønglaëpcuûachöông trình delay nhö sau: MOVLW 0Xff MOVWF delay-reg1 loop DECFSZ delay-reg1 GOTO loop1 .RA4 c oùc ö ïc thu ñ e åh ô û(xem phuï luïc 1) neânm uoánPORTA hieånthò keátquaûm oätcaùchchính x aù cta caànduøngm oätñieäntrôûk eùoleângaéntheâm vaøob eânng oaøipin RA4.1 CHÖÔNG TRÌNH DELAY Chöông trình treân giuùp ta ñöa g iaù trò ra c aùc PORT cu û a vi ñieàu khieån vaø caùc LED seõ saù n g hay ta ét tu øy theo m öùclogic ñöa ra caù cPORT. leänhnaøyñöôïc thöïc thi khi delay-reg baèng0 loop Neáuduøngñoaïn chöông trình naøythì thôøigian delay ñöôïc tính gaànñuùngnhö sau: td = 3(1+tv)ti Trong ñ o ù td la ø th ô ø i gian delay. ñöa vaøothanh ghi delay . . M uoán vaäy ta duøng theâm m oät ñoaïn chöông trình DELAY. thöc thi dìng leänhnaøyneáudelay-reg khaùc0 GOTO exit . Thöïc chaát cuûa chöông trình DELAY l a ø cho vi ñieàu khieån laø m m oät coâng v ieäc voâ nghóa n a ø oñ o ùtrong m oätkhoaûng thôøigian ñònh tröôùc.Khoaûngthôøi gian naøy ñöôïc tính toaùndöïa treân quaùtrình thöïc thi leänh.C oùtheå vieátchöông trình DELAY döïa treânñoaïn chöông trình sau: MOVLW MOVWL DECFSZ GOTO … … … … … … … 0X20 delay-reg delay-reg loop . g iaùtrò 20h .sau khi giaûm1 ñôn vò chöùagiaùtrò khaùc0. S ô ûdó c o ùc o â n g th öù cn a ø yla ø vì m oätchu kì leänh bao goàm 4 xung clock.

Sau ñ aây laø m o ät ví duï cuï theå.G ia ûsö ûta ñâang sö ûd uïng oscillator 4MHz.2 .RP0 PORTB STATUS. V ôù ithô ø igian caàndelay l a øtd baèng1s thì g iaùtrò caànñöa vaøothanh ghi delay-reg la ø : tv = (td/3ti) – 1 = 33332.ASM .1 ch ôù ptaétsau m oãi100 miligiaây. xoù aPORTB .1.chöông trình 4. thöc thi dìng leänhnaøyneáudelay-reg baèng0 . khai baùoñòa chæ c a ù co ân h ô ùc h ö ù âcaa ù cthanh ghi . leänhtieáptheo sau thôøigian delay V ôùiñoaïn chöông trình treân thôøigian delay chæ keátthuùckhi c a ûhai thanh ghi delay-reg1 v a ødelay-reg2 ñeàumang g iaùtrò 0. khai b aùocaù c“Configuration bits” delay_reg1 delay_reg2 ORG GOTO start BCF BCF CLRF BSF MOVLW STATUS. thöc thi dìng leänhnaøyneáudelay-reg khaùc0 . header file ñính keøm CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF . Y eâu caàu ñaët ra la ø cho caù cLED trong chöông trình 4. delay-reg1 v a ødelay-reg2 . khai baù ovi ñieàukhieån .RP1 STATUS.RP0 0x00 EQU 0x20 EQU 0x21 0x000 start . Chöông trình ñöôïc vieátnhö sau: . ñòa chæbaétñaàuchöông trình . chöông trình chính baétñaàutaïi ñaây . choïn BANK0 .Version 1. Nhö vaäyta ñöa vaøothanh ghi delay-reg2 gia ù trò 255 (FFh) v a øthanh ghi delay-reg1 g iaùtrò 33332/255 = 131 (83h). Khi ñ o ùth ô ø igian cu ûa m oätchu kì leänhlaø : ti = 4/4 MHz = 1 uS.Exit MOVWF loop1 GOTO loop … … … … … … … .1 processor include 16f877a <p16f877a. choïn BANK1 .inc> .PORTBTESTANDDELAY.

delay 100 ms . v o ø nglaëpvo âhaïn .outputs . choïn BANK0 . xoù aPORTB loop3 DECFSZ GOTO GOTO loop4 DECFSZ GOTO GOTO exit2 GOTO END delay_reg1 loop4 exit2 delay_reg2 loop4 loop3 loop . Ñ ieàu naøycho pheùpta nhaän thaáy baèng m aétthöôøngvì trong m oätgiaây caùc pin cu û aPORTB s e õthay ño åitraïng thaùi10 laàn. .MOVWF BCF loop MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF loop1 DECFSZ GOTO loop2 GOTO DECFSZ GOTO GOTO exit1 CLRF MOVLW MOVWF MOVLW MOVWF TRISB STATUS.8Fh . PORTB <. g iaù trò ñöa ra PORTB caàn .RP0 0x8F PORTB 0x83 delay_reg1 0xFF delay_reg2 delay_reg1 loop2 exit1 delay_reg2 loop2 loop1 PORTB 0x83 delay_reg1 0xFF delay_reg2 . keátthuùcchöông trình V ôù ichöông trình naøy caù c pin cu ûaPORTB se õ thay ño åi traïng thaùisau m oãi khoaûng thôøi gian delay l a ø 100 ms. PORTB <. delay 100 ms .

outputs .1.chöông trình 4. choïn BANK0 . khai b aùocaù c“Configuration bits” delay_reg1 delay_reg2 ORG GOTO start BCF BCF CLRF BSF MOVLW MOVWF BCF loop MOVLW MOVWF CALL STATUS. g iaùtrò b aátkì caànñöa ra PORTB . Chöông trình 4.RP1 STATUS. PORTB <.8Fh . goïi chöông trình con delay100ms . ñòa chæbaétñaàuchöông trình .ASM .RP0 0x00 TRISB STATUS. xoù aPORTB .Tuy nhieân ta deã daøng nhaän thaáy m oätnhöôïc ñieåm cuûachöông trình treâ n la ø c a à n ihai tôù ñoaïn chöông trình delay v ô ù icaáu tru ù c chöông trình. thuaät toaùn vaø chöùcnaêng hoaøn toaøn gioáng nhau.3 . Ñ ieàu naøylaøm cho chöông trình trôûneân p hö ùctaïp vaø toánnh ieàu dung löôïng b o än h ô ùcu û avi ñieàu khieån.Chöông trình con co ù theå ñöïôc ñ a ët ta ïi b a á t c ö ùv ò trí naøotrong chöông trình chính. chöông trình chính baétñaàutaïi ñaây . choïn BANK1 . M oätphöông phaùpñeå khaéc phuïc nhöôïc ñieåm naøy la ø s ö û duïng chöông trình con v aø d uøng leänh “CALL” ñeå goïi chöông trình con ñ o ù .2 khi ñ o ùñöôïc vieátlaïi nhö sau: . header file ñính keøm CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF . PORTB <. Ñieàu naøycaàn ñöôïc chuù troïng vì dung löôïng boä nhôùchöông trình cu û am oätvi ñieàu khieån thöôøng nhoû(ñoáivôùiPIC16F877A dung löôïng boä nhôùchöông trình l a ø 8K word vô ù im o ät word l a ø 14 bit). khai baùoñòa chæ c a ù co ân h ô ùc h ö ù âcaa ù cthanh ghi .RP0 0x8F PORTB delay100ms EQU 0x20 EQU 0x21 0x000 start .Version 1.RP0 PORTB STATUS.inc> . delay-reg1 v a ødelay-reg2 .2 processor include 16f877a <p16f877a. choïn BANK0 .PORTBTESTANDDELAY. khai baù ovi ñieàukhieån .

B aây g iôøta seõ baønñeán m oätthuaät toaùnkhaù c ñeå v ieát chöông trình delay. keátthuùcchöông trình V ôùicaùchvieát chöông trình sö û du ïng chöông trình con.tuy n hieân leän h sö ûduïng trong chöông trình v a ø caùch tính toaùn thôøi gian delay thì khaùc nhau.1 $+2 . xoù aPORTB . delay 100 ms . Chöông trình con delay100ms v ôù ioscillator 4 MHz co ùtheåñöôïc vieátlaïi nhö sau: delay100ms MOVLW MOVWF d1 MOVLW MOVWF MOVLW MOVWF delay_0 DECFSZ GOTO d’100’ count1 0xC7 counta 0x01 countb counta. V eà nguyeân taéc thì thuaättoaùn m ô ù inaøyk h oâng co ù nh ieàu k haùc b ieätso vôùithuaät toaù ncu õ. vo ø nglaëpv o âhaïn 0x83 delay_reg1 0xFF delay_reg2 delay_reg1 loop2 exit delay_reg2 loop2 loop1 . trô ûv eàchöông trình chính .CLRF CALL GOTO Delay100ms MOVLW MOVWF MOVLW MOVWF loop1 DECFSZ GOTO GOTO loop2 DECFSZ GOTO GOTO Exit RETURN END PORTB delay100ms loop . caáu truùcchöông trình seõ trôûneân g oïn gaøngdeã hieåuhôn. linh hoaït hôn vaøtie átk ieäm ñ öô ïc nh ieàudung löôïng b o än h ôùchöông trình.

leänhGOTO $+2 m aáthai chu kì le än h .1 delay_0 count1. khi ñ o ù chöông trình se õ n h aûy tôù ile änh co ù ñòa ch æ (PC+2). L e än h n a ø yco ùtaù cduïng trô ûv e àv ò trí m aøchöông trình con ñö ô ïc g oïi vaøthanh ghi W khi ñ o ùmang g ia ùtrò la ø tham so á cu û aleänh RETLW (00h).1. Trong chöông trình treân ta c o ø n sö û duïng theâm m oät leänh khaù laï la ø leä n h RETLW.1 vieát chöông trình ñieàu khieån LED chaïy. Leänh DECFSZ m aát m oät chu kì leänh(tröøtröôønghôïp thanh ghi counta mang g iaùtrò 0 thì caàn2 chu kì leänh). 4. ta phaùttrieån theâm m oätsoá chöông trình nhoûvôùi m uïcñích laøm quen vôùi caùch vieát chöông trình cho vi ñieàu khieån PIC16F877A.DECFSZ GOTO DECFSZ GOTO RETLW END countb. Thanh ghi counta mang g iaùtrò 199 (C7h). Beân caïnh ñ o ù ta co ù th eå v ieát m o ät chöông trình con c o ù ta ù c duïng delay m oät khoaûngthôøigian baátkì la øb o ä iso á cu û a1 mS m oätcaùchdeãdaøng. tö ù c la ø leänh GOTO delay_0. LED tieáptheo s e õs a ù n g m o ä tc a ù c htu a à ntö ï tö øtreânxuoángdöôùi. do ñ o ùñoaïn chöông trình naøyseõ taïo ra m oätkhoaûngthôøigian delay: td = 5(counta+1)*ti = 5(199+1)*1 uS = 1 mS M uoántaïo ra thôøigian delay 100 mS. Nhö vaäy ta caàn toång coäng 5 chu kì leänh ñeå giaûm giaù trò trong thanh ghi counta 1 ñôn vò. .2. Trong tröôønghôïp naøythanh ghi W khoângcaàn mang m oätg iaù trò cu ï theå khi quay trô û v eà chöông trình chính neân leänh RETLW ch æ co ù taùc du ïng nhö leänh RETURN. V ôùi ñöa giaû ithuaät naøythôøigian delay taïo ra se õ d a ø ihôn so v ôù ig iaû ithu aätm aøta söûduïng ô û chöông trình 4.1: D öïa vaøo maïch nguyeân lí hình 4. L e än h n aø yco ùtaù cduïng coängvaøoboä ñeám chöông trình g iaùtrò 2. ta chæ vieäc g iaùtrò 100 v aøothanh ghi count1. Cu th e å la ø sau thôøigian delay 250 ms. ÖÙng duïng 4.1 d1 0x00 Tröôùctieân ta x eù t ñoaïn chöông trình k e å töø label “delay_0”. leänh naøy cuõng toán hai chu kì leänh.2 M O Ä T O ÁÖ Ù N G S DUÏNGV E À A Ë CTÍNH I/O C U Û A A Ù C Ñ C PORT Ñ IE À U H IEÅ N K D öïa vaøo chöông trình delay v a ø thao ta ù c ñöa d ö õ l ieäu ra caù c PORT.

Chöông trình ñieàukhieånLED chaïy processor 16f877a . choïn BANK1 . choïn BANK0 . PORTB <. header file ñính keøm CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF . khai b aùocaù c“Configuration bits” . duøngcho chöông trình delay countb EQU 0x22 .RP0 PORTB STATUS. sau ño ùdò ch p haû ig iaùtrò 80h sau m oãi khoaûngthôøigian delay (duøngleänhRRF).4 . vo ø nglaëpv o âhaïn loop delay100ms MOVLW MOVWF d1 MOVLW MOVWF MOVLW d’100’ count1 0xC7 counta 0x01 .inc> .---------------.RP1 STATUS.RP0 0x8F PORTB delay100ms PORTB.outputs . g iaùtrò b aátkì caànñöa ra PORTB .RP0 0x00 TRISB STATUS.--------------------.Thay vì ñöa m o ätg iaùtrò baátkì ra PORT.1. goïi chöông trình con delay100ms . chöông trình chính baétñaàutaïi ñaây . duøngcho chöông trình delay counta EQU 0x21 .Chöông trình naøyñöôïc vieátdöïa vaøochöông trình 4. xoù aPORTB .-------------------------. Chöông trình 4.1 loop 0x000 start .--------------------.-------------------count1 EQU 0x20 .--------------------------. ta ñöa ra PORB g iaùtrò 80h. duøngcho chöông trình delay ORG GOTO start BCF BCF CLRF BSF MOVLW MOVWF BCF MOVLW MOVWF CALL RRF GOTO STATUS.---------------. choïn BANK0 .-------------------.8Fh .3 v ô ùim o ätv aø ithay ñoåinhoû .--------------------------. . PORTB <. khai b aùovi ñieàukhieån include <p16f877a.-------------------------.Khai baù obieán . dòch phaûiPORTB . ñòa chæbaétñaàuchöông trình .

PORTB <. choïn BANK1 . duøngcho chöông trình delay count EQU 0x23 .RP0 0x00 TRISB 0x000 start . Chöông trình 4.1 $+2 countb. khai b aùovi ñieàukhieån include <p16f877a. trô ûv eàchöông trình chính .Ta co ù theå vieát laïi chöông trình treântheo phöông p h aù pb aû n gd ö õlie äu nhö sau: . header file ñính keøm CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF . delay 100ms .outputs .inc> . M oätphöông phaùp khaùc ñeå vieát chöông trình treân laø du ø ng b aû ng d ö õ lieäu . khai b aùocaù c“Configuration bits” count1 EQU 0x20 .1. chöông trình chính baétñaàutaïi ñaây .1 delay_0 count1. du øngñeåtra b aû n gd ö õlieäu ORG GOTO start BCF BCF CLRF BSF MOVLW MOVWF STATUS.RP0 PORTB STATUS. duøngcho chöông trình delay counta EQU 0x21 . keátthuùcchöông trình Nhö vaäy döïa treân m oätsoá chöông trình c ô ûb a û n .MOVWF delay_0 DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETLW END countb counta. duøngcho chöông trình delay countb EQU 0x22 . xoù aPORTB .ta chæ caàn thay ñ o åim o ätso á chi tieá t la ø c où th eåta ïo ra m oätöùngduïng m ôùi. ñòa chæbaétñaàuchöông trình . choïn BANK0 . Chöông trình ñieàukhieånLED chaïy duøngbaûngd ö õlieäu processor 16f877a . Phöông phaùp baûng d ö õ lieäu ñöôïc ñöa ra ô û ñaây khoâng mang tính chaát toái öu hoùagiaûithuaät chöông trình maø chæ mang tính chaátlaøm quen v ô ù im oätgiaûithuaä t m ôùi.1 d1 0x00 .RP1 STATUS.5 .qua ño ùtaïo ñieàu k ieän th uaän lô ïi hôn trong vieäc vieát caùc chöông trình öù ng duïng phöùctaïp hôn sau naøy.

1 d1 .1 b’10000000’ b’01000000’ b’00100000’ b’00010000’ b’00001000’ b’00000100’ b’00000010’ b’00000001’ d’100’ count1 0xC7 counta 0x01 countb counta. kieåmtra bit Z (Zero) . ñöa giaùtrò ñeám vaøothanh ghi W . thanh ghi W . 1 Loop2 . reset thanh ghi chöùagiaùtrò ñeám . keát . nhaûyveàlabel Loop1 neáuW = 0 .1 delay_0 count1.RP0 count count.Z Loop1 count. coänggí trò thanh ghi W v aøothanh ghi PCL. delay 100ms . xuaátgiaùtrò chöùatrong thanh ghi W ra PORTB . thöïc thi leänhnaøyneáuW khaùc0 PCL. so saùnhthanh ghi W v ôù igiaùtrò 8 . 0 Table PORTB delay100ms count. taênggiaùtrò than ghi count v aøch öù ak eátq u aûtrong .BCF Loop1 CLRF Loop2 MOVF CALL MOVWF CALL INCF XORLW BTFSC GOTO INCF GOTO Table ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW delay100ms MOVLW MOVWF d1 MOVLW MOVWF MOVLW MOVWF delay_0 DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO STATUS. 0 d’8’ STATUS. goïi chöông trình con Table . goïi chöông trình con delay100ms .1 $+2 countb. quaûchöùatrong thanh ghi PCL . choïn BANK0 .

keátthuùcchöông trình Ô Û phaàn tröôùc ta ñ a õ töøng ñeà caäp ñeán leänh RETLW nhöng khi ño ù leänh naøy ch æ co ù taù c d uïng nhö leänh RETURN. nhöng laànnaøyta cho LED chaïy tö øv ò trí giöõa sang hai phía sau m oãikhoaûngthôøigian delay 100 ms. qu aùtrình thöïc thi chöông trình laâu hôn vì boäñeám chöông trình lieân tuïc bò thay ñoåig iaùtrò. Chöông trình ñieàukhieånhieånthò LED processor 16f877a .inc> . Chöông trình 4.1. khai b aùovi ñieàukhieån include <p16f877a.Sau m oãi laàn mang d ö õ lie äu v e à bieán count seõ taêng giaù trò ñeám leân.ta so saùnhbieáncount v ôù ig ia ùtrò 8. L uùcnaøyta caànreset laïi bieáncount baèngcaùchnhaûyveàlabel Loop1. tuy nhieânta cuõngthaáyñöôïc m oätöu ñieåm cuûavieäc duøngbaûngd ö õlie ä u la øcho pheùpta saép xeáp b o átrí d ö õlieäu m o ätcaù chlinh hoaït.Ö Ù n g duïng sau ñaâycho ta th a á yro õhôn h ie äuq u aûcu û ab aû n gd ö õlieäu. g iaùtrò tö b ie án count ñöôïc coängvaøothanh ghi PCL thoâng qua thanh ghi ø W seõ ñieàu khieån chöông trình nhaû ytôù iñuù ngñòa ch æ c aà n la áy d öõlieäu tö øb aû ng d öõlieäu v aøothanh ghi W v a ø thanh ghi W mang d ö õ lieä u ñ o ù trô û v e à chöông trình chính troâng qua leänhRETLW. ta seõ coùñöôïc nhieàu caùchñieàu khieån caùcLED saùnghay ta ét theo nhieàu qui luaätkhaùcnhau chöùk hoâng chæ ñôn th u aàn laø d ò ch LED saùngsang traùihoaëcsang phaûi. D ieàu naøytheå hie än qua vieäc chæ caàn thay ñ oåidö õlieäu trong baûngdöõ lieäu. Neáu bieáncount mang g iaùtrò 8 thì pheùptoaùn XOR giöõabieán cao v aø g iaù trò se õ co ùk e át q u aû b aè n g 0 v a ø c ô øZ trong thanh ghi STATUS seõ ñöôïc set. khi ñ o ù v ò trí leänh caàn thöïc thi do boä ñeám chöông trình chæ ñeán khoâng coønñuùngnöõa). Tuy nhieântrong tröôønghôïp naø y leänh RETLW c o ùm o ä t vai tro øcu ï theå hôn l a ø mang d ö õlieä u tö øb a û n g d ö õ lieäu trôûv eà chöông trình chính vaø x uaát PORTB d ö õlieäu v ö øa ra mang v eà ñ o ù . Thanh ghi PCL la ø thanh ghi chöù a g iaù trò b oäñeám chöông trình.RETURN END . ta chæ caàn thay ñoåibaûngd ö õlieäum oätcaùchthích hôïp. header file ñính keøm CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .6 . . Chöông trình cho öùngduïng naøyhoaøntoaøntöông töï nhö trong öùngduïng. V ieäc duøng baûng döõ lieäu trong tröôøng hôïp naøy laøm cho chöông trình trô û neân d aøi hôn. G iaù trò ñeám ñöôïc ñöa vaøothanh ghi W ñeå coängvaøothanh ghi PCL. ÖÙng duïng4 2: Töông töï nhö öùngduïng 1. Ñ eå ñeà phoøng tröôøng hôïp giaù trò bieán count coäng vaøo thanh ghi PCL seõ ñieàu khieån chöông trình ñeán v ò trí vöôït qua vò trí c uû ab aû ng d ö õlieäu (tröôøng hôïp naøy xaûy khi bieán count ra mang g iaù trò lôù nhôn 8. trô ûv eàchöông trình chính .

RP0 0x00 TRISB STATUS. coänggí trò thanh ghi W v aøothanh ghi PCL. quaûchöùatrong thanh ghi PCL count count. 1 Loop2 .RP0 PORTB STATUS.----------------------.----------------------. choïn BANK0 . 0 d’8’ STATUS.RP1 STATUS. du øngñeåtra b aû n gd ö õlieäu ORG GOTO start BCF BCF CLRF BSF MOVLW MOVWF BCF Loop1 Loop2 CLRF MOVF CALL MOVWF CALL INCF XORLW BTFSC GOTO INCF GOTO Table ADDWF RETLW RETLW RETLW PCL. keát .Khai baù obieán .1 b’00011000’ b’00100100’ b’01000010’ . duøngcho chöông trình delay counta EQU 0x21 . xoùaPORTB . goïi chöông trình con Table . kieåmtra bit Z (Zero) . duøngcho chöông trình delay countb EQU 0x22 . PORTB <.. xuaátgiaùtrò chöùatrong thanh ghi W ra PORTB . 0 Table PORTB delay100ms count. thöïc thi leänhnaøyneáuW khaùc0 STATUS. khai b aùocaù c“Configuration bits” . choïn BANK1 . duøngcho chöông trình delay count EQU 0x23 .--------------------.-------------------------count1 EQU 0x20 .Z Loop1 count. nhaûyveàlabel Loop1 neáuW = 0 .------------------------.outputs . so saùnhthanh ghi W v ôù igiaùtrò 8 . choïn BANK0 . reset thanh ghi chöùagiaùtrò ñeám . thanh ghi W .-------------------------. ñöa giaùtrò ñeám vaøothanh ghi W . chöông trình chính baétñaàutaïi ñaây . taênggiaùtrò than ghi count v aøch öù ak eátq u aûtrong . ñòa chæbaétñaàuchöông trình .--------------------.------------------------.RP0 0x000 start . goïi chöông trình con delay100ms .

Ñ eå kieåm tra ñöôïc öùngduïng naøyta caànxaây döïng ñ o àmaïch nhö sau: sô . keátthuùcchöông trình ÖÙng duïng 4. trô ûv e àchöông trình chính . delay 100ms .RETLW RETLW RETLW RETLW RETLW delay100ms MOVLW MOVWF d1 MOVLW MOVWF MOVLW MOVWF delay_0 DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETURN END b’10000001’ b’01000010’ b’00100100’ b’00011000’ b’00100100’ d’100’ count1 0xC7 counta 0x01 countb counta. sau ño ùk ieåm tra xem coâng taéc naø o ñö ô ïc aán v aø b aätLED töông ö ù ngvô ù ico ân g taé c ñ où(caù c LED naøy ñöôïc boá trí ô û c a ù c pin RB7:RB4) saùng leân.1 $+2 countb.Trong ö ùng duïng naøy ta seõ phaùt trieån theâm m oät chöùc naêng nöõacuûacaùcPORT la ø khaû naêng nhaän tín hieäu ñieàu khieån t ö øbeân ngoaøi.Vi ñieàu k h ieån seõ ño ïc tín hieäu 0 (ñieän aùp 0 V) v a ø 1 (ñieän aùp 5 V) ñöôïc taïo ra baèng caùch söû d uïng c aù cc o â n g ta éc a á n tö ø c aù cpin RB0:RB3 cu û aPORTB .1 delay_0 count1.3: Test chöùcnaêngInput/Output cuû a caù cpin cu ûavi ñieàukhieån. Ô Ûc a ù c ö ù duïng tröôùcta ch æ laø m m o ät v ieäc laø x uaát tín hieäu ñieàu khieån ra caù c PORT ng theo m oät so á qui taéc ñònh saü n naø o ño ù .1 d1 .

Chöông trình 4.--------------------.HI HI R8 R9 U1 1 SW5 2 3 4 5 6 7 MCLR/VPP RA0/AN0 RA1/AN1 RB7/PGD RB6/PGC RB5 RB4 40 39 38 37 36 35 34 33 R7 R6 R5 R1 R2 D1 D2 0 RA2/AN2/VREF-/CVRE FRB3/PGM RB2 RA3/AN3/VREF+ RB1 RA4/T0CLK/C1OUT RA5/AN4/SS/C20UT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD GND OSC1/CLK OSC2/CLKOUT RC0/T1OSO/T1CLK RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RB0/INT VDD GND RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA RD3/PSP3 RD2/PSP2 D3 R3 D4 8 9 10 32 31 30 29 28 27 26 25 24 23 22 21 R4 SW1 HI 11 12 13 14 15 16 17 18 19 20 0 SW2 SW3 SW4 0 4 MHz RD0/PSP0 RD1/PSP1 0 PIC16F877A Hình 4.---------------.-------------------------.2 Maïch test chöùcnaêngI/O cho öùngduïng 3.--------------------.1. Chöông trình vieátcho öùngduïng naøynhö sau: .-------------------.7 processor 16f877a include <p16f877a.---------------.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .--------------------------.-------------------------.Khai baù ohaèng .--------------------------.-------------------SW1 EQU 0 SW2 EQU 1 SW3 EQU 2 SW4 EQU 3 LED1 EQU 4 LED2 EQU 5 .

SW1 switch1 PORTB.RP0 CLRF PORTB BSF STATUS.RP1 BCF STATUS.RP0 MOVLW b'00001111' MOVWF BCF loop BTFSS CALL BTFSS CALL BTFSS CALL BTFSS CALL GOTO switch1 CLRF BSF RETURN switch2 CLRF BSF RETURN switch3 CLRF BSF RETURN switch4 CLRF PORTB.SW2 switch2 PORTB.kieåmtra coâng . neáucoângtaéc.LED3 LED4 ORG GOTO start EQU EQU 0x000 start 6 7 BCF STATUS. taéc2 .LED2 PORTB PORTB. 1 khoângñöôïc aán. thöc thi leänhnaøyneáucoângtaéc1 ñöôïc aán . thieátlaäpchöùcnaêngI/O cho töøngpin trong .LED3 PORTB . tieáptuïc quaùtrình ño áivô ù i caùco ângtaécco ø nlaïi c PORTB PORTB.SW4 switch4 loop PORTB PORTB.RP0 .SW3 switch3 PORTB.PORTB .LED1 TRISB STATUS. kieåmtra coângtaéc1 .

--------------------------. Khi coâng taéc khoâng ñöôïc nhaán. Tuy nhieân caàn chuùy ù la ø phaûithieát laäp traïng thaùiI/O thích hôïp cho töøngpin trong PORTB (thieátlaäpRB3:RB0 la øinput.-------------------.ñ ie än aù p se õ dao ñoäng k hoâng ñònh trong m oätkhoaûng thôøigian naøoñoù.-------------------SW1 EQU 0 SW2 EQU 1 SW3 EQU 2 SW4 EQU 3 .-------------------------.Chöông trình 4. taéc Chöông trình caûitieánñeåk haécphuïc nhöôïc ñieåm treânc o ùtheåñöôïc vieátnhö sau: . Ta chæ vieäc kieåm tra lieân tuïc traïng thaùilogic cu ûacaù cpin ñ o ùv a ø b a ä t LED töông öùngvôùicoâng taéc thoâng qua caù c chöông trình con switch1.BSF RETURN END PORTB.ngoaøira traïng th aù logic cu ûapin cu õ n g oån i seõ thay ño åi do m o ät taù c ñ o än g tö ù cth ô ø i tö ø m oät tröôøng beân ngoaøi m aø khoâng phaûido ta aán coâng taéc.Khai baù ohaèng .8 processor 16f877a include <p16f877a. M oätñieåm quan trong caàn löu y ù l a ø caùccoângtaéc aán thöôøng bò “doäi”.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .caùcpin treân sem nhö n o á iñ aát v aømang m öùclogic 0.---------------.LED4 Trong chöông trình treân ta öù ng duïng thuaät toaùn hoûi voøng thoâng qua voøng laëp loop trong phaàn chöông trình chính. neáu coâng taéc thöïc söï coønñöôc a á n thì m ôùitieánhaønhcaùcthao taù ctöông öù ngv ô ù i coâng ño ù .--------------------. Phöông phaùp naøy cuõnghieäu quaû nhöng g aây toán k eù m veà linh k ieän v aø maïch nguyeân lí trôû neân p höù ctaïp. tö ù cla ø khi aán xuoáng hoaëc thaû ra. Ñeå khaéc phuïc nhöôïc ñieåmtreânta c o ùhai phöông phaùp: Phöông phaùp choáng “doäi” baèng phaàn cöùng:ta theâm caùc tuï ñieän vaøo caù c coâng taéc ñeå loïc b ôù tcaù c tín hieäu nhoû gaây nhieãu vaø caùc tín hieäu khoâng oån ñònh trong thôøigian q u aù ño ä.C aù cy eáu toá treân seõ laøm aû nh höôû ng tôù ihoaït ñoäng cu ûavi ñieàu khieån. switch3 v a ø swtich4 khi phaùt hieän m oät coâng taéc naøo ñoù ñöôïc aán.m öùclogic taïi caùcpin n o á iv ô ù i co ân g taéc laø m ö ù c1. Phöông phaùp choáng “doäi” baèng phaàn meàm: ta cho vi ñieàu khieån delay trong m oät thôøi gian ng aén v aø kieåm tra xem coâng taé c coøn ñöôïcaán khoâng.---------------.--------------------.--------------------------. ñieän aùp taïi caù ccoâng taé c se õ phaû i traû iqua m oätgiai ñoaïn q u aù ñ o ä. Khi coâng taé c ñöôïc aán. RB7:RB4 la øoutput).1.-------------------------. switch2.

-------------------------.SW3 CALL switch3 BTFSS PORTB. kieåmtra SW1 CALL switch1 .--------------------.-------------------.-------------------.-------------------------.---------------. n h aûytô ù ichöông trình con switch1 neáu . choïn BANK0 loop . voønglaëpkieåm tra coângtaùcnaøoñöôïc aán BTFSS PORTB.RP0 .RP0 .Chöông trình . thao ta ù ctöông töï nhö SW1 BTFSS PORTB.-------------------------.--------------------------.--------------------------.--------------------------.-------------------------. SW2 CALL switch2 . g aù nSWdel v ô ù ilabel del150 .-------------------------. vò trí baétñaàuchöông trình chính BCF STATUS.--------------------------.-------------------ORG 0x000 GOTO start start .Khai baù obieán .---------------.--------------------.--------------------------.--------------------------.-------------------SWdel SET del150 . choïn BANK0 CLRF PORTB BSF STATUS.---------------.RP0 .---------------. neáuSW1 k hoângñöôïc aántieáptuïc kieåm tra .C aùckhai baùokhaùc .---------------.SW4 CALL switch4 GOTO loop switch1 .LED1 EQU 4 LED2 EQU 5 LED3 EQU 6 LED4 EQU 7 .RP1 BCF STATUS.SW2 .--------------------.--------------------.--------------------. choïn BANK1 MOVLW b'00001111' MOVWF TRISB BCF STATUS.---------------.-------------------.-------------------count1 EQU 0x20 counta EQU 0x21 countb EQU 0x22 .--------------------.-------------------------.SW1 . SW1 ñöôïc aán BTFSS PORTB.

x aù cnhaä n laïi traïng thaùicoângtaéc1 . tieáptuïc giö õLED1 saùngneáucoângtaéc coøn . neáukhoângcoønnhaánthì trô ûv eàchöông . khoângcoønaán .CLRF CALL BTFSC RETURN led1_ON BSF BTFSC RETURN GOTO switch2 CLRF CALL BTFSC RETURN led2_ON BSF BTFSC RETURN GOTO switch3 CLRF CALL BTFSC RETURN led3_ON BSF BTFSC RETURN GOTO switch4 CLRF CALL BTFSC RETURN led4_ON BSF PORTB SWdel PORTB.LED2 PORTB.SW2 PORTB. xoù aPORTB .SW3 PORTB.LED1 PORTB.SW2 led2_ON PORTB SWdel PORTB. trô ûv eàchöông trình chính neáucoângtaéc . goïi chöông trình delay del150 .SW1 .SW3 led3_ON PORTB SWdel PORTB.SW4 PORTB. thao taù ctöông tö ï v ô ù i caùco ângtaécco ø nlaïi c PORTB.SW1 led1_ON PORTB SWdel PORTB. baätLED1 saùng . ñöôïc aá n .LED4 .LED3 PORTB. trình chính . kieåmtra coângtaéc1 coønnhaánhay khoâng .

---------------.--------------------------.-------------------------.------------------. taïo thôøigian delay 1 mS 0xC7 counta 0x01 countb counta.---------------del0 RETURN del1 MOVLW d'1' del5 GOTO delay del10 MOVLW del20 GOTO del50 MOVLW GOTO del100 del150 del200 MOVLW GOTO d'5' delay d'10' delay d'20' delay d'50' delay d'100' delay d'150' delay d'200' delay count1 .Chöông trình delay caû itieáncho pheùpnhieàukhoaûngthôøigian delay khaùcnhau .-------------------------.SW4 RETURN GOTO led4_ON .1 MOVLW delay GOTO MOVLW GOTO MOVLW GOTO MOVLW GOTO MOVWF d1 MOVLW MOVWF MOVLW MOVWF delay_0 DECFSZ .----------------------.------------------.--------------------------.BTFSC PORTB.----------------------.

thôøigian aán coângtaéc phaûilaâu hôn thôøigian delay ñöôïc chæ ñònh bôûihaèng soá SWdel do coângtaéc seõ ñöôïc k ieåm tra laïi traïng thaùisau thôøigian delay . ta caàn phaùt trieån theâm maïch test cu û a ö ù ng duïng 3 baèng caùchtheâmv aøo8 LED ô ûPORTD thoângqua caùcñieäntrôû. Vieäcthay ño åith ô ø igian delay trong chöông trình coù theå ñöôïc thöïc hieän ñôn giaûnbaèng caùch thay ño åi label cu ûa chöông trình delay g aùn cho tham so á SWdel.8 LED PORTD chaïy tö øtra ù isang phaûi(LED saùngchaïy).8 LED PORTD chaïy tö øtra ù isang phaûi(LED ta étchaïy). Thôøigian delay caàn ñöôïc kieåm ñònh baèng thöïc nghieäm v aø ñ öô ïc aán ñ òn h m o ätcaù ch thích hôïp ñeå choáng “doäi” m oätcaùchhieäu quaû.1 d1 V ôù ichöông trình treân. Trong öùngduïng naøy ta seõ taäp hôïp laïi taát caû caùckó naêng ñöôïc söû duïng trong caùcöùng duïng tröôùc. AÁn SW3: LED3 saùng. ÖÙng duïng 4.GOTO $+2 DECFSZ GOTO DECFSZ GOTO RETURN END countb. ñieàu ño ùlaø m cho chöông trình trô ûneân d aø iv a øphöùc taïp hôn.8 LED PORTD chaïy tö øtraù isang phaûi(2 LED ta étchaïy). ta phaûitieáp tuïc thöïc hieän m oätthao ta ù cn ö õ a la ø ra leänh cho vi ñieàu khieån hieånthò 8 LED ñöôïc gaénvaøoPORTD theo m oätth ö ùtö ï töông öùng. Thöïc ra ta coù theå tröïc tieápñöa tham so áth ô ø igian delay tröïc tieápvaøothanh ghi count1 m aøkhoângcaànthoângqua tham s o á SWdel. Tuy nhieânchöông trình treân cu õngñaõ cho ta thaáy ñöôïc m oätñieåm khaùcbieät giöõaleänh “EQU” vaø leänh “SET”.C uï theånhö sau: . tuy nhieânbeân caïnh vieäcbaät LED töông öùng v ôùicoângtaéc saùngleân. Ñ eå test ñöôïc öù ng duïng naøy. giuùpta h ieå u ro õhôn v a øs ö ûduïng m oätcaùchthích hôïp caùcleänhtreântrong c aù cöù ngduïng khaùc. N eáu thôøi gian aán coângtaéckhoâng ñaït yeâu caàu.C uï theånhö sau: AÁn SW1: LED1 saùng. 4: öùngduïng toånghôïp.8 LED PORTD chaïy tö øtraù isang phaûi(2 LED saùngchaïy).thao taù cb aätLED töông ö ù ngv ô ù ico âng taéc ño ùsaù ng leân seõ k ho âng ñö ô ïc thö ïc h ieän vaø vi ñieàu khieån se õ tieáp tuïc quaùtrình kieåm tra traïng thaùicaùccoâng taéc coønlaïi.1 delay_0 count1.nhö vaäy seõ gaây söï khoùchòu trong v ie äc sö ûduïng coângtaéc do phaû i aán coâng taéc trong m oätkhoaûngthôøigian ñ u û laâu.ñoàng thôøicuõngkhoâng ñöôïc laâu quaù. Y eâucaàuñaëtra cuõngnhö öùngduïng 3. AÁn SW2: LED2 saùng. AÁn SW4: LED4 saùng.

33 K 0.-------------------------. Chöông trình vieát cho maïch test naø y cuõngtöông töï nhö öùng duïng 3 nhöng ñöôïc theâm vaøo phaàn hieän thò LED ô û PORTD. Chöông trình cuï theånhö sau: .---------------.HI HI R9 U1 1 SW5 2 3 4 5 6 7 MCLR/VPP RA0/AN0 RA1/AN1 RB7/PGD RB6/PGC RB5 RB4 40 39 38 37 36 R8 R7 R6 R5 R1 R2 R3 R4 D1 D2 D3 D4 0 8 9 10 RA2/AN2/VREF-/CVREFRB3/PGM 35 RA3/AN3/VREF+ RB2 34 RB1 RA4/T0CLK/C1OUT 33 RA5/AN4/SS/C20UT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD GND RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 32 31 RB0/INT SW1 SW2 SW3 HI 11 12 13 14 15 16 17 18 VDD GND OSC1/CLK OSC2/CLKOUT 0 4 MHz 30 29 28 27 26 25 24 23 0 SW4 0.Chöông trình 4.33 K D8 D9 D10 D11 D12 19 20 RD0/PSP0 RD1/PSP1 RD3/PSP3 RD2/PSP2 PIC16F877A 21 0.3 Maïch test öùngduïng 4.----------------------.---------------SW1 EQU 0 SW2 EQU 1 SW3 EQU 2 .1.--------------------------.------------------.33 K D5 D6 D7 RC0/T1OSO/T1CLK RC7/RX/DT RC1/T1OSI/CCP2 RC6/TX/CK RC2/CCP1 RC5/SDO RC3/SCK/SCL RC4/SDI/SDA 0.-------------------------.33 K 22 0.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .Khai b aù ocaù ch aèngso á .33 K 0.--------------------------.9 processor 16f877a include <p16f877a. Ta s ö û duïng thuaät toaùn baûng döõ lieäu ñeå hieån thò LED.33 K 0.------------------.33 K 0 Hình 4.33 K 0.----------------------.

LED2 table2 PORTB. choïn BANK0 loop1 loop2 CLRF CALL MOVF BTFSC CALL BTFSC CALL BTFSC CALL count check_key count.----------------ORG 0x000 GOTO start start .SW4 EQU 3 LED1 EQU 4 LED2 EQU 5 LED3 EQU 6 LED4 EQU 7 .----------------------. SW co ø nlaïi .W PORTB.------------------------.-------------------------.RP0 . thao ta ù ctöông tö ï v ô ù icaù cbit chæ thò traïng thaùicaùc . reset bieáncount . tieáptuïc kieåm tra bit LED2 neáubit LED1 baèng0 .LED3 table3 .LED1 table1 PORTB.----------------. choïn BANK0 CLRF PORTB CLRF PORTD BSF STATUS.----------------------. caùcbieánduøngcho chöông trình delay counta EQU 0x22 countb EQU 0x23 .--------------------.-------------------------.----------------count EQU 0x20 . ñöa gía trò bieáncount vaøothanh ghi W . kieåmtra traïng thaùibit LED1 . choïn BANK1 MOVLW b'00001111' MOVWF TRISB MOVLW 0x00 MOVWF TRISD BCF STATUS.RP1 BCF STATUS.--------------------.-------------------------.----------------------.------------------------. v ò trí baétñaàuchöông trình chính BCF STATUS.-------------------------.----------------. goïi chöông trình con check_key .--------------------.----------------------.Khai baù obieán .RP0 . goïi chöông trình con “table1” neáubit . bieánduøngcho quaùtrình dòch LED count1 EQU 0x21 . “LED1” mang giaùtrò baèng1 .--------------------.------------------------.------------------------.Chöông trình .RP0 .

goïi chöông trình con delay . ñöa g iaùtrò tö øthanh ghi W sau khi quay trô ûv e àtö ø . taênggiaùtrò bieán“count” neáuZ baèng0 (giaùtrò .f b'10000000' b'01000000' b'00100000' b'00010000' b'00001000' b'00000100' b'00000010' b'00000001' b'00000010' b'00000100' b'00001000' b'00010000' b'00100000' b'01000000' PCL.1 loop2 .BTFSC CALL MOVWF CALL INCF XORLW BTFSC GOTO INCF GOTO table1 ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW table2 ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW PORTB. n haû ytô ùilabel “loop1” neáuZ baèng1 (giaùtrò .LED4 table4 PORTD delay count. caù cb aû n gd ö õlie äu d u ø n gcho phaàndòch LED PCL. bieán“count” baèng14) .Z loop1 count. bieán“count” khoângbaèng14) .f b'01111111' b'10111111' b'11011111' b'11101111' b'11110111' b'11111011' b'11111101' b'11111110' .0 d'14' STATUS. b aû n gd ö õlie äu ra PORTD . so saùnhbieáncount vô ù ig iaùtrò 14 . sau ñ o ùn h aû ytôù ilabel “loop2” . taênggiaùtrò bieáncount ñeåkieåm tra . kieåmtra c ô øZ (Zero) .

f b'11000000' b'01100000' b'00110000' b'00011000' b'00001100' b'00000110' b'00000011' b'00000011' b'00000110' b'00001100' b'00011000' b'00110000' b'01100000' b'11000000' PCL.f b'00111111' b'10011111' b'11001111' b'11100111' b'11110011' b'11111001' b'11111100' b'11111100' b'11111001' b'11110011' b'11100111' b'11001111' b'10011111' .RETLW RETLW RETLW RETLW RETLW RETLW table3 ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW table4 ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW check_key b'11111101' b'11111011' b'11110111' b'11101111' b'11011111' b'10111111' PCL. chöông trình con check_key kieåmtra traïng thaùi .

Traïng thaù icaù cLED .1 delay_0 .LED4 .LED3 PORTB PORTB.SW3 switch3 PORTB.BTFSS CALL BTFSS CALL BTFSS CALL BTFSS CALL RETURN switch1 CLRF BSF RETURN switch2 CLRF BSF RETURN switch3 CLRF BSF RETURN switch4 CLRF BSF RETURN delay MOVLW MOVWF d1 MOVLW MOVWF MOVLW MOVWF delay_0 DECFSZ GOTO DECFSZ GOTO PORTB.SW4 switch4 . caù cSW.SW2 switch2 PORTB. sau ñ o ùb aä tLED töông ö ù n gv ô ù iSW ñ o ù .LED1 PORTB PORTB.LED2 PORTB PORTB. c o ùta ù cduïng nhö caùcbit c ô øh ieä u khi xaùcñònh thao . chöông trình delay m oätkhoaûngthôøigian 250 ms d'250' count1 0xC7 counta 0x01 countb counta.SW1 switch1 PORTB.1 $+2 countb. taùcdòch LED töông ö ù n gv ô ù iSW ñöôïc aán PORTB PORTB. saùngneáuSW ñ o ùñöôïc aán.

Tuy nhieân vieäc tröôùctieân la ø p h a û i tìm hieåu xem IC 74HC595 hoaït ñoängnhö the án aø ov aøc aùchñieàu k hie ånn o ùra sao.2 VI Ñ IE À U H IEÅ N K PIC16F877A V A Ø GHI DÒCH74HC595 IC Muïc ñích sö û duïng IC 74HC595 laø n aâ n g cao so á löôïng pin output cu ûa vi ñieàu khieån. K eå tö øphaànsau ta seõ k eáthôïp vi ñieàu khieån PIC vôùicaùc thieátbò ngoaïi vi khaùcñeåphaùthuy to á iña k haûnaêngcuûavi ñieàukhieån. Trong phaàn naøy ta ch æ sö û du ïng duy nhaát vi ñieàu khieån PIC v aø ca ù c PORT I/O ñeå xaây döïng caùc öùngduïng. k ieåm tra traïng thaùicoângtaé c . Thay vì phaûitruy xuaáttröïc tieáp m oätgiaùtrò naøo ñoù ra c aù cPORT I/O. Nhö vaäy m uoán thay ño åi thao taùc queù t LED ta p h aû i aán SW ñuùngngay taï i thôøiñieåm ñoù.DECFSZ GOTO RETURN END count1.1 d1 Trong chöông trình naøyta lôïi duïng caùcbit traïng thaùi cuûa c LED ñeå d uøngnhö c aù cc ô ø caù h ieä u ñ eå x aù cñònh thao taù c dòch LED töông ö ù n gv ô ù iSW ñöôïc nhaán trong voønglaëp “loop1” v a ø “loop2”. vi ñieàu khieån seõ chæ kieåm tra caùc SW ngay taïi thôøiñieåm keát thuùcquaù trình dòch LED. 4.…ñeàu ñaõ ñöôïc ñeà caäp ñeán ô û caùcphaàn tröôùc. vaán ñeà ñaët ra trong chöông trình n aø y ch æ laø saép x eáp v aø to å ch öù c hô ïp lí th ö ùtö ï caù cthao taùcv aø caù cth uaät to aù n. ta c o ùth e å truy xuaátgiaùn tieáp thoângqua IC 74HC595. khi ñ o ùtraïng thaùicaùcSW seõ ñöôïc caäp nhaätthöôøng xuyeân hôn sau m oãilaàndòch LED m aøkhoângphaûichôøcho ñeánkhi keátthuùcm oätquaùtrình dòch LED.Ñ eå khaécphuïc ta ch æ v ieäc ñaët leänh ño ù vaø otrong voønglaëp “loop2”. Hình sau l a øsô ño àk h oáicu û aIC: . Tuy nhieân neáu ñoïc kó chöông trình treân ta seõ phaùthieän m oät ñieåm baát hôïp lí ô û v ò trí ñaët leänh “CALL check_key”. C aùcthuaättoaùnnhö b aû ng döõlieäu . T ô ù igiai ñoaïn naøy xem nhö ta keát thuùcnhöõng thao taù c ñôn giaûn nhaát khi s ö û duïng vi ñieàu khieån PIC16F877A. N eáu ñaët ô û v ò trí nhö chöông trình treân.ñieàu naøygaây nhieàu k h oùk h aên vaøtaïo söï b aáthô ïp lí so vôùithöïc teá.

Hình 4.4 Sô ño àk h oáiIC 74HC595 Thöc ch aátña ây laøIC ghi dòch vôùi8 bit ng o õra QH:QA vô ù icho átd ö õlieäu 8 bit. D öõlieäuchæ ñöôïc ñöa v aøo qua 1 pin SER vaø ñöôïc ñieàu k hieån bôûicaùcpin RCK (pin ñieàu khieån choátdöõ .

Ñ ieàu naøy cho pheùp m ôûroâng m oät caùch voâ haïn soá löôïng pin output cho vi ñieàu khieån.pin naøy d uøngñeånoáinhieàuIC 74HC595 laïi vôùinhau) v a øpin (pin cho pheùpngoõra). SCK. Ta c o ùth eå ñieàu khieån m oät IC 74HC595 hoaëc nhieàu IC gheùp vôùi nhau thoâng qua 4 pin RCK. Sau ñ a â ylaøsô ñ o à ch aân b aû ngsö ï thaätcuûaIC 74HC595: vaø Hình 4.7 C aùchnoáinhieàuIC 74HC595 QH QG QF QE QD QC QB QA HI HI 0 . SER v a ø .lieäu). taát nhieân vôùim oätnhöôïc ñieåm laø thôøigian truy xuaát chaäm do döõ lieäu phaûiñöôïc dòch töøngbit v aøo IC thoâng qua töøng caïnh döông taù c ñoäng vaøo pin SCK tröôùc khi ñöa d ö õ lieäu ra ngoaøi thoâng qua caùcpin QH:QA. (pin taù c ñoäng m öù cthaáp du øng ñeå xoù ad öõlieäu ) v aø pin Q’H (pin ñöa d ö õ lieäu no ái tieáp ra ngoaøi.6 Sô ñ oà c haân aøb aû n gsöï th aätcuû a74HC595 v Hình sau theåhieäncaùchnoáinhieàuIC 74HC595 laïi vôùinhau: DATA IN RCK SCK CLR 13 10 13 10 11 12 14 11 12 SRCLK RCLK SDI G CLR 16 8 SRCLK RCLK G CLR VCC GND 16 8 SDO VCC GND 74HC595 74HC595 SDO SDI 14 QH QG QF QE QD QC QB QA 0 7 6 5 4 3 2 1 15 0 7 6 5 4 3 2 1 15 9 9 DATA OUT Hình 4.SCK (pin ñ ieàu k hieånv ie äcd òc h dö õlieäuv aøoIC thoângqua caù cxung clock).

Ngoaøira ta c o ù th eå s ö û duïng b aá tc ö ùpin naøocu û aPORT I/O naøoñeåñieàukhieånIC naøy. ÖÙng duïng 4.33 K 0. taïo ra m oät caïnh döông ô û pin SCK ñ e å dòch bit d ö õ lie äu ñ o ù v aø o . D ö õ lie äu seõ ñöôïc kieåm tra thoâng qua caù cLED ñöôïc gaén vaøo caùcpin output cu ûaIC. v a ø SDI. Tröôùctieân ñöa 1 bit döõ lieäu vaøo pin SDI. Trong öùngduïng naøy ta se õ ñöa dö õm o ätlieäu 8 bit b aát kì ra thoâng qua IC 47HC595. C uï theånhö sau: Pin RB0: n o áiv ô ù ipin SDI Pin RB1: n o á iv ô ù ipin SCK Pin RB2: n o áiv ô ù ipin Pin RB3: n o áiv ô ù ipin RCLK C aùc thöù töï naøy khoâng baét buoâc phaûi ñöôïc tuaân thuû m oät caùch nghieâm ngaët.33 K 0 8 9 10 HI 0. Ö Ù n g duïng sau giuùpta h ie åu ro õhôn caùchñieàukhieåncaùcIC 74HC595. trong khi pin SDO cu ûaIC tröôùcse õ n o á iv ô ù ipin SDI cu ûaIC sau.33 K D1 D2 SDI 12 VCC 14 9 SDO 15 0.RCK.33 K D6 D7 D8 13 0 4 MHz 14 15 16 17 18 19 20 OSC1/CLK OSC2/CLKOUT 0.33 K D3 RE0/RD/AN5 RE1/WR/AN6 VDD GND VDD 32 31 11 RCLK SRCLK QA QB 1 2 0. q aù u trình naøy laëp ñi laëp laïi lieân tuïc cho ñeán khi toaøn boä döõ lieäu ñöôïc dòch vaøo caùc IC 74HC595 (IC tieáp theo cuøngseõ dòch döõ lieäu ñöôïc ñöa ra thoâng qua pin SDO cu û a vi ñieàu khieån tröôùc). Caùchñieàu khieån IC ñöôïc theå hieän thoângqua baûngsöï thaät ô û hình 4. Taá t c a ûc a ù cIC naøyseõ ñö ô ïc ñieàu k hieån th oâng qua 4 pin SCK.33 K RC7/RX/DT RC0/T1OSO/T1CLK RC6/TX/CK RC1/T1OSI/CCP2 RC5/SDO RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RC4/SDI/SDA 8 0 0 . Maïch test cho öùngduïng naøyñöôïc thieátkeánhö sau: HI 10 K U1 1 SW5 2 3 5 6 7 MCLR/VPP RA0/AN0 RB7/PGD RB6/PGC RB5 40 39 38 37 35 U3 HI RA2/AN2/VREF-/CVREFRB3/PGM RA3/AN3/VREF+ RA4/T0CLK/C1OUT RA5/AN4/SS/C20UT RB2 RB1 RB0/INT 34 33 16 0. Sau ñoù taïo m oätcaïnh döông ô û pin RCK ñ e å ñöa d ö õlie ä u tö øc h o át d ö õ lieäu ra caù cpin output.Nhö ta thaáytrong hình treân. C aùc pin ñieàu khieåncuûa74HC595 ñöôïc gaén v aøocaù cpin RB3:RB0 cu ûaPORTB.caùcpin SCK.33 K 0. RCK v aø ñöôïc noái chung laïi vôùinhau.33 K D4 D5 11 12 13 PIC16F877A RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 30 29 28 27 26 25 24 23 22 CLR G 5 QD 4 74HC595 QE QF QG GND QH 6 7 0 0.6.5: IC 74HC595 v aøc aù chñieàu khieån. nhö vaäy ta coù theå tieát k ieäm ñöôïc m o ät so á löôïng ñaùngk e åso álöôïng pin ñieàukhieåncuûavi ñieàukhieån. tuøy theo maïch phaàn cöù ng m aø ta coù söï ñieàu chæ nh töông ö ù ng trong phaàn meàm.

RD3/PSP3 21 RD1/PSP1 RD2/PSP2 Hình 4.8 Maïch test vi ñieàukhieånPIC16F877A v a øIC 74HC595. .

Sau ñ a ây la øchöông trình vieátcho öùngduïng naøy: ; Chöông trình 4.2.1 ;Chöông trình test IC ghi dòch 74HC595 ;--------------------------- -------------------------processor 16f877a include <p16f877a.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;--------------------------- -------------------------- ---------------- --------------------- ------------------; Khai baù obieán ;--------------------------- -------------------------- ---------------- --------------------- ------------------sendreg EQU 0X20 ; ch ö ù ad ö õlieäu caànx u aátra IC 74HC595 count EQU 0X21 ; d u ø ngñeåñeám soábit d ö õlieäuñöôïc göûira ;--------------------------- -------------------------- ---------------- --------------------- ------------------;Ñònh nghóa phaàncöùng ;--------------------------- -------------------------- ---------------- --------------------- ------------------#define data PORTB,0 #define clock PORTB,1 #define clear PORTB,2 #define latch PORTB,3 ;--------------------------- -------------------------- ---------------- --------------------- ------------------; Chöông trình chính ;--------------------------- -------------------------- ---------------- --------------------- ------------------ORG 0x000 GOTO start start ; chöông trình chính BCF STATUS,RP1 BCF STATUS,RP0 ; choïn BANK0 CLRF PORTB BSF STATUS,RP0 ; choïn BANK1 MOVLW 0xF0 ; caùcpin RB3:RB0 l a øoutput MOVWF TRISB ; caùcpin RB7:RB4 l a øinput BCF STATUS,RP0 ; choïn BANK0 MOVLW 0x04 MOVWF BCF NOP BSF MOVLW PORTB clear clear 0xCA ; ñöa pin leânm öùclogic cao ; reset d ö õlie äu trong IC 74HC595 ; clear taùcñoängcaïnh xuoáng ; ñöa pin trô ûv eàm ö ùclogic cao ; d ö õlie äu caà nñöa ra IC 74HC595

CALL BSF NOP BCF GOTO serout MOVWF MOVLW MOVWF testbit BCF BTFSC BSF BSF NOP BCF RLF MOVWF DECFSZ GOTO RETURN END

serout latch latch $ sendreg 0x08 count data sendreg,7 data clock

; goïi chöông trình con serout ; taïo caïnh döông taïi pin RCK ñ e åñöa d ö õ ; lieäura caù cpin output cu û aIC 74HC595 ; ñöa pin RCK trô ûv eàm ö ù clogic thaáp ; chöông trình bò “treo” taïi ñaây ; ñöa d ö õlieäu v aø othanh ghi sendreg ; ñeám 8 bit d ö õlieäu

; d ö õlie äu m aë cñ ò n h b aèn g0 ; sendreg,7 == 0 ?? ; neáu khoâng baèng0, set d ö õlie ä u tö ø0 -> 1 ; taïo caïnh döông taïi pin SCK ñeådò ch d ö õ ; lieäuvaøoIC 74HC595 ; ñöa pin SCK veâlaïi m öùclogic thaáp ; dòch traùithanh ghi sendreg ; giaûmbieáncount 1 ñôn v ò ; neáubieáncount chöa baèng0, tieáptuïc quaù ; trình d ò ch d ö õlieäu ; trô ûv eàchöông trình chính neáucount = 0 ; keátthuùcchöông trình

clock sendreg,0 sendreg count,1 testbit

Ñ ieåm ñaùng chuùy ù nhaát cuûa chöông trình treân laø thuaät toaù n xaù cñònh giaù trò bit dö õ lieäu caàndich vaøoIC 74HC595. Ban ñ aàuñ öô ø ngdö õlieäu(SDI) seõñö ô ïc m aëcñò nh la øm ö ù clogic 0, sau ñ o ù ta kieåm tra bit d ö õ lieä u ñ o ù (bit th öù 7 trong thanh ghi sendreg) xem coù thöïc söï baèng 0 hay khoâng.Neáu baèng 1 thì ta set ñ ö ô øng d öõlieäu leân m öùclogic 1. Nhö vaäy ta laà n löôït kieåm tra m öùc logic c uû acaùc bit dö õlieäu caàn ñöa v aøoIC 74HC595 v a ø set/clear ñöôøngd ö õ lie äu SDI töông ö ù n g v ô ù ibit döõ lieäu caàn dòch. V ieäc coønlaï i la ø taïo caïnh döông taïi pin SCK ñ e å ñöa traïng thaùilogic cuû a ñöôøng döõ SDI v aøo trong IC 74HC595. Nhö vaäy sau 8 laà n dòch, 8 bit d ö õ lieäu ch ö ù a lieäu trong thanh ghi sendreg ñaõ ñöôïc ñöa vaøothanh ghi dòch beân trong IC, v a ø ñ e å ñöa d ö õlie ä u ñ o ùra caùc pin output QH:QA, ta c hæ vieäc taïo m oät caïnh döông taïi pin RCK, d ö õ lie äu trong thanh ghi sendreg se õñöôïc theåhieänbaèngcaùctraïng thaùisaùn g/taét cuûacaùcLED gaénvaøoIC 74HC595, ta á t nh ieânvôùiñieàukieänpin phaûiñöôïc noáimass hoaëcñöôïc ñöa v eàm ö ùclogic 0. M oätñieàu caàn löu y ù n ö õ a laø caïnh taùcñoängcuûapin . Do caïnh taùcñoängcuûapin n a ø y la ø caïnh aâm neân caàn coù söï ñieàu chæ nh thích hôïp ñeå coù theå ñieàu khieån IC 74HC595 m oät caùch ñuùng ñaén.

Trong tröôøng hôïp noái nhieàu IC 74HC595 laïi vôùinhau thì thuaät toaùn hoaøn toaøn töông töï, tuy nhieân dö õ lieäu seõ laàn lö ôït ñöa vaøo thanh ghi sendreg vaø go ïi chöông trình con serout. Q uaùtrình naøy ñöôïc laëp laïi cho ñeán khi toaø n bo ä d ö õlieäu ñ aõ ñ ö ôïc ñöa vaø o caù c IC, sau ñ o ù m ô ù i ñöa d ö õlieäu ra ngoaøibaèngcaùchtaïo m oätcaïnh döông taïi pin RCK. 4.3 PIC16F877A V A Ø LED 7 ÑOAÏN LED 7 ñoaïn l a ø m oätcoâng cuï thoâng duïng ñöôïc duøngñeå hieån thò caùcthoâng soá döôùidaïng c a ù c so á tö ø0 ñeán 9. M aë c d uøc oän g cu ï LCD giuùpta theå hieän caù cthoâng soá m oätcaùchlinh ñoänghôn nhöng LED 7 ñoaïn vaãn ñöôïc s ö û duïng nhieàu trong coâng nghieäp do caùc öu th e á cu û a n o ù nhö í chòu söï aûnhhöôûngcuûanhieätñoä,deãnhaänra v aøg o ù cnhìn roäng. LED 7 ñoaïn bao goàm 7 ñoaïn LED ñöôïc ñaùnhdaáu la ø c a ù c kí töï a,b,c,d,e,f,g v a ø moät daáu chaám thaäpphaân kí h ieä u la ø dp. Nhö vaäy ta co ùth e å xem LED 7 ñoaïn laø m o ätto å hô ïp g o àm 8 LED ñöôïc b oátrí theo m oätqui taécnhaát ñònh duøngñeå h ieånth ò caù cch öõso áth aäpphaân. C o ùhai loaïi LED 7 ñoaïn, ñ o ù la ø loaïi Anode chung (cöïc Anode cu û acaù c LED ñöôïc noái chung v ô ù i nhau) v a ø loaïi Cathode chung (Cöïc Cathode cuû a caù c LED ñöôïc no ái chung v ô ù i nhau). T uøytheo töøngloaïi m aø ta c o ùtheå ñieàu khieån caùcLED trong to å hô ïp ñ o ùsaùng taétm o ätcaù ch thích hôïp. Ñ oáivôùiloaïi Anode chung, m oätLED se õ saùngneáu m öùclogic ñöa v aøopin ñieàu khieån LED ñ o ùla ø m ö ù c 0. . Ñ oáivôùiloaïi Cathode chung, m oätLED se õ saùngneáu m öùclogic ñöa vaøopin ñieàukhieånLED ñ o ùla øm ö ù c1.

Hình 4.9 LED 7 ñoaïn. Hình v e õ tre ân laø m o ät LED 7 ñoaïn loaïi Cathode chung. Thöïc ra caáu truù c caù c pin cu û a LED 7 ñoïan c o ù theå thay ñ o ái tu ø y theo loaïi ch ö ù khoâng coá ñònh, vaø caù ch duy nhaát ñeå xaùc ñònh chính x aùccaù cpin ñieàu khieån cuûa LED 7 ñoaïn la ø phaûi kieåm töøngpin cu ûaLED ñoù.D öïa vaøo tra hình v e õ ta co ù theå hieåu ñöôïc m oät phaàn naøo caùch hieån thò cuûaLED 7 ñoaïn. Ví duï, m uoán hieån thò soá 6 ta se õ cho caùcñoaïn LED a, c, d, e, g, f saù n gvaø ñoaïn LED b ta ét. Vieäc ñieàu khieån saùng taét ñöôïc thöïc hieän baèng caùch ñöa d ö õ lieäu thích hôïp vaøo caùc pin a, b, c, d, e, f, g v a ø dp cu û a LED 7 ñoaïn. Ñ o ù la ø c aùch hieån thò theo töøngLED, tuy nhieân trong thöïc teá ñeå tieát kieäm soá pin caànthieát ñeå ñieàu khieån m oätluùcnhieàu LED 7 ñoaïn, caùcpin a, b, c, d, e, f, g v a ødp seõ ñöôïc noái song song v ôù inhau, caù cpin Anode chung hoaëcCathode chung ñöôïc duøng cho pheùpLED 7 ñeå

B aèng caùch ñoù neáu ta laàn löôït cho töøngLED 7 ñoaïn saùngtrong moätkhoaûngth ô ø igian raátng aén naø oño ùthì m aétng ö ô ø iseõb ò “ ñaù nhlöø a”raèngta á tc a ûcaù cLED ñang saùngcuøngm oätluùc. e. d.G iaû söû ta n o ái caù cpin d ö õlie äu cu û aLED 7 ñoaïn vaøoPORTD cu û aPIC16F877A theo th ö ùtö ï nhö sau: Pin dp no áiv aøopin RD7 Pin g no áiv aøopin RD6 Pin f no áiv aøopin RD5 Pin e no áivaø opin RD4 Pin d no áiv aøopin RD3 Pin c no áiv aøopin RD2 Pin b no áiv aøopin RD1 Pin a no áiv aøopin RD0 C aùc pin Anode chung cu ûa LED 7 ñoaïn se õ ñöôïc no ái vaø o c pin RB0 v a ø RB1 cu ûa caù PORTB. ta seõ thöïc hieänm oätöùngduïng ñôn g ia û nlaøh ieå n th ò 2 LED 7 ñoaïn. Trong öùngduïng naøyta seõh ieå n th ò m o ä tso ác o ù2 c hö õsoátreân 2 LED. Nhö vaäy muoánñieàu khieån moät ñoaïn LED n aø oño ùsaù ng ñöa pin ñieàu khieån ñoaïn LED töông ö ù ngv eà m ö ù clogic 0.6: Hieånthò LED 7 ñoaïn. c. g v a ø dp laïi vôùinhau ñöôïc la ø d ö ïa v a ø ohieän töôïng löu aûnh cuûa aét. f. Tröôùcheát ta caàn xaùcñònh tröôùc sô ñ o àn o á ichaân giöõavi ñieàu khieån vaøcaù cLED 7 ñoaïn ñeå tö ø ño ùxaù cñò nh ñö ô ïc d ö õlieäu caàn ñöa vaøo ñeå ñieàu khieån LED 7 ñoaïn hieån thò m oätchöõsoá thaäp p haân naøo ñoù.ñoïan ñoù saùng hay taé t.M aétngöô c h æ c o ùkhaûnaêng nhaänñöôïc 24 hình aû nhtrong m øi m oätgiaây. S ô ûd ó ta no áichung c aù cpin a. Ñ eå hieåu theâm veà caùch hieån thò vaø thuaät toaùn duøngñeå hieän thò LED 7 ñaïn. ÖÙng duïng 4. V ôùicaùch noái chaân nhö vaäy ta co ù b aû n g d ö õ lie äu töông ö ù n g v ô ù icaù c chöõ soácaành ieånth ò treânLED 7 ñoaïn nhö sau: C h ö õso á 0 1 2 3 4 5 6 7 8 9 RB7 (dp) 1 1 1 1 1 1 1 1 1 1 RB6 (g) 1 1 0 0 0 0 0 1 0 0 RB5 (f) 0 1 1 1 0 0 0 1 0 0 RB4 (e) 0 1 0 1 1 1 0 1 0 1 RB3 (d) 0 1 0 0 1 0 0 1 0 0 RB2 (c) 0 0 1 0 0 0 0 0 0 0 RB1 (b) 0 0 0 0 0 1 1 0 0 0 RB0 (a) 0 1 0 0 1 0 0 0 0 0 M aõ Hex C0h F9h A4h B0h 99h 92h 82h F8h 80h 90h .do ñ o ùkhi c aù cLED 7 ñoaïn chôù ptaét v ôù im oättoácñoä qu aù nhanh nhö to á c ñ o ä tx ö ûlí cuû a m oät vi ñieàu khieån thì m aét ngöôøi khoâng coù khaû naêng phaùthieän ra. b. Loaïi LED 7 ñoaïn ta seõ sö û du ïng laø lo aïi Anode chung.

M oät giaûi phaùp ñôn g ia û n la ø sö û duïng caù c BJT hoaït ñoäng vôùichöùcnaêng nhö laø caù c coâng taéc ño ù ng m ô û ñeå cho pheùp hoaëc khoâng cho pheùp nguoàn cung caáp ñöa vaøo LED 7 ñoaïn. Ñ eán ñaây xem nhö ta ñ aõ h oaø n taát qu aù trình chuyeån ñ o å id ö õlie äu tö ø daïng thaäp phaân sang daïng m aõ cu û a LED 7 ñoaïn. Khi ñ o ùchöông trình ñöôïc vieátnhö sau: . do o ù k hoâng coù d oøng ñieän ñoå qua LED. Sô ñoà nguyeân lí cuûacaùc“coâng taéc” naøykhi duøngñeå ñieàu khieån LED 7 ñoaïn loïai Anode chung nhö sau: 5V HI 10 K RBx LO A Hình 4. V ieäc coønlaïi laø laøm sao ñ eå cho pheùp m oät LED n aø o ñ o ù trong daõy LED 7 ñoaïn m aéc song song ta ét hoaëc saùng leân.trôûkhaùngcuûaBJT xem nhö baèng0 v a øLED 7 ñoaïn xem nhö ñöôïc noáitröïc tieáp vôùinguoàn cung caáp. Khi pin ñieàu khieån ô û m öù c logic 1. m uoán hieån thò m o ät ch ö õ so á thaäp p haân naø o ño ù ra LED 7 ñoaïn. d o ø ngñ o åtö øc ö ïC E sang cöïc B cu û aBJT laømcho BJT daãnbaõo hoøa.do ñ o ùtu ø ytheo caùchkeátnoáiphaàncöùngm aøta c o ùñöôïc baûngm aõtöông öùng.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF . do VEB cu ûaBJT baèng 0 neân BJT khoâng daãn.giaù trò ñieän trôûnaøy phuï thuoäc vaøokhaûnaêng chòu doøngtoáiña cu ûaLED 7 ñoaïn.Chöông trình 4. Khi Port ñieàukhieånô û m öùclogic 0. ta ch æ vieäc ñöa m aõhex c u û ac h ö õso áñ o ùra PORTD cu û avi ñieàu khieån. Chöông trình h ieå n th ò m o ä tso ác o ùhai c h ö õso ácho tröôùcra LED 7 ñoaïn processor 16f877a include <p16f877a. caùc “coâng taéc” naøy seõ ñöôïc ñieàu khieån bôûicaùc pin trong PORTB.3.9 Sô ñ o ànguyeânlí “coângtaéc”ñieàukhieån caápnguoàncho LED 7 ñoaïn Anode chung Ta no áipin cu û aPort ñieàukhieånvaøocöïc B cu û aBJT loïai pnp thoângqua m oätñieäntrôû. V ôùiöùng duïngtreân. chaúnghaïn ta s ö ûduïng 2 pin RB0 (ñieàu khieån LED haøngñôn v ò ) v aø RB1 (ñieàu khieån LED haøngchuïc) ñeå ñieàu khieån caáp nguoàncho caùcLED. Cöïc E cu ûaBJT ñöôïc noái leân nguoàn5V v aø cöïc C ñöôïc ñöa vaøopin VCC cu ûaLED 7 ñoaïn.M oätñieåm caàn löu y ù l a ø baûng m aõ treân khoâng coá ñònh m a ø n o ù phuï thuoäc nhieàu vaøo caáu truùcphaàn cöùng cuûa m aïng ñieàukhieån.1 .D öïa vaøo baûng döõ lieäu treân.

RP0 PORTB PORTD 0x99 PORTD b'11111101' PORTB delay_1ms 0x92 PORTD b'11111110' PORTB delay_1ms loop 0x20 0x21 0x22 . choïn BANK0 . caápnguoàncho LED haøngchuïc .output .caùctham so á s ö ûduïng cho chöông trình con . caápnguoàncho LED haøngñôn vò . delay_1ms . laëplaïi caùcthao taù ctreân .output . chöông trình con delay_1ms d'1' count1 0xC7 counta 0x01 countb counta. h ieånthò soá4 .1 .count1 counta countb ORG GOTO start BCF BSF MOVLW MOVWF MOVLW MOVWF BCF CLRF CLRF loop MOVLW MOVWF MOVLW MOVWF CALL MOVLW MOVWF MOVLW MOVWF CALL GOTO delay_1ms MOVLW MOVWF d1 MOVLW MOVWF MOVLW MOVWF delay_0 DECFSZ GOTO $+2 EQU EQU EQU 0x000 start STATUS.RP0 0x00 TRISD 0x00 TRISB STATUS. PORTD <. h ieånthò soá5 . goïi chöông trình con delay_1ms . RP1 STATUS. PORTB <. choïn BANK1 . goïi chöông trình con delay_1ms .

V aø cuoái cuøng.G iaù trò cuûa chöõ soá caàn chuyeån ño åi seõ ñö ô ïc co ängvaø othanh ghi PCL ñ eåmang m aõchuyeånñoåitöông ö ù n gtö øb a û n gd ö õlie ä u trô ûveà. do d ö õlie äu trong thanh ghi ñöôïc löu döôùidaïng döõ lieäu 8 bit neân ch ö õ soá h aø ng chuïc seõ ñöôïc chöùa trong 4 bit cao v a ø c h ö õ so á h a ø ng ñôn vò seõ ñöôïc chöùa trong 4 bit thaáp.H ieän töôïng naø y c o ùth e å nhaän b ieát ro õraø n g hôn baèng caùch taêng thôøigian delay ñeán m o ätm ö ù cnaø o ño ùm aø maé t ngöôøi coù theå nhaän bieát ñöôïc. Trong ví duï treân ta töï aán ñònh chöõsoá hieån thò. do d öõlieäu ñöôïc löu döôùidaïng maõ HEX. Thöïc chaátla ø c a ù c LED seõ chôùptaét lieân tuïc m oãi k hoaûng thôøigian 1ms.1 delay_0 count1. sau ñ o ùLED khaùcñöôïc baät leân trong khoaûng thôøigian 1 ms. B aèn g c aù chño ùm u o ántaù ch4 bit thaáp. khi ñ o ù ta se õ th a á yro õra ø n gla øtö ø ngLED m oätñöôïc baättaétm oätcaùchtuaàntöï.1 d1 Nhö vaäy trong chöông trình treân.ta “AND” 4 bit cao v ô ù i0. Thao taùc naøy ñöôïc laëp ñi laëp laïi trong voønglaëp “loop”. tuy nhieân neáu chöõsoá caàn hieån thò (chöõso á haøng chuïc vaø haøng ñôn vò) ñöôïc vhöùatrong m oätthanh ghi naøoñ o ùthì se õco ùm o ätso ávaánñeàp haùtsinh nhö sau: Thöùnhaát. v aø m o ät phöông phaùp ta vaãn thöôøng söû duïng trong caù cöùng duïng tröôùc laø phöông p h aù p b aû n g d ö õ lieäu seõ tieáp tuïc ñöôïc söû duïng trong chöông trình naøy.DECFSZ GOTO DECFSZ GOTO RETURN END countb. T höùhai. B aây g iôøta thöû vieát chöông trình thöïc hieän thao taùc treân theo caù c g iaû ithu aät ñaõ ñeà ra. bao g o àm c aù cc h ö õso átö ø0 ñeán 9 v aø ca ù ckí tö ï tö ø0 ñeán A.Phöông phaùpñôn g ia û nn h a á tla øso saù n hvô ù itö øn gc hö õso áHEX v a øaù p duïng pheùp chuyeånñoåiñoáivôù itöøngtröôønghôïp. laøm sao hieån thò chöõ soá thaäp phaân treân ra LED 7 ñoaïn?? Nhö vaäy ta caàn tieán h aø nh m o ätb öô ùc nö õ alaø chuyeån ñoåitö ø m a õ thaä p phaân sang m aõ LED 7 ñoaïn. D öõlieäud aïng nhò phaânse õg iö õnguyeâng iaùtrò khi ta thöïc hieän pheùptoaùnAND v ôù i1 vaø seõ ñöôïc xoù aveà 0 neáu thöïc hieän pheùptoaùnAND v ô ùi g iaùtrò 0. nhöng do thôøigian chôùptaé t qu aùnhanh neân m aétngöôøibò “ñaùnh löøa” la ø c a û hai LED ñang saùngcuøngm oätluùc. V aäy theá naøoñeå taùchñöôïc chöõsoá haøngchuïc vaø haø n gñôn vò chöùatrong thanh ghi?? laøm M oätthuaättoaùnñôn g ia û nla øsö ûduïng pheùptoaùnAND. 4 bit thaápv ôù i1 v a øngöôïc laïi ñoáiv ôùitröôønghôïp caàntaùch4 bit cao. Töông töï ta coù theå m ôû roäng soá löôïng LED baèng caùch noái song song taát caû ch u ù ng laïi v ô ù inhau v a øa ù pduïng thuaättoaùntreânñeå hieånthò. Chöông trình se õñöôïc vieátnhö sau: . B aây g iôøta thöû giaûiquyeát m oättröôøng hôïp phöùctaïp hôn. m oãi LED 7 ñoaïn se õ laà n löôït ñöôïc baät saùng trong khoaûng thôøi gian 1 ms. V aäy laøm theá naø o ñeå chuyeån ñ oåid ö õ lieäu ø daïng m aõ HEX veà daïng tö thaäp phaân?? ( caàn löu y ù l a ø taäp leänh daønh cho PIC k hoâng coù pheùp toaùn chia laáy phaàn dö hay phaànnguyeân DIV v a øMOD cuõngnhö caùcpheùptoaù n so saùnh).

RP1 STATUS. ta é tta á tc a ûc a ù cLED 0x20 0x21 0x22 0X23 0X24 0X25 0x26 0X27 . choïn BANK1 .RP0 0x00 TRISD 0x00 TRISB STATUS.0 hang_chuc hang_chuc. chöùahaøngñôn vò cu û athanh ghi . duøngcho chöông trình delay_1ms .inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF count1 counta countb display_reg hang_chuc hang_don_vi xx xx1 ORG GOTO start BCF BSF MOVLW MOVWF MOVLW MOVWF BCF MOVLW MOVWF CLRF MOVLW MOVWF ANDLW MOVWF MOVLW ANDWF MOVWF SWAPF STATUS.output . duøngcho chöông trình con “chuyen_ma” . chöùagiaùtrò caànhieånthò .output . choïn BANK0 . PORTD <. duøngcho chöông trình delay_1ms . duøngcho chöông trình delay_1ms . Chöông trình h ieå n th ò so ác oùhai ch ö õsoáñö ô ïc löu trong m oätthanh ghi processor 16f877a include <p16f877a.2 . display_reg . taù chch ö õsoáh aø ngchuïc . taù chch ö õsoáh aø ngñôn vò . PORTB <.1 EQU EQU EQU EQU EQU EQU EQU EQU 0x000 start . giaùtrò caànhieånthò . baétñaàuchöông trinh( . Chöông trình 4.RP0 b'11111111' PORTB PORTD 0X5F display_reg 0x0F hang_don_vi 0xF0 display_reg. chöùahaøngchuïc cuûathanh ghi display_reg .3..

löu so áca ànchuyeånñoåivaøothanh ghi xx . tieáptuïc so saù nhvôù i1 .0 chuyen_ma hang_chuc hang_don_vi. chöông trình con chuyeåntö øm a õHEX sang .0 STATUS.MOVF CALL MOVWF BTFSC INCF MOVF CALL MOVWF Loop MOVF CALL MOVWF MOVLW MOVWF CALL MOVF CALL MOVWF MOVLW MOVWF CALL GOTO chuyen_ma MOVWF MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW hang_don_vi. daïng m aõthaäpphaân . neáukhoângtieáptuïc chuyeånm a õc h ö õso á . goïi chöông trình con duøngñeå chuyeåntö ø . neáu ñuùng.0 chuyenma hang_don_vi xx1. lô ù nhôn 10 hay khoâng .1 hang_chuc. so átieáptheo . so saù n hv ô ù iso á0 .0 STATUS. neáu khoâng baèng0. m aõHEX sang m aõthaäpphaân . n h aûytô ù ilabel “nho_hon_10” . löu laïi giaùtrò sau khi chuyeånñoåi . tieáptuïc tieánhaønhso saù nhvô ù i caùch öõ c . kieåmtra xem g iaù trò chuyeånñoåicoù caàn .Z nho_hon_10 0x01 xx. löu g iaùtrò sau khi chuyeånñoåi . neáubaèng0. ñoaïn chöông trình hieånthò keátquaû . haøngchuïc . taênghaøngchuïc 1 ñôn vò .0 hang_chuc.0 table PORTD b'11111101' PORTB delay_1ms loop .0 table PORTD b'11111110' PORTB delay_1ms hang_chuc.Z nho_hon_10 0x02 . chuyeånñoåira LED 7 ñoaïn xx 0x00 xx.

Z nho_hon_10 0x05 xx.0 .Z nho_hon_10 0x03 xx.Z nho_hon_10 0x07 xx.0 STATUS.0 STATUS.Z nho_hon_10 0x09 xx.0 STATUS.Z nho_hon_10 0x04 xx.0 STATUS.0 STATUS.Z nho_hon_10 0x06 xx.0 STATUS.XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF xx.0 STATUS.Z nho_hon_10 0x08 xx.Z nho_hon_10 0x0A xx.0 STATUS.

Z bang_11 0x0C xx.BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO nho_hon_10 MOVLW MOVWF MOVF RETURN bang_10 MOVLW MOVWF RETLW bang_11 MOVLW MOVWF STATUS.Z bang_12 0x0D xx.0 STATUS. bit 0 cu ûathanh ghi xx1 mang g iaùtrò 1 .0 STATUS. trô ûv eàchöông trình chính . x ö ûlí tröôønghôïp nhoûhôn 10 .0 STATUS. mang g iaùtrò chuyeånñoåitöông ö ù n gtrô ûv eà .0 STATUS. thao taù ctöông töï vôùicaùctröôønghôïp coønlaïi 0x01 xx1 0x00 0x01 xx1 .Z bang_13 0x0E xx. löu g iaùtrò sau chuyeånñoåichöùatrong . thanh ghi xx v aøothanh ghi W .0 STATUS.Z bang_10 0x0B xx.Z bang_15 0x00 xx1 xx.0 . ñeåbaùohieäucaàntaênggiaùtrò haøngtieáptheo . bit 0 cu ûathanh ghi xx1 mang g iaùtrò 0 .Z bang_14 0x0F xx. chöông trình chính thoângqua thanh ghi W .

chöông trình con taïo thôøigian delay 1ms . sang m aõLED 7 ñoaïn . tra b aû n gd ö õlie äu ñ e åchuyeånñoåitö øm a õth a ä pphaân .1 .RETLW bang_12 MOVLW MOVWF RETLW bang_13 MOVLW MOVWF RETLW bang_14 MOVLW MOVWF RETLW bang_15 MOVLW MOVWF RETLW Table ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW delay_1ms MOVLW MOVWF d1 MOVLW MOVWF MOVLW MOVWF delay_0 DECFSZ GOTO $+2 DECFSZ 0x01 0x01 xx1 0x02 0x01 xx1 0x03 0x01 xx1 0x04 0x01 xx1 0x05 PCL.1 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8 0x80 0x90 d'1' count1 0xC7 counta 0x01 countb counta.1 countb.

ñaëc bieät la øc a ù cö ù n g duïng caàn hieån thò keátquaûdöôùidaïng soá. T ö ø ví duï thöïc teá treân ta co ù th eå lieân tö ô û ng ñeán ng aét v aø caù ch x ö û lí ngaétcuûam oätvi ñieàu khieån. 4. Nhö vaäy trong muïc naøy ta ñ a õ thöïc hieän ñöôïc m o ät so á thao taùc. C oângvieäccoønlaïi l a øchuyeånño åit ö øsoá thaäpp h aân sang m aõLED 7 ñoaïn thoângqua b aû ng d ö õlieäu v aøhieån th ò k eátqu aû ra caù cLED.ñoâikhi ta phaûitaïm ngöng m oätcoâng vieäc naøo ñoù ñeå laøm m oätcoâng vieäc khaùccaàn thieát hôn. T ö øc a ù c thao ta ù ccô b aûnnaøyta c o ùtheå phaùttrieån thaønhnhieàu öùngduïng phöùctaïp hôn cho vi ñieàu khieån khi laøm vieäc vôù iLED 7 ñoaïn. ta laàn löôït so saùnh giaù trò sau khi ta ù c h tö ø thanh ghi “díplay_reg” thaønh haøng chuïc (chöùa trong thanh ghi “hang_chuc”) v aø haø n g ñôn vò (chöùa trong thanh ghi “hang_don_vi”) so saù n h v ô ù itö ø n g g iaù trò tö ø 0 ñeán 15. töø m aõ th aäp p h aân sang m aõ LED 7 ñoaïn vaø caùch taùch chöõso á haøng chuïc vaø haøng ñôn vò chöùatrong m oät thanh ghi baát kì. M oätngaét la ø m o ä t tín hieäu ñieàu khieån baét buoäcvi ñieàu khieån taïm ngöng coâng vieäc ñang laøm ñeå tieán haønh caùcthao taù cm aø n g aé t ñ o ùqui ñònh thoâng qua chöông trình ngaét. N eáu soá caàn chuyeån maõ nh o û hôn 10. chöông trình vaø giaû i thu aät cô baû nño áiv ôù iLED 7 ñoaïn vaø caùchhieån thò treân LED. N eáu soá caàn chuyeån m a õc o ùg iaùtrò lô ù nhôn hoaëcbaèng 10.GOTO delay_0 DECFSZ count1. Söï taïm ngöng naøy caàn ñöôïc baùo hieäu bôûim oät tín hieäu (trong tröôøng hôïp treâ n la ø chuoâng ñieän thoaïi chaúnghaïn) vaøp haû iñö ô ïc ta cho pheùptröôùcñ où(n eáu ta khoângcho pheùp ñieän thoaïi reo thì ñieän thoaïi seõ khoâng reo).1 GOTO d1 RETURN END Trong chöông trình con “chuyen_ma”. C o ùtheå no ù iñaây laø m o ätk haù inieäm mang tính trö ø u töôïng cao nhöng cuõngñöôïc thieát laäp döïa treân caùc hieän töôïng vaø tình hu oáng coù thöïc trong thöïc teá. ta ch æ v ieäc g iö õ nguyeân g iaù trò v aø trô û v e à chöông trình chính. C aùcthao taù cbao goàm caùchhình thaønh baûng döõ lieäu. C aùc giaûi thuaät bao goàm caùccaùch chuyeån ñoåi tö ø m a õ HEX sang m aõ th aäp p h aân.4 N GA ÉT A Ø A Á U R U Ù C C U Û A Ä T V C T M O CHÖÔNG TRÌNH N GA ÉT N g aétv aø caù clo aïi ng aétñaõ ñö ô ïc trình baøycuï theå trong chöông 2. ta ñöa gia ù trò caàn chuyeån vaøothanh ghi W thoângqua leänh RETLW vaøthieát laäp m oät“côø hieäu ” naøoñoùdo ta töï taïo ñeå baùo hieäu raèng chöõsoá caàn chuyeån ñ o å ico ùg ia ùtrò lô ù nhôn 10 (ô ûñ a â y la øbit 0 chöùatrong thanh ghi “xx1” ñe å b aù ohieäu raèng caàn taêng giaù trò haøng tieáp theo leân 1 ñôn vò). Ta se õtieápbaønkó ñeáncaùcöùngduïng naøytrong phaàntieáptheo khi ñeàcaäpñeáncaùcTIMER. Chöông trình chính s e õ c o ù ñoaïn chöông trình x ö û lí “ côø hieäu” naø yñeåcho ra caù cchöõsoáthaäpphaân thích h ôïp ö ùngv ôù icaù cc hö õso áHEX. chaúnghaïn nhö taïm ngöng m oätcoâng vieäc naøo ñoù ñang laø m ñeå nghe ñieän thoaïi. Chaúnghaïn nhö trong cuoäcsoáng haèng ngaøy. Tín hieäu ñieàu khieån naø y ñöôïc baùohieäu bôûicôøngaét (töông öùngvôùichuoâng ñieän . Ô Ûñaây ta ch æ to ù mtaétlaïi m o ätso áñaëcñieåmquan troïng cuûangaétvaøtho ân gtin mang tính öù ngduïng.caùch keát no ái LED 7 ñoaïn vaø phöông phaùp hieån thò.

1 #DEFINE DEN3 PORTB.----------------------. M oätñieåm caàn y ù n ö õ a la ø trong quaù trình thöïc hieän chöông trình ngaét.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .--------------------.----------------. Ñònh nghóa phaàncöùng .---------------.-------------------------. ta chæ v ieäc ñöa chöông trình ng aét vaø chöông trình chính v aøo caù c v ò trí thích hôïp ñöôïc chuù thích trong chöông trình.------------------TITLE "teân chöông trình" processor 16f877a include <p16f877a.--------------------------.--------------------. ñònh nghóa c aù cc h a â nx u a átn h a ä pñ eåd eãd a ø ngsöûduïng .-------------------------. N eáu söû duïng trình bieân dòch MPLAB.------------------.-------------------------. trình bieân dòch se õ b aù o lo ã i khi hieän töôïng treân xaûy ra v a ø ta c o ù theå khaécp huïc baèngcaùchdôøichöông trình chính ñi moätñoaïn xa hôn. Do ñ o ù trö ô ù c khi thöïc hieän chöông trình ngaét ta caàn thöïc hieän m oätthao ta ù c la ø “caát” m oätsoá thanh ghi quan troïng vaøom oätvaøio â n h ô ùn aø oñ o ùv aø p h aû i traû laïi g iaùtrò ban ñaà u cho caùcthanh ghi ñ o ùtrö ô ù c khi thoaùtkhoûichöông trình ngaétbaèngleänhRETFIE. M o ätsoátho ângtin caànghi ch u ùv e àchöông trình . ví duï #DEFINE DEN1 PORTB.-------------------------. khi m oät nga é t (ñaõ ñöôïc cho pheùp tröôùcñoù)xaûy ra thì “phaûnöùng” c u û a n o ùla øquay v e à ñòa ch æ 0004h v aøthöïc hieän caù cleänh baétñaàu taïi ñòa chæ naøy . Ñ o áivô ù ivi ñieàu khieån PIC16F877A.--------------------------. noäi dung cu û a löu m o ät so á thanh ghi quan troïng coù khaû naêng bò thay ño åi (thanh ghi W chaúng haïn).2 .--------------------.0 #DEFINE DEN2 PORTB. T hoângthöôøngñoáiv ôùichöông trình vieátcho vi ñieàu khieånPIC.----------------. Ví duï veàcaùchkhai baùom oätvi ñieàukhieån . chöông trình ng aétseõñöôïc ñaëttaïi ñaây v aøchöông trình chính se õ ñöôïc baét ñaàu û m o ätñò a ch æ caù ch ñom o ätñoaïn “an toaøn” sao cho ô ù chöông trình chính v a ø chöông trình ngaét khoâng bi choàng leân nhau. M oät chöông trình ngaét thoâng thöôøng seõ ñöôïc taùch rieâng vôùi chöông trình chính ñeåbaû oñaû mtính ño äclaäpcu ûachöông trình ngaét.------------------------.---------------.----------------------. caáu truùc chöông trình naøy ñaõ ñöôïc vieát saün.------------------------. N eáu ta söû duïng trình bieân dòch MPLAB.--------------------.thoaïi ô û ví duï treân) vaø phaûiñöôïc ta cho pheùp tröôùcñoù thoâng qua caùcbit ñieàu khieån cho pheùp hoaëc khoâng cho pheùp ngaét. tuy nhieân döïa vaøocaùcnhaän ñònh nhö treân ta hoaøn toaøncoù theå töï ñònh ra m o ä tc a â u tr u ù cchöông trình cho rieângmình nhö sau: ù .

--------------------------.----------------------.-------------------. Ñoaïn chöông trình b aétb u oäcvaøkhoâng ñöôïc thay ño åi .--------------------------. b a étñ a à ula ø0x21 .--------------------------.--------------------.----------------. ví duï ORG 0x020 . khoûichöông trình ngaét . STATUS = 0 MOVF PCLATH.caùcthanh ghi caù ctham so á .--------------------------.------------------.--------------------------.----------------------. N eáuthay ño åichöông trình se õchaïy khoângñuùng ORG 0X0004 .--------------------------.W MOVWF PCH_SV .-------------------------. PCLATH = 0 MOVF FSR.---------------. PCH_SV = PCLATH CLRF PCLATH .------------------.-------------------------. B aétñaàuchöông trình ngaét . c o ùta ù cduïng löu laïi m o ätsoáthanh ghi quan troïng .------------------.--------------------. STAT_SV = swap_nibbles( STATUS ) .---------------.----------------------.------------------.--------------------.--------------------. 12 cycles from interrupt to here! .W MOVWF FSR_SV . b ieá n n a ø yc o ùñ o älô ù n32 byte.---------------. force bank 0 for remainder of handler MOVWF STAT_SV . Chöông trình ngaét . Ñoaïn chöông trình ngaétbaétñaàutaïi ñaây .---------------MOVWF W_SAVE . Kieåmtra xem ng aétn aøoñ aõx aû yra REGAD1 RES 1 .------------------.-------------------------.-------------------------.---------------. C huùy ùl a øtuyeätñoáikhoângthay ñoåicaáutruùcñoaïn chöông trình b aétñaàuv aøth o aù tra .. ñòa chæ . ñòa chæ .W CLRF STATUS . FSR_SV = FSR . Ñ ònh nghóa caùcbieán.-------------------.-------------------------.----------------------.N e ânñ aëttaátc aûc aù cbieán trong BANK0 . b a ét ñ a à u la ø0x20 Variables RES 32 .--------------------------.-------------------------. W_SAVE(bank unknown!) = W SWAPF STATUS. b ieá n n a ø yc o ùñ o älô ù n1 byte.--------------------.-------------------------.-------------------------.---------------.---------------.------------------------.

-------------------------. PW M ..----------------.------------------ORG 0X0000 GOTO START ORG 0X0050 .---------------. X où ac ô øng a éttrö ô ù ckhi thöïc hieäncaùcleänhtrong ngaét .-------------------------.------------------.--------------------------.---------------. PCLATH = PCH_SV . B aétñaàuvoønglaëpchính MAIN .---------------.--------------------------. K hôûitaïo caùckhoáichöùcnaêng(Timer. C aùcthao taù ctrong voønglaëpchính END .------------------.… … ) . 1 cycle to resumption of code (branch penalty) .----------------. W = swap(swap( W_SAVE )) (no change Z bit) . Phaûicaùchra m oätñoaïn ñeåtraùnhñeøleânchöông trình ngaét START .--------------------.--------------------------.---------------ENDINT MOVF MOVWF MOVF MOVWF SWAPF MOVWF SWAPF SWAPF RETFIE FSR_SV. C aùcchöông trình con . B aétñaàucaùcleänhcho chöông trình ngaét .-------------------------. CCP.W PCLATH STAT_SV. c o ùta ù cduïng phuïc hoàigiaùtrò ban ñaàucho m o ätso áthanh ghi quan troïng .--------------------------.--------------------.W STATUS W_SAVE.-------------------------.---------------. FSR = FSR_SV .-------------------------. K eátthuùcchöông trình ngaét . C haám döùtchöông trình ngaét . STATUS = swap_nibbles( STAT_SV ) .W FSR PCH_SV.F W_SAVE.--------------------.--------------------------.-------------------------.------------------. Ñoaïn chöông trình b aétb u oäcvaøkhoâng ñöôïc thay ño åi .----------------------. B aétñaàucaùcböôùckhôûitaïo cho to aønb oächöông trình .--------------------------. K hôûitaïo caùcbieán . K hôûitao cac PORT .W .--------------------.----------------------. RETURN! .---------------.

bao goàm thao taù c k hô û i taïo v a ø x ö û lí ngaét. Beân caïnh ñoù caùchthieát laäp caùc cheá ñoä hoaït ñoäng ñoái vôùim oãi Timer cuõng khaùc nhau.7: H ieånthò caùcgiaùtrò ñònh thôøicuûaTimer ra LED 7 ñoaïn. ta c oùth eåx aù cñ ò n h m o ä tc a ù c htöông ño áichính xaù cthôøigian thöïc. Ta caàn xem laïi caáu truùc m oät chöông trình ngaét ñöôïc trình b a ø y ô û phaàn tröôùc ñeå quaù trình vieát chöông trình cho Timer trô û neân thuaän lôïi hôn.Ñ eåcuï theåhôn ta se õ ñi saâuvaøoöùngduïng sau: ÖÙng duïng 4.6 veà hieån thò treân LED 7 ñoaïn. 4. chu kì leän h vaø caù c gia ù trò ñònh tröôùcñöôïc ñöa vaøo c a ù thanh ghi chöù a giaù trò ñeám c cuûacaùcTimer. tö ø y ñ o ùa á nñònh caùc ta ù ctöông öù n gño áiv ô ùihieän töôïng ñoù. Ö Ù ng duïng naøy ñöôïc phaùttrieån döïa treân öùng duïng 4. postscaler.5.1 TIMER V A Ø O A Ñ O Ä N G Ò N HTH Ô Ø I H ÏT Ñ Trong phaàn naøy ta seõ laøm b öôùc ñaàu laøm quen v ô ù i caù c Timer cuû a vi ñieàu khieån PIC16F877A v a ø c aù c thao ta ù c cô b aû n ño ái v ô ùicaù c Timer. G iaù trò ñeám chöùa trong thanh ghi cu û ac aù cTimer seõ taên g tuaàn töï sau m oätkhoaûng thôøigian tuaàn töï ñöôïc ñònh tröôùcdöïa vaøocaùcthoâng so á c u û aprescaler. Taùcduïng ñeám (Counting): caù cTimer seõ la á y xung ñeám tö ø beân ngoaø Caùcxung i. Trong öùng duïng naøyta seõ du ø ngcaù cTimer ñeå hieån thò caùc ù trò taêng daàn töø0 ñeán 99 sau m oätkhoaûng thôøi gia . ngoaøi ra c o ù th e å tham khaûo theâm m o ät soá taø i lieäu cu ûa nh aø saû n xu aát Microchip ñeåbieáttheâmchi tieát. V aán ñeà naø y seõ ñöôïc trình baøy cuï theå trong töøng chöông trình öù ng duïng. thao Thoâng thöôøng caùc thao taù c ñ o ái v ô ù iTimer döïa v aøo caù c ng aét v aø chöông trình ngaét.ta co ùtheå x aù cñò nh ñö ô ïc so á laàn m oäthieän töôïng n aø oñ o ù x aû ra. M oãi Timer c o ùm oätcaáu tru ù cv a øchöùcnaêng rieâng tuøy thuoäcvaøom uïc ñích s ö ûduïng.So v ô ù icaù cchöông trình tröôùcñaây thì b aétñaà u t ö ø giai ñoaïn naøy. ñeá m n aø y co ù ta ù c duïng phaûn aùnh m oät hieän töôïng naø o ñ où töø th eá g iôù ib eân n g o aøi vaø th oân g qua vieäc ñeám caùcxung clock ñ o ù . D aây cu õ n g laø lí do taï i sao ta n o ù iTimer co ùtaù cd uïng ñò nh thô ø ivì döïa v aøog iaùtrò ñeám cu û acaùcTimer.Tuy nhieân ta do seõ deã d aøn g laø m quen vôùicaáu tru ù c m ô ù inaø y sau m o ät v aø ichöông trình ñôn giaûn co ù lieân quan ñeánngaét. 4. C oùtheå phaân chia m oätcaùchtöông ñoáim uïc ñích s ö ûduïng cuûam oätTimer nhö sau: Taùc duïng ñònh thôøi(Timing): caù c Timer seõ sö û d uïng xung clock ñoàng boä ñöôïc cung caáp b ôû i oscillator cu ûa vi ñieàu k h ieån ho aëc töø m o ät oscillator coá ñònh RC0/T1OSO/T1CKI v a ø RC1/T1OSICCP2 ñ o á i v ô ù iTimer1.c a ù chöông trình seõ trô û c neân p h öù ctaïp hôn veà caáu tru ù ccu õngnhö chöùc naêng co ùth eâm chöông trình ngaét.Ta seõb aétñ aàuv ô ù iTimer v aøc a ù cngaét cu û aTimer.6 ta ñ a õ la ø m quen v ô ù icaù c thao taù c cô b aûn ño ái v ô ùiLED 7 ñoaïn.5 TIMER V A Ø Ù N G Ö DUÏNG Nhö ta ñaõ bieát PIC16F877A c o ù 3 b o ä ñònh th ô ø i la ø Timer0. Timer1 v a ø Timer2. Ô Û öùng duïng 4.

--------------------.-----------------.--------------------.-------------------------. Khai baù ovi ñieàukhieån . Tröôùctieân ta s e õ s ö ûduïng Timer0 cho öùng duïng treânv a øchöông trình cuï theånhö sau: .---------------.---------------.--------------------------.---------------. C aùcthanh ghi d u ø ngñeåcaátcaù c PCLATH_save EQU 0x26 . C aáu tru ù cphaàn cöùngvaãn khoâng coùgì thay ñoåi. Ta se õ k h ô û i taïo Timer ñ e å hình thaønh thôøi gian delay c o á ñònh.--------------------.1 .-------------------------.--------------------. T röôù c heát laø g iaû ithuaät cho ö ù ng duïng treân. C aùcthanh ghi chöùagiaùtrò caàn . chöông trình ngaét coù nhieäm vuï caäp nhaät giaù trò ñeám m oãi khi ngaét xaûy ra.----------------. chöông trình ngaét FSR_save EQU 0x28 .inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .5.tuy nhieânveàchöông trình s e õc o ùnhöõngthay ñoåiñaùngkeå.--------------------.-----------------processor 16f877a include <p16f877a. Chöông trình 4. C aùcthanh ghi s ö ûduïng cho chöông counta EQU 0x21 .--------------------------.-------------------------. Ghi ch u ùv eàchöông trình . Thôøigian delay seõ k eá t th uù cbaèng m oättín h ie ä u tö ø n g a é t Timer. Timer s ö ûduïng: Timer2 .---------------. hieånthò ra LED 7 ñoaïn W_save EQU 0x25 . Khai baù obieán .---------------. thanh ghi quan troïng khi thöc thi STATUS_save EQU 0x27 .------------------.--------------------------.-------------------------.--------------------.---------------.-------------------------. Chöông trình h ieånth ò so áñeám treânhai LED 7 ñoaïn theo th ö ùtö ï taêngdaàn . chöông trình chính co ù taù c du ïng h ieån th ò caù cg iaùtrò ñaõ ñö ô ïc caäp nh aätra LED 7 ñoaïn.gian ñònh tröôùctreân 2 LED haøngchuïc vaø haøngñôn vò.--------------------------.--------------------------.------------------ORG 0x0004 GOTO ISR ISR .----------------.-----------------count1 EQU 0x20 . -------------------------.-------------------------.--------------------. Chöông trình ngaét .-------------------------.-------------------------.---------------.--------------------------.--------------------. trình delay countb EQU 0x22 hang_don_vi hang_chuc EQU EQU 0x23 0x24 .--------------------------.---------------.-----------------.

W CLRF STATUS MOVWF STATUS_save MOVF PCLATH.--------------------------.W MOVWF PCLATH_save CLRF PCLATH MOVF FSR. thoaùtchöông trình ngaétneáuchöa baèng10 CLRF hang_chuc . cho pheùpnhaänbieátthôøiñieåmtieáptheo .------------------INCF hang_don_vi.--------------------------.TMR0IF .---------------.0 . baétñaàuñeám .-------------------------.-------------------------.----------------------.------------------.---------------exit_int BCF INTCON. xoùahaøngñôn vò INCF hang_chuc.--------------------------.------------------.---------------.Z GOTO exit_int .0 .-------------------------. xaûyra ngaét . Kieåmtra c ô øn g a étTimer0 .-------------------------. Ñoaïn chöông trình baétbuoäcñaàuchöông trình ngaét .---------------. so saùnhhaøngchuïc vôùi10 BTFSS STATUS. neáubaèng10.-------------------------.--------------------.-------------------------. so saùnhhaøngñôn vò v ô ùi10 BTFSS STATUS. taênghaøngñôn vò MOVLW 0x0A XORWF hang_don_vi. thoaùtchöông trình ngaétneáuchöa baèng10 CLRF hang_don_vi . n eá u c ô øng a étñ a õñöôïc set. chöông trình ngaét . C aùcthao ta ù cchính cu ûachöông trình ngaét .---------------.Z GOTO exit_int .--------------------.--------------------------.------------------.1 . thoaùtchöông trình ngaét . thoaùtkhoûi .--------------------.-----------------MOVWF W_save SWAPF STATUS.--------------------------. neáubaèng10. la ïi tö øg ia ùtrò 00 GOTO exit_int . Ñoaïn chöông trình baétbuoäctröôùckhi thoaùtkhoûichöông trình ngaét .-----------------. N eá u c ô øn g a étchöa ñöôïc set.--------------------------.W MOVWF FSR_save BTFSS GOTO INTCON.--------------------.---------------. taênghaøngchuïc MOVLW 0x0A XORWF hang_chuc.TMR0IF exit_int .1 .. x o ù acô øngaétñeå . xoùahaøngchuïc.----------------------.

W MOVWF FSR MOVF PCLATH_save. Khôûitaïo Timer0 .output . PORTB<1:0> <. K hôûitaïo caùcPORT .------------------------.RP0 . K eátthuùcchöông trình ngaét .------------------------. choïn BANK0 . choïn BANK0 CLRF PORTD MOVLW b'00000011' MOVWF PORTB .-------------------------.-------------------------. xoù athanh ghi INTCON .--------------------.----------------.------------------------.-------------------.------------------------. xoù athanh ghi TMR0 .--------------------.----------------------.RP1 BSF STATUS.1 SWAPF W_save. taétcaù cLED haø n gch uïc v aøhaø n gñôn vò .----------------.-------------------------.----------------------.W MOVWF PCLATH SWAPF STATUS_save.----------------------.----------------------.RP0 .-------------------.-------------------. B aétñaàuchöông trình chính .----------------start .output .RP0 .-------------------.-------------------BCF STATUS. Choïn BANK1 MOVLW MOVWF MOVLW MOVWF BCF 0x00 TRISD b'11111100' TRISB STATUS.--------------------.--------------------.W MOVWF STATUS SWAPF W_save.-------------------------.MOVF FSR_save.-------------------CLRF TMR0 CLRF INTCON BSF STATUS.0 RETFIE .----------------ORG 0x0000 GOTO start ORG 0x050 .------------------------. PORTD <.------------------------.

--------------------CLRF hang_chuc CLRF hang_don_vi . V oønglaëpchính . cho pheùpngaétTimer0 .RP0 BSF INTCON. Chöông trình con hieånthò caùcgiaùtrò chöùatrong c aù cthanh ghi hang_chuc v a øhang_don_vi ra .---------------. goïi chöông trình con GOTO main .------------------------.--------------------main CALL hien_thi .--------------------. hieånthò LED haøngñôn v ò CALL table MOVWF PORTD MOVLW b'11111110' MOVWF PORTB CALL delay_1ms RETURN .----------------hien_thi MOVF hang_chuc. hieånthò LED haøngchuïc CALL table MOVWF PORTD MOVLW b'11111101' MOVWF PORTB CALL delay_1ms MOVF hang_don_vi.------------------. taétchöù cnaêngñieäntrôûkeùoleânô ûPORTB. cho pheùpngaétngoaïi vi . c aù cLED haø ngch uïc v aøLED haøngñôn v ò .------------------------. ta à nso áprescaler l a ø1:4 .0 .--------------------------.-------------------------.------------------------.----------------. cho pheù p toaøn caù cngaét boä .--------------------.----------------------.TMR0IE BSF INTCON. choïn xung ñ e á m la øxung leänh. . keátthuùcchöông trình con hien_thi .--------------------------.--------------------- .0 .--------------------.MOVLW MOVWF b'10000001' OPTION_REG BCF STATUS.--------------------.------------------------.-------------------------.gaùn . choïn BANK0 .------------------. K hôûitaïo caùcbieán . prescaler cho Timer0 v aøcho ïn tæ s o áchia .--------------------.------------------------.--------------------.PEIE BSF INTCON. C aùcchöông trình con duøngcho chöông trình con hien_thi .------------------------.---------------.GIE .--------------------.----------------------.

ta chæ vieäc döïa theo “söôøn baøi” co ù saü n ñ o ù v aø th e âm v aø o caù c th o ân g so á thích hôïp ñaët vaøo caù cthanh ghi ñieàu khieån (ñoái vôùiTimer0 la ø c a ù c thanh ghi OPTION_REG.6. V ôù ichöông trình treân. do ñ o ùv a à n ñ eà c o ø nla ïi c h æ la ø c aùc vaán ñeà lieân quan ñeán Timer0. LED 7 ñoaïn d'1' count1 0xC7 counta 0x01 countb . m oãi laàn ngaét Timer0 xaû y ra. vi ñieàu k h ieån seõ töø vo ø ng laëp cu ûa chöông trình chính quay trô û v eà chöông trình ngaét. b aû n gd ö õlieäuchuyeåntö øm aõthaäpphaânsang m aõ . thanh ghi INTCON vaø thanh ghi TMR0) ñeå k hô û itaïo caù cñieàu kieän ban ñaàucho Timer0 sao cho phuøhôïp vôùim uïc ñích s ö ûduïng. C aùcböôùckhôûitaïo Timer0 ñaõ ñö ô ïc ñeà caäp cu ï theå trong caù ctaø ilieäu cu û a nh aø saû n xuaá t . chöông trình keátthuùc taïi ñaây Ta nhaän thaáy raèng caáu truùc chöông trình treân hoaøn toaøn töông tö ï nhö caáu tru ù c cuû a chöông trình maãu.1 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8 0x80 0x90 .1 $+2 countb.table ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW delay_1ms MOVLW MOVWF d2 MOVLW MOVWF MOVLW MOVWF delay_1 DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETURN END PCL. chöông trình con taïo thôøigian delay 1 ms counta.1 delay_1 count1. caùcgiaûithuaát veà hieån thò LED ñaõ ñöôïc ñeà caäp cu ï theå ô û öùngduïng 4.1 d2 . Chöông trình ngaét seõ thöïc hieän coâng vieäc taêng giaù trò ñeám m oätcaùch thích hôïp ô û c a ù c thanh ghi hang_chuc v a ø thanh ghi hang_don_vi. .

Söï thay ño åiduy nhaátso v ô ù ichöông trình treân l a ø ô û caùc böôùc khôûitaïo. Nhö vaäyng aétseõx aû yra sau m oãiquaõngthôøigian (256*4 uS) = 1024 uS (Timer0 la øb o äñ e á m 8 bit v a øngaé txaû yra khi TMR0 bò traøn).--------------------------. Khi qu aù trình caäp nhaät giaù trò ñeám keát thuùc. -------------------------.--------------------.2 . Khai baù ovi ñieàukhieån .--------------------.gia ù trò ñeám seõ ñöôïc löu tröïc tieáp döôùidaïng m aõ thaäp phaân neân ta khoâng caàn phaû i chuyeån ñoåi tö ø maõ HEX sang m aõ thaäp phaân.--------------------.-------------------------.--------------------.Thuaättoaùndaønh cho chöông trình ngaét cuõngtöông ño áiñôn giaûn.--------------------.--------------------------. B aây g iôø ta th ö û tính thôøi gian ñònh thôøi do Timer0 taïo ra. Ghi ch u ùv eàchöông trình . Söï thay ño åi th ô ø igian ñònh thôøi khi ta thay ñ o å itæ s o áchia cu û aprescaler la øtöông ñ o á iro õraøng.5. Do ta khôûitaïo Timer0 s ö û duïng xung ñeám l a ø xung leänh neân m oãi xung co ù thôøigian la ø 1 uS (ño ái v ô ù ioscillator 4 MHz). xung leänh ñöôïc chia 4 b ô û iprescaler neân g iaù trò cu ûathanh ghi TMR0 seõ taêng leân 1 ñôn vò sau khoaûngthôøigian (4*1 uS) = 4 uS. Khai baù obieán .vi ñieàu khieån quay trôû veà v oø n g laë p chính vaøtieáptu ïc q uaùtrình h ie ån th ò caù cg iaùtrò ñaõñöôïc caäp n h a ä ttö øchöông trình ngaét.---------------. C aù c b ö ô ù ck h ô û itaïo co ùtheå ñöôïc tham khaûotrong c aù ctaøilieäu cuû anhaøsaûnxu aát.-----------------.-------------------------. Chöông trình sau c o ù ta ù cduïng nhö chöông trình 4. Timer s ö ûduïng: Timer2 .---------------.---------------. Chöông trình 4. Chöông trình h ieånth ò so áñeám treânhai LED 7 ñoaïn theo th ö ùtö ï taêngdaàn . do m oãi Timer ñeàu co ù m o ät caáu truù c v aø hoaït ñoäng ñoäc laäp vôù inhau.---------------.----------------.1 nhöng laànnaøyta s e õs ö ûduïng Timer2 laø mb o äñònh thôøi.--------------------.-----------------count1 EQU 0x20 counta EQU 0x21 countb EQU 0x22 hang_don_vi EQU 0x23 hang_chuc EQU 0x24 . .----------------.-----------------.-------------------------.---------------.-----------------processor 16f877a include <p16f877a.-------------------------.---------------.-------------------------.5. C uõngdöïa vaøo chöông trình treân ta c o ù th eå thay Timer0 baèng Timer1 hoaëc Timer2 ñeå laø m quen v ôù ic aù cTimer cu ûavi ñieàu khieån.--------------------------. D öïa vaøo chöông trình treân ta co ù th eå k ieåm tra ñöôïc taùc ñoäng cuûa prescaler baèng caùch thay ñoåi giaù trò ñöa vaøo thanh ghi OPTION_REG.--------------------------.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .-------------------------.--------------------------.

W_save PCLATH_save STATUS_save FSR_save EQU EQU EQU EQU 0x25 0x26 0x27 0x28 ORG 0x0004 GOTO ISR .-------------------------.0 STATUS.-------------------------.-----------------MOVWF W_save SWAPF STATUS.--------------------------.Z exit_int hang_don_vi hang_chuc.--------------------.---------------.0 STATUS.TMR2IF GOTO exit_int BCF INCF MOVLW XORWF BTFSS GOTO CLRF INCF MOVLW XORWF BTFSS GOTO PIR1.--------------------. Chöông trình ngaét .-------------------------.1 0x0A hang_don_vi.--------------------.--------------------------.---------------.-------------------------.--------------------------.---------------.1 0x0A hang_chuc.------------------BTFSS PIR1.------------------ISR . Ñoaïn chöông trình baétbuoäcñaàuchöông trình ngaét .W CLRF STATUS MOVWF STATUS_save MOVF PCLATH. C aùcthao ta ù cchính cu ûachöông trình ngaét .-----------------.-------------------------.------------------.Z exit_int .---------------.--------------------.--------------------------.--------------------.--------------------.TMR2IF hang_don_vi.-------------------------.------------------.W MOVWF FSR_save .---------------.---------------.W MOVWF PCLATH_save CLRF PCLATH MOVF FSR.--------------------------.--------------------------.

W MOVWF PCLATH SWAPF STATUS_save. Ñoaïn chöông trình baétbuoäctröôùckhi thoaùtkhoûichöông trình ngaét .-------------------------.----------------------.----------------------.----------------.RP0 MOVLW MOVWF MOVLW MOVWF BCF CLRF MOVLW MOVWF 0x00 TRISD b'11111100' TRISB STATUS. K eátthuùcchöông trình ngaét .-------------------.RP0 PORTD b'00000011' PORTB .------------------------.-------------------------.----------------.-------------------------.--------------------------.--------------------.------------------------.----------------ORG 0x0000 GOTO start ORG 0x050 .CLRF hang_chuc GOTO exit_int .---------------exit_int MOVF FSR_save.------------------------.1 SWAPF W_save.----------------start .0 RETFIE .-------------------------.--------------------.--------------------. K hôûitaïo caùcPORT .-------------------------.----------------------.W MOVWF STATUS SWAPF W_save.---------------.----------------------.-------------------------.RP1 BSF STATUS.------------------.--------------------------.----------------------.-------------------BCF STATUS.------------------------. B aétñaàuchöông trình chính .------------------.------------------------.------------------------.--------------------.----------------------.W MOVWF FSR MOVF PCLATH_save.

PEIE .TMR2IE STATUS.RP0 .RP0 .----------------------.------------------------. postscaler 1:16. Timer2 ON .--------------------CLRF hang_chuc CLRF hang_don_vi .------------------------.--------------------.-------------------------.------------------------. ñ a ëttrö ô ù cg ia ùtrò c a à nso ùsaù n hv ô ù ithanh ghi TMR2 .-------------------.--------------------.--------------------.-------------------MOVLW b'11111111' MOVWF T2CON BSF MOVLW MOVWF BSF BCF STATUS. Khôûitaïo Timer2 . vaøothanh ghi PR2 .GIE .----------------.----------------hien_thi MOVF hang_chuc.-------------------. cho pheùpngaétTimer2 BSF INTCON. Chöông trình con hieånthò caùcgiaùtrò chöùatrong c aù cthanh ghi hang_chuc v a øhang_don_vi ra .0 table PORTD ..-------------------. K hôûitaïo caùcbieán .--------------------main CALL hien_thi GOTO main .------------------------. cho pheù p toaøn caù cngaét boä . prescaler 1:16.0 CALL table MOVWF PORTD MOVLW b'11111101' MOVWF PORTB CALL delay_1ms MOVF CALL MOVWF hang_don_vi. V oønglaëpchính . c aù cLED haø ngch uïc v aøLED haøngñôn v ò .----------------------. cho pheùpcaùcngaétngoaïi vi BSF INTCON.------------------------.--------------------.------------------------.249 PR2 PIE1.-------------------------.

Thanh ghi ñieàu khieån Timer2 la ø thanh ghi T2CON.1 d2 Timer2 cu õ n g laø b o ä ñ e ám 8 bit ñöôïc hoã trôï theâm thanh ghi so saùnhPR2 v a ø hai b o ä chia ta à n so á postscaler prescaler giuùp ta linh ñoäng hôn trong vieäc taïo ra khoaûng thôøigian delay thích hôïp cho ö ù ngduïng.--------------------.--------------------table ADDWF PCL. Chöông trình treân khoângc o ùgì m ô ù i.--------------------.--------------------.--------------------------.---------------.1 $+2 countb.1 RETLW 0xC0 RETLW 0xF9 RETLW 0xA4 RETLW 0xB0 RETLW 0x99 RETLW 0x92 RETLW 0x82 RETLW 0xF8 RETLW 0x80 RETLW 0x90 delay_1ms MOVLW MOVWF d2 MOVLW MOVWF MOVLW MOVWF delay_1 DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETURN END d'1' count1 0xC7 counta 0x01 countb counta.------------------. .n o ùch æg iu ù pta o â nlaïi m oätso áñaëcñieåm cu û aTimer2 v aøcaù chk hô û itaïo n o ù.---------------.------------------.--------------------------.1 delay_1 count1.MOVLW b'11111110' MOVWF PORTB CALL delay_1ms RETURN . C aùcchöông trình con duøngcho chöông trình con hien_thi .

caùchkeátnoáihoaøntoaøntöông tö ï nhö caùcöùngduïng s ö ûduïng 2 LED ô û ví duï 4. trong khi neáu ta s ö ûduïng oscillator 4 MHz (m oãixung leänh co ù thôøigian 1 uS) thì Timer1 caàn phaûi ñeám ñeán giaù trò 1 000 000. V ôù ihai ví duï treân ta co ùth eå naém b aétñö ô ïc caù ck haù inieäm cô baûnveà taùcduïng ñònh thôøi duøngTimer. 1:8 vaø ñöôïc ñieàu á k hieån bôûithanh ghi T1CON (xem laïi Timer1 ñeå bieát theâm chi tieát). 1:2.8: Ö Ù n g duïng PIC16F877A v a øc a ù cLED 7 ñoaïn ñeålaømñoànghoà. neáubaèngroàithì m ôùitaênggiaù trò giaây v a øreset laïi bieáncount.2) ñeåhieånthò caù cgiaù trò thanh ghi ch ö ù ag iaùtrò g iô øra LED 7 ñoaïn. T rö ô ù c tieân laø vaán ñeà veà caáu truùc phaàn cöùng. G iaù trò ñeám toái ña cu û a Timer1 s e õ la ø 65534. tö ù cla ø chöông trình chính seõ laøm nhieäm vuï hieån thò LED v a ø chöông trình ngaét seõ thöïc hieän coâng vieäc caäp nhaät caùc giaù trò caàn hieån thò. Nhö vaäy tröôùckhi caäp nhaätgiaùtrò giaây. laøm sao taïo ra thôøi gian ñònh thôøi 1 giaây?? Timer ta s ö û duïng l a ø Timer1 16 bit v ô ù ib o ä chia ta à n soprescaler c o ùc aùc tæ s o á chia l a ø 1:1.7.7.Ö Ù ng duïng 4. v a ø m oättrong nhöõng öù ngdu ïng phoåb ieán nhaátcuû acheá ñoä ñònh thôøilaø la ø m ñ o à n g h o à ñ ieä n tö û . sau ñoù duøngthuaättoaùntaùchhaøngchuïc vaøhaø n gñôn v ò cu û ag iô ønhö ô û öùngduïng 4. G iaûithuaät ñeà ra la ø ta khoâng caäp nhaä t töønghaøngñôn vò v aøhaøng chuïc cu ûagiaùtrò g iô ø nhö ño áivo áip h uù tv aø g iaây . T höùhai. Tieáptheo la ø v a á n ñ eà v eà chöông trình vieát cho vi ñieàu khieån. ch æ co ùñ ie àu ta khoângso saùnhhaøngchuïc vôùi10 maø so saù n hv ô ù i6).3. M oätgiaûiphaùp cho vaán ñeà naøy la ø duøngtheâm m oätthanh ghi ñeám phuï( thanh ghi count). tuy nhieâ n ñeå coù m oät caù ch nhìn toång quaùt hôn v eà caùc Timer.giaây ta caàn ñeán6 LED 7 ñoaïn. co ø ng iaùtrò g iô øch æ taê n gtö ø 0 ñeán 24. chæ vieäc noáitheâm 4 LED 7 ñoaïn maéc song song v ô ù ihai LED tröô ù c ño ùv aøk eát no áitheâm 4 “coângtaéc”duøngBJT vaøoPORTB ñeå ñieàukhieånqueùtLED. 1:4. do ñ o ù ta caàn 5 laàn ñeám nhö vaäy (5 laàn ngaé t Timer1 xaûy ra) ñ eå ñaït ñöôïc giaù trò ñeám 125 000. ñeå hieån thò ñöôïc giôø.phuùt. Caùch“phaân coâng” ñ o áiv ô ù i chöông trình se õ khoângc o ùgì thay ñ o å i.6 (chöông trình 4. B aâygiôøta seõtieánhaø nhtö ø ngb ö ôù c ñeåth öïc h ieänthaø nhco ângöù ngduïng naøy. Tuy nhieân c o ù m o ä tso áv a á nñ eàp h a ù tsinh nhö sau: T höù nhaát. C uï theå nhö sau: ta cho Timer1 ñ e á m tö ø 0 ñeán 25000. Ñ eánñaây ta ñ a õ c o ùth eå v ieá t chöông trình cho öùngduïng theo caùcgiaû ithuaät ñeà ra ô û treân. thay v a ø oñ o ùg ia ù trò giôøseõ ñöôïc caäp nhaätvaøom oätthanh ghi. laømsao caäp nhaät giaùtrò giôø??? C aùc gia ù trò p h u ù tv aøg iaây taê n g tö ø0 ñeán 60 n eâ n th u a ä tto aù nd u ø n gñ eåc a ä pn h a ä tla øtöông ño áiñôn giaûn(töông töï nhö thuaättoaùnô ûö ù n gduïng 4. Chöông trình cuï theåseõñö ô ïc v ieátnhö sau: . vaø n eáu ta c o ù huy ñoäng toái ña khaû naêng chia taàn so á cu û aprescaler (1:8 ) thì giaù trò ñeám cuõngphaûiñaït ñeán 1 000 000/8 = 125 000 (v aãn coønlôù nhôn raát nhieàu so vô ù ig iaùtrò ñeám to áiña cu ûaTimer1. laàn naøy ta s e õ s ö û duïng Timer1.ta caàn kieåm tra xem bieán phuï count ñ aõ b aè ng5 hay chöa.Ta c o ùth eå sö ûduïng b aátcöù Timer naø o cu û avi ñieàu khieån ñeå phuïc vuï cho öùngduïng naøy.

--------------------.phuùt.inc> CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF .--------------------------. chöông trình con delay_1ms countb EQU 0x22 hang_don_vi_giay hang_chuc_giay hang_don_vi_phut hang_chuc_phut gio hang_don_vi_gio hang_chuc_gio count display_reg xx xx1 W_save PCLATH_save STATUS_save FSR_save ORG GOTO 0x0004 ISR EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 . C aùcthanh ghi duøngcho counta EQU 0x21 .--------------------. Ghi ch u ùv eàchöông trình . Chöông trình öùngduïng PIC16F877A v a øLED 7 ñoaïn ñeålaømñoàng hoà tö û ñieän .-----------------.-------------------------.---------------.giaâycaànhieånthò .5.--------------------------.--------------------------.---------------.------------------------.----------------------. C aùcthanh ghi du øngñeålöu laïi giaù .3 .-------------------------. C aùcthanh ghi chöùacaùcgiaùtrò .--------------------------.-----------------count1 EQU 0x20 .---------------.--------------------.--------------------. trò caùcthanh ghi quan troïng khi .--------------------------.-------------------------.-------------------------. thöïc thi chöông trình ngaét . C aùcthanh ghi phuï . Timer s ö ûduïng: Timer1 . Chöông trình 4. Khai baù ovi ñieàukhieån .--------------------. Khai baù obieán .-----------------. giô ø .----------------.-------------------------.-----------------.-----------------processor 16f877a include <p16f877a.

kieåmtra c ô øn g a étc u û aTimer1 GOTO exit_int BCF T1CON. Ñöa vaø ocaù cthanh ghi ñeám cuûaTimer1 MOVWF TMR1H .--------------------.TMR1IF count d'5' count.------------.-------------------------.0 STATUS. thoaùtkhoûingaét .--------------------MOVWF W_save SWAPF STATUS. x o ù ac ô øngaétñeå tieáptuïc nhaänbieátthôøiñieåm tieáp .--------------------------.------------------. K hôûitaïo laïi caùcgiaùtrò chöùatrong thanh CLRF TMR1H . ghi TMRH v a øTMRL MOVLW 0x61 . g iaùtrò 25000 (25000 -> 61A8h) MOVLW 0xA8 MOVWF TMR1L BSF BCF INCF MOVLW XORWF BTFSS GOTO CLRF T1CON. Ñoaïn chöông trình baétbuoäckhi baétñaàuchöông trình ngaét .Z exit_int count .--------------------------.-------------------------------------------------------------------------------.-------------------------. neáuchöa baèng5.--------------------------.W CLRF STATUS MOVWF STATUS_save MOVF PCLATH. theo ngaétxaûyra . bieánñeámphuï ..TMR1ON PIR1.W MOVWF FSR_save . reset laïi bieáncount .--------------------------. Chöông trình ngaét .----------------------------------------------------------------------------ISR . so saùnhcount v ô ùig iaùtrò 5 . C aùcthao ta ù cchính cu ûachöông trình ngaét .--------------------.------------------.------------CLRF TMR1L . Kieåmtra c a ù cc ô øngaét .---------------------. B aätTimer1 .-------------------------.--------------------. taïm thôøitaétTimer1 ñeåkhôûitaïo laïi . n eáuñ aõb aè ng5.TMR1ON .--------------------------.------------------.-----------------------.W MOVWF PCLATH_save CLRF PCLATH MOVF FSR.TMR1IF .BTFSS PIR1.------------.--------------------------.

----------------------.--------------------.Z exit_int hang_don_vi_phut hang_chuc_phut.INCF MOVLW XORWF BTFSS GOTO CLRF INCF MOVLW XORWF BTFSS GOTO CLRF INCF MOVLW XORWF BTFSS GOTO CLRF INCF MOVLW XORWF BTFSS GOTO hang_don_vi_giay.1 0x0A .----------------------.----------------exit_int MOVF FSR_save. caäpnhaäthaø n gchuïc cuûagiaùtrò giaây . caäpnhaätg iaù trò iôø g MOVLW 0x18 XORWF gio.Z GOTO exit_int CLRF gio GOTO exit_int .0 STATUS. so saùnhgiaùtrò haøngchuïc giaâyvôùi6 hang_chuc_giay .----------------.0 BTFSS STATUS.0 STATUS.W MOVWF PCLATH .--------------------.Z exit_int CLRF hang_chuc_phut INCF gio.-------------------------. so saùnhhaøngñôn vò cu û ag iaùtrò p hu ùtv ô ù i10 hang_don_vi_phut.Z exit_int hang_don_vi_giay hang_chuc_giay. taênghaøngñôn vò cuûabieángiaây .1 0x0A hang_don_vi_giay. so saù nhvôùi10 .Z exit_int .-------------------------.0 STATUS.1 .1 0x06 hang_chuc_giay.1 0x06 .------------------------.W MOVWF FSR MOVF PCLATH_save. Ñoaïn chöông trình baétbuoäcduøngñeåkeátthuùcchöông trình ngaét . caäpnhaätgiaùtrò phuùt hang_don_vi_phut.0 STATUS.------------------------. so saùnhhaøngchuïc cuûagiaùtrò phuùtvôùi6 hang_chuc_phut.

------------------------.SWAPF MOVWF SWAPF SWAPF RETFIE STATUS_save. K hôûitaïo caùcPORT ñieàukhieån . Choïn BANK1 CLRF PIE1 BSF PIE1. T a étta á tc aûc a ù cLED MOVWF PORTB .------------------------.----------------------.---------------.----------------.RP0 CLRF PORTD MOVLW b'00111111' .output MOVWF TRISB .---------------.TMR1IE . PORTB <5:0> <.---------------.1 W_save. x o ù ataá tc a ûc a ù cc ô øngaét MOVLW 0X30 .RP1 BSF STATUS.---------------.---------------------.------------------------.W STATUS W_save. Chöông trình chính . Ta caàn6 pin ô ûPORTB ñeå ñieàukhieånqueùtLED BCF STATUS.----------------CLRF T1CON CLRF INTCON CLRF TMR1H CLRF TMR1L BSF STATUS.--------------------.----------------------. Khôûitaïo Timer1 . prescaler 1:8.RP0 . PORTD <-output MOVWF TRISD MOVLW b'11000000' .RP0 MOVLW 0x00 .--------------------.--------------------------.--------------------------.---------------start . ta étTimer1 .taïm thôøi MOVWF T1CON . Choïn BANK0 CLRF PIR1 . Cho pheùpngaétTimer1 BCF STATUS.------------------.RP0 .0 ORG 0x0000 GOTO start ORG 0x050 .------------------. xung ñ eá m la øxung leänh.--------------------------------------------------------------BCF STATUS.

-------------------------------------------------------------------------------main CALL hien_thi GOTO main hien_thi CALL MOVF CALL MOVWF MOVLW MOVWF CALL MOVF CALL MOVWF MOVLW MOVWF CALL chuyen_ma_gio hang_chuc_gio.------------------.MOVLW MOVWF MOVLW MOVWF 0x61 TMR1H 0xA8 TMR1L . Cho pheùp toaønoäcaùcngaét b . goi chöông trình con chuyen_ma_gio .0 table PORTD b'11011111' PORTB delay_1ms hang_don_vi_gio. Cho pheùpngaétTimer1 BSF INTCON.--------------------. K hôûitaïo caùcbieán . v a øTMR1L (TMR1H:TMR1L = 25000) BSF T1CON. K hôûitaïo caùcgiaùtrò trong thanh ghi TMR1H .--------------------------.------------------. B aätTimer1 BSF INTCON. V oønglaëpchính .TMR1ON .------------.TMR1IE .-------------------------------------------------------------------------------CLRF gio CLRF hang_chuc_gio CLRF hang_don_vi_gio CLRF hang_don_vi_phut CLRF hang_chuc_phut CLRF hang_chuc_giay CLRF hang_don_vi_giay CLRF count .--------------------------.GIE .PEIE .------------. H ieånthò giaùtrò giôøra LED . Cho pheùpngaétngoaïi vi BSF INTCON.--------------------.0 table PORTD b'11101111' PORTB delay_1ms .

H ieånthò giaùtrò giaâyra LED table PORTD b'11111101' PORTB delay_1ms hang_don_vi_giay.0 .1 0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8 0x80 0x90 d'1' . H ieånthò giaùtrò phuùtra LED table PORTD b'11110111' PORTB delay_1ms hang_don_vi_phut. tö øm aõthaäpphaânsang m aõLED 7 ñoaïn PCL. B aû n gd ö õlie äu d u ø n gñ eåchuyeånñoåi .0 table PORTD b'11111110' PORTB delay_1ms .MOVF CALL MOVWF MOVLW MOVWF CALL MOVF CALL MOVWF MOVLW MOVWF CALL MOVF CALL MOVWF MOVLW MOVWF CALL MOVF CALL MOVWF MOVLW MOVWF CALL RETURN table ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW delay_1ms MOVLW hang_chuc_phut. Chöông trình con taïo thôøigian delay 1ms .0 .0 table PORTD b'11111011' PORTB delay_1ms hang_chuc_giay.

hang_don_vi_gio v a øhang_phut_gio xx 0x00 xx. K eátquaûchuyeånñoåiñöôïc löu trong thanh ghi .0 chuyen_ma hang_chuc_gio .Z nho_hon_10 0x01 .1 $+2 countb.0 display_reg 0x0F hang_don_vi_gio 0xF0 display_reg.0 STATUS.1 hang_don_vi_gio.MOVWF d2 MOVLW MOVWF MOVLW MOVWF delay_1 DECFSZ GOTO DECFSZ GOTO DECFSZ GOTO RETURN chuyen_ma_gio MOVF MOVWF ANDLW MOVWF MOVLW ANDWF MOVWF SWAPF MOVF CALL MOVWF BTFSC INCF MOVF CALL MOVWF RETURN chuyen_ma MOVWF MOVLW XORWF BTFSC GOTO MOVLW count1 0xC7 counta 0x01 countb counta. g iô øv a øchuyeånsang m aõthaäpphaân . m aõthaäpphaân .0 hang_chuc_gio. chöông trình con chuyeåntö øm a õHEX sang . ch u ïc vaøh aøn gñôn v ò cu ûathanh ghi chöa giaùtrò .1 delay_1 count1.0 chuyen_ma hang_don_vi_gio xx1. chöông trình con d u ø ngñeåtaùchrô ø ig iaùtrò haøng .0 hang_chuc_gio hang_chuc_gio.1 d2 gio.1 hang_chuc_gio.

0 .Z nho_hon_10 0x07 xx.XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF xx.Z nho_hon_10 0x08 xx.0 STATUS.0 STATUS.0 STATUS.Z nho_hon_10 0x05 xx.0 STATUS.0 STATUS.Z nho_hon_10 0x03 xx.0 STATUS.Z nho_hon_10 0x02 xx.0 STATUS.0 STATUS.Z nho_hon_10 0x04 xx.Z nho_hon_10 0x06 xx.Z nho_hon_10 0x09 xx.

0 STATUS.Z bang_11 0x0C xx.0 STATUS.0 STATUS.0 0x01 xx1 .BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO MOVLW XORWF BTFSC GOTO nho_hon_10 MOVLW MOVWF MOVF RETURN bang_10 MOVLW MOVWF STATUS.Z bang_13 0x0E xx.Z bang_12 0x0D xx.Z bang_10 0x0B xx.Z bang_15 0x00 xx1 xx.0 STATUS.Z nho_hon_10 0x0A xx.0 STATUS.Z bang_14 0x0F xx.0 STATUS.

Ta c u õ n g c o ù th eå sö û duïng caù c Timer khaùccho öù ngd uïng naøyv aøtuø ytheo ñaëc ñieåm caáu taïo cuûatöøngTimer ta coùth eå x aù cñ òn h ñ öô ïc caùcg iaùtrò thích hôïp ñeåtaïo thôøigian ñònh thôøi1s. Tuy nhieân ñaây cuõngla ø ö ù n g du ïng ho aø n ch æ nh nh aátvaø mang tính thöïc tieãn nhieàu nhaátso vôùicaùcöùngduïng tröôùc. Tuy n h ie ân d u ø ûduïng phöông phaùpnaøoñi nöõata cuõngkhoângtheåtaïo ra ñ o à n gh o àñ ieä n töû sö c o ù ñ o ä chính xaùc tuyeät ñoái khi sdöû duïng vi ñieàu khieån do thôøigian thöïc thi leänh cuûa vi ñieàu khieån sau m oãi thôøigian ñònh thôøikhoâng theå ñöôïc x aù c ñònh m oät caùch chính xaùc.RETLW bang_11 MOVLW MOVWF RETLW bang_12 MOVLW MOVWF RETLW bang_13 MOVLW MOVWF RETLW bang_14 MOVLW MOVWF RETLW bang_15 MOVLW MOVWF RETLW END 0x00 0x01 xx1 0x01 0x01 xx1 0x02 0x01 xx1 0x03 0x01 xx1 0x04 0x01 xx1 0x05 . chaúnghaïn ta c o ùth e å sö ûduïng oscillator ngoaïi vi khaùccho Timer1 m aø k hoâng caàn duøng chung v ôù ioscillator cu ûa vi ñieàu khieån. . K eátthuùcchöông trình Thöïc ra ta c o ùnhieàu phöông phaùpkhaùcñeå taïo th ô ø igian ñònh thôøi1s b a èn g c aù c h söû duïng caùcñaëc tính cu û aTimer1.

.

PHUÏLUÏC1 SÔ Ñ O À H O Á C A Ù C K I PORT C U Û A Ñ IE À U H IE Å N VI K PIC16F877A P1. Sô ño àk h oáiRA5 .1 PORTA Sô ño àk h oáiRA3:RA0 Sô ño àk h oáiRA4.

3 PORTC Sô ño àk h oâiRC7:RC5 v a øRC2:RC0 Sô ño àk h oáiRC4:RC3 .2 PORTB Sô ño àk h oáiRB3:RB0 Sô ño àk h oáiRB7:RB4 P1.P1.

4 PORTD Sô ño àk h oáiRD7:RD0 P1.5 PORTE Sô ño àk h oáiRE2:RE0 .P1.

P2. Bit 4: . Thanh ghi chöùa8 bit thaápcu û ab oäñeám chöông trình (PC). 182h. 83h. =0 khi WDT bò traøn Bit 3: bit chæ thò trang thaùinguoàn = 1 khi vi ñieàukhieånñöôïc caápnguoànhoaëcsau leänhCLRWDT = 0 sau khi leänhSLEEP ñöôïc thöïc thi Bit 2: Z bit Zero Z =1 khi keátquaûcuûapheùptoaùnhay logic baèng0 Z = 0 khi keátquaûcuûapheùptoaùnhay logic khaùc0 Bit 1: DC Digit carry/Borrow DC = 1 khi keátquaûpheùptoaùntaùcñoängleân4 bit th a ápc o ùnhôù. cu P2. IRP = 0: bank 2. 183h Bit 7: IRP bit choïn bank b o än h ô ùd ö õlie äu ca àntruy xuaát(duøngcho ñòa chægiaùntieáp). hoaëc sau khi leänh CLRWDT hay SLEEP ñöôïc thöïc thi.2 Thanh ghi PCL: ñòa chæ02h.1 (tö ø00h ñeánFFh) Bit 6.4 Thanh ghi SFR: ñòa chæ04h. DC = 0 khi keátquaûpheùptoaùntaùcñoängleân4 bit thaápkhoângc o ùn h ôù . Thanh ghi chöùacon troûñòa chæ g iaù ntie áp cu û ab o än h ô ùd ö õlieäu.3 (tö ø100h ñeán1FFh) IRP = 1: bank 0. 82h. P2.PH U ÏLU ÏC2 THANH GHI SFR (SPECIAL FUNCTION REGISTER) P2. 102h. 103h.5:RP1:RP0 hai bit choïn bank b o än hô ùd öõlieäu caàntruy xuaát(duøngcho ñòa chæ tröïc tieáp) bit chæ thò traïng thaùicuûaWDT(Watch Dog Timer) =1 khi vi ñieàu khieån vöøa ñöôïc caáp nguoàn. Bit 0 C Carry/borr ow C =1 khi keátquaûpheùptoaùntaùcñoängleânbit MSB c o ùnhôù. Thanh ghi 8 bit chöùag iaù trò û ab oäñònh thôøiTimer0.1 Thanh ghi TMR0: ñòa chæ01h. C=0 khi keátquaûpheùptoùantaùcñoängleânbit MSB khoângc o ùnhôù. 101h.3 Thanh ghi STATUS: ñòa chæ03h.

GIE = 0 khoângcho p h eù ptaátcaûc aù cng aét. PEIE Pheripheral Interrupt Enable bit PEIE = 1 cho p h eù ptaátcaûc aùc ngaétngoaïi vi PEIE = 0 khoângcho p h e ù ptaátcaûc aùc ngaétngoaïi vi TMR0IE Timer0 Overflow Interrupt Enable bit TMR0IE = 1 cho pheùpngaétTimer0 TMR0IE = 0 khoângcho pheùpngaétTimer0 RBIE RB0/INT External Interrupt Enable bit RBIE = 1 cho pheùpngaétngoaïi vi RB0/INT RBIE = 0 khoângcho pheùpngaétngoaïi vi RB0/INT RBIE RB Port change Interrupt Enable bit RBIE = 1 cho pheùpngaétRB Port change RBIE = 0 khoângcho pheùpngaétRB Port change GIE . 18Bh. P2. Thanh ghi chöùagiaùtrò nhaänvaøohay xuaátra PORTC P2. Thanh ghi chöùagiaùtrò nhaänvaøohay xuaátra PORTB.ngaétngoaïi vi RB0/INT vaøng aé tinterrput-on-change taïi caùcchaâncuûaPORTB.P2. 10Ah.10 Thanh ghi PCLATCH: ñòa chæ 0Ah. 106h. P2. P2. Thanh ghi chöùagiaùtrò nhaänvaøohay xuaátra PORTD.9 Thanh ghi PORTE: ñòa chæ 09h. P2.5 Thanh ghi PORTA: ñòa chæ05h. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Global Interrupt Enable bit GIE = 1 cho p h eù ptaátcaûcaù cngaét. 10Bh.11 Thanh ghi INTCON: ñòa chæ0Bh. P2. 18Ah. Thanh ghi chöùacaùcbit ñieàu khieån vaøcaùcbit cô øh ie äu khi timer0 bò traøn. 8Ah.7 Thanh ghi PORTC: ñòa chæ07h.6 Thanh ghi PORTB: ñòa chæ06h. Thanh ghi chöùagiaùtrò nhaänvaøohay xuaátra PORTA.8 Thanh ghi PORTD: ñòa chæ 08h. Thanh ghi ñoùngvai tro øla ø buffer ñeäm trong quaù trình ghi g iaùtrò leân 5 bit cao cu ûab o ä ñeám chöông trình PC. Thanh ghi chöùagiaùtrò nhaänvaøohay xuaátra PORTE. 8Bh.

ADIF = 0 chöa hoaøntaátchuyeånñoåiADC. INTF = 0 ngaétRB0/INT chöa xaûyra. ADIF ADC Interrupt Flag bit ADIF = 1 hoaøntaátchuyeånñoåiADC. RCIF USART Receive Interrupt Flag bit RCIF = 1 buffer nhaänqua chuaångiao tieápUSART ñ aõñ aày . RBIF RB Port Change Interrupt Flag bit RBIF = 1 ít nhaát coù m oät chaân RB7:RB4 co ù söï thay ñoåi traïng thaùi. SSPIF = 0 ngaét truyeàn nhaänSSP chöa xaûyra. CCP1IF=0 chöa caäpnhaätgiaùtrò trong thanh ghi TMR1. Bit 0 P2. INTF BR0/INT External Interrupt Flag bit INTF = 1 ngaétRB0/INT xaûyra (phaûixoùacôøhieäu baèng chöông trình). Bit 7 PSPIF Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Parallel Slave Port Read/Write Interrupt Flag bit PSPIF = 1 vöøa hoaøn taát thao ta ù c ñoïc hoaëc ghi PSP (phaûi xoùa baèng chöông trình). TXIF USART Transmit Interrupt Flag bit TXIF = 1 buffer truyeànqua chuaångiao tieápUSART roãng. PSPIF = 0 khoângc o ùthao taùcñoïc ghi PSP naøodieãnra. CCP1IF CCP1 Interrupt Flag bit Khi CCP1 ô ûc he áño äCapture CCP1IF=1 ñaõcaäpnh aätg iaùtrò trong thanh ghi TMR1. TMR0IF = 0 thanh ghi TMR0 chöa bò traøn. TXIF = 0 buffer truyeànqua chuaångiao tieápUSART ñaày. RCIF = 0 buffer nhaânqua chuaångiao tieápUSART roãng. Khi CCP1 ô ûc he áño äCompare . cuû RBIF = 0 khoângc o ùsö ï thay ñoåitraïng thaùicaùcchaânRB7:RB4.Bit 2 Bit 1 TMR0IF Timer0 Interrupt Flag bit TMR0IF = 1 thanh ghi TMR0 bò traøn (phaûi xoùa baèng chöông trình) .12 Thanh ghi PIR1: ñòa chæ 0Ch Thanh ghi c h ö ù ac ô øngaétcuûacaùckhoáingoaïi vi. SSPIF Synchronous Serial Port (SSP) Interrupt Flag bit SSPIF = 1 ngaét truyeàn nhaänSSP xaûyra.Bit naøy phaûi ñöôïc xoùa baèng chöông trình sau khi ñaõ k ieåm tra laïi caùcg iaù trò ac aùc chaântaïi PORTB.

P2. BCLIF = 0 Bus truyeàn nhaän chöa bò traøn (khoâng coù döõ lieäu truyeàn ñi trong bus).14 Thanh ghi TMR1L: ñòa chæ0Eh Thanh ghi chöùa8 bit thaápcu û ab oäñònh thôøiTMR1. Bit 3 BCLIF Bus Collision Interrupt Flag bit BCLIF = 1 Bus truyeàn nhaän ñang baän khi (ñang coùdöõ lieäu truyeàn ñi trong bus) khi SSP haït ñoängô ûch eáñ oäI2C Master mode. CMIF = 0 tín h ieäung o õv aøob o äso saùnhkhoângthay ñoåi. Bit 0 TMR1IF TMR1 Overflow Interrupt Flag bit TMR1IF = 1 thanh ghi TMR1 bò traøn(phaûixoùabaèngchöông trình). caàn Bit 1 TMR2IF TMR2 to PR2 Match Interrupt Flag bit TRM2IF = 1 giaù trò chöùa trong thanh ghi TMR2 baèng vôùigiaù trò chöùa trong thanh ghi PR2.15 Thanh ghi TMR1H: ñòa chæ0Fh Thanh ghi chöùa8 bit cao cuû aboäñònh thôøiTMR2.13 Thanh ghi PIR2: ñòa chæ 0Dh Bit 7. Bit 6 CMIF Comparator Interrupt Flag bit CMIF = 1 tín h ieäung o õv aøob o äso saùnhthay ñoåi. Ô Ûc heáñ oäCompare CCP2IF = 1 g iaù trò so saùnhbaèngvôùigiaùtrò chöùatrong TMR1. caàn CCP2IF = 0 g iaùtrò caànso saùnhchöa baèngvôùigiaùtrò chöùatrong TMR1. P2. 1: khoângquan taâ m v aøm aëcñ òn h mang g iaùtrò 0. CCP2IF = 0 chöa caäpnhaätgiaùtrò trong thanh ghi TMR1. Bit 4 EEIF EEPROM Write Operation Interrupt Flag bit EEIF = 1 qu aùtrình ghi d ö õlieäu le ânEEPROM hoaøntaát. TMR1IF = 0 thanh ghi TMR1 chöa bò traøn. EEIF = 0 quaùtrình ghi d ö õlieäu leân EEPROM chöa hoaøn taát hoaëc chöa b aétñaàu. 2.CCP1IF=1 g iaù trò so saùnhbaèngvôùigiaùtrò chöùatrong TMR1 caàn CCP1IF=0 g iaù trò so saùnhkhoângbaèngvôùigiaùtrò trong TMR1. P2. 5. Bit 0 CCP2IF CCP2 Interrupt Flag bit Ô Ûc heáñ oäCapture CCP2IF = 1 ñ aõc aäpn h aätg iaùtrò trong thanh ghi TMR1. . TRM2IF = 0 giaù trò chöùa trong thanh ghi TMR2 chöa baèng vôùigiaù trò chöùatrong thanh ghi PR2.

TMR1CS Timer1 Clock Source Select bit TMR1CS = 1 choïn xung ñ eá m la ø xung ngoaïi vi la á y tö øpin RC0/T1OSC/T1CKI (caïnh taùc ñ o ä n gla øcaïnh leân). T1CKPS1:T1CKPS0 Timer1 Input Clock Prescaler Select bit 11 t æ s o áchia taànso ácu û aprescaler la ø1:8 10 t æ s o áchia taànso ácu û aprescaler la ø1:4 01 t æ s o áchia taànso ácu û aprescaler la ø1:2 00 t æ s o áchia taànso ácu û aprescaler la ø1:1 T1OSCEN Timer1 Oscillator Enable Control bit T1OSCEN = 1 cho pheùpTimer1 hoaït ñoängvôùixung do oscillator cung caáp. P2. Khi TMR1CS = 0 Bit khoâng ñöôïc quan taâ m do Timer1 s ö û duïng xung clock beân trong. TMR1CS = 0 choïn xung ñ eá m la øxung clock beântrong (FãOSC/4).4 Bit 3 Bit 2 Bit 1 Bit 0 Khoângquan taâm v aømang giaùtrò m aëcñònh baèng0. T1OSCEN = 0 khoângcho pheùpTimer1 hoaït ñoäng vôùixung do oscillator cung caáp(taétb o ächuyeånñoåixung beântrong Timer1).17 Thanh ghi TMR2: ñòa chæ11h Thanh ghi chöù agiaù trò ñeám Timer2. TMR1ON = 0 Timer1 ngöng hoaït ñoäng. TMR1ON Timer1 On bit TMR1ON = 1 cho pheùpTimer1 hoaït ñoäng. Timer1 Ïternal Clock Input Synchronization Control bit Khi TMR1CS = 1: = 1 khoângñoàng boä xung clock ngoaïi vi ñöa vaøoTimer1.P2.6 Bit 5. = 0 ñoàng boä xung clock ngoaïi vi ñöa v aøoTimer1.18 Thanh ghi T2CON: ñòa chæ 12h Thanh ghi ñieàukhieånTimer2. . Bit 7 Khoângquan taâm vaøm aëcñ ò n h mang g iaùtrò 0 Bit 6-3 TOUTPS3:TOUTPS0 Timer2 Output Postscaler Select bit C aùcbit naøyñieàukhieånvieäclöïa choïn t æ s o áchia ta à nso ácho postscaler. Bit 7. boä P2.16 Thanh ghi T1CON: ñòa chæ 10h Thanh ghi ñieàukhieånTimer1.

TMR2ON = 0 ta étTimer2.19 Thanh ghi SSPBUF: ñòa chæ 13h Thanh ghi ñ e äm d ö õlie äu 8 bit cho chuaångiao tieápMSSP. CKP = 0 traïng thaùichôøcuûaxung clock la øm ö ù clogic thaáp. Khi MSSP ô ûc h e áñ o äSPI: Bit 7 WCOL Write Collition Detect bit WCOL = 1 döõlieäum ôùiñöôïc ñöa vaøothanh ghi SSPBUF trong khi chöa truyeàn xong d ö õlieäutröôù cñoù. P2. SSPOV = 0 khoângc o ùhieäntöôïng treânxaûyra.0000 t æ s o á1:1 0001 tæ s o á1:2 0010 tæ s o á1:3 … … … … … … … … 1111 t æ s o á1:16 Bit 2 TMR2ON Timer2 On bit TMR2ON = 1 baätTimer2. WCOL = 0 khoângc o ùhieäntöôïng treânxaûyra. .0 T2CKPS1:T2CKPS0 Timer2 Clock Prescaler Select bit C aùcbit naøyñieàukhieåntæ s o áchi taànso ácu û aprescaler 00 t æ s o á1:1 01 t æ s o á1:4 1x tæ s o á1:16 P2. Bit 4 CKP Clock Polarity Select bit CKP = 1 traïng thaùichôøcuûaxung clock la øm ö ù clogic cao. SSPEN = 0 khoângcho pheùpcoånggiao tieápMSSP. Bit 6 SSPOV Receive Overflow Indicalor bit (bit naøych æ co ùtaùcdu ïng ô û c h e á ñ o ä SPI Slave mode). SSPOV = 1 d ö õlieäu trong bufer ñeäm (thanh ghi SSPBUF) b ò tra ø n (d ö õ lieä u c u õ chöa ñöôïc ñoïc thì c oùd ö õlie ä u m ô ù igi ñ e øleân). SDI v a ø ).20 Thanh ghi SSPCON: ñòa chæ14h Thanh ghi ñieàukhieånchuaångiao tieápMSSP. SDO. Bit 5 SSPEN Synchronous Serial Port Enable bit SSPEN = 1 cho pheùpcoånggiao tieápMSSP (caùcpin SCK. Bit 3-0 SSPM3:SSPM0 Synchronous Serial Mode Select bit C aùcbit naøyñoùngvai troølöïa choïn caùccheáñoähoaït ñoäng cuû a MSSP. Bit 1.

WCOL = 0 khoângxaûyra hieäntöôïng treân. 0010 SPI Master mode. xung clock baèng(FOSC/64). Bit 5 SSPEN Synchronous Serial Port Enable bit SSPEN = 1 cho pheùpcoånggiao tieápMSSP (caùcpin SDA v a øSCL). Bit 4 CKP SCK Release Control bit Ô Ûc heáñ oäSlave mode: CKP = 1 cho xung clock ta ù cñoäng. . C aànchuùy ùl a øc a ù cpin SDA v a øSCL phaû iñöôïc ñieàu khieåntraïng thaùibaèngcaùcbit töông öù ngtrong thanh ghi TRISC tröôùcñoù). CKP = 0 g iö õxung clock ô û m öùclogic thaáp (ñeå baûoñaûm th ô ø igian th ieát laäp d ö õ lieäu). Bit 3. Khi n h aä nd ö õlieäu: SSPOV = 1 döõlieäum ôùiñöôïc nhaän vaøothanh ghi SSPBUF trong khi d ö õlieä u c u õ chöa ñöôïc ñoïc. Ô Ûcheáñ o än h aän d ö õlie äu (Master hoaëcSlave): Bit naøykhoângc o ùta ù cduïng chæ thi caùctraïng thaùi. 0000 SPI Master mode. 0011 SPI Master mode. xung clock baèng(FOSC/4). C aùctraïng thaùikhoângñöôïc lieätkeâ hoaëckhoângco ùtaùcdu ïng ñieàu k hieån ho aëcch æ c o ùta ù cduïng ño áiv ô ùich eáñ o äI2C mode.0101 Slave mode. SSPOV = 0 khoângc o ùhieäntöôïng treânxaûyra. xung clock baèng(FOSC/16). khoângcho pheùppin ñieàu khieån ( la øpin I/O bình thöôøng). Bit 6 SSPOV Receive Overflow Indicator Flag bit. SSPEN = 0 khoângcho pheùpcoånggiao tieápMSSP. khi truyeànd ö õlie äu ô ûch eáñ o äI2C Slave mode: WCOL = 1 döõlieäu m ôùiñöôïc ñöa vaøothanh ghi SSPBUF trong khi d ö õlie ä u c u õ chöa ñöôïc truyeànñi. 0100 SPI Slave mode. cho pheùppin ñieàukhieån . xung clock la á ytö øpin SCK. WCOL = 0 khoângc o ùhieäntöôïng treânxaûyra.0 SSPM3:SSPM0 C aùcbit naøyñoùngvai troølöïa choïn caùccheáñoähoaït ñoäng cuû a MSSP. 0001 SPI Master mode. xung clock baèng(ngoõra TMR2)/2. Khi MSSP ô ûc h e áñ o äI2C Bit 7 WCOL Write Collition Detect bit Khi truyeànd ö õlieäu ô ûch eáño äI2C Master mode: WCOL = 1 ñöa döõ lieäu truyeàn ñi vaøo thanh ghi SSPBUF trong khi ch eá ño ä truyeànd ö õlieäucu û aI2C chöa saü nsaøng. Khi truyeànd ö õlieäu: Bit naøykhoângc o ùta ù cduïng chæ thò caùctraïng thaùi. xung clock laáy tö ø pin SCK.

C aùctraïng thaùi khoâng ñöôïc lie ä tkeâ hoaëckhoângcoùtaù cduïng ñieàu k hieån hoaëcchæ coùtaùc duïng ñoáiv ôù icheáñ o äSPI mode. Bit 7. 1011 I2C Firmwave Controlled Master mode (khoângcho pheùp cheá Slave). 0101 CCPx hoaït ñoäng ô û c h e á ñ o ä Capture. 0111 CCPx hoaït ñoäng ô û c h e á ñ o ä Capture. “hieän töôïng” ñöôïc thieát laäp laø m oãi caïnh leânthöù16 taïi pin duøngcho khoáiCCPx.21 Thanh ghi CCPR1L: ñòa chæ 15h Thanh ghi chöùa8 bit thaápcuûakhoáiCCP1.22 Thanh ghi CCPR1H: ñòa chæ16h Thanh ghi chöùa8 bit cao cuûakhoáiCCP1. P2.4 CCPxX:CCPxY: PWM least Significant bits (caùcbit naøykhoâng coùtaùcduïng ô û ch eáñ oäCapture v a øCompare) Ô Ûch eá ñ o äPWM. ñ a â y laø 2 bit MSB chöùa giaù tính ño ä ro äng xung (duty cycle) trò cuûakhoáiPWM (8 bit coønlaïi ñöôïc chöùatrong thanh ghi CCPRxL). “hieän töôïng” ñöôïc thieát laäp laø m oãi caïnh xuoáng taïi pin duøngcho khoáiCCPx. “hieän töôïng” ñöôïc thieát laäp laø m oãi caïnh leântaïi pin duøngcho khoáiCCPx.6 Khoângc o ùta ù cduïng vaø maëcñònh mang g iaùtrò 0.23 Thanh ghi CCP1CON v a ø thanh ghi CCP2CON: ñòa ch æ 17h (CCP1CON) v a ø 1Dh (SSP2CON) Thanh ghi ñieàukhieånkhoáiCCP1.1111 I2C Slave mode 10 bit ñò a ch æ v aøcho pheùpngaétkhi phaùthieänbit Start v a ø bit Stop. 0110 CCPx hoaït ñoäng ô û c h e á ñ o ä Capture. xung clock = FOSC/(4*(SSPADD+1)). . P2. ñoä 1000 I2C Master mode. 0111 I2C Slave mode 10 bit ñòa chæ . Bit 5. P2. 1000 CCPx hoaït ñoängô ûc h e á ñ o ä Compare. 1110 I2C Slave mode 7 bit ñò a ch æ vaøcho pheùpngaétkhi phaùthieän bit Start v a ø bit Stop. “hieän töôïng” ñöôïc thieát laäp laø m oãi caïnh leânthöù4 taïi pin duøngcho khoáiCCPx. ng o õra ñöôïc ñöa leân m öùccao v a øbit CCPxIF ñöôïc set khi caù cg iaùtrò caànso saùnhbaèngnhau. Bit 3-0 CCPxM3:CCPxM0 CCPx Mode Select bit C aùcbit du øngñeåxaùclaäpcaù ccheáñoähoaït ñoäng cuû a CCPx khoái 0000 khoângcho pheùpCCPx (hoaëcduøngñeåreset CCPx) 0100 CCPx hoaït ñoäng ô û c h e á ñ o ä Capture.

khi ñ o ù c ô ø n g a é t CCPxIF ñöôïc set. ADDEN Address Detect Enable bit Ô Ûc heáñ oäUSART baátñoàng boä bit 9 ADDEN = 1 cho pheùpxaùcnhaänñòa chæ. bit CCPxIF ñöôïc set v a ø traïng thaùi pin output khoâng bò aûnh höôûng.24 Thanh ghi RCSTA: ñòa chæ18h Thanh ghi chöùacaùcbit traïng th aù iv aøcaù cbit ñieàukhieånquaùtrình n h aä nd ö õlie äu qua chuaångiao tieápUSART. CREN = 0 khoângcho pheùpnhaän1 ch u o ãid ö õlieäu lie ân tu ïc. CREN Continous Receive Enable bit Ô Ûcheáñoäbaátñoàng boä: CREN = 1 cho pheùpnhaän1 ch u o ãid ö õlie äu lie ân tuïc. caù c pin output khoâng thay ño åi traïng thaùi. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 SPEN Serial Port Enable bit SPEN = 1 Cho pheùpcoånggiao tieápUSART (pin RC7/RX/DT v a øRC6/TX/CK). 11xx CCPx hoaït ñoängô ûch eáño äPWM. CCP2 reset Timer1 v aøk h ô û iñoäng khoáiADC. SPEN = 0 khoângcho pheùpcoånggiao tieápUSART. ADDEN = 0 khoângcho pheùpxaùcnhaänñiz5 ch æ . RX9 = 0 nhaän8 bit d ö õlieäu. Ô Ûch eáñ oäUSART Master ñoàngboä: SREN = 1 cho pheùpchöùcnaêngnhaän1 byte d ö õlie äu (8 bit hoaëc9 bit). 1011 CCPx hoaït ñoäng ô û c h e á ñ o ä Compare. xung trigger ñaëc bieät (Trigger Special Event) seõ ñöôïc taïo ra. RX9 9-bit Receive Enable bit RX9 = 1 nhaän9 bit d ö õlie äu . ngaét xaûy ra.caù cbyte d ö õlieäuñ öô ïc nh aän v aø ov aøbit th öù9 c o ùtheåñöôïc s ö ûduïng nhö la øbit parity. . Ô Ûch eáñ oäbaátñoàngboä: CREN = 1 cho p h eù pn h aä nd ö õlie äu cho tô ù ikhi xoù abit CREN. khi caù c g iaù trò caàn so saùnh baèng nhau. CCp1 reset Timer1.1001 CCPx hoaït ñoängô ûc h e á ñ o ä Compare. 1010 CCPx hoaït ñoäng ô û c h e á ñ o ä Compare. SREN = 0 khoângcho pheùpchöùcnaêngnhaän1 byte d ö õlieäu. SREN Single Receive Enable bit Ô Õc heáñ oäUSART baátñoàngboä:bit naøykhoângcaànquan taâm . ng o õra ñöôïc xuoáng m öùcthaáp vaøbit CCPxIF ñöôïc set khi caù cg iaùtrò caànso saùnhbaèngnhau. khi caù c g iaù trò caàn so saùnh baèng nhau. CREN = 0 khoângcho p h eù pn h aän ch u o ãid ö õlieäu. P2.khi bit RSR<8> ñöôïc set thì ngaétñöôïc cho pheùpthöïc thi v aøg iaùtrò trong buffer ñöôïc nhaänvaøo.

25 Thanh ghi XTREG: ñòa chæ 19h Thanh ghi ñoùngvai tr o øla øbuffer ñeäm8 bit trong qu aùtrình truyeànd ö õlieäu th o ân gqua chuaångiao tieápUSART. P2. P2. P2.30 Thanh ghi ADCON0: ñòa chæ 1Fh Ñ a â yla øm o ä ttrong hai thanh ghi ñieàukhieånkhoáichuyeånñoåiADC. P2.6 ADCS1:ADCS0 A/D Conversion Clock Select bit . Bit 1 OERR Overrun Error bit.28 Thanh ghi CCPR2H: ñòa chæ1Ch Thanh ghi chöùa8 bit cao cuûakhoáiCCP2. P2. OERR = 1 xuaáthieänloãi“Overrun” OERR = 0 khoângxuaáthieänloãi“Overrun” Bit 0 RX9D Bit naøychöùabit d ö õlie äu th ö ù9 cu û ad ö õlieäutruyeànnhaän. Thanh ghi c o ø nla ïi la ø thanh ghi ADCON1 (ñòa c hæ9Fh) Bit 2 Bit 7. FERR = 0 khoângxuaáthieänloãi“Framing” trong quaùtrình truyeànnhaänd ö õlieäu .29 Thanh ghi ADRESH: ñòa chæ 1Eh Thanh ghi chöùabyte cao cu û ak eátquaûquaùtrình chuyeånñoåiADC. P2.26 Thanh ghi RCREG: ñòa chæ1Ah Thanh ghi ñoùngvai tr o øla øbuffer ñeämtrong qu aùtrình n h aä nd ö õlie äu qua chuaångiao tieáp USART.FERR Framing Eror bit FERR = 1 xuaáthieänloãi“Framing” trong qu aùtrình truyeànnhaänd ö õlieäu.27 Thanh ghi CCPR2L: ñòa chæ 1Bh Thanh ghi chöùa8 bit thaápcuûakhoáiCCP2.

181h Thanh ghi naøycho pheùpñieàu khieånchöùcnaêngpull-up cu û ac aù cpin trong PORTB.Bit 5-3 CHS2:CHS0 Analog Channel Select bit C aùcbit naøyduøngñeå choïn keânhchuyeånñoåiADC 000 keânh0 (AN0) 001 keânh1 (AN1) 010 keânh2 (AN2) 011 keânh3 (AN3) 100 keânh4 (AN4) 101 keânh5 (AN5) 110 keânh6 (AN6) 111 keânh7 (AN7) Bit 2 A/D Conversion Status bit Khi ADON = 1 = 1 A/D ñang hoaït ñoäng(set bit naø yseõlaømk hôû iñoängADC v aø töx o ù a ï khi quaùtrình chuyeånñoåikeátthuùc). TOSE Timer0 Source Edge Select bit TOSE = 1 taùcñoängcaïnh leân. Bit 1 K hoângcaànquan taâmvaø maëcñònh mang g iaùtrò 0. TOSC = 0 duøngxung clock beân trong (xung clock naøy baèng vôùixung clock duøngñeåthöïc thi leänh).caïnh taùcñ oäng cuûangaétngoaïi vi v aøb o äñ e ám Timer0. Bit 0 ADON A/D On bit ADON = 1 b aätA/D ADON = 0 ta étA/D P2.31 Thanh ghi OPTION_REG: ñòa chæ81h. xaù c laäpcaù ctham so áveàxungtaùcñoäng. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 PORTB pull-up enable bit = 1 khoângcho pheùpchöùcnaêngpull-up cu û aPORTB = 0 cho pheùpchöùcnaêngpull-up cu ûaPORTB INTEDG Interrupt Edge Select bit INTEDG = 1 ngaétxaûyra khi caïnh döông chaânRB0/INT xuaáthieän. TOSE = 0 taùcñoängcaïnh xuoáng. = 0 A/D khoâng hoaït ñoäng. TOCS Timer0 Clock Source select bit TOSC = 1 clock la á ytö øchaânRA4/TOCK1. PSA Prescaler Assignment Select bit PSA = 1 b o ächia ta à nso á(prescaler) ñöôïc duøngcho WDT . INTEDG = 0 ngaétxaûyra khi caïnh aâm chaânBR0/INT xuaáthieän.

P2.35 Thanh ghi TRISD: ñòa chæ88h Thanh ghi ñieàukhieånxuaátnhaäpcuûacaùcpin trong PORTD. 186h Thanh ghi ñieàukhieånxuaátnhaäpcuûacaùcpin trong PORTB.36 Thanh ghi TRISE: ñòa chæ89h Thanh ghi ñieàu khieån xuaátnhaäp cuûacaùcpin trong PORTE. Bit 5 IBOV Input Buffer Overflow Detect bit IBOV = 1 d ö õlieäuñöôïc ghi leânbuffer trong khi d ö õlie ä u c u õv a ã nchöa ñöôïc ñoïc. . Bit 6 OBF Output Buffer Full Status bit OBF = 1 Buffer truyeànd ö õlieä u v a ã nc o ø nc h ö ù ad ö õlie ä u c u õv a øv a ã nchöa ñöôïc ñoïc. IBOV = 0 buffer chöa bò traøn. P2.33 Thanh ghi TRISB: ñòa chæ86h. P2. OBF = 0 Buffer truyeànd ö õlie ä uñ a õñöôïc ñoïc. P2. PORTD ñoùngvai tro øla ø co å n g giao tieáp song song PSP.PSA = 0 b o ächia taànso áñö ô ïc du ø ngcho Timer0 Bit 2:0 PS2:PS0 Prescaler Rate Select bit C aùcbit naøycho pheùpthieátlaäpt æ s o áchia taànso ácu û aPresca ler. BIF = 0 chöa c o ùWord d ö õlieäunaøoñöôïc nhaän. ñieàu khieåncoånggiao tieáp song song PSP (Parallel Slave Port).34 Thanh ghi TRISC: ñòa chæ87h Thanh ghi ñieàukhieånxuaátnhaäpcuûacaùcpin trong PORTC. P2. Bit 7 BIF Input Buffer Full Status bit BIF = 1 m oätWord d ö õlieäuvö ø añ ö ôïc n haänv aøñang c hô øCPU ñoïc vaøo.32 Thanh ghi TRISA: ñòa chæ85h Thanh ghi ñieàukhieånxuaátnhaäpcuûacaùcpin trong PORTA. Bit 4 PSPMODE Parallel Slave Port Mode Select bit PSPMODE = 1 Cho pheùp PSP.

. Bit 2 Bit2 Direction Control for pin . ADIE = 0 khoângcho pheùpngaétADC. RCIE USART Receive Interrupt Enable bit RCIE = 1 cho pheùpngaétnhaänUSART RCIE = 0 khoângcho pheùpngaétnhaänUSART TXIE USART Transmit Interrupt Enable bit TXIE = 1 cho pheùpngaéttruyeànUSART TXIE = 0 khoângcho pheùpngaéttruyeànUSART SSPIE Synchronous Serial Port Interrupt Enable bit SSPIE = 1 cho pheùpngaétSSP SSPIE = 0 khoângcho pheùpngaétSSP CCP1IE CCP1 Interrupt Enable bit CCP1IE = 1 cho pheùpngaétCCP1 CCP1IE = 0 khoângcho pheùpngaétCCP1 TMR2IE TMR2 to PR2 Match Interrupt Enable bit TMR2IE = 1 cho pheùpngaét. Bit ADIE ADC (A/D converter) Interrupt Enable bit ADIE = 1 cho pheùpngaétADC. TMR2IE = 0 khoângcho pheùpngaét. Bit 7 6 Bit 5 Bit 4 Bit 3 Bit 2 Bít 1 Bit 0 PSPIE Parallel Slave Port Read/Write Interrupt Enable bit PSPIE = 1 cho pheùpngaétPSP read/write. TMR1IE TMR1 Overflow Interrupt Enable bit TMR1IE = 1 cho pheùpngaét. Bit2 = 1 Input Bit2 = 0 Output Bit 1 Bit1 Direction Control for pin Bit1 = 1 Input Bit1 = 0 Output Bit 0 Bit0 Direction Control for pin Bit0 = 1 Input Bit0 = 0 Output P2. PSPIE = 0 khoângcho pheùpngaéPSP read/write. Bit 3 K hoângcaànquan taâm v aøm aëcñ ò nh mang g iaùtrò 0.PSPMODE = 0 Khoângcho pheùpPSP.37 Thanh ghi PIE1: ñòa chæ8Ch Thanh ghi chöùacaùcbit cho pheùpcaùcngaétngoaïi vi. TMR1IE = 0 khoângcho pheùpngaét.

Bit 0 CCP2IE CCP2 Interrupt Enable bit CCP2IE = 1 Cho pheùpngaét. Bit 3 BCLIE Bus Collision Interrupt Enable bit BCLIE = 1 Cho pheùpngaét. Bit 1 Power-on Reset Status bit = 1 khoângc o ùsö ï ta ù cñ o ä n gc u û aPower-on Reset. Bit 4 EEIE EEPROM Write Operation Interrupt Enable bit EEIE = 1 Cho pheùpngaétkhi ghi d ö õlie äu le ânb o än h ô ùEEPROM. Bit 6 CMIE Comparator Interrupt Enable bit CMIE = 1 Cho pheùp ng aét aboäso saùnh. P2. Bit 7. 2 K hoângcaànquan taâm v aøm aëcñ òn h mang g iaùtrò 0. 5. BCLIE = 0 Khoângcho pheùpngaét. 6. = 0 c oùsö ï taù cñ o ä n gcu û aPower-on reset.P2. 1 K hoângcaànquan taâm vaøm aëcñò n h mang g iaùtrò 0. chu Bit 7 GCEN General Call Enable bit GCEN = 1 Cho pheùpngaétkhi ñòa chæ 0000h ñöôïc nhaänvaøothanh ghi SSPSR (ñòa chæcuûac heáño äGeneral Call Address).38 Thanh ghi PIE2: ñòa chæ8Dh Thanh ghi chöùacaùcbit cho pheùpcaùcngaétngoïai vi. 2. Bit 0 Brown-out Reset Status bit = 1 khoângc o ùsö ï ta ù cñ o ä n gc u û aBrown-out reset. EEIE = 0 Khoângcho pheùpngaétkhi ghi d ö õlie äu le ânb o än h ô ùEEPROM. cuû CMIE = 0 Khoângcho pheùpngaét.40 Thanh ghi SSPCON2: ñòa chæ91h Thanh ghi ñieàukhieåncaùccheáñoähoaït ñoäng cu ûa aångiao tieápI2C. = 0 c o ùsö ï ta ù cñ o ä n gc u û aBrown-out reset. CCP2IE = 0 Khoângcho pheùpngaét. P2. 5.39 Thanh ghi PCON: ñòa chæ8Eh Thanh ghi ñieàukhieån c h ö ù ac a ù cc ô øh ieä u cho bieáttraïng thaùi caùccheáñ o äreset cu û avi ñieàukhieån. 4. 3. Bit 7. .

RCEN = 0 Khoângcho p h e ù pn h aä nd ö õlieäu. Bit 3 RCEN Receive Enable bit (bit n a ø yc h æ c oùtaù cduïng ô ûch eáño äI2C Master mode). ACKDT = 0 Ñ aõnhaänñöôïc xung . Khi vi ñieàu khieån ñöôïc reset. Ô Ûc heáñ oäSlave mode: SEN = 1 cho pheùpkhoùaxung clock tö øpin SCL cu ûaI2C Master. Bit 2 PEN Stop Condition Enable bit PEN = 1 cho pheùpthieátlaäpñieàukieänStop ô û2 pin SDA v a øSCL.41 Thanh ghi PR2: ñòa chæ 92h Thanh ghi du ø ng ñ eå aán ñònh tröôù c giaù trò ñeám cho Timer2. taïi . ACKSTAT = 1 nhaänñöôïc xung tö øI2C Slave. ACKEN = 0 khoângcho pheùptaùcñoängtreân.42 Thanh ghi SSPADD: ñòa chæ 93h Thanh ghi chöùañòa chæcuûavi ñieàukhieånkhi hoaït ñoängô ûchuaångiao tieápI2C Slave mode. Khi ta ñöa m oätgia ù trò vaøothanh ghi PR2. Bit 5 ACKDT Acknowledge Data bit (bit n a ø yc h æ c o ù ta ùduïng khi nh aänd ö õlieäuô û c h e á c ñ o äI2C Master mode). ACKSTAT = 0 chöaq nhaänñöôïc xung . Bit 0 SEN Start Condition Enable/Stretch Enable bit Ô Ûc heáñ oäMaster mode: SEN = 1 cho pheùpthieátlaäpñieàukieänStart ô û2 pin SDA v a øSCL. P2. Nhö vaäymaëcñònh Timer2 s e õñ e á m tö ø00h ñeánFFh. Khoângcho pheùptaùcñoängtreân. PEN = 0 khoângcho pheùptaùcñoängtreân. ñoä Bit 6 ACKSTAT Acknowledge Status bit (bit naø ych æ co ùtaùcdu ïng khi truyeàn döõlieäuô û c heáño äI2C Master mode). ACKDT = 1 chöa nhaänñöôïc xung . RSEN = 0 khoângcho pheùptaùcñoängtreân. RCEN = 1 Cho p h e ù pn h aä nd ö õlie äu ô ûch eáñ oäI2C Master mode. Khi khoângduøngñeåchöùañòa chæ(I2C Master mode) SSPADD ñöôïc duøngñeåchöùagiaùtrò taïo ra xung clock ñoàng b oä pin SCL. Bit 4 ACKEN Acknowledge Sequence Enable bit (bit naøych æ co ùtaùcdu ïng khi n h aän d ö õlieäu ô ûcheáñ o äI2C Master mode) ACKEN = 1 cho pheùpxung xuaáthieän ô û 2 pin SDA v a ø SCL khi keát thuùc qu aùtrình n h aä nd ö õlieäu. Bit 1 RSEN Repeated Start Condition Enable bit RSEN = 1 cho pheùpthieátlaäpñieàukieänStart laë p laïi lieântuïc ô û2 pin SDA v a ø SCL. Timer2 se õ ñ e á m tö ø 00h cho ñeán khi g iaùtrò b oäñeám cu ûaTimer2 b aèng v ôù igiaùtrò cu û ab oäñeám trong thanh ghi PR2. SEN = 0 khoângcho pheùptaùcñoängtreân. P2. PR2 mang g iaùtrò FFh.GCEN = 0 Khoângcho pheùp cheá ñòa chætreân.

BF = 0 thanh ghi ñeämSSPBUF chöa c o ùd ö õlieäu. Bit 2 bit information Bit n a ø yc h æ c oùtaù cduïng khi MSSP ô ûc heáño äI2C. Bit 3 S Start bit Bit n a ø yc h æ c oùtaù cduïng khi MSSP ô ûc heáño äI2C. CKE = 0 SPI Master truyeànd ö õlie äu khi xung clock chuyeåntö øtraïng thaùichôø ñeántraïng thaùitích cöïc. Bit n a ø yc h æ c oùtaù cduïng ô ûch eáñ o äI2C mode. Bit 5 bit. CKE = 0 khoângcho pheùpMSBus. Bit 1 UA Update Address bit Bit n a ø yc h æ c oùtaù cduïng khi MSSP ô ûc heáño äI2C. Bit 5 bit I2C Master mode: khoângquan taâm. Bit 0 BF Buffer Status bit BF = 1 thanh ghi ñeäm SSPBUF ñ a õco ùd ö õlie äu . Khi MSSP hoaït ñ oäng ô ûc h e áñ o äSPI: Bit 7 SMP Sample bit SPI Master mode: SMP = 1 d ö õlieäuñöôïc laáym aãu(xaùcñònh trang thaùilogic) taïi thôøiñieåm cuoái xung clock. SPI Slave mode: bit naø yphaûiñöôïc xoùaveà0. SMP = 0 d ö õlieäuñöôïc laáym aãutaïi thôøiñieåm giöõaxung clock. SPM = 0 d u øngto ácño äcao ( 400 KHz). Bit 6 CKE MSBus Select bit CKE = 1 cho pheùpMSBus.P2. Khi hoaït ñ oäng ô ûche áñ o äI2C Bit 7 SPM Slew Rate Control bit SPM = 1 d uøngtoácñoächu aån(100 KHz v a ø1 MHz). Bit 6 CKE SPI Clock Select bit CKE = 1 SPI Master truyeànd ö õlie äu khi xung clock chuyeåntö øtraïng thaùitích cöïc ñeántraïng thaùichôø.43 Thanh ghi SSPSTAT: ñòa chæ 94h Thanh ghi chöùacaùcbit traïng thaùicuûachuaångiao tieápMSSP. Bit 4 P Stop bit Bit n aø yc h æsö ûduïng khi MSSP ô ûcheá ñ o äI2C. . (traïng thaùichôøñöôïc xaùcñònh bôûibit CKP (SSPCON<4>).

Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 = 1 byte vöøatruyeànñi hoaëcnhaänñöôïc la ød ö õlieäu.UA = 1 vi ñieàu khieåncaàncaäpnhaättheâmñòa chæ t ö øthanh ghi SSPADD. P Stop bit P = 1 vöøanhaänñöôïc bit Stop. Bit 7 CSRC Clock Source Select bit Ô Ûcheáñoäbaátñoàng boä: khoângcaànquan taâm . Ô Ûcheáño äño àngb oä: CSRC = 1 Master mode (xung clock ñöôïc laáytö øb o äta ïo xung BRG). S = 0 chöa nhaänñöôïc bit Start. UA = 0 khoângcaàncaäpnhaät theâm ñòa chæ. TX-9 = 0 truyeànd ö õlie äu 8 bit. P = 0 chöa nhaänñöôïc bit Stop. Bit 6 TX-9 9-bit Transmit Enable bit TX-9 = 1 truyeànd ö õlie äu 9 bit. Bit 4 SYNC USART Mode Select bit . TXEN = 0 khoângcho pheùptruyeàn. = 0 byte vöøatruyeànñi hoaëcnhaänñöôïc laøñ ò a c h æ . P2. Bit 5 TXEN Transmit Enable bit TXEN = 1 cho pheùptruyeàn. CSRC = 0 Slave mode (xung clock ñöôïc nhaäntö øb e â n ngoaøi). BF Buffer Full Status bit BF = 1 Thanh ghi SSPBUF ñang chöùad ö õlieäutruyeànñi hoaëcnhaänñöôïc. bit information I2C Slave mode: = 1 ñ o ïc d ö õlieäu. S Start bit S = 1 vöøanhaänñöôïc bit Start. = 0 khoâng truyeàn ö õlie äu .44 Thanh ghi TXSTA: ñòa chæ98h Thanh ghi chöùacaùcbit traïng th aù iv a øñieàukhieånvieäctruyeànd ö õlie äu th o ân gqua chuaån giao tieápUSART. BF = 0 thanh ghi SSPBUF khoângc o ùd ö õlieäu. = 0 ghi d ö õlieäu. d UA Update Address Bit n a ø yc h æ c oùtaù cduïng ñoáivôù icheáñoäI2C Slave mode10 bit ñòa chæ . I2C Master mode: = 1 ñang truyeànd ö õlieäu.

Khi C2INV = 1 C2OUT = 1 khi (pin VIN+ cu ûaC2)< (pin VIN.cu û aC1).c uûa C2). BRGH = 1 to á cñ o äcao.cu û aC1). P2. Khi C1INV = 1 C1OUT = 1 khi (pin VIN+ cu ûaC1)< (pin VIN. TX9D Bit naøychöùabit d ö õlie äu th ö ù9 khi d ö õlieäutruyeànnhaänl a ø9 bit. T aànso áxung clock do BRG taïo ra ñöôïc tính theo caùccoângthöùctrong baûngsau: Trong ñ o ùX la øg ia ùtrò c h ö ù atrong thanh ghi SRBRG.cu ûaC2).c uûa C2). Thanh ghi CMCON: ñòa chæ9Ch Thanh ghi ñ ieàu k hieånvaøch æth ò caù ctraïng thaùicuõngnhö k eátq u aûcu ûab o äso saùnh.c uûa C1). K hoângcaànquan taâm v aøm aëcñ ò nh mang g iaùtrò 0. TRMT Transmit Shift Register Status bit TRMT = 1 thanh ghi TSR khoângc oùd ö õlie ä u . Bit 7 C2OUT Comparator 2 (C2) Output bit Khi C2INV = 0 C2OUT = 1 khi (pin VIN+ cu ûaC2)> (pin VIN. TRMT = 0 thanh ghi TSR co ùc h ö ù ad ö õlieäu. Bit 5 C2INV Comparator 2 Output Conversion bit . Bit 6 C1OUT Comparator 1 (C1) Output bit Khi C1INV = 0 C1OUT = 1 khi (pin VIN+ cu ûaC1)> (pin VIN.c uûa C1).cu ûaC2). C2OUT = 0 khi (pin VIN+ cu û aC2) < (pin VIN. BRGL = 0 to á cñ o äthaáp. C1OUT = 0 khi (pin VIN+ cu ûaC1) < (pin VIN. C2OUT = 0 khi (pin VIN+ cu û aC2) > (pin VIN. C1OUT = 0 khi (pin VIN+ cu ûaC1) > (pin VIN.Bit 3 Bit 2 Bit 1 Bit 0 SYNC = 1 daïng ñoàngboä SYNC = 0 daïng baátñoàngboä.45 Thanh ghi SPBRG: ñòa chæ 99h Thanh ghi chöùagiaùtrò taïo xung clock cho boätaïo xung BRG (Baud Rate Generator). BRGH High Baud Rate Select bit Bit n a ø yc h æ c oùtaù cduïng ô ûcheáñoäb aátñoàng b oä.

cu û aC1 n o á iv ô ù iRA0/AN0 v a ø pin VIN. C aùcdaïng caáuhình c u û ab o äComparator ñöïôc trình b aøytrong baûngsau: . C1INV = 0 ng o õra C1 khoângñaûotraïng thaùi. C2INV = 0 ng o õra C2 khoângñaûotraïng thaùi. Bit 3 CIS Comparator Input Switch bit Bit n a ø yc h æ c oùtaù cduïng khi CM2:CM0 = 110 CIS = 1 khi pin VIN.C2INV = 1 ng o õra C2 ñöôïc ñaûotraïng thaùi.cu ûaC2 n o á iv ô ù iRA1/AN1 Bit 2-0 CM2:CM0 Comparator Mode bit C aùcbit naøyñoùngvai tro øtrong vieäcthieátlaäpcaùccaáuhình hoaït ñoängcuûaboä Comparator.cu ûaC2 n o á iv ô ù iRA2/AN2 CIS = 0 khi pin VIN.cu û aC1 n o á iv ô ù iRA3/AN3 v a ø pin VIN. Bit 4 C1INV Comparator 1 Output Conversion bit C1INV = 1 ng o õra C1 ñöôïc ñaûotraïng thaùi.

Trong ñ o ù :A la øn g o õv a ø oAnalog. P2. khi ñ o ùg iaùtrò cu û acaù cpin n a ø yñ o ïc tö øc a ù cPORT luoânbaèng0. CVRR = 0 m o ä tm ö ù cñ ieä n a ù pc o ùg ia ùtrò VDD/32 (ñ ie änaù pdo b o ä taïo ieän aùpso ñ saùnhtaïo ra c o ùg ia ùtrò tö ø0.47 Thanh ghi ADRESL: ñòa chæ 9Eh Thanh ghi chöùacaùcbit thaápcu ûak eátqu aûb oächuyeånñoåiA/D (8 bit cao chöùatrong thanh ghi ADRESH ñòa chæ1Eh).46 Thanh ghi CVRCON: ñòa chæ 9Dh Thanh ghi ñ ieàu k hieånbo ä taïo ñieän aù pso saùnhkhi b o äComparator hoaït ñoängvôùicaáu hình ‘110’. . CVREN = 1 b oä taïo ieän aùpso saùnhñöôïc caápñieän aù ph oaït ñ oän g . B la øn g o õv a ø oDigital. Bit 6 CVROE Comparator VREF Output Enable bit CVROE = 1 ñieän aù pdo b oä taïo ieän aù pso saùnhtaïo ra ñöôïc ñöa ra pin RA2. ñ ñöa Bit 5 CVRR Comparator VREF Range Selection bit CVRR = 1 m o ä tm ö ù cñ ieä n a ù pc o ùg ia ùtrò VDD/24 (ñ ie änaù pdo b o ä taïo ieän aùpso ñ saùnhtaïo ra c o ùg ia ùtrò tö ø0 ñeán0.25 ñeán0. ñ CVROA = 0 ñieän a ù pdo b o ä taïo ieänaù pso saùnhtaïo ra khoâng ñöôïc ra ngoaøi. Bit 7 CVREN Comparator Voltage Reference Enable bit. Bit 4 K hoângcaànquan taâm v aøm aëcñ ò nh mang g iaùtrò 0.75VDD).CVREN ñ = 0 b o ätaïo ñ ieän aù pso saùnhkhoângñöôïc caápñieänaù pho aït ñoäng. Khi CVRR = 0 Ñ ie änaù ptaïi pin RA2 c o ùg ia ùtrò CVREF = (CVR<3:0>/32)*VDD + ¼VDD. P2. Khi CVRR = 1: Ñ ie änaù ptaïi pin RA2 c o ùg ia ùtrò CVREF = (CVR<3:0>/24)*VDD.75VDD). Bit 3-0 CVR3:CVR0 C aùcbit ch oïn ñ ieän aùpng oõra cu û ab o ätaïo ñ ie än aù pso saùnh.

Bit 3-0 PCFG3:PCFG0 A/D Port Configuration Control bit C aùcbit naøyñieàukhieånvieäcchoïn caáuhình hoaït ñoäng caù c cuû aboächuyeån coång ñoåiADC. .4 K hoângcaànquan taâmvaø maëcñònh mang g iaùtrò 0. ADCS2 A/D Conversion Clock Select bit ADCS2 keáthôïp vôùi2 bit ADCS1:ADCS0 trong thanh ghi ADCON0 ñeå ñieàu khieånvieäc choïn xung clock cho khoáichuyeånñoåiADC. Bit 7 Bit 6 ADFM A/D Result Format Select bit ADFM = 1 K eátquaûñöôïc löu v e àphía beânphaûi2 thanh ghi ADRESH:ADRESL (6 bit cao mang g iaùtrò 0).P2. ADFM = 0 K eátquaûñöôïc löu v e àphía beântraùi2 thanh ghi ADRESH:ADRESL (6 bit thaáp mang g iaùtrò 0).48 Thanh ghi ADCON1: ñòa chæ9Fh Thanh ghi chöùacaùcbit ñieàukhieånb oächuyeånñoåiADC (ADC c o ùhai thanh ghi ñieàu k hieånlaø ADCON1 v a øADCON0). Bit 5.

Trong ñ o ùA la øn g o õv a ø oAnalog. P2.51 Thanh ghi EEDATH: ñòa chæ10Eh Thanh ghi chöùa byte cao cuûa döõ lieäu trong qu aù trình ghi ñoïc treân boä nhôù döõ lieäu EEPROM (thanh ghi n aø yc h æsö ûduïng 6 bit thaáp). C/R la øso án g o õv a ø oAnalog/soáñieäna ù pmaãu.49 Thanh ghi EEDATA: ñòa chæ 10Ch Thanh ghi chöùabyte thaáp cuûa döõlieäu trong quaù trình ghi ñoïc treân boä nhôùdöõ lieäu EEPROM. D la øn g o õv a ø oDigital. P2. .53 Thanh ghi EECON1: ñòa chæ18Ch Thanh ghi ñieàukhieånboänhôùEEPROM.52 Thanh ghi EEADRH: ñòa chæ 10Fh Thanh ghi chöùa byte cao cu ûa ñòa ch æ trong qu aù trình ghi ñoïc treân boä nhôù döõ lieäu EEPROM (thanh ghi n aø yc h æsö ûduïng 4 bit thaáp). P2. P2. P2.50 Thanh ghi EEADR: ñòa chæ10Dh Thanh ghi chöùa byte thaáp cuûa ñòa chæ trong qu aù trình ghi ñoïc treân boä nhôùdöõ lieäu EEPROM.

Bit 7 EEPGD Program/Data EEPROM Select bit EEPGD = 1 truy xu aát b oä nh ô ùchöông trình. WREN = 0 khoângcho pheùpghi.Bit naøychæ ñöôïc set baèngchöông trình v aøtö ï ñ o ängx où aveà0 khi quaùtrình ñ o ïc d ö õlieäuhoaøntaát. . Bit 1 WR Write Control bit WR = 1 ghi d ö õlie äu . EEPGD = 0 truy x u aátb o än h ô ùd ö õlieäu. WR = 0 hoaøntaátqu aùtrình ghi d ö õlie äu . Bit 3 WRERR EEPROM Error Flag bit WRERR = 1 qu aùtrình ghi leân b o ä nh ô ùb ò g iaù n ñoaïn vaø khoâng tieáp tuïc (do theå caù cch eáñ o äReset WDT hoaëc ). Bit 0 RD Read Control bit RD = 1 ñ o ïc d ö õlieäu .Bit naøychæñöôïc set baèngchöông trình v aøtö ï ño än gx o ùav eà0 khi quaùtrình ghi d ö õlieäuhoaøntaát. Tuy nhieân ñaây k hoâng phaû i laø thanh ghi vaät lí thoâng thöôøng vaø khoâng cho pheùp ngöôi1 s ö û duïng truy xuaát döõ lieäu treân thanh ghi. P2. RD = 0 qu aùtrình ñ o ïc d ö õlieäukhoângxaûyra.54 Thanh ghi EECON2: ñòa chæ18Dh. Ñ aây laø m o ättrong 2 thanh ghi ñieàu khieån boä nhôùEEPROM. WRERR = 0 quaùtrình ghi leânb oänhôùhoaøntaát. Bit 2 WREN EEPROM Write Enable bit WREN = 1 cho pheùpghi. Bit 6-4 Khoângcaànquan taâmvaø maëcñònh mang g iaùtrò 0.

MICROCHIP.DIENDANDIENTU.MICROCHIP.T A Ø L IE Ä U I THAM K H A Û O PIC16F877A DATASHEET MIDRANGE PICmicro FAMILY CAÙC TRANG WEB WWW.COM WWW.COM WWW.NET VAØ AÙC C TRANG WEB K H A Ù C WWW.COM .COM WWW.PICVIETNAM.MICROCHIP.

LỜI KẾT Hi vọng sau khi đọc quyển sách này các đồng chí có những kiến thức cơ bản về vi điều khiển. . TRÂN TRỌNG CẢM ƠN. Thì găp mình sẽ hỗ trợ và cung cấp các chưng trình ví dụ để các đồng chí nghiên cứu.Trên đó mình trình bày chủ yếu là băng ngôn ngữ lập trình ASEMBLY còn các đồng chí nào đã nghiên cứu song mốn nghiên cứa sang ngôn ngữ bậc cao như:C++….