PIC16F84 và một số ứng dụng

LỜI GIỚI THIỆU Ngày nay, với tốc độ phát triển mạnh mẽ của công nghệ tự động trong tất cả mọi lĩnh vực thì việc tìm hiểu và ứng dụng các dòng chip Vi điều khiển là một vấn đề cần được quan tâm. Họ Vi điều khiển 8051 rất quen thuộc với chúng ta, và nó từng được xem là họ vi điều khiển rất ưu việt. Tuy nhiên với nhu cầu ngày càng cao về tính ổn định, tốc độ xử lý cũng như khả năng tiếp cận dễ dàng của người dùng, thì họ 8051 đã không phát huy được ưu thế của mình. Các chip vi điều khiển thuộc dòng PIC của hãng Microchip có lẽ không quá xa lạ. Với công nghệ RISC (Reduced Instruction Set Computer) nâng cao đáng kể tốc độ xử lý, khả năng chống nhiễu, khả năng mở rộng tốt, khả năng nạp lại trên 1000 lần, tập lệnh đơn giản, được hỗ trợ lập trình dưới dạng Macro và đa dạng về chủng loại, thì dòng PIC là một dòng vi điều khiển tốt nhất trong các ứng dụng tự động từ đơn giãn đến phức tạp nhất. Tuy nhiên đến giờ nó còn khá mới mẻ và vẫn chưa được ứng dụng rộng rãi. Vì thế việc tìm hiểu dòng vi điều khiển này là một nhu cầu thực tế và nó hứa hẹn mang lại nhiều hiệu quả thiết thực phục vụ cho công nghệ tự động. PIC16F84 là một tiêu biểu, có thể được coi là chip vi điều khiển đơn giản nhất của dòngï PIC. Với 2 Port, 18 chân và đầy đủ các tính chất ưu việt của dòng PIC, PIC16F84 phù hợp với các ứng dụng vừa và nhỏ, nhất là các thí nghiệm phục vụ học tập, nghiên cứu. Chúng em mong rằng với đồ án “PIC16F84 và một số ứng dụng” sẽ là bước khởi đầu mở ra cái nhìn gần gũi hơn về dòng PIC để từ đó chúng ta có thêm một công cụ đắc lực trong điều khiển tự động. MỤC LỤC NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 1 NHẬN XÉT CỦA HỘI ĐỒNG PHẢN BIỆN 2 LỜI CẢM ƠN 3 LỜI GIỚI THIỆU 4 Phần I: GIỚI THIỆU VỀ PIC16F84 7 I.1. Tổng quan: 7 I.1.1. Cấu trúc 7 I.1.2. Sơ đồ chân 8 I.1.3. Bộ tạo xung 9 I.1.4. Reset 10 I.1.5. Bộ xử lý trung tâm (CPU) 10 I.1.6. Thanh ghi trạng thái status 10 I.1.7. Các port 11 I.1.8. PORTB và TRISB 12 I.2. Tổ chức bộ nhớ 13 I.2.1. Các thanh ghi SFR 14 I.2.2. Bộ đếm chương trình 15 I.2.3. Lập trình cho vi điều khiển 15 I.2.4. Các kiểu định địa chỉ 15 I.3. Các cơ chế ngắt 15 I.3.1. Thanh ghi điều khiển ngắt (INTCON ) 16 I.4. Timer TMR0 17 I.5. Thanh ghi OPTION 18 I.6. Bộ nhớ dữ liệu EEPROM 19 I.6.1. Thanh ghi EECON1 19 Phần II: LẬP TRÌNH HỢP NGỮ CHO PIC16F84 21 II.1. Giới thiệu: 21 II.1.1. Biểu diễn số trong trình biên dịch 21 II.1.2. Các yếu tố của hợp ngữ: 21 II.2. Tập lệnh của PIC: 22 Phần III: PHƯƠNG PHÁP NẠP CHIP 31 III.1. Giới thiệu phần mềm MPLAB 31 III.2. Phần mềm nạp chip IC – PROG: 31 III.3. Mach nạp JDM 32 Phần IV: ỨNG DỤNG 34 IV.1. Điều khiển LED 34 IV.1.1. Hoạt động 34 IV.1.2. Mạch điều khiển 34 IV.2. Điều khiển động cơ Servo 35 IV.2.1. Hoạt động 35 IV.2.2. Mạch điều khiển 38 IV.3. Điều khiển LCD 38 IV.3.1. Giới thiệu về LCD 38 IV.3.2. Hoạt động của LCD trong ứng dụng 41 IV.3.3. Sơ đồ mạch điều khiển LCD 42 IV.4. Mô hình tích hợp: 42 IV.5. Mã chương trình: 44

