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
56 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2765 | Lượt tải: 2
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:
- PIC16F84 và một số ứng dụng.doc