doc56 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2648 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu PIC16F84 và một số ứng dụng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ûi ñöôïc dòch thaønh moät chuoãi caùc soá 0 vaø 1, goïi laø maõ leänh ( opcode ). Vieäc dòch töø daïng chöõ sang thaønh maõ leänh ñöôïc thöïc hieän bôûi caùc trình bieân dòch, chaúng haïn nhö trình dòch hôïp ngöõ. Sau ñoù CPU seõ giaûi maõ vaø thöïc thi caùc leänh. Thanh ghi traïng thaùi status Hình I5: Thanh ghi traïng thaùi Bit 7_ IRP( Register bank Select bit ): laø bit thöù 8 cuûa thanh ghi STATUS laøm nhieäm vuï ñònh ñòa chæ giaùn tieáp cho RAM noäi. IRP = 1: bank 2 vaø 3 IRP = 0 bank 1 vaø 0 ( töø ñòa chæ 00h ñeán FFh). Bit 6:5 _ RP1: RP0 ( Register Bank Select Bits ): Hai bit naøy duøng ñeå choïn bank thanh ghi. 01 = Bank 1 00 = Bank 0 Bit 4 _TO (Time – out ): bit naøy ñöôïc set baèng 1 moãi khi WDT bò traøn. 1 = Chöa traøn 0 = Bò traøn Bit 3_ PD ( Power – down bit ) bit naøy ñöôïc set moãi khi vi ñieàu khieån ñöôïc caáp nguoàn, khi baét ñaàu chaïy, sau khi reset, vaø sau khi thöïc hieän leänh CLRWDT Bit 2_ Z ( Zero bit ) Duøng ñeå chæ keát quaû ra 0, ñöôïc set moãi khi keát quaû traû veà cuûa moät pheùp toaùn soá hoïc hay luaän lyù coù giaù trò laø 0. Bit 1_ DC ( Digit Carry ) Bò aûnh höôûng bôûi caùc pheùp toaùn coäng, tröø. Noù ñöôïc set khi ta tröø moät soá cho moät soá lôùn hôn.Vaø ñöôïc reset trong tröôøng hôïp ngöôïc laïi. Bit 0_ C (Carry )aûnh höôûng bôûi caùc leänh ADDWF, ADDLW, SUBLW, SUBWF. Caùc port Port duøng ñeå chæ moät nhoùm caùc chaân treân vi ñieàu khieån coù theå truy xuaát ñoàng thôøi, hoaëc coù theå set moät bit mong muoán leân 1 hay xuoáng 0, hoaëc ñoïc töø chuùng traïng thaùi ñang toàn taïi. Veà maët vaät lyù, Port laø moät thanh ghi beân trong vi ñieàu khieån ñöôïc noái bôûi daây daãn vôùi caùc chaân cuûa vi ñieàu khieån. Noù ñaïi dieän cho söï keát noái vaät lyù giöõa boä xöû lyù trung taâm vôùi theá giôùi beân ngoaøi. Vi ñieàu khieån duøng chuùng ñeå hieån thò hay ñieàu khieån caùc caùc thaønh phaàn hay thieát bò khaùc. Tuyø theo chöùc naêng, maø moät vaøi chaân coù theå ñaûm nhieäm caû vai troø, chaúng haïn nhö chaân RA4/TOCKI, vöøa laø bi thöù 4 cuûa Port A, laïi vöøa laø ngoõ vaøo töø beân ngoaøi cho boä ñeám. Vieäc löïa choïn moät trong hai chöùc naêng naøy ñöôïc thöïc hieän qua vieäc thay ñoåi giaù trò cho caùc thanh ghi chuyeân duïng, chaúng haïn ôû ñaây laø bit thöù 5 TOSC trong thanh ghi OPTION. Khi ta choïn moät trong hai chöùc naêng thì chöùc naêng coøn laïi seõ khoâng hoaït ñoäng ñöôïc. Taát caû caùc chaân trong port ñeàu coù theå ñöôïc duøng nhö caùc ngoõ xuaát hay nhaäp, tuyø thuoäc vaøo yeâu caàu cuûa thieát bò caàn ñieàu khieån. Ñeå ñònh nghóa moät chaân laø xuaát hay laø nhaäp, thì ta söû duïng caùc thanh ghi TRIS ôû bank1. Neáu moät bit trong thanh ghi TRIS baèng 1, thì bit töông öùng vôùi vò trí ñoù trong port luùc naøy seõ laø ngoõ nhaäp, vaø ngöôïc laïi.Moãi moät port coù moät thanh ghi TRIS rieâng cho noù, port A öùng vôùi TRISA, port B öùng vôùi TRISB.Thanh ghi Port A vaø B naèm trong bank 0, trong khi TRISA vaø TRISB naèm trong bank1. PORTB vaø TRISB Port B goàm 8 chaân. Thanh ghi töông öùng cho vieäc xaùc ñònh chieàu döõ lieäu laø TRISB. Hình I6: Caáu truùc PORTB & TRISB Moãi chaân trong Port B ñeàu coù saün moät ñieän trôû keùo leân coù giaù trò nhoû ôû ngay beân trong (duøng ñeå noái ngoõ leân möùc logic 1 ) coù theå ñöôïc kích hoaït baèng caùch reset bit thöù 7 RBPU trong thanh ghi OPTION. Caùc ñieän trôû keùo leân naøy töï ñoäng taét khi caùc chaân cuûa port ñöôïc ñònh nghóa laø caùc ngoõ xuaát. Khi vi ñieàu khieån baét ñaàu hoaït ñoäng, caùc ñieän trôû naøy khoâng ñöôïc kích hoaït. Caùc chaân töø RB4 ñeán RB7 cuûa port B coù theå gaây ra ngaét khi traïng thaùi cuûa noù thay ñoåi töø möùc 0 leân möùc 1 vaø ngöôïc laïi. Chæ coù nhöõng chaân naøo ñöôïc ñònh nghóa laø ngoõ nhaäp môùi coù theå gaây ra ngaét ñöôïc. PORTA vaø TRISA Port A coù 5 chaân xuaát nhaäp, thanh ghi töông öùng cuûa noù laø TRISA coù ñòa chæ 85h. Cuõng gioáng nhö port B, vieäc set moät bit trong thanh ghi TRISA seõ ñònh nghóa bit töông öùng trong port A laø xuaát hay laø nhaäp. Moät ñieàu quan troïng caàn chuù yù laø chaân RA4 cuûa port A chæ coù theå döøng ñeå nhaäp maø thoâi. Noù cuõng duøng ñeå nhaäp töø ngoaøi cho boä ñònh thôøi TMR0. Hình I7: Caáu truùc PORTA & TRISA Toå chöùc boä nhôù PIC16F84 coù hai khoái boä nhôù phaân caùch nhau, moät cho döõ lieäu vaø caùi coøn laïi cho chöông trình. Boä nhôù EPPROM vôùi caùc thanh ghi GPR vaø SFR trong boä nhôù RAM seõ quaûn lyù khoái döõ lieäu, coøn boä nhôù FLASH quaûn lyù khoái chöông trình. Boä nhôù chöông trình Boä nhôù chöông trình ñöôïc cheá taïo baèng coâng ngheä FLASH, noù cho pheùp laäp trình cho vi ñieàu khieån ñöôïc nhieàu laàn tröôùc khi noù ñöôïc laép ñaët vaøo thieát bò, hoaëc ngay caùc sau khi noù ñöôïc laép ñaët maø coù moät söï coá naøo ñoù xaûy ra. Dung löôïng cuûa boä nhôù chöông trình naøy laø 1024 doøng leänh vôùi ñoä daøi 14 bit, trong ñoù caùc vò trí töø 0h ñeán 4h ñöôïc duøng cho caùc vector reset vaø ngaét. Boä nhôù döõ lieäu Boä nhôù döõ lieäu bao goàm boä nhôù RAM vaø EPPROM. Boä nhôù EPPROM bao goàm 64 byte, noäi dung cuûa noù khoâng bò maát ñi neáu lôõ nhö maát nguoàn. EPPROM khoâng ñöôïc ñònh ñòa chæ tröïc tieáp, maø ñöôïc truy xuaát giaùn tieáp thoâng qua 2 thanh ghi laø EEADR vaø EEDATA. Bôûi vì boä nhôù EPPROM ñöôïc duøng cho vieäc löu tröõ nhöõng thoâng soá quan troïng, cho neân ngöôøi laäp trình caàn phaûi tuaân theo moät soá quy taéc ñeå traùnh maéc loãi trong luùc vieát. Boä nhôù Ram coù ñòa chæ töø 0x0C ñeán 0x4F, bao goàm 68 oá nhôù 8 bit. Vieäc xaùc ñònh vò trí cuûa RAM cuõng ñöôïc thöïc hieän thoâng qua thanh ghi GPR Caùc thanh ghi SFR Ñaây laø caùc thanh ghi coù chöùc naêng ñaëc bieät, chieám 12 oâ nhôù ñaàu tieân trong caùc bank 0 vaø bank 1. Hình I8: Toå chöùc boä nhôù PIC16F84 Boä ñeám chöông trình Boä ñeám chöông trình (PC ) laø moät thanh ghi 13 bit, noù chöùa ñòa chæ cuûa caùc leänh caàn thöïc thi. Noù ñöôïc xaùc ñònh baèng caùch keát hôïp cuûa thanh ghi 5 bit PCLATCH cho 5 bit cao caû ñòa chæ vôùi thanh ghi 8 bit PCL cho 8 bit thaáp cuûa ñòa chæ. Baèng caùch taêng daàn noäi dung cuûa PC, vi ñieàu khieån seõ töøng böôùc thöïc hieän caùc leänh coù trong chöông trình. Laäp trình cho vi ñieàu khieån Ñeå laäp trình vaøo boä nhôù chöông trình,vi ñieàu khieån phaûi ñöôïc set ôû cheá ñoä laøm vieäc ñaëc bieät, cuï theå khi ñoù chaân MCLR seõ ñöôïc noái vôùi aùp 13,5V, vaø nguoàn cung caáp phaûi oån ñònh. Boä nhôù chöông trình coù theå ñöôïc laäp trình noái tieáp söû duïng 2 chaân “ data / clock “. Caùc kieåu ñònh ñòa chæ Ñòa chæ oâ nhôù trong RAM coù theå ñöôïc truy xuaát baèng hai caùch: _Ñònh ñòa chæ tröïc tieáp. _Ñònh ñòa chæ giaùn tieáp. Caùc cô cheá ngaét Ngaét laø moät ñaëc tính cuûa vi ñieàu khieån maø cho pheùp noù ñaùp öùng ñöôïc vôùi nhöõng söï kieän taïi luùc noù xaûy ra, vaø xaùc ñònh xem vi ñieàu khieån seõ laøm gì tieáp theo sau ñoù. Ñaây laø moät chöùc naêng voâ cuøng quan troïng, bôûi vì noù taïo neân söï gaén keát giöõa vi ñieàu khieån vôùi theá giôùi xung quanh noù. Thoâng thöôøng thì ngaét seõ laøm ngöng chöông trình ñang thöïc hieän, coøn goïi laø chöông trình neàn, vaø thöïc hieän tieáp chöông trình ngaét töông öùng vôùi nguyeân nhaân gaây ra ngaét. Hình I9: Caáu truùc ngaét Thanh ghi ñieàu khieån ngaét (INTCON ) Thanh ghi ñieàu khieån ngaét (INTCON) ñöôïc truy xuaát baèng caùch choïn bank töông öùng. Noù coù chöùc naêng cho pheùp hay laø caám xaûy ra ngaét, vaø xaùc ñònh caùc nguyeân nhaân ngaét. Hình I10: Thanh ghi ñieàu khieån ngaét Bit 7_ GIE ( Global Interupt Enable bit ): Ñaây laø bit cho pheùp hay khoâng cho pheùp ngaét. Neáu GIE = 1: Caùc ngaét ñöôïc cho pheùp. Neáu GIE = 0: Caùc ngaét bò caám. Bit 6 EEIE ( EPPROM Write Complete Interupt Enable bit ): Bit cho pheùp ngaét gaây ra taïi nôi keát thuùc cuûa vieäc vieát chöông trình con vaøo EPPROM. Bit 5 TOIE ( TMR0 Overflow Interupt Enable bit ): Bit cho pheùp kích hoaït ngaét gaây ra bôûi söï traøn cuûa TMR0. Bit 4 INTE( INT External Interupt Enable bit ): Bit cho pheùp ngaét gaây ra bôûi ngaét ngoaøi taït chaân RB0/INT. Bit 3 RBIE ( RB port change Interupt Enable bit ) Cho pheùp ngaét xaûy ra khi coù söï thay ñoåi traïng thaùi treân caùc chaân RB4 ñeán RB7. Bit 2 TOIF ( TMR0 Overflow Interupt Flag bit ): Côø baùo traøn cuûa TMR0. Bit naøy phaûi ñöôïc xoaù baèng phaàn meàm ñeå coù theå söû duïng ngaét naøy tieáp theo. Bit 1 INTF ( INT External Interupt Flag bit ): Côø baùo khi xaûy ra ngaét ngoaøi. Bit 0 RBIF ( RB Port Change Interupt Flag bit ): Bit xaùc ñònh söï thay ñoåi treân caùc chaân töø RB4 ñeán RB7. Nit naøy cuõng caàn phaûi ñöôïc xoaù trong chöông trình con ngaét ñeå coù theå ñaùp öùng caùc ngaét tieáp theo xaûy ra sau ñoù. Ngaét ngoaøi treân chaân RB0/INT cuûa vi ñieàu khieån Ngaét ngoaøi xaûy ra treân chaân RB0/INT Ñöôïc kích hoaït bôûi tín hieäu caïnh leân ( neáu bit INTEDG = 1 trong thanh ghi OPTION ) hoaëc bôûi tín hieäu caïnh xuoáng ( neáu INTEDG = 0 ). Khi coù tín hieäu xuaát hi65n treân chaân INT, bit INTF seõ ñöôïc set trong thanh ghi INTCON. Bit naøy phaûi ñöôïc xoaù ñi trong chöông trình phuïc vuï ngaét ñeå ngaét khoâng xaûy ra nöõa khi quay laïi chöông trình chính. Ngaét do söï traøn cuûa boä ñeám TMR0 Khi TMR0 bò traøn, noù seõ set bit TOIF leân 1. Ñaây laø moät chöùc naêng quan troïng, bôûi vì nhieàu vaán ñeà hoùc buùa trong thöïc teá coù theå ñöôïc giaûi quyeát khi söû duïng chöùc naêng naøy. Ngaét do cô cheá naøy coù theå ñöôïc cho pheùp hay caám baèng caùch set/ reset bit T0IE. Ngaét do söï thay ñoåi traïng thaùi treân caùc chaân RB4:RB7. Söï thay ñoåi traïng thaùi treân caùc chaân RB4: RB7 seõ set bit RBIF (INTCON ) leân 1, töø ñoù kích hoaït ngaét xaûy ra.Ñeå cho caùc chaân naøy nhaän ñöôïc söï thay ñoåi traïng thaùi cuûa tín hieäu, thì chuùng phaûi ñöôïc ñònh nghóa laø caùc ngoõ nhaäp. Neáu moät trong chuùng ñöôïc ñònh nghóa laø ngoõ xuaát, thì ngaét seõ khoâng xaûy ra ñöôïc. Neáu nhö ta ñònh nghóa taát caû chuùng ñeàu laø ngoõ xuaát, thì traïng thaùi hieän thôøi cuûa chuùng seõ ñöôïc so saùnh vôùi giaù trò cuõ maø ñöôïc löu ôû laàn ñoïc cuoái cuøng töø port B. Khôûi taïo ngaét Ñeå coù theå ñöôïc chöùc naêng ngaét cuûa vi ñieàu khieån, thì ñaàu tieân ta phaûi thöïc hieän caùc leänh khôûi taïo ban ñaàu cho noù, baèng caùch xaùc ñònh caùc bit töông öùng trong thanh ghi ñieàu khieån ngaét INTCON. Timer TMR0 Timer thöôøng laø phaàn gaây khoù hieåu cuûa vi ñieàu khieån, theá nhöng neáu tìm hieåu kyõ caøng, ta seõ thaáy noù giuùp ích raát nhieàu trong coâng taùc laäp trình cho vi ñieàu khieån. Moät trong nhöõng öùng duïng cuûa noù laø thieát laäp moái quan heä giöõa moät ñaïi löôïng thöïc, chaúng haïn nhö thôøi gian vaø moät bieán soá maø bieåu thò traïng thaùi cuûa moät boä ñònh thôøi vôùi vi ñieàu khieån. Veà maët vaät lyù, timer laø moät thanh ghi 8 bit coù giaù trò taêng daàn töø 0 ñeán 255, vaø sau ñoù laïi tieáp tuïc ñeám leân töø 0. Söï taêng leân naøy ñöôïc thöïc hieän treân neàn cuûa caùc chöông trình ñang thöïc hieän cuûa vi ñieàu khieån. Noù ñöa ra cho ngöôøi söû duïng nhieàu giaûi phaùp höõu hieäu trong vieäc giaûi quyeát toái öu vaán ñeà, moät trong chuùng laø taêng moät bieán soá naøo ñoù leân taïi moãi thôøi ñieåm timer bò traøn. Nhö ñaõ noùi treân, PIC16F84 coù moät boä timer 8 bit, vaø nhö vaäy giaù trò toái ña maø timer ñeám laø 256 ( töø 0 ñeán 255 ). Sau moãi laàn timer ñeám ñeán 255, noù seõ töï reset giaù trò veà 0 vaø baét ñaàu ñeám laïi töø ñaàu. Taïi thôøi ñieåm timer chuyeån giaù trò töø 255 veà 0, bit T0IF trong thanh ghi INTCON seõ ñöôïc set leân 1. Neáu nhö caùc ngaét ñöôïc cho pheùp xaûy ra, thì con troû chöông trình seõ nhaûy ñeán chöông trình con phuïc vuï ngaét. Beân caïnh vieäc nhaän xung noäi, giaù trò cuûa timer cuõng coù theå taêng leân nhôø vaøo vieäc nhaän xung töø beân ngoaøi thoâng qua chaân RA4/ TOCKI, vaø khi ñoù timer hoaït ñoäng nhö moät boä ñeám. Thanh ghi OPTION Hình I11: Thanh ghi OPTION Bit 7 RBPU ( PORTB Pull up Enable bit ) Ñaây laø bit kích hoaït hay taét ñieän trôû noäi keùo leân coù trong caùc chaân cuûa port B. 1 = Kích hoaït 0 = Voâ hieäu Bit 6 INTEDG ( Interupt Edge Select bit ) Neáu söï kieän ngaét ñöôïc cho pheùp, bit naøy seõ xaùc ñònh xem ngaét xaûy ra khi coù söï thay ñoåi cuûa tín hieäu taïi caïnh leân hay caïnh xuoáng. 1 = Caïnh leân 0 = Caïnh xuoáng Bit 5_ T0CS( TMR0 Clock Source Select bit ) Bit naøy seõ xaùc ñònh xem boä ñònh thôøi seõ taêng taïi moãi ¼ xung kích cuûa boä dao ñoäng, hoaëc laø taêng daàn thoâng qua xung kích töø b6n ngoaøi thoâng qua chaân RA4/ T0CKI. 1 = Xung töø beân ngoaøi 0 = ¼ xung beân trong Bit 4 T0SE ( TMR0 Source Edge Select bit ) Neáu söû duïng TMR0 nhö laø moät boä ñeám xung beân ngoaøi thoâng qua chaân RA4 thì bit naøy seõ xaùc ñònh xem boä ñeám seõ taêng taïi caïnh leân hay caïnh xuoáng cuûa xung kích. 1 = Caïnh xuoáng 0 = Caïnh leân Bit 3 PSA ( Presscaler Assignment bit ) Bit naøy seõ xaùc ñònh tæ leä giöõa TMR0 vaø WDT. 1 = Tæ leä gaùn cho WDT. 0 = Tæ leä ñöôïc gaùn cho TMR0. Bit 0: 2 PS0, PS1, PS2 ( Presscaler Assignment bit ) Trong tröôøng hôïp söû duïng xung thaïch anh 4 MHz, thì moät chu kyø leänh toán 1us. Caùc bit PS0, PS1, PS2 seõ xaùc ñònh khoaûng thôøi gian giöõa moãi laàn taêng cuûa TMR0 hay WDT. Boä nhôù döõ lieäu EEPROM PIC16F84 coù moät boä nhôù döõ lieäu EPPROM vôùi dung löôïng 64 bytes coù ñòa chæ töø 00h ñeán 63h, coù theå ñöôïc ghi hay ñoïc. Ñaëc tính quan troïng nhaát cuûa noù chính laø döõ lieäu caát trong noù khoâng bò maát ñi khi bò maát nguoàn. Theo nhaø saûn xuaát thì döõ lieäu coù theå caát trong EPPROM seõ ñöôïc baûo toaøn ñeán 40 naêm. Boä nhôù EPPROM ñöôïc ñaët trong moät vuøng nhôù ñaëc bieät vaø coù theå ñöôïc truy xuaát thoâng qua caùc thanh ghi ñaëc bieät. Chuùng laø: EEDATA chöùa caùc döõ lieäu ñoïc vieát. EEADR chöùa ñòa chæ cuûa phaân vuøng EPPROM caàn truy xuaát. EECON1 chöùa caùc bit ñieàu khieån. EECON2 thanh ghi naøy khoâng toàn taïi veà maët vaät lyù, maø noù duøng ñeå baûo veä EPPROM khoûi nhöõng loãi laäp trình khoâng ñaùng coù. Thanh ghi EECON1 Hình I12: Thanh hi EECON1 Bit 4 EEIF (EEPROM Write Operation Interupt Flag bit) Bit duøng ñeå baùo cho vi ñieàu khieån bieát quaù trình ghi döõ lieäu vaøo EPPROM ñaõ keát thuùc. Khi keát thuùc quaù trình ghi, thì bit naøy seõ töï ñoäng set leân 1. Ngöôøi laäp trình caàn phaûi xoaù bit naøy baêng phaàn meàm ñeå noù coù theå nhaän bieát ñöôïc moät söï keát thuùc cuûa vieäc ghi tieáp theo. 1 = Ghi keát thuùc 0 = Ghi chöa xong, hoaëc chöa baét ñaàu ghi Bit 3 WRERR (Write EPPROM Error Flag ) Baùo loãi neáu gaëp trong quaù trình ghi vaøo EPPROM. Bit naøy chæ ñöôïc set leân khi quaù trình ghi vaøo EPPROM bò ngaét bôûi moät tín hieäu reset hoaëc bò traøn WDT khi WDT ñöôïc kích hoaït. 1 = Coù loãi xaûy ra 0 = Khoâng coù loãi Bit 2 WREN ( EPPROM Write Enable bit ): Bit cho pheùp ghi vaøo EPPROM. Neáu bit naøy khoâng ñöôïc set leân thì vi ñieàu khieån seõ khoâng cho pheùp ghi vaøo EPPROM. Bit 1 WR (Write Control bit ): Vieäc set bit naøy leân seõ khôûi taïo vieäc ghi döõ lieäu töø thanh ghi EEDATA ñeán moät ñòa chæ cuï theå thoâng qua thanh ghi EEDR. 1 = Khôûi taïo ghi 0 = Khoâng khôûi taïo Bit 0 RD ( Read Control bit ): Bit duøng ñeå ñieàu khieån vieäc khôûi taïo quaù trình chuyeån döõ lieäu töø moät ñòa chæ ñaõ ñöôïc ñònh nghóa trong EEDR ñeán thanh ghi EEDATA. 1 = Khôûi taïo 0 = Khoâng khôûi taïo LAÄP TRÌNH HÔÏP NGÖÕ CHO PIC16F84 Giôùi thieäu: Khaû naêng giao tieáp laø moät ñieàu raát quan troïng trong moïi lónh vöïc. Tuy nhieân, ñieàu ñoù chæ coù theå thöïc hieän ñöôïc khi hai beân giao tieáp bieát cuøng moät ngoân ngöõ. Vôùi quy taéc treân thì con ngöôøi vaø vi ñieàu khieån cuõng coù theå giao tieáp vôùi nhau. Ngoân ngöõ maø vi ñieàu khieån vaø con ngöôøi duøng ñeå giao tieáp goïi laø hôïp ngöõ. Teân “ Hôïp Ngöõ “ khoâng coù yù nghóa gì saâu xa, noù töông töï nhö teân caùc ngoân ngöõ khaùc nhö “ Tieáng Anh “ hay “ Tieáng Phaùp “. Noùi chính xaùc hôn thì hôïp ngöõ chæ laø giaûi phaùp trung gian, bôûi vì chöông trình vieát baèng hôïp ngöõ phaûi ñöôïc dòch sang maõ nhò phaân ñeå maø vi ñieàu khieån coù theå hieåu ñöôïc. Hôïp ngöõ vaø trình bieân dòch hôïp ngöõ laø hai khaùi nieäm khaùc nhau. Hôïp ngöõ laø ngoân ngöõ duøng ñeå vieát chöông trình cho vi ñieàu khieån, coøn trình bieân dòch hôïp ngöõ laø chöông trình treân maùy tính caù nhaân maø noù dòch chöông trình vieát baèng hôïp ngöõ sang maõ nhò phaân, chöông trình maø ñaõ ñöôïc dòch sang maõ nhò phaân thì ñöôïc goïi laø ngoân ngöõ maùy. Bieåu dieãn soá trong trình bieân dòch Trong hôïp ngöõ MPLAB, caùc soá coù theå bieåu dieãn döôùi daïng thaäp phaân, thaäp luïc phaân, hoaëc nhò phaân.. Chuùng ta seõ minh hoaï ñieàu naøy vôùi soá 240: .240 ;Decimal 0xF0 ;Thaäp luïc phaân B’11110000’ ;nhò phaân Soá thaäp phaân ñöôïc baét ñaàu baèng moät daáu chaám, soá thaäp luïc phaân ñöôïc baét ñaàu baèng 0x, vaø soá nhò phaân baét ñaàu baèng chöõ b vôùi daáu nhaùy ñôn. Caùc yeáu toá cuûa hôïp ngöõ: Caùc yeáu toá cuûa hôïp ngöõ goàm coù: Nhaõn Leänh Toaùn töû Caùc chæ daãn -Lôøi chuù thích Nhaõn: Nhaõn bieåu thò ñòa chæ cuûa leänh theo sau. Khi coù söï reõ nhaùnh ñeán leänh naøy, nhaõn ñöôïc duøng trong tröôøng toaùn haïng cuûa leänh reõ nhaùnh hoaëc nhaûy. Maõ gôïi nhôù leänh: Maõ gôïi nhôù leänh hoaëc chæ daãn cuûa trình hôïp ngöõ theo sau tröôøng nhaõn. Caùch thöùc maø chuùng ta vieát leänh ñöôïc goïi laø cuù phaùp. Trong ví duï sau, chuùng ta coù theå nhaän ra loãi trong khi vieát bôûi vì leänh movlp vaø gotto khoâng toàn taïi trong vi xöû lyù PIC16F84. Leänh vieát ñuùng: Movlw H’01FF’ Goto Start Leänh vieát sai: Movlp H’01FF’ Gotto Start Toaùn haïng: Toaùn haïng theo sau maõ gôïi nhôù. Toaùn haïng chöùa ñòa chæ hoaëc döõ lieäu maø leänh seõ söû duïng. Noùi caùch khaùc, toaùn haïng laø nhaân toá cho leänh ñang thöïc thi. Chuùng thöôøng laø caùc thanh ghi, bieán hoaëc haèng. Lôøi chuù thích: Lôøi chuù thích laø moät chuoãi kyù töï maø ngöôøi laäp trình vieát ñeå laøm cho chöông trình roõ raøng. Noù ñöôïc ñaët sau leänh vaø ñöôïc baét ñaàu baèng daáu chaám phaåy(;). Chæ daãn: Lôøi chæ daãn thì töông töï nhö moät leänh, nhöng noù khoâng gioáng nhö moät leänh maø noù phuï thuoäc vaøo kieåu vi ñieàu khieån, vaø noù bieåu dieãn ñaëc tính cuûa hôïp ngöõ. Lôøi chæ daãn luoân luoân ñöôïc cho yù nghóa thoâng qua bieán vaø thanh ghi. Ví duï nhö LEVEL coù theå laø söï chæ ñònh cho bieán trong RAM ôû taïi ñòa chæ 0Dh. Baèng caùch naøy, bieán ôû taïi ñòa chæ ñoù coù theå ñöôïc truy xuaát thoâng qua lôøi chæ daãn LEVEL. Ñieàu naøy seõ deã hôn cho ngöôøi laäp trình khi phaûi nhôù ñòa chæ 0Dh chöùa ñöïng thoâng tin LEVEL. Taäp leänh cuûa PIC: Taäp leänh cuûa PIC ñöôïc xaây döïng treân cô sôû ngoân ngöõ Assemble. Tuy nhieân ñeå ngöôøi duøng deã daøng tieáp caän vaø giuùp cho quaù trình laäp trình trôû neân ñôn giaûn hôn, taäp leäch cuûa PIC ñöôïc toái thieåu hoaù coøn 35 leänh. Nhöng khoâng vì ít leäch hôn taäp leänh cuûa caùc hoï vi ñieàu khieån khaùc maø khaû naêng öùng duïng cuûa PIC bò haïn cheá. Theo nhö nhaø saûn xuaát MicrochipÒ thì taäp leänh cuûa PIC coù theå ñaùp öùng ñöôïc taát caû caùc öùng duïng maø caùc hoï vi ñieàu khieån khaùc coù theå laøm ñöôïc. Vaø thöïcï teá cho thaáy trong quaù trình laäp trình cho PIC baïn seõ thaáy vieäc laäp trình seõ raát deã daøng hôn caùc hoï vi ñieàu khieån khaùc vaø chöa thaáy moät haïn cheá veà giaûi thuaät naøo gaây ra töø taäp leänh. Beân caïnh ñoù, vôùi söï hoã trôï cuûa laäp trình döôùi daïng Macro, vieäc laäp trình trôû neân nheï nhaøng hôn vaø khaû naêng môû roäng öùng duïng laø raát lôùn. Sau ñaây seõ lieät keâ caùc leänh cuûa hoï PIC Movlw Daïng leänh: Movlw K Hoaït ñoäng: Ghi haèng soá K vaøo thanh ghi W Giaù trò cuûa K töø 0 ñeán 255 Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 2 Movwf Daïng leänh: Movwf f Hoaït ñoäng: Noäi dung cuûa thanh ghi W ñöôïc cheùp sang thanh ghi F Giaù trò cuûa f töø 0 ñeán 127 Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 2 Movf Daïng leänh: Movf f, d Hoaït ñoäng: Noäi dung cuûa thanh ghi f ñöôïc löu tröõ vaøo thanh ghi d Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 Clrw Daïng leänh: Clrw Hoaït ñoäng: Xoaù thanh ghi W Taùc ñoäng leân côø :Z Soá chu kyø: 1 Soá byte: 2 Clrf Daïng leänh: Clrf f Hoaït ñoäng: Xoaù thanh ghi f Thanh ghi f coù giaù trò töø 0 ñeán 127 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 Swapf Daïng leänh: Swapf f, d Hoaït ñoäng: Nibbles thaáp vaø nibbles cao cuûa thanh ghi f ñöôïc hoaùn ñoåi vò trí cho nhau. Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 2 Addlw Daïng leänh: Addlw K Hoaït ñoäng: Noäi dung cuûa thanh ghi W ñöôïc coäng vôùi haèng soá taùm bit K, keát quaû löu vaøo thanh ghi W Taùc ñoäng leân côø:C,DC,Z Soá chu kyø:1 Soá byte: 2 Addwf Daïng leänh: Addwf f,d Hoaït ñoäng: (W) + (f) => d Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø: C,DC,Z Soá chu kyø:1 Soá byte: 2 Sublw Daïng leänh: Sublw K Hoaït ñoäng: K-(W) => W Haèng soá K coù giaù trò töù 0 ñeán 255 Taùc ñoäng leân côø:C,DC,Z Soá chu kyø:1 Soá byte: 2 Subwf Daïng leänh: Subwf f,d Hoaït ñoäng: (F) –(w) => d Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø:C,DC,Z Soá chu kyø:1 Soá byte: 2 Andlw Daïng leänh: Andlw K Hoaït ñoäng: (W) and k => W Haèng soá K coù giaù trò töù 0 ñeán 255 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 Andwf Daïng leänh: Andwf f,d Hoaït ñoäng: (W) and F => d Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 Iorlw Daïng leänh: IORLW Hoaït ñoäng: Haèng soá K coù giaù trò töù 0 ñeán 255 Hoaït ñoäng cuûa leänh:(W) OR (K) => W Haèng soá K coù giaù trò töù 0 ñeán 255 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 IORWF Daïng leänh: IORWF f,d Hoaït ñoäng: (W) OR (F) => d Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 XORLW Daïng leänh: XORLW K Hoaït ñoäng: Haèng soá K coù giaù trò töù 0 ñeán 255 Hoaït ñoäng cuûa leänh:(W) XOR (K) => W Haèng soá K coù giaù trò töù 0 ñeán 255 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 XORWF Daïng leänh: XORWF f,d Hoaït ñoäng: (W) XOR (F) => d Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 INCF Daïng leänh: INCF f,d Hoaït ñoäng: (F) + 1 => d Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 DECF Daïng leänh: DECF f,d Hoaït ñoäng: (F) - 1 => d Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :Z Soá chu kyø:1 Soá byte: 2 RLF Daïng leänh: RLF f,d Hoaït ñoäng: Dich thanh ghi F sang trai 1 bit thoâng qua côø c. Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :C Soá chu kyø:1 Soá byte: 2 RRF Daïng leänh: RRF f,d Hoaït ñoäng: Dich thanh ghi F sang phaûi 1 bit thoâng qua côø C. Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :C Soá chu kyø:1 Soá byte: 2 COMF Daïng leänh: COMF f,d Hoaït ñoäng: Laáy buø noäi dung cuûa thanh ghi F. Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi W Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi F Giaù trò cuûa thanh ghi F töø 0 ñeán 127 Taùc ñoäng leân côø :C Soá chu kyø:1 Soá byte: 2 BCF Daïng leänh: BCF f,b Hoaït ñoäng: Xoaù bit b cuûa thanh ghi f veà 0. Giaù trò cuûa thanh ghi f töø 0 ñeán 127 Giaù trò cuûa b töø 0 ñeán 7 Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 2 BSF Daïng leänh: BCF f,b Hoaït ñoäng: Set bit b cuûa thanh ghi f leân 1. Giaù trò cuûa thanh ghi f töø 0 ñeán 127 Giaù trò cuûa b töø 0 ñeán 7 Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 2 BTFSC Daïng leänh: BTFSC f,b Hoaït ñoäng: - Neáu bit b trong thanh ghi f baèng 0,con troû chöông trình seõ nhaûy ñeán leänh keá tieáp. INCFSZ Daïng leänh: INCFSZ f,d Hoaït ñoäng: Neáu d = 0 keát quaû ñöôïc löu vaøo thanh ghi w Neáu d = 1 keát quaû ñöôïc löu vaøo thanh ghi f Hoaït ñoäng cuûa leänh:(f) + 1 => d Giaù trò cuûa thanh ghi f töø 0 ñeán 127 GOTO Daïng leänh: GOTO K Hoaït ñoäng: Nhaûy voâ ñieàu kieän ñeán ñòa chæ K. Giaù trò cuûa K töø 0 ñeán 2048 Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 4 CALL Daïng leänh: CALL K Hoaït ñoäng: Goïi chöông trình con Giaù trò cuûa K töø 0 ñeán 2048 Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 4 RETURN Daïng leänh: RETURN Hoaït ñoäng: Laáy noäi dung töø ñænh cuûa ngaên xeáp löu vaøo boä ñeám chöông trình. Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 4 RETLW Daïng leänh: RETLW K Hoaït ñoäng: (K) =>w ; TOS => PC Giaù trò cuûa thanh ghi F töø 0 ñeán 255 Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 4 RETFIE Daïng leänh: RETFIE Hoaït ñoäng: TOS =>PC;1=>GIE Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 4 NOP Daïng leänh: NOP Hoaït ñoäng: Khoâng laøm gì caû. Khoâng taùc ñoäng leân côø Soá chu kyø:1 Soá byte: 4 CLRW DT Daïng leänh: CLRWDT Hoaït ñoäng: 0=> WDT 0=>WDT prescaler 1=> TO 1=>PD Taùc ñoäng leân côø:TO,PD Soá chu kyø:1 Soá byte: 2 SLEEP Daïng leänh: SLEEP Hoaït ñoäng: Cheá ñoä döøng. PHÖÔNG PHAÙP NAÏP CHIP Giôùi thieäu phaàn meàm MPLAB MBLAPÒ laø phaàn meàm ñöôïc nhaø saûn xuaát_Microchip cung caáp giuùp ngöôøi duøng laäp trình cho PIC baèng ngoân ngöõ Assemble cuûa noù. Phaàn meàm hoã trôï ñaày ñuû caùc modul tieän ích giuùp cho vieäc laäp trình vaø naïp vaøo chip. Caùc modul cuûa phaàn meàm goàm: Project: hoã trôï coâng cuï quaûn lyù 1 Project. Goàm caùc phaàn: Quaûn lyù project Workspace: hoã trôï soaïn thaûo leänh Build: Dòch taäp tin.Asm sang maõ maùy.Hex Debugger: Moâ phoûng vaø söûa loãi Programmer: hoã trôï phaàn meàm naïp chip vôùi caùc maïch naïp chuaån: PICSTART Plus MPLAB MP3 MPLAB ICD2 PRO MATE 2 Phaàn meàm naïp chip IC – PROG: Trong caùc öùng duïng naøy, phaàn meàm ñöôïc duøng ñeå naïp cho chip PIC16F84 laø phaàn meàm IC-Prog. Ñaây laø phaàn meàm hoã trôï naïp chip vi ñieàu khieån khaù nhoû goïn nhöng raát hieäu quaû. Icprog khoâng chæ hoã trôï naïp taát caû caùc chip vi ñieàu khieån thuoäc doøng PIC maø coøn hoã trôï caùc hoï khaùc nhö: 59Cxx, 24Cxx, 93Cxx, BR, CXK… Moãi loaïi vi ñieàu khieån ñeàu ñöôïc phaàn meàm hoå trôï maïch naïp maø chuùng ta coù theå tham khaûo taïi trang web: http\\www.Icprog.Com Moät ñaëc ñieåm raát hay vaø tieän lôïi cuûa chöông trình laø noù coù khaû naêng dòch ngöôïc taäp tin maõ maùy.Hex veà daïng maõ gôïi nhôù .Asm khaù chính xaùc. Ñieàu ñoù giuùp cho ngöôøi laäp trình coù theå kieåm tra vaø söûa loãi ngay khi naïp hay duøng laïi maõ leänh ñaõ ñöôïc löu treân chip dó nhieân vôùi ñieàu kieän laø maõ nguoàn môû (CP off_code protection) Hình III1: Chöông trình naïp chip ICProg Trong caùc öùng duïng ôû ñaây, maïch hoã trôï ñöôïc duøng laø maïch JDM. Mach naïp JDM JDM ñöôïc thieát keá theo phöông phaùp chuaån naïp cho PIC16F84 (PIC16F84A) vaø PIC16C84 ñöôïc nhaø saûn xuaát Mircochip höôùng daãn. Maïch naïp khaù ñôn giaûn ñöôïc trình baøy trong hình sau: Maïch treân ñöôïc thieát keá theo chuaån COM 25 chaân. Chuùng ta coù theå chuyeån ñoåi töông ñöông caùc chaân töông öùng sang chuaån COM 9 chaân theo baûng sau: Baûng III1: Chuyeån ñoåi töông öùng Com25 vaø Com9 Chaân (25 chaân) Chaân (9 chaân) Teân goïi Chöùc naêng 2 3 Txd Truyeàn döõ lieäu 4 7 RTS Yeâu caàu gôûi. Boä truyeàn ñaït ñöôïc naøy leân cao khi saün saøng truyeàn döõ lieäu. 5 8 CTS Xoaù ñeå gôûi. Boä gôûi ñaët ñöôøng naøy leân möùc cao ñeå thoâng baùo cho boä truyeàn laø noù saün saøng nhaän döõ lieäu. 7 5 SG Ñaát cuûa tín hieäu 20 4 DTR Ñaàu cuoái döõ lieäu saün saøng. Hoaït ñoäng gioáng nhö RTS nhöng ñöôïc kích hoaït bôûi boä nhaän khi muoán truyeàn döõ lieäu. Döïa treân maïch nguyeân lyù JDM do Icpro cung caáp chuùng em ñaõ töï laøm maïch naïp cho PIC16F84. Sô ñoà maïch in ñöôïc giôùi thieäu trong hình sau: ÖÙNG DUÏNG Baûng öùng duïng chip vi ñieàu khieån PIC16F84 goàm 3 modul: ñieàu khieån LED; ñieàu khieån LCD vaø ñieàu khieån ñoäng cô Servol. Ñieàu khieån LED Hoaït ñoäng Modul ñieàu khieån LED laø modul ñôn giaûn nhaát trong baûng ñieàu khieån. Vieäc ñieàu khieån chæ ñôn giaûn laø xuaát bit tín hieäu ra caùc pin töông öùng noái vôùi LED. Tín hieäu ñöôïc xuaát qua LED ngay khi ngaét ngoaøi ñöôïc kích (Start button) treân chip. Chöông trình ñieàu khieån LED nhaáp nhaùy ñöôïc vieát döôùi daïng voøng laëp voâ taän neân LED seõ nhaáp nhaùy theo moät chu trình ñöôïc thieát keá trong chöông trình vaø laäp laïi maõi ñeán khi naøo ngöôøi ñieàu khieån aán phím Stop hoaëc chip ñöôïc Reset. Maïch ñieàu khieån Trong maïch ñieàu khieån, caùc Led ñöôïc noái vôùi chip qua caùc chaân RB1, RB2, RB4, RB5, RB6. Buttom SW1 noái chaân ngaét ngoaøi RB0/INT vôùi mass, laøm chöùc naêng nhö nuùt Start. Khi ngaét ngoaøi ñöôïc kích, chöông trình seõ reõ nhaùnh ñeán chöông trình con ñieàu khieån Led ñeå ñieàu khieån Led nhaáp nhaùy. Button SW2 noái chaân kieåm tra ñieàu kieän RA0 vôùi mass, laøm chöùc naêng nhö nuùt Stop. Khi nuùt Stop ñöôïc nhaán, laøm cho chaân RA0 xuoáng möùc ñieän aùp thaáp, khi ñoù chöông trình seõ ñöôïc thoaùt khoûi chöông trình con ñieàu khieån Led, trôû veà chöông trình chính. Ñieàu khieån ñoäng cô Servo Hoaït ñoäng Ñoäng cô servo Ñoäng cô Servol chính laø moät ñoäng cô DC thoâng thöôøng ñöôïc laáp theâm boä giaûi maõ (Encoder) ñeå nhaän tín hieäu phaûn hoài veà goùc quay cuûa ñoäng cô. Encoder thöôøng ñöôïc caáu taïo töø 1 Led phaùt quang, 1 ñeán 2 diode quang ñaët ñoái dieän vôùi Led phaùt quang qua 1 khe hôû vaø boä khueách ñaïi. Tín hieäu ra seõ ôû möùc cao (hoaëc thaáp) khi diode quang nhaän ñöôïc tín hieäu quang hoïc töø Led phaùt. Vì theá, khi laép ñóa phaân giaûi vaøo khe giöõa Led phaùt vaø diode quang vaø ñóa ñöôïc ñoäng cô quay thì tín hieäu ra laø daïng xung. Soá xung phaùt ra treân ngoõ ra cuûa Encoder chính laø soá raêng treân ñóa phaân giaûi ñaõ löôùt qua khe hôû giöõa Led phaùt vaø diode quang. Coâng thöùc tính goùc quay cuûa ñoäng cô nhö sau: Trong ñoù: n- soá xung nhaän ñöôïc C- ñoä phaân giaûi cuûa ñóa M- soá raêng treân voøng Treân hình veõ, encoder duøng 2 keânh, 2 diode quang ñaët ôû vò trí ngöôïc nhau veà tín hieäu (khi diode 1 thaáy thì diode 2 khoâng thaáy vaø ngöôïc laïi). Duøng 2 tín hieäu naøy trong heä vi sai ñeå choáng nhieãu. ÖÙng duïng trong ñoà aùn naøy duøng encoder 1 keânh ngoõ ra. Ngöôøi ñieàu khieån duøng tín hieäu xung naøy ñeå ñieàu khieån chính xaùc goùc quay cuûa ñoäng cô. Maïch caàu H Maïch caàu H ñöôïc thieát keá ñeå ñieàu khieån hoaït ñoäng cuûa ñoäng cô DC. Noù cho pheùp tín hieäu coâng suaát thaáp töø caùc chip vi ñieàu khieån coù theå ñieàu khieån ñoäng cô DC. Ngaên doøng ngöôïc töø ñoäng cô phaùt ra coù theå laøm hoûng chip. Cung caáp coâng suaát cho ñoäng cô baèng 1 nguoàn taùch bieät khoûi nguoàn nuoâi chip. Coù khaû naêng ñaûo chieàu vaø döøng ñoäng cô ñoät ngoät (thaéng). Sô ñoà maïch caàu H Maïch ñieàu khieån Ñieàu khieån LCD Giôùi thieäu veà LCD LCD (liquid Crystal Display)_maøn hình tinh theå loûng, ñaây laø phöông phaùp hieån thò tieát kieäm naêng löôïng. Coù nhieàu loaïi LCD, trong ñoù thoâng duïng laø hieån thò 16x2 vaø 20x2 (hieån thò 2 haøng vôùi 16 kyù töï treân moãi haøng vaø 2 haøng 20 kyù töï). LCD ñöôïc thieát laäp chuaån ñeå cho pheùp ta coù theå giao tieáp vôùi caùc LCD baát chaáp haõng saûn xuaát vôùi ñieàu kieän laø caùc LCD duøng cuøng IC ñieàu khieån HD44780. Hình daùng vaø kích thöôùc LCD Caùc LCD ñöôïc cheá taïo töø caùc haõng nhö Densitron, Epson, Hewlett Packard, Optrex, Shasp… vôùi caùc caáu hình thoâng duïng laø 16, 20,24, 32, hay 40 kyù töï treân 1 haøng vôùi maøn hình hieån thò 1, 2, hay 4 haøng. Hình IV1: Moâ hình maøn hình LCD LCD duøng trong öùng duïng naøy laø loaïi 16x2, duøng chip HD44780. Maøn hình neàn cuûa LCD ñöôïc chieáu saùng baèng ñeøn chieáu saùng ñaët phía sau boä hieån thò thay vì duøng phöông phaùp phaûn xaï. Caùc chaân ra cuûa LCD Modul LCD tuaân theo qui caùch giao tieáp chuaån. Goàm 14 chaân, coù 8 ñöôøng döõ lieäu, 3 ñöôøng ñieàu khieån vaø 3 ñöôøng caáp nguoàn boá trí treân 1 haøng. Chöùc naêng cuûa caùc chaân ñöôïc lieät keâ trong baûng sau: Baûng IV1: chöùc naêng cuûa caùc chaân LCD Chaân soá Teân Chöùc naêng 1 Vss Ñaát 2 VDD Cöïc+ cuûa nguoàn 3 VEE Töông phaûn (constrast) 4 RE Choïn thanh ghi (Register Select) 5 R/W Read/write 6 E Cho pheùp (Enable) 7 D0 Bít döõ lieäu 0 8 D1 Bít döõ lieäu 1 9 D2 Bít döõ lieäu 2 10 D3 Bít döõ lieäu 3 11 D4 Bít döõ lieäu 4 12 D5 Bít döõ lieäu 5 13 D6 Bít döõ lieäu 6 14 D7 Bít döõ lieäu 7 Nguoàn caáp cho LCD laø 5VDC, tuy nhieân LCD vaãn hoaït ñoäng toát vôùi nguoàn 6VDC hay 4.5VDC. LCD tieâu thuï ñieän naêng raát ít. Tuy nhieân ñeøn duøng ñeå chieáu saùng cho LCD laïi tieâu thuï ñieän naêng khaù lôùn. Vì vaäy moãi khi coù hieän töôïng suït aùp treân nguoàn thì ta thaáy ñeøn neàn LCD toái ngay. Chaân 3 (VEE) duøng ñeå thay ñoåi ñoä töông phaûn cuûa maøn hieån thò. Lyù töôûng thì chaân naøy neân noái vôùi nguoàn aùp thay ñoåi ñöôïc, ngöôøi ta thöïc hieän baèng caùch laép maïch chia aùp duøng bieán trôû coù ñaàu ra thay ñoåi ñöa vaøo chaân naøy. Ñôn giaûn nhaát ta coù theå noái chaân naøy xuoáng mass ñeå ñaït ñöôïc ñoä töông phaûn toát nhaát. Chaân 4 (RS_Register Select) ñaây laø 1 trong 3 ngoõ vaøo ñieàu khieån leänh. Khi chaân naøy ñöôïc noái mass thì caùc döõ lieäu truyeàn ñeán LCD ñöôïc xöû lyù nhö caùc meänh leänh vaø caùc döõ lieäu ñoïc ra chæ traïng thaùi cuûa noù. Baèng caùch ñöa chaân naøy leân möùc cao thì döõ lieäu kyù töï coù theå xuaát nhaäp treân modul naøy. Chaân 5 (R/W_Read/Write), chaân naøy cho pheùp leänh hay döõ lieäu kyù töï ñöôïc ghi vaøo modul khi noù ñöôïc keùo xuoáng möùc thaáp. Khi ñöôïc ñöa leân cao, noù cho pheùp döõ lieäu kyù töï hay thoâng tin traïng thaùi ñöôïc ñoïc töø caùc thanh ghi cuûa modul. Chaân 6 (E_ Enable), ngoõ vaøo naøy duøng ñeå khôûi ñoäng vieäc chuyeån caùc döõ lieäu kyù töï hay caùc leänh giöõa modul vaø caùc ñöôøng döõ lieäu. Khi ghi ra maøn hình LCD, döõ lieäu chæ ñöôïc chuyeån khi coù caïnh xuoáng cuûa tín hieäu E naøy. Tuy nhieân khi ñoïc ra töø LCD, thì döõ lieäu khaû duïng sau khi coù chuyeån tieáp töø thaáp leân cao vaø duy trì döõ lieäu khaû duïng ñeán khi tín hieäu E naøy xuoáng thaáp 1 laàn nöõa. Caùc chaân töø 7 ñeán 14 laø 8 ñöôøng döõ lieäu (D0 ¸ D7). Döõ lieäu coù theå ñöôïc chuyeån ñeán vaø laáy ra khoûi boä hieån thò LCD theo daïng moät byte hay daïng nöûa byte 4 bit (nibble). Trong tröôøng duøng trong öùng duïng naøy laø duøng 4 bit vì cheá ñoä naøy caàn ít ñöôøng tín hieäu hôn. Sô ñoà keát noái ñöôïc theå hieän nhö hình döôùi ñaây: Hình IV2: Sô ñoà keát noái LCD 8 bit Hình IV3: Sô ñoà keát noái LCD 4 bit Hoaït ñoäng cuûa LCD trong öùng duïng Trong öùng duïng naøy, LCD hoaït ñoäng ôû 3 tình huoáng khaùc nhau. Moãi tình huoáng LCD laøm nhieäm vuï hieån thò lôøi giôùi thieäu hay traïng thaùi hoaït ñoäng cuûa moâ hình. Caùc traïng thaùi hoaït ñoäng cuûa LCD ñöôïc lieät keâ trong baûng sau: Tình huoáng 1: vöøa khôûi ñoäng heä thoáng, caùc doøng text seõ hieån thò laàn löôït treân maøn hình vaø laäp laïi lieân tuïc Baûng IV2: Caùc maøn hình hieån thò trong tình huoáng 1 Maøn hình Line Text hieån thò 1 1 DO AN DKHT 2 DE TAI: pIC16F84 2 1 Gvhd 2 Ks. Vo tuong quan 3 1 Nhom thuc hien 2 (None) 4 1 Dinh Phuong Tan 2 Mssv: 20102326 5 1 Nguyen chinh phuc 2 Mssv: 2010 6 1 VUONG QUOC VIET 2 MSSV: 2010 7 1 TIEU BAO TRAN 2 MSSV: 2010 Tình huoáng 2: Moâ hình ñang hoaït ñoäng ôû cheá ñoä Led nhaáp nhaùy, maøn hình chæ goàm 2 doøng hieån thò coá ñònh. Baûng IV3: Caùc maøn hình hieån thò ôû cheá ñoä 2 Maøn hình Line Text hieån thò 1 1 Che do hoat dong 2 Led nhap nhay Tình huoáng 3: Moâ hình ñang hoaït ñoäng ôû cheá ñoä ñieàu khieån ñoäng cô, maøn hình chæ goàm 2 doøng hieån thò coá ñònh. Baûng IV4: : Caùc maøn hình hieån thò ôû cheá ñoä 3 Maøn hình Line Text hieån thò 1 1 Che do hoat dong 2 Dong co servo Hình IV4: Maøn hình LCD trong öùng duïng Sô ñoà maïch ñieàu khieån LCD Hình IV5: Sô ñoà maïch ñieàu khieån LCD Trong sô ñoà treân, SW1 coù vai troø nhö nuùt Start, SW2 coù vai troø nhö nuùt Stop, SW1 laø nuùt gaït choïn cheá ñoä ñieàu khieån Led hay ñieàu khieån ñoäng cô. Moâ hình tích hôïp: Caùc modul treân ñöôïc keát hôïp vôùi nhau treân 1 maïch tích hôïp. ÔÛ ñaây vì caùc ngoõ ñieàu khieån nhieàu hôn khaû naêng cuûa 1 chip vi ñieàu khieån PIC16F84, do ñoù chip vi ñieàu khieån thöù 2 ñöôïc duøng ñeán. Hai chip naøy ñöôïc phaân nhieäm vuï ñieàu khieån caùc modul khaùc nhau. Tuy nhieân, ñeå ñoàng boä caùc modul vôùi nhau thì caùc ngaét ngoaøi vaø caùc chaân kieåm tra ñieàu kieän cuûa 2 chip ñöôïc noái vôùi nhau. Sô ñoà maïch ñöôïc trình baøy trong hình sau: Hình IV6: Sô ñoà maïch tích hôïp Trong maïch treân, IC1 (U1) ñieàu khieån LCD; IC2 (U2) ñieàu khieån LED vaø ñoäng cô. Maïch ñieän thöïc teá ñöôïc moâ taû trong hình sau: Hình IV7: Maïch ñieän thöïc teá Maõ chöông trình: Chöông trình cho IC1 Oâi4list P = 16F84 Include "P16f84.Inc" Simulating = 1 ; -------------------- ; Ñònh nghóa bieán ; -------------------- CBLOCK 0x20 DelayL DelayM DelayH StrPtr MessAddH MessAddL MessNum Temp PBtemp Flag1 ENDC LcdRS equ 1h LcdE equ 2h LCDmd equ 0h ; ------------------------------- ; Khôûi taïo chöông trình chính ; ------------------------------- Org 0000h ; start address = 0000h Goto main org 0x04 Goto ISR Main bcf OPTION_REG,INTEDG Bsf OPTION_REG,NOT_RBPU Bsf INTCON,INTE; interupt BB0 enabled bsf INTCON,GIE Banksel PORTA Movlw 0x00; PORTA = all low movwf PORTA Movlw 0x00 ; PORTB = all low movwf PORTB Bsf STATUS,RP0 ; RAM Page 1 Movlw 0x01 ; RA1 = input movwf TRISA Movlw b'00001001';RB3 & RB0 = input Movwf TRISB Bcf STATUS,RP0 ; RAM Page 0 Movlw 20h; 25mS powerup delay @ 4MHz Movwf DelayH; LCD data sheet says 15mS Clrf DelayL PUPD decfsz DelayL,F Goto PUPD Decfsz DelayH,F Goto PUPD ; ; ----------------------------------- ; Truyeàn döõ lieäu khôûi taïo ñeán LCD ; ----------------------------------- ; Clrf Flag1; send instruction as 8 bit mode movlw b'00110000' ; function set 8 bits call LCDins Movlw b'00110000' ; function set 8 bits call LCDins Movlw b'00110000' ; function set 8 bits call LCDins Movlw b'00100000' ; function set 4 bits call LCDins Bsf Flag1,LCDmd ;cheá ñoä 4 bit Movlw b'00101000' Call LCDins Movlw b'00001000' ; display = off call LCDins Movlw b'00000001' ; clear the display call LCDins Movlw b'00000110' ; increment - no display shift call LCDins Movlw b'00001100' ; display on, cursor off, blink off call LCDins ; ; ----------------- ; Chöông trình chính ; ----------------- ; Loop Movlw 0h hieån thò mess ra maøn hình Number 0 Call MessLine1 ; line 1 Movlw 1h Number 1 Call MessLine2 ; line 2 Call BigDel ; chôø 1/2 s movlw 1h ; xoaù maøn hình Call LCDins Call BigDel ; wait 1/2 second movlw 2h Call MessLine1 Movlw 3h Call MessLine2 Call BigDel Movlw 1h Call LCDins Call BigDel Movlw 4h Call MessLine1 Call BigDel Movlw 1h Call LCDins Call BigDel Movlw 5h Call MessLine1 Call BigDel Movlw 1h Call LCDins Call BigDel Movlw 6h Call MessLine1 Call BigDel Movlw 1h Call LCDins Call BigDel Movlw 7h Call MessLine1 Call BigDel Movlw 1h Call LCDins Call BigDel Movlw 8h Call MessLine1 Call BigDel Movlw 1h Call LCDins Call BigDel Goto Loop ISR bcf INTCON,INTF Btfss PORTB,3 Call LED Btfsc PORTB,3 Call SERVO Retfie LED Movlw 9h Call MessLine1 Movlw 0ah Call MessLine2 Btfss PORTA,0 Goto main call BigDel Loop1 btfss PORTA,0 Goto main goto loop1 SERVO Movlw 9h Call MessLine1 Movlw 0bh Call MessLine2 Btfss PORTA,0 Goto main call BigDel Loop2 btfss PORTA,0 Goto main goto loop2 ; ---------------------------- ; Truyeàn döõ lieäu ñeán LCD ; ---------------------------- ; MessLine1 Movwf MessNummovlw 0x80 Goto InMess MessLine2 Movwf MessNummovlw 0xC0 InMess call LCDins Movf MessNum,W Message number addwf PCL,F Goto Mess0 ; message 0 Goto Mess1 ; message 1 Goto Mess2 Goto Mess3 Goto Mess4 Goto Mess5 Goto Mess6 Goto Mess7 Goto Mess8 Goto Mess9 Goto Mess10 Goto Mess11 ; --------- ; MESSAGE 0 ; --------- ; Mess0 movlw High(Message0) ; get ROM page if Simulating == 1 Addlw 8h Endif movwf MessAddH ; temp store it movlw Low(Message0) ; get page offset goto ContMess ; ; --------- ; MESSAGE 1 ; --------- ; Mess1 movlw High(Message1) ; get ROM page if Simulating == 1 addlw 8h endif movwf MessAddH ; temp store it movlw Low(Message1) ; get page offset goto ContMess Mess2 movlw High(Message2) ; get ROM page if Simulating == 1 addlw 8h endif movwf MessAddH ; temp store it movlw Low(Message2) ; get page offset goto ContMess ; ; --------- ; MESSAGE 1 ; --------- ; Mess3 movlw High(Message3) ; get ROM page if Simulating == 1 addlw 8h endif movwf MessAddH ; temp store it movlw Low(Message3) Mess4 movlw High(Message4) if Simulating == 1 addlw 8h endif movwf MessAddH movlw Low(Message4) goto ContMess ; ; --------- ; MESSAGE 1 ; --------- ; Mess5 movlw High(Message5) if Simulating == 1 addlw 8h endif movwf MessAddH movlw Low(Message5) goto ContMess Mess6 movlw High(Message6) if Simulating == 1 addlw 8h endif movwf MessAddH movlw Low(Message6) offset goto ContMess ; ; --------- ; MESSAGE 1 ; --------- ; Mess7 movlw High(Message7) if Simulating == 1 addlw 8h endif movwf MessAddH movlw Low(Message7) goto ContMess Mess8 movlw High(Message8) if Simulating == 1 addlw 8h endif movwf MessAddH ; temp store it movlw Low(Message8) ; get page offset goto ContMess ; ; --------- ; MESSAGE 1 ; --------- ; Mess9 movlw High(Message9) ; get ROM page if Simulating == 1 addlw 8h endif movwf MessAddH ; temp store it movlw Low(Message9) ; get page offset goto ContMess Mess10 movlw High(Message10) ; get ROM page if Simulating == 1 addlw 8h endif movwf MessAddH ; temp store it movlw Low(Message10) ; get page offset goto ContMess ; ; --------- ; MESSAGE 1 ; --------- ; Mess11 movlw High(Message11) ; get ROM page if Simulating == 1 addlw 8h endif movwf MessAddH ; temp store it movlw Low(Message11) ; get page offset ContMess movwf MessAddL ; temp store it ; ; ------------------------------------------ ; Nhaän döõ lieäu vaø hieån thò treân LCD ; ------------------------------------------ ; clrf StrPtr ; zero the character offset MessLoop call Messages ; get the character movwf temp ; temp store the character movlw High($) ; restore PCLATH for this ROM page if Simulating == 1 addlw 8h endif movwf PCLATH movf temp,W xorlw 0h ; test if zero byte btfsc STATUS,Z return ; yes, all done call LCDdata ; send character to display incf StrPtr,F ; set ready for next character goto MessLoop ; get next character ; ; ---------------------------- ; CHARACTER ADDRESS CALCULATOR ; ---------------------------- ; Messages movf MessAddH,W ; high address byte to PCLATH movwf PCLATH movf MessAddL,W ; get low address byte addwf StrPtr,W ; add character offset btfsc STATUS,C ; test carry incf PCLATH,F ; overflow - increment PCLATH movwf PCL ; low byte to PCL ; ; ------------------------------------------------- ; OUTPUT 1 INSTRUCTION BYTE TO DISPLAY - 4 BIT MODE ; ------------------------------------------------- ; LCDins movwf temp ; temp save instruction andlw 0xF0 ; send high nibble first movwf PORTB ; send it call Clock bsf PORTB,lcdE ; (1) clock it in call Clock bcf PORTB,lcdE ; (1) call Clock btfss Flag1,LCDmd ; test if sending byte or 2 nibbles goto bits8 ; 1 nibble swapf temp,W ; now send lower nibble andlw 0xF0 movwf PORTB ; send it call Clock bsf PORTB,lcdE ; (5) enable instruction call Clock bcf PORTB,lcdE ; (5) bits8 clrf DelayL movlw 8h movwf DelayH ctlp1 decfsz DelayL,F goto ctlp1 decfsz DelayH,F goto ctlp1 return ; ; ------------------------------------------ ; Xuaát 2 byte ra maøn hình ; ------------------------------------------ ; LCDdata movwf temp ; temp save data andlw 0xF0 ; send high nibble first movwf PORTB call Clock bsf PORTB,lcdRS ; (0) Write "data" call Clock bsf PORTB,lcdE ; (1) clock it in call Clock bcf PORTB,lcdE ; (1) call Clock swapf temp,W ; now send lower nibble andlw 0xF0 movwf PORTB call Clock bsf PORTB,lcdRS ; (0) Write "data" call Clock bsf PORTB,lcdE ; (5) enable instruction call Clock bcf PORTB,lcdE ; (5) return ; ; ----------------------------- ; Ñònh nghóa taàn soá dao ñoäng ; ----------------------------- ; Clock movlw 40h movwf DelayL kdloop decfsz DelayL,F goto kdloop return ; ; -------------------------------- ; khôûi taïo thôøi gian nhaáp nhaùy ~ 0.5s ; -------------------------------- ; BigDel clrf DelayL clrf DelayM movlw 5h movwf DelayH BDloop decfsz DelayL,F goto BDloop decfsz DelayM,F goto BDloop decfsz DelayH,F goto BDloop return ; ; --------------- ; chuoãi ; --------------- ; Message0 DT " DO AN DKHT ", 0h Message1 DT "DE TAI: PIC16F84", 0h Message2 DT " GVHD ",0h Message3 DT "KS VO TUONG QUAN" ,0h Message4 DT " NHOM THUC HIEN ",0H Message5 DT " DINH PHUONG TAN",0H Message6 DT " NG. CHINH PHUC ",0H Message7 DT " VUONG QUOC VIET",0H Message8 DT " TIEU BAO TRAN ",0H Message9 DT " DIEU KHIEN ",0H Message10 DT " LED NHAP NHAY ",0H Message11 DT " DONG CO SERVO ",0H End Chöông trình cho IC2 list p=16F84A ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC cblock 0x0c TMP0 TMP1 TMP2 CNT endc org 0x00 goto main org 0x04 goto ISR main banksel TRISA movlw b'00010001' ; RA0,RA4 is input movwf TRISA movlw b'00001001'; RB0,RB3 = INPUT movwf TRISB banksel PORTA clrf PORTA clrf PORTB movlw b'10110010' movwf OPTION_REG bsf INTCON,INTE bsf INTCON,GIE goto main ISR bcf INTCON,INTF btfss PORTB,3 goto LED btfsc PORTB,3 goto SERVO LED banksel PORTB movlw b'00000010' call blink btfss PORTA,0 goto main movlw b'00000100' call blink btfss PORTA,0 goto main movlw b'00010000' call blink btfss PORTA,0 goto main movlw b'00100000' call blink btfss PORTA,0 goto main movlw b'01000000' call blink btfss PORTA,0 goto main movlw b'00100000' call blink btfss PORTA,0 goto main movlw b'00010000' call blink btfss PORTA,0 goto main movlw b'00000100' call blink btfss PORTA,0 goto main movlw b'00000010' call blink btfss PORTA,0 goto main movlw b'00000110' call blink btfss PORTA,0 goto main movlw b'00010110' call blink btfss PORTA,0 goto main movlw b'00110110' call blink btfss PORTA,0 goto main movlw b'01110110' call blink btfss PORTA,0 goto main movlw b'00110110' call blink btfss PORTA,0 goto main movlw b'00010110' call blink btfss PORTA,0 goto main movlw b'00000110' call blink btfss PORTA,0 goto main movlw b'00000010' call blink btfss PORTA,0 goto main movlw b'01010010' call blink btfss PORTA,0 goto main movlw b'00100100' call blink btfss PORTA,0 goto main movlw b'01010010' call blink btfss PORTA,0 goto main movlw b'00100100' call blink btfss PORTA,0 goto main movlw b'01010010' call blink btfss PORTA,0 goto main movlw b'00100100' call blink btfss PORTA,0 goto main goto LED SERVO nop PHAI movlw .2 movwf CNT movlw b'00001100' movwf PORTA call DEL btfss PORTA,0 goto main call DEL clrf PORTA PH1 movlw .12 movwf TMR0 loop1 btfsc TMR0,7 goto Cont1 lp1 bsf PORTA,2 bsf PORTB,7 btfss PORTA,0 goto main goto loop1 Cont1 btfss TMR0,6 goto lp1 goto Ctr Ctr decfsz CNT,1 goto PH1 goto TRAI TRAI bcf PORTB,7 movlw b'00001100' movwf PORTA call DEL btfss PORTA,0 goto main call DEL clrf PORTA movlw .2 movwf CNT TR1 movlw .12 movwf TMR0 loop2 btfsc TMR0,7 goto Cont2 lp2 bsf PORTA,3 bsf PORTA,1 btfss PORTA,0 goto main goto loop2 Cont2 btfss TMR0,6 goto lp2 goto Ctr2 Ctr2 decfsz CNT,1 goto TR1 goto PHAI blink movwf PORTB call DEL return DEL MOVLW 0x02 ;2 DEC MOVWF TMP2 MOVLW 0x0E5 ;229 DEC MOVWF TMP1 MOVLW 0x0D9 ;217 DEC MOVWF TMP0 DECFSZ TMP0,F GOTO $-1 DECFSZ TMP1,F GOTO $-5 DECFSZ TMP2,F GOTO $-9 return end

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

  • docPIC16F84 và một số ứng dụng.doc