Thiết kế, chế tạo robot điều khiển bằng tay

MỤC LỤC Trang MỞ ĐẦU 4 CHƯƠNG I: GIỚI THIỆU CHUNG VỀ ROBOT 6 1.1. Lịch sử ra đời 6 1.2. Các mô hình robot và ứng dụng của nó 8 1.3. Lựa chọn đề tài và phạm vi nghiên cứu 9 1.4. Tóm tắt đề tài 11 1.4.1. Nhiệm vụ 11 1.4.2. Mục tiêu 13 1.4.3. Yêu cầu thiết kế 13 CHƯƠNG II: GIỚI THIỆU PHẦN CƠ KHÍ 14 2.1. Robot với bánh xe 14 2 2. Phần động cơ (động cơ điện một chiều) 15 2 3. Bộ khung 16 2.4. Mô hình robot bằng tay 16 CHƯƠNG III: CÁC PHƯƠNG PHÁP ĐIỀU KHIỂN MOTOR 18 3.1. Giới thiệu hoạt động của motor 18 3.2. Điều khiển đông cơ với cầu H (H-Bridge) 19 3.2.1. Nguyên lý hoạt động của cầu H 19 3.2.2. Relay H-Bridges 20 3.2.3. Cầu H dùng relay kết hợp với FET 21 3.2.4. Cầu H bán dẫn (Semiconductor H-Bridges) 23 3.2 .5. Cầu H tích hợp 24 3.3. Phương pháp điều chế xung PWM điều khiển tốc độ đông cơ 24 CHƯƠNG IV: VI ĐIỀU KHIỂN P89V51RD2 26 4.1. Đặc điểm của P89V51RD2. 26 4.2. Sơ đồ chân và chức năng các chân P89V51RD2. 27 4.3. Cấu trúc bên trong vi điều khiển P89V51RD2. 29 1. Tổ chức bộ nhớ. 29 2. Các thanh ghi chức năng đặc biệt. 31 4.4. Các chức năng chính của P89V51RD2. 32 1. Hoạt động định thời (Timer) P89V51RD2. 32 2. Hoạt động của port nối tiếp. 33 3. Hoạt động của ngắt. 34 4. Hoạt động reset. 34 5. PCA 35 6. Phương pháp điều chế xung điều khiển động cơ 36 4.5. Tóm tắt tập lệnh MCS - 51. 42 1. Chế độ định địa chỉ. 42 2. Thanh ghi địa chỉ 42 3. Địa chỉ trực tiếp 43 4. Địa chỉ gián tiếp 43 5. Địa chỉ tức thời 44 6. Địa chỉ tương đối 44 7. Địa chỉ tuyệt đối 44 8. Địa chỉ dài 45 9. Địa chỉ tham chiếu 45 4.5.2. Các nhóm lệnh họ P89V51RD2 46 1. Nhóm lệnh xử lý số học 46 2. Nhóm lệnh luận lý 47 3. Nhóm lệnh chuyển dữ liệu 49 4. Nhóm điều khiển 50 5. Các lệnh rẽ nhánh 51 CHƯƠNG V: THIẾT KẾ MẠCH ĐIỆN TỬ 52 5.1. Sơ đồ khối tổng quát 52 5.2. Khối điều khiển bằng tay (MCU) 53 5.3. Khối bàn phím 54 5.4. Khối Motor Drive 55 5.5. Khối hiển thị 56 5.6. Khối nguồn 58 CHƯƠNG VI: CHẾ TẠO MẠCH ĐIỆN TỬ VÀ GIẢI THUẬT CHƯƠNG TRÌNH CHO ROBOT 58 6.1. Sơ đồ nguyên lý 58 6.1.1. Sơ đồ nguyên lý phần điều khiển 59 6.1.2. Sơ đồ nguyên lý phần công suất 61 6.2. Thiết kế mạch in 61 6.2.1. Sơ đồ bố trí linh kiện board điều khiển 62 6.2.2. Sơ đồ mạch in lớp Bottom của board điều khiển 63 6.2.3. Sơ đồ mạch in lớp Top Overlay của board điều khiển 64 6.2.4. Sơ đồ bố trí linh kiện board công suất 65 6.2.5. Sơ đồ mạch in lớp TOP của board công suất 66 6.2.6. Sơ đồ mạch in lớp Bottom của board công suất 67 6.3. Thi công mạch in 68 6.4. Phím bấm điều khiển 69 6.5. Chương trình chính cho robot bằng tay 69 1. Lưu đồ thuật toán 70 2. Chương trình giải thuật cho robot bằng tay 71 KẾT LUẬN 91 TÀI LIỆU THAM KHẢO 92 LỜI NÓI ĐẦU Vào những năm đầu thế kỷ 20, “robot” là một khái niệm hết sức mới mẻ. Thuật ngữ “robot” xuất hiện đầu tiên trong một vở kịch khi tác giả mô tả về những cỗ máy có khả năng làm việc thay thế con người. Trải qua nhiều giai đoạn phát triển, ngày nay, có lẽ hình ảnh của những chú robot đã trở nên quen thuộc và gần gũi với chúng ta hơn bao giờ hết. Gọi là “chú robot”, chúng ta dễ liên tưởng đến những “con người được làm bằng máy”. Điều này chỉ đúng ở giai đoạn sơ khai khi khái niệm robot vừa mới ra đời bởi các nhà phát minh hầu như chỉ hướng đến những robot mang dáng dấp con người. Kết quả là họ cho ra đời những chú robot giống người và có thể thực hiện những động tác đơn giản. Điểm hạn chế của những robot này là không được thông minh và cũng không được ứng dụng nhiều. càng về sau, con người càng trở nên thực tế hơn. Họ không đặt nặng vấn đề hình dáng nữa. họ cần những robot có thể thực thi một công việc rõ rệt, một công việc mà con người không thể hoặc khi thực hiện sẽ gặp không ít trở ngại. Chính vì vậy, đa số những robot ngày nay chỉ mang hình dạng một bộ phận nào đó của con người hoặc thậm chí hoàn toàn không giống con người. Cánh tay máy công nghiệp là một ví dụ. ta gọi đây là thế hệ robot thông minh. Trong cuộc sống của chúng ta, robot có vai trò ngày càng lớn và ngày càng thông minh theo sự phát triển của khoa học kỹ thuật. Tuy nhiên ở nước ta, do một số hạn chế nhất định về mặt công nghệ cũng như yêu cầu chưa cao, việc nghiên cứu robot chỉ mới bắt đầu khoảng chục năm gần đây. Bằng chứng là chúng ta đã có thêm một số ngành thuộc lĩnh vực cơ điện tử mà trước đây chưa hề có. Trong xu hướng phát triển kỹ thuật hiện nay, là người hoạt động trong lĩnh vực điện tử, những kiến thức cơ bản về robot là hoàn toàn cần thiết. Với suy nghĩ trên, cùng với niềm yêu thích robot, tôi cảm thấy thật thú vị khi thực hiện đề tài “Thiết kế, chế tạo robot điều khiển bằng tay”. mặc dù phạm vi đề tài rất nhỏ và khiêm tốn, nhưng với tôi, đây là bước khởi đầu quan trọng khi lần đầu tiên bước vào thế giới robot, một thế giới hấp dẫn, đa dạng và đầy thử thách. Em xin chân thành cảm ơn các thầy cô giáo trong bộ môn Điện tử - Viễn Thông, khoa Công nghệ đã giảng dạy cho chúng em những kiến thức về chuyên môn, định hướng sự hiểu biết cũng như khả năng để chúng em thực hiện tốt luận văn tốt nghiệp và tạo điều kiện thuận lợi cho chúng em hoàn thành tốt nhiệm vụ. Em xin chân thành cảm ơn thầy giáo PGS.TS. Nguyễn Quốc Trung đã tận tình hướng dẫn giúp đỡ em hoàn thành đồ án này!

doc92 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2654 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Thiết kế, chế tạo robot điều khiển bằng tay, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ngay c¶ khi mÊt ®iÖn. Do lý do trªn, chÝp P89V51RD2 cã kh«ng gian bé nhí riªng cho ch­¬ng tr×nh vµ d÷ liÖu. C¶ bé nhí ch­¬ng tr×nh vµ bé nhí d÷ liÖu ®Òu n»m trong chip. Tuy nhiªn ta cã thÓ më réng bé nhí ch­¬ng tr×nh vµ bé nhí d÷ liÖu b»ng c¸ch sö dông c¸c chip nhí bªn ngoµi víi dung l­îng tèi ®a lµ 64Kbyte cho bé nhí ch­¬ng tr×nh vµ 64Kbyte cho bé nhí d÷ liÖu. Bé nhí ch­¬ng tr×nh (ROM): Bé nhí ch­¬ng tr×nh l­u gi÷a ch­¬ng tr×nh ®iÒu khiÓn chip P89V51RD2. Cã 2 vïng nhí néi flash trong MCU, block 0 cã 64Kbytes vµ ®­îc tæ chøc thµnh 512 sector, mçi sector chøa 128bytes. Block 1 chøa ch­¬ng tr×nh ISP/IAP vµ ®­îc kÝch ho¹t khi chän kÕt hîp bit reset mÒm (SWR) vµ bit chän bank (BSEL). Sau khi reset, CPU b¾t ®Çu thùc hiÖn ch­¬ng tr×nh tõ ®Þa chØ 0000H. Khi ch­¬ng tr×nh lín qu¸ kÝch th­íc bé nhí ch­¬ng tr×nh bªn trong chip, ch­¬ng tr×nh nµy ph¶i ®­îc n¹p vµo bé nhí ch­¬ng tr×nh ngoµi. NÕu ch­¬ng tr×nh n»m trong ROM néi, ch©n /EA cña P89V51RD2 ph¶i ®­îc treo lªn 5V. NÕu ch­¬ng tr×nh ë ROM ngoµi, ch©n /EA ph¶i nèi ®Êt. ViÖc truy xuÊt ch­¬ng tr×nh ë bé nhí ngoµi ph¶i kÕt hîp víi ch©n tÝn hiÖu truy xuÊt bé nhí ngoµi /PSEN. Bé nhí d÷ liÖu (RAM): P89V51RD2 cã 1 Kbytes ram ë bªn trong chip. RAM trong P89V51RD2 bao gåm nhiÒu thµnh phÇn: phÇn l­u tr÷ ®a dông, phÇn l­u tr÷ ®Þa chØ hãa tõng bit, c¸c bank thanh ghi vµ c¸c thanh ghi chøc n¨ng ®Æc biÖt. Hai ®Æc tÝnh cÇn chó ý lµ: C¸c thanh ghi vµ c¸c port xuÊt nhËp ®· ®­îc ®Þnh vÞ (x¸c ®Þnh) trong bé nhí vµ cã thÓ truy xuÊt trùc tiÕp gièng nh­ c¸c ®Þa chØ bé nhí kh¸c. Ng¨n xÕp bªn trong Ram néi nhá h¬n so víi Ram ngo¹i nh­ trong c¸c bé Microcontroller kh¸c. Ram bªn trong P89V51RD2 ®­îc ph©n chia nh­ sau: C¸c bank thanh ghi cã ®Þa chØ tõ 00H ®Õn 1FH. Ram ®Þa chØ hãa tõng bÝt cã ®Þa chØ tõ 20H - 2FH. Ram ®a dông tõ 30H - 7FH. C¸c thanh ghi chøc n¨ng ®Æc biÖt tõ 80H - FFH. H×nh 4.3. S¬ ®å khèi bé nhí data trªn chip P89V51RD2 2. C¸c thanh ghi chøc n¨ng ®Æc biÖt 4.4. C¸c chøc n¨ng chÝnh cña vi ®iÒu khiÓn P89V51RD2 1. Ho¹t ®éng ®Þnh thêi cña P89V51RD2 C¸c bé ®Þnh thêi dïng ®Ó t¹o ra c¸c kho¶ng thêi gian kh¸c nhau, dïng ®Ó ®Õm sù kiÖn hoÆc dïng ®Ó t¹o tèc ®é baud cho viÖc truyÒn th«ng nèi tiÕp. Trong P89V51RD2 cã hai bé ®Þnh thêi lµ T0 vµ T1. ViÖc lùa chän chÕ ®é ho¹t ®éng cho c¸c Timer nµy nhê vµo thanh ghi TMOD. Cßn viÖc ®iÒu khiÓn c¸c Timer ho¹t ®éng nhê vµo thanh ghi TCON. Cã 4 mode ho¹t ®éng cho c¸c Timer. Mode 0 l chÕ ®é ®Þnh thêi 13 - bit, Mode 1 l chÕ ®é ®Þnh thêi 16-bit, Mode 2 l chÕ ®é ®Þnh thêi tù n¹p l¹i 8 - bit, Mode 3 l chÕ ®é ®Þnh thêi chia xÎ vµ cã ho¹t ®éng kh¸c nhau cho tõng bé ®Þnh thêi. C¸c Timer cña 8951 ®­îc truy xuÊt bëi viÖc dïng 6 thanh ghi chøc n¨ng ®Æc biÖt nh­ sau : B¶ng 4.2. 6 Thanh ghi chøc n¨ng ®Æc biÖt nh­ sau . Timer SFR Purpose Address Bit-Addressable TCON Control 88H YES TMOD Mode 89H NO TL0 Timer 0 low-byte 8AH NO TL1 Timer 1 low-byte 8BH NO TH0 Timer 0 high-byte 8CH NO TH1 Timer 1 high-byte 8DH NO 2. Ho¹t ®éng cña port nèi tiÕp Chøc n¨ng c¬ b¶n cña port nèi tiÕp lµ chuyÓn ®æi d÷ liÖu tõ song song thµnh nèi tiÕp khi ph¸t vµ tõ nèi tiÕp thµnh song song khi thu. D÷ liÖu ®­îc truyÒn ®i hoÆc nhËn vÒ th«ng qua bé ®Öm d÷ liÖu nèi tiÕp SBUF (Serial data Buffer). Khi truyÒn ®i, d÷ liÖu ®­îc chuyÓn tõ song song sang nèi tiÕp th«ng qua ch©n TXD. Khi thu, d÷ liÖu ®­îc chuyÓn tõ nèi tiÕp sang song song th«ng qua h©n RXD. Thanh ghi SBUF cã ®Þa chØ 99H. ViÖc ghi d÷ liÖu cho SBUF tøc lµ ph¸t d÷ liÖu, viÖc ®éng SBUF tøc truy xuÊt d÷ liÖu nhËn ®­îc. §iÒu khiÓn port nèi tiÕp th«ng qua thanh ghi SCON cã ®Þa chØ lµ 98H, thanh ghi nµy lµ thanh ghi ®Þnh ®Þa chØ tõng bit cho ta x¸c ®Þnh ®­îc c¸c chÕ ®é lµm viÖc cña port nèi tiÕp. Port nèi tiÕp cho ho¹t ®éng song c«ng (full duplex) vµ ®Öm thu (receiver buffering) cho phÐp mét kÝ tù sÏ ®­îc thu vµ ®­îc gi÷ trong khi ký tù thø hai ®­îc nhËn. 3. Ho¹t ®éng cña ng¾t Cã 6 nguyªn nh©n ®Ó t¹o ra ng¾t trong P89V51. §ã lµ 2 ng¾t ngoµi, ba ng¾t do bé ®Þnh thêi vµ mét ng¾t do port nèi tiÕp. Khi ta thiÕt lËp tr¹ng th¸i ban ®Çu (sau khi reset), tÊt c¶ c¸c ng¾t ®Òu bÞ v« hiÖu hãa vµ sau ®ã chóng ®­îc cho phÐp riªng rÏ b»ng phÇn mÒm. Khi ch­¬ng tr×nh ®ang thùc hiÖn, nÕu cã ng¾t víi ­u tiªn cao xuÊt hiÖn, ch­¬ng tr×nh phôc vô ng¾t cho ng¾t cã møc ­u tiªn thÊp t¹m dõng. Ta kh«ng thÓ t¹m dõng mét ch­¬ng tr×nh ng¾t cã møc ­u tiªn cao h¬n. Khi cã 2 ng¾t kh¸c nhau xuÊt hiÖn ®ång thêi, ng¾t cã møc ­u tiªn cao sÏ ®­îc phôc vô tr­íc. Chuçi vßng nµy sÏ lµ ng¾t ngoµi 0, ng¾t ngoµi 1, ng¾t do bé ®Þnh thêi 0, ng¾t do bé ®Þnh thêi 1, ng¾t do port nèi tiÕp, ng¾t do bé ®Þnh thêi 2. Khi mét ng¾t ®­îc chÊp nhËn, gi¸ trÞ ®­îc n¹p cho bé ®Õm ch­¬ng tr×nh ®­îc gäi lµ vector ng¾t. Vector ng¾t lµ ®Þa chØ b¾t ®Çu cña tr×nh phôc vô ng¾t cña c¸c ng¾t t­¬ng øng. C¸c vector ng¾t ®­îc cho ë b¶ng sau: B¶ng 4.3. C¸c vector ng¾t Nguån ng¾t Cê §Þa chØ vector ng¾t Reset hÖ thèng RST 0000H Ng¾t ngoµi 0 IE0 0003H Ng¾t do Timer 0 TF0 000BH Ng¾t ngoµi 1 IE1 0013H Ng¾t do Timer1 TF1 001BH Ng¾t do port nèi tiÕp RI hoÆc TI 0023H Ng¾t do Timer2 TF2 002BH 4. Ho¹t ®éng Reset P89V51RD2 ®­îc reset b»ng c¸ch gi÷a ch©n RST ë møc cao tèi thiÓu hai chu kú m¸y vµ sau ®ã chuyÓn vÒ møc thÊp. Khi reset hÖ th«ng thanh ghi PC ®­îc n¹p ®Þa chØ 0000H, khi ®ã ch­¬ng tr×nh sÏ b¾t ®Çu tõ ®Þa chØ ®Çu tiÒn trong bé nhí ch­¬ng tr×nh. Néi dung cña RAM trªn chip kh«ng bÞ ¶nh h­ëng khi ta reset hÖ thèng. Tr¹ng th¸i cña tÊt c¶ c¸c thanh ghi sau khi reset hÖ thèng nh­ sau: B¶ng 4.4. Tr¹ng th¸i thanh ghi Thanh ghi Néi dung Bé ®Õm ch­¬ng tr×nh PC 0000H Thanh chøa A 00H Thanh ghi B 00H PSW 00H SP 07H DPRT 0000H Port 0 §Õn Port 3 FFH IP xxx00000B IE 0xx00000B C¸c thanh ghi ®Þnh thêi 00H SCON 00H SBUF 00H PCON (HMOS) 0xxxxxxxB PCON (CMOS) 0xxx0000B 5. M¶ng ®Õm lËp tr×nh ®­îc (Programmable Counter Array - PCA) PCA lµ mét bé ®Þnh thêi ®Æc biÖt 16 bit bao gåm 5 modul Thu nhËn/So s¸nh 16 bit kÕt hîp víi nhau. Mçi mét modul cã thÓ lËp tr×nh ®Ó ho¹t ®éng ë mét trong bèn chÕ ®é: + Rising and/or falling edge capture. + §Þnh thêi b»ng phÇn mÒm + §Çu ra tèc ®é cao. + §iÒu chÕ ®é réng xung. Mçi mét modul th× ®­îc nèi víi mét ch©n cña port1. Modul 0 nèi víi ch©n P1.3 (CEX0), modul 1 nèi víi ch©n P1.4 (CEX1), ...Thanh ghi CH vµ CL chøa byte cao vµ byte thÊp cña bé ®Þnh thêi trong PCA. Bé ®Þnh thêi cña m¶ng ®Õm lËp tr×nh ®­îc lµ thêi gian chuÈn duy nhÊt cho c¶ 5 modul vµ nã cã thÓ lËp tr×nh ®Ó ch¹y ë 1/6 tÇn sè dao ®éng th¹ch anh, 1/2 tÇn sè dao ®éng th¹ch anh, the Timer 0 overflow hay ngâ nhËn tÝn hiÖu trªn ECI ch©n P1.2. Nguån ®Õm bé ®Þnh thêi ®­îc x¸c ®Þnh tõ bit CPS1 vµ CPS0 trong thanh ghi chøc n¨ng ®Æc biÖt CMOD. H×nh 4.5. Nguån ®Õm bé ®Þnh thêi 6. Ph­¬ng ph¸p ®iÒu chÕ ®é réng xung Chøc n¨ng PWM chØ lµ mét trong 4 chøc n¨ng tõ d·y ®Õm lËp tr×nh ®­îc PCA ( Programmable Counter Array). Thùc sù, PCA còng chØ lµ mét timer 16-bit kÕt hîp víi mét sè thanh ghi ®Æc biÖt ®Ó thùc hiÖn mét sè chøc n¨ng míi. C¸c thanh ghi ®Æt biÖt cã thÓ kÓ ®Õn lµ CMOD, CCON, CCAPMn (n = 0...4), CCAPnL, CH, CL. Hç trî cho PCA cßn cã 5 module ®­îc nèi t­¬ng øng víi c¸c ch©n tõ P1.3 ®Õn P1.7. Sau ®©y lµ chøc n¨ng chÝnh cña c¸c thanh ghi kÓ trªn. + Thanh ghi CH, CL: hai thanh ghi chøa 2 byte cao, byte thÊp cña timer PCA ( t­¬ng tù nh­ thanh ghi TH0, TL0 cña timer0 vµ TH1, TL1 cña timer1). + Thanh ghi CCAPnH, CCAPnL (n = 0..4): Thanh ghi chøa byte cao, byte thÊp cña gi¸ trÞ cÇn n¹p cho mçi module. + Thanh ghi CCAPMn (n = 0...4): thanh ghi chøc n¨ng ®iÒu khiÓn c¸c module. Chóng ta sÏ chän chÕ ®é ho¹t ®éng cho mçi module b»ng c¸ch t¸c ®éng vµo c¸c bit thuéc c¸c thanh ghi nµy. + Thanh ghi CMOD: (®Þa chØ D9H, kh«ng ®­îc ®Þnh ®Þa chØ bit) CIDL WDTE - - - CPS1 CPS0 ECF B¶ng 4.5. Tãm t¾t chøc n¨ng c¸c bit cña thanh ghi CMOD BIT Ký hiÖu Chøc n¨ng 7 CIDL Cho phÐp PCA dõng khi vµo chÕ ®é nghØ 6 WDTE Watchdog timer enable. Set bit nµy lªn 1 sÏ cho phÐp chøc n¨ng Watchdog timer cña module4. Ng­îc l¹i sÏ khãa 5 -> 3 - Bit dù tr÷ 2 CPS1 Bit cao chän nguån xung nhÞp cho PCA 1 CPS0 Bit thÊp chän nguån xung nhÞp cho PCA 0 ECF PCA cho phÐp ®Õm cê ng¾t. NÕu set bit nµy lªn 1 sÏ cho phÐp bit CF trong thanh ghi CCON t¹o ng¾t. + Thanh ghi CCON: (®Þa chit D8H, ®Þnh ®Þa chØ tõng bit) CF CR - CCF4 CCF3 CCF2 CCF1 CCF0 B¶ng 4.6. Tãm t¾t chøc n¨ng c¸c bit cña thanh ghi CCON BIT Ký hiÖu Chøc n¨ng 7 CF Khi bé ®Õm trµn, CF tù ®éng ®­îc set lªn 1. NÕu bÝt ECF cña thanh ghi CMOD ®· ®­îc set tr­íc ®ã, khi CF = 1 sÏ t¹o ng¾t. 6 CR PCA counter run control. BËt t¾t PCA counter. 5 - Bit dù tr÷ 4 CCF4 Cê ng¾t module 4 3 CCF3 Cê ng¾t module 3 2 CCF2 Cê ng¾t module 2 1 CCF1 Cê ng¾t module 1 0 CCF0 Cê ng¾t module 0 C¸ch thøc ho¹t ®éng cña chøc n¨ng ®iÒu xung ®­îc tãm t¾t ®¬n gi¶n nh­ sau: H×nh 4.6. Chøc n¨ng ®iÒu xung PWM víi P89V51RD2xx TÊt c¶ c¸c module ®Òu cã tÇn sè ra nh­ nhau do chØ cã mét timer PCA. Duty cycle cña chuçi xung ra phô thuéc gi¸ trÞ n¹p cho thanh ghi CCAPnL. Khi gi¸ trÞ cña thanh ghi CL nhá h¬n gi¸ trÞ l­u trong CCAPnL, ngâ ra sÏ ë møc thÊp. Ng­îc l¹i, nÕu lín h¬n hay b»ng, ngâ ra sÏ ë møc c¸o. Khi CL bÞ trµn tõ FF sang 00, CCAPnL ®­îc n¹p l¹i gi¸ trÞ tõ CCAPnH. L­u ý lµ khi muèn dïng chøc n¨ng PWM, bit ECOM vµ bit PWM cña thanh ghi CCAPMn ph¶i ®­îc set lªn 1. VÝ dô: §iÒu khiÓn ®éng c¬ ch¹y trong 10s, cã ®iÒu xung ; ***** DINH NGHIA CAC THANH GHI CHUC NANG DAC BIET ***** TCON EQU 88h T2CON EQU c8h PCON EQU 87h TMOD EQU 89h TL0 EQU 8ah TL1 EQU 8bh TH0 EQU 8ch TH1 EQU 8dh RCAP2L EQU cah RCAP2H EQU cbh TL2 EQU cch TH2 EQU cdh SP EQU 81h IE EQU a8h IP EQU b8h P0 EQU 80h P1 EQU 90h P2 EQU a0h P3 EQU b0h ACC EQU E0h B EQU F0h ; ***** KHAI BAO THANH GHI DIEU KHIEN DO RONG XUNG ***** CCAP0H EQU FAh CCAP1H EQU FBh CCAP2H EQU FCh CCAP3H EQU FDh CCAP4H EQU FEh CCAP0L EQU EAh CCAP1L EQU EBh CCAP2L EQU ECh CCAP3L EQU EDh CCAP4L EQU EEh CCON EQU D8h CR BIT DEh CMOD EQU D9h CCAPM0 EQU DAh CCAPM1 EQU DBh CCAPM2 EQU DCh CCAPM3 EQU DDh CCAPM4 EQU DEh ;===========================DEFINE BIT ================== ;----MOTOR MOTOR1 DATA CCAP0H ;P1.3 MOTOR2 DATA CCAP1H ;P1.4 MOTOR3 DATA CCAP2H ;P1.5 MOTOR4 DATA CCAP3H ;P1.6 MOTOR5 DATA CCAP4H ;P1.7 ;------START BIT_START BIT P2.6 ;NUT NHAN START ;------GIA TRI DIEU XUNG PWM_COUNT BIT 50H ;0-255 ;==============================MAIN================= ORG 0000H MAIN: ;CHO PHEP DIEU XUNG 5 KENH P1.3 - P1.7 MOV CMOD,#00h SETB CR MOV CCAPM0,#01000010B ;P1.3 MOV CCAPM1,#01000010B ;P1.4 MOV CCAPM2,#01000010B ;P1.5 MOV CCAPM3,#01000010B ;P1.6 MOV CCAPM4,#01000010B ;P1.7 ;CHUONG TRINH DIEU KHIEN VAN TOC DONG CO TU 0 -> MAX VA ; TU MAX -> 0 TREN KENH P1.3 ;VAN TOC DONG CO TU 0 -> MAX UNG VOI PWM_COUNT TU 0 ->255 ; VA NGUOC LAI MOV PWM_COUNT,#0 ;DONG CO DUNG JB BIT_START,$ RUN_UP: INC PWM_COUNT MOV MOTOR2,PWM_COUNT MOV MOTOR3,PWM_COUNT LCALL DELAY200MS MOV A,PWM_COUNT CJNE A,#255,RUN_UP RUN_DOWN: DEC PWM_COUNT MOV MOTOR2,PWM_COUNT MOV MOTOR3,PWM_COUNT LCALL DELAY200MS MOV A,PWM_COUNT CJNE A,#0,RUN_DOWN SJMP RUN_UP DELAY200MS: MOV R2,#2 LOOP200_1: MOV R0,#200 LOOP200_2: MOV R1,#250 DJNZ R1,$ DJNZ R0,LOOP200_2 DJNZ R2,LOOP200_1 RET END 4.5. Tãm t¾t tËp lÖnh P89V51RD2 TËp lÖnh cña MCS-51 ®­îc tèi ­u hãa cho t¸c dông ®iÒu khiÓn 8 bit. NhiÒu kiÓu ®Þnh ®Þa chØ chØ c« ®äng vµ nhanh, dïng ®Ó truy xuÊt RAM nèi ®­îc dïng ®Õn nh»m t¹o thuËn lîi cho c¸c thao t¸c trªn c¸c cÊu tróc d÷ liÖu nhá. TËp lÖnh còng hç trî c¸c biÕn 1 bit cho phÐp qu¶n lý bit trùc tiÕp trong c¸c hÖ logic vµ ®iÒu khiÓn cã yªu cÇu xö lý bit. Còng nh­ trong c¸c vi xö lý 8 bit, c¸c lÖnh cña 8051 cã c¸c opcode (m· thao t¸c) 8 bit, do ®ã sè lÖnh cã thÓ lªn ®Õn 256 lÖnh ( thùc tÕ cã 255 lÖnh, mét lÖnh kh«ng ®­îc ®Þnh nghÜa). Ngoµi opcode, mét sè lÖnh cßn cã thªm 1 hay 2 byte n÷a cho d÷ liÖu hoÆc ®Þa chØ. TËp lÖnh cã 139 lªnh 1 byte, 94 lÖnh 2 byte vµ 24 lÖnh 3 byte. 1. ChÕ ®é ®Þnh ®Þa chØ Khi mét lÖnh ®­îc thùc thi vµ lÖnh nµy cÇn d÷ liÖu, mét c©u hái ®­îc ®Æt ra lµ “D÷ liÖu ®­îc chøa ë ®©u”. C©u tr¶ lêi cho c©u hái nµy t¹o ra c¸c kiÓu ®Þnh ®Þa chØ cña 8051. Cã nhiÒu kiÓu ®Þnh ®Þa chØ do vËy cã nhiÒu kiÓu c©u tr¶ lêi cho c©u hái trªn ch¼ng h¹n nh­: trong byte thø 2 cña 1 lÖnh, trong thanh ghi R4, trong ®Þa chØ trùc tiÕp hoÆc trong bé nhí ngoµi ë ®Þa chØ chøa trong con trá d÷ liÖu. C¸c kiÓu ®Þnh ®Þa chØ lµ phÇn cÇn thiÕt cho toµn bé tËp lÖnh cña mçi mét bé vi xö lý, vi ®iÒu khiÓn. C¸c kiÓu ®Þnh ®Þa chØ cho phÐp ta x¸c ®Þnh râ nguån vµ ®Ých cña d÷ liÖu theo nhiÒu c¸ch kh¸c nhau phô thuéc vµo tÝnh huèng lËp tr×nh. Cã 8 kiÓu ®Þnh ®Þa chØ nh­ sau: 2. Thanh ghi ®Þa chØ 8051 cã 4 bank thanh ghi, mçi bank cã 8 thanh ghi ®¸nh sè tõ R0 ®Õn R7. T¹i mçi thêi ®iÓm chØ cã mét bank thanh ghi ®­îc tÝch cùc. Muèn chän bank thanh ghi nµo ta chØ cÇn g¸n c¸c bÝt nhÞ ph©n thÝch hîp vµo RSI (PSW.4) vµ RS0 (PSW.3) trong thanh ghi tr¹ng th¸i ch­¬ng tr×nh (PSW). C¸c lÖnh sö dông kiÓu ®Þnh ®Þa chØ thanh ghi ®­îc m· hãa b»ng c¸ch dïng 3 bit thÊp nhÊt cña opcode ®Ó chØ ra mét thanh ghi bªn trong cña kh«ng gian ®Þa chØ logic nµy. Ngoµi ra, mét sè thanh ghi ®Æc biÖt nh­ thanh ghi tÝch lòy, con trá d÷ liÖu...còng ®­îc x¸c ®Þnh trong c¸c lÖnh nªn kh«ng cÇn c¸c bit ®Þa chØ. Trong c¸c lÖnh nµy thanh ghi tÝch lòy ®­îc x¸c ®Þnh lµ “A”, con trá d÷ liÖu lµ “DPTR”, thanh ghi ®Õm ch­¬ng tr×nh lµ “PC”, cê nhí lµ “C”, cÆp thanh ghi tÝch lòy B lµ “AB”. 3. §Þa chØ trùc tiÕp KiÓu ®Þnh ®Þa chØ trùc tiÕp ®­îc sö dông ®Ó truy xuÊt c¸c biÕn nhí hoÆc c¸c thanh ghi trªn chip. Mét byte thªm vµo tiÕp theo opcode dïng ®Ó x¸c ®Þnh ®Þa chØ. Trong chÕ ®é nµy, c¸c thanh ghi bªn trong 8051 ®­îc ®¸nh ®Þa chØ trùc tiÕp b»ng 8 bit ®Þa chØ n»m trong byte thø hai cña m· lÖnh. Dï vËy, tr×nh dÞch cho phÐp gäi tªn c¸c thanh ghi chøc n¨ng ®Æc biÖt (cã ®Þa chØ trùc tiÕp tõ 80H ®Õn FFH) vÝ dô: P0 cho port0, TMOD cho thanh ghi chÕ ®é Timer... 4. §Þa chØ gi¸n tiÕp Lµm c¸ch nµo ®Ó nhËn biÕt mét biÕn khi ®Þa chØ cña biÕn ®· ®­îc x¸c ®Þnh, ®­îc tÝnh to¸n hoÆc ®­îc söa ®æi trong khi mét ch­¬ng tr×nh ®ang ch¹y? T×nh huèng nµy chØ ph¸t sinh khi ta qu¶n lý c¸c vÞ trÝ nhí liªn tiÕp, c¸c ®iÓm nhËp ®­îc chuçi ký tù. C¸c kiÓu ®Þnh ®Þa chØ thanh ghi hay trùc tiÕp kh«ng sö dông ®­îc cho c¸c t×nh huèng nµy, do vËy ta cÇn cã c¸c ®Þa chØ to¸n h¹ng ®­îc biÕt trong thêi gian hîp dÞch. Gi¶i ph¸p cña 8051 lµ dïng kiÓu ®Þnh ®Þa chØ gi¸n tiÕp. C¸c thanh ghi R0 vµ R1 cã thÓ ho¹t ®éng nh­ c¸c con trá (pointer) vµ néi dung cña chóng chØ ra ®Þa chØ trong RAM, n¬i mµ d÷ liÖu ®­îc ®äc hay ghi. Bit cã ý nghÜa thÊp nhÊt cña opcode x¸c ®Þnh thanh ghi nµo (R0 hay R1) ®­îc dïng lµm con trá. Trong hîp ng÷ cña 8051, kiÓu ®Þnh ®Þa chØ gi¸n tiÕp ®­îc nhËn biÕt dùa vµo ký tù @ ®Æt tr­íc R0 hay R1. R0 vµ R1 ®­îc dïng ®Ó chøa ®Þa chØ « nhí mµ lÖnh t¸c ®éng ®Õn. Ng­êi ta quy ­íc dïng dÊu @ tr­íc R0 hoÆc R1. 5. §Þa chØ tøc thêi Ng­êi ta dïng # tr­íc c¸c to¸n h¹ng tøc thêi. C¸c to¸n h¹ng ®ã cã thÓ lµ mét h»ng sè, mét ký sè hay mét biÓu thøc to¸n häc ... Tr×nh hîp dÞch sÏ tù ®éng tÝnh to¸n vµ thay thÕ d÷ liÖu trùc tiÕp vµo m· lÖnh. 6. §Þa chØ t­¬ng ®èi §Þa chØ t­¬ng ®èi ®­îc dïng trong c¸c lÖnh nh¶y 8051/8031 dïn gi¸ trÞ 8 bit cã dÊu ®Ó céng thªm vµo thanh ghi ®Õm ch­¬ng tr×nh (PC). TÇm nh¶y c¶ lÖnh trong kho¶ng tõ - 128 ®Õn 127 « nhí. Tr­íc khi céng, thanh ghi PC sÏ t¨ng ®Õn ®Þa chØ theo sau lÖnh nh¶u råi tÝnh to¸n ®Þa chØ offset cÇn thiÕt ®Ó nh¶y ®Õn ®Þa chØ yªu cÇu. Nh­ vËy ®Þa chØ míi lµ ®Þa chØ t­¬ng ®èi so víi lÖnh kÕ tiÕp chø kh«ng ph¶i lµ b¶n th©n lÖnh nh¶y. Th­êng lÖnh nµy cã liªn quan ®Õn nh·n ®­îc ®Þnh nghÜa tr­íc. 7. §Þa chØ tuyÖt ®èi §Þa chØ tuyÖt ®èi chØ dïng trong c¸c lÖnh ACALL vµ JIMP. C¸c lÖnh 2 byte nµy dïng ®Ó rÏ nh¸nh vµo mét trang 2 Kbyte cña bé nhí ch­¬ng tr×nh b»ng c¸ch cÊp 11 bit ®Þa chØ thÊp (A0-A10) ®Ó x¸c ®Þnh ®Þa chØ ®Ých trong trang m·. Cßn 5 bit cao cña ®Þa chØ ®Ých (A11-A15) chÝnh lµ 5 bit cao hiÖn hµnh trong thanh ghi ®Õm ch­¬ng tr×nh. V× vËy ®Þa chØ cña lÖnh theo sau lÖnh rÏ nh¸nh vµ ®Þa chØ ®Ých cña lÖnh rÏ nh¸nh cÇn ph¶i cïng trang m· 2 kbyte. 8. §Þa chØ dµi §Þa chØ dµi chØ dïng cho lÖnh LCALL vµ LJIMP. C¸c lÖnh nµy chiÕm 3 byte vµ dïng 2 byte sau (byte 2 vµ byte 3) ®Ó ®Þnh ®Þa chØ ®Ých cña lÖnh (16bit). ¦u ®iÓm cña lÖnh nµy cã thÓ sö dông trong toµn bé vïng nhí 64 Kbyte. Tuy nhiªn, lÖnh nµy chiÕm nhiÒu byte vµ lÖ thuéc vµo vÞ trÝ vïng nhí. 9. §Þa chØ tham chiÕu §Þa chØ tham chiÕu dïng mét thanh ghi c¬ b¶n (hoÆc thanh ghi ®Õm ch­¬ng tr×nh PC hoÆc thanh ghi con trá d÷ liÖu DPTR) vµ ®Þa chØ offset (trong thanh thi tÝch lòy A) ®Ó t¹o ®Þa chØ ®­îc t¸c ®éng cho c¸c lÖnh JMP hoÆc MOVC. C¸c b¶ng nh¶y vµ b¶ng tÝm kiÕm dÔ dµng ®­îc t¹o ra ®Ó sö dông ®Þa chØ tham chiÕu. 4.6.2. C¸c nhãm lÖnh hä P89V51RD2 TËp lÖnh cña 8051 ®­îc chia thµnh 5 nhãm: Sè häc. Logic. ChuyÓn d÷ liÖu. ChuyÓn ®iÒu khiÓn. Nhãm lÖnh rÏ nh¸nh Ÿ C¸c chi tiÕt thiÕt lËp lÖnh: - Rn : Thanh ghi R0 ®Õn R7 cña bank thanh ghi ®­îc chän. - Data : 8 bit ®Þa chØ vïng d÷ liÖu bªn trong. Nã cã thÓ lµ vïng RAM d÷ liÖu trong (0 - 127) hoÆc c¸c thanh ghi chøc n¨ng ®Æc biÖt. - @Ri : 8 bit vïng RAM d÷ liÖu trong (0-125) ®­îc ®¸nh gi¸ ®Þa chØ gi¸n tiÕp qua thanh ghi R0 hoÆc R1. - #data : H»ng 8 bit chøc trong c©u lÖnh. - #data 16 : H»ng 16 bit chøa trong c©u lÖnh. - Addr16 : 16 bit ®Þa chØ ®Ých ®­îc dïng trong lÖnh LCALL vµ LJMP. - Addr11 : 11 bit ®Þa chØ ®Ých ®­îc dïng trong lÖnh LCALL vµ AJMP. - Rel : Byte offset 8 bit cã dÊu ®­îc dïng trong lÖnh SJMP vµ nh÷ng lÖnh nh¶y cã ®iÒu kiÖn. - Bit : Bit ®­îc ®Þnh ®Þa chØ trùc tiÕp trong RAM d÷ liÖu néi hoÆc c¸c thanh ghi chøc n¨ng ®Æc biÖt. 1. Nhãm lÖnh xö lý sè häc ADD A,Rn (1byte, 1 chu kú m¸y) : céng néi dung thanh ghi Rn vµo thanh ghi A. ADD A,data (2,1): Céng trùc tiÕp 1 byte vµo thanh ghi A. ADD A,@Ri (1,1): Céng gi¸n tiÕp néi dung RAM chøa t¹i ®Þa chØ ®­îc khai b¸o trong Ri vµo thanh ghi A. ADD A,#data (2,1):Céng d÷ liÖu tøc thêi vµo A. ADD A,Rn (1,1): Céng thanh ghi vµ cê nhí vµo A. ADD A,data (2,1): Céng trùc tiÕp byte d÷ liÖu vµ cê nhí vµo A. ADDC A,@Ri (1,1): Céng gi¸n tiÕp néi dung RAM vµ cê nhí vµo A. ADDC A,#data (2,1): Céng d÷ liÖu tøc thêi vµ cê nhí vµo A. SUBB A,Rn (1,1): Trõ néi dung thanh ghi A cho néi dung thanh ghi Rn vµ cê nhí. SUBB A,data (2,1): Trõ trùc tiÕp A cho mét sè vµ cê nhí. SUBB A,@Ri (1,1): Trõ gi¸n tiÕp A cho mét sè vµ cê nhí. SUBB A,#data (2,1): Trõ néi dung A cho mét sè tøc thêi vµ cê nhí. INC A (1,1): T¨ng néi dung thanh ghi A lªn 1. INC Rn (1,1): T¨ng néi dung thanh ghi Rn lªn 1. INC data (2,1): T¨ng d÷ liÖu trùc tiÕp lªn 1. INC @Ri (1,1): T¨ng gi¸n tiÕp néi dung vïng RAM lªn 1. DEC A (1,1): Gi¶m néi dung thanh ghi A xuèng 1. DEC Rn (1,1): Gi¶m néi dung thanh ghi Rn xuèng 1. DEC data (2,1): Gi¶m d÷ liÖu trùc tiÕp xuèng 1 DEC @Ri (1,1): Gi¶m gi¸n tiÕp néi dung vïng RAM xuèng 1. INC DPTR (1,2): T¨ng néi dng con trá d÷ liÖu lªn 1. MUL AB (1,4): Nh©n néi dung thanh ghi A víi néi dung thanh ghi B. DIV AB (1,4): Chia néi dung thanh ghi A cho néi dung thanh ghi B. DA A (1,1): hiÖu chØnh thËp ph©n thanh ghi A. 2. Nhãm lÖnh luËn lý ANL A,Rn (1,1): AND néi dung thanh ghi A víi néi dung thanh ghi Rn. ANL A,data (2,1): AND néi dung thanh ghi A víi d÷ liÖu trùc tiÕp. ANL A,@Ri (1,1): AND néi dung thanh ghi A víi d÷ liÖu gi¸n tiÕp trong RAM. ANL A,#data (2,1): AND néi dung thanh ghi víi d÷ liÖu tøc thêi. ANL data,A (2,1): AND mét d÷ liÖu trùc tiÕp víi A. ANL data,#data (3,2): AND mét d÷ liÖu trùc tiÕp víi A mét d÷ liÖu tøc thêi. ANL C,bit (2,2): AND cê nhí víi 1 bit trùc tiÕp. ANL C,/bit (2,2): AND cê nhí víi bï 1 bit trùc tiÕp. ORL A,Rn (1,1): OR thanh ghi A víi thanh ghi Rn. ORL A,data (2,1): OR thanh ghi A víi mét d÷ liÖu trùc tiÕp. ORL A,@Ri (1,1): OR thanh ghi A víi mét d÷ liÖu gi¸n tiÕp. ORL A,#data (2,1): OR thanh ghi A víi mét d÷ liÖu tøc thêi. ORL data,A (2,1): OR mét d÷ liÖu trùc tiÕp víi thanh ghi A. ORL data,#data (3,1) :OR mét d÷ liÖu trùc tiÕp víi mét d÷ liÖu tøc thêi. ORL C,bit (2,2): OR cê nhí víi mét bit trùc tiÕp. ORL C,/bit (2,2): OR cê nhí víi bï cña mét bit trùc tiÕp. XRL A,Rn (1,1): XOR thanh ghi A víi thanh ghi Rn. XRL A,data (2,1): XOR thanh ghi A víi mé d÷ liÖu trùc tiÕp. XRL A,@Ri (1,1): XOR thanh ghi A víi mét d÷ liÖu gi¸n tiÕp. XRL A,#data (2,1): XOR thanh ghi A víi mé d÷ liÖu tøc thêi. XRL data,A (2,1): XOR mét d÷ liÖu trùc tiÕp víi thanh ghi A. XRL dara,#data (3,1): XOR mét d÷ liÖu trùc tiÕp víi mét d÷ liÖu tøc thêi. SETB C (1,1): §Æt cê nhí. SETB bit (2,1): §Æt mét bit trùc tiÕp. CLR A (1,1): Xãa thanh ghi A. CLR C (1,1): Xãa cê nhí. CPL A (1,1): Bï néi dung thanh ghi A. CPL C (1,1): Bï cê nhí. CPL bit (2,1): Bï mét bit trùc tiÕp. RL A (1,1): Quay tr¸i néi dung thanh ghi A. RLC A (1,1): Quay tr¸i néi dung thanh ghi A qua cê nhí. RR A (1,1): Quay ph¶i néi dung thanh ghi A. RRC A (1,1): Quay ph¶i néi dung thanh ghi A qua cê nhí. SWAP (1,1): Quay tr¸i néi dung thanh ghi A 1 nibble (1/2byte). 3. Nhãm lÖnh chuyÓn d÷ liÖu MOV A,Rn (1,1):ChuyÓn néi dung thanh ghi Rn vµo thanh ghi A. MOV A,data (2,1): ChuyÓn d÷ liÖu trùc tiÕp vµo thanh ghi A. MOV A,@Ri (1,1): ChuyÓn d÷ liÖu gi¸n tiÕp vµo thanh ghi A. MOV A,#data (2,1): ChuyÓn d÷ liÖu tøc thêi vµo thanh ghi A. MOV Rn,data (2,2): ChuyÓn d÷ liÖu trùc tiÕp vµo thanh ghi Rn. MOV Rn,#data (2,1): ChuyÓn d÷ liÖu tøc thêi vµo thanh ghi Rn. MOV data,A (2,1): ChuyÓn néi dung thanh ghi A vµo mét d÷ liÖu trùc tiÕp. MOV data,Rn (2,2): ChuyÓn néi dung thanh ghi Rn vµo mét d÷ liÖu trùc tiÕp. MOV data,data (3,2): ChuyÓn mét d÷ liÖu trùc tiÕp vµo mét d÷ liÖu trùc tiÕp. MOV data,@Ri (2,2): ChuyÓn mét d÷ liÖu gi¸n tiÕp vµo mét d÷ liÖu gi¸n tiÕp. MOV data,#data (3,2): ChuyÓn mét d÷ liÖu tøc thêi vµo mét d÷ liÖu trùc tiÕp. MOV @Ri,A (1,1): ChuyÓn néi dung thanh ghi A vµo mét d÷ liÖu gi¸n tiÕp. MOV @Ri,data (2,2): ChuyÓn mét d÷ liÖu trùc tiÕp vµo mét d÷ liÖu gi¸n tiÕp. MOV @Ri,#data (2,1): ChuyÓn d÷ liÖu tøc thêi vµo d÷ liÖu gi¸n tiÕp. MOV DPTR,#data (3,2): ChuyÓn mét h»ng 16 bit vµo thanh ghi con trá d÷ liÖu. MOV C,bit (2,1): ChuyÓn mét bit trùc tiÕp vµo cê nhí. MOV bit,C (2,2): ChuyÓn cê nhí vµo mét bit trùc tiÕp. MOV A,@A+DPTR (1,2): ChuyÓn byte bé nhí ch­¬ng tr×nh cã ®Þa chØ lµ @A+DPRT vµo thanh ghi A. MOVC A,@A+PC (1,2): ChuyÓn byte bé nhí ch­¬ng tr×nh cã ®Þa chØ lµ @A+PC vµo thanh ghi A. MOVX A,@Ri (1,2): ChuyÓn d÷ liÖu ngoµi (8 bit ®Þa chØ) vµo thanh ghi A. MOVX A,@DPTR (1,2): ChuyÓn d÷ liÖu ngoµi (16 bit ®Þa chØ) vµo thanh ghi A. MOVX @Ri,A (1,2): ChuyÓn néi dung A ra d÷ liÖu ngoµi (8 bit ®Þa chØ). MOVX @DPTR,A (1,2): ChuyÓn néi dung A ra d÷ liÖu bªn ngoµi (16 bit ®Þa chØ). PUSH data (2,2): ChuyÓn d÷ liÖu trùc tiÕp vµo ng¨n xÕp vµ t¨ng SP. POP data (2,2): ChuyÓn d÷ liÖu trùc tiÕp vµo ng¨n xÕp vµ gi¶m SP. XCH A,Rn (1,1): Trao ®æi d÷ liÖu gi÷a thanh ghi Rn v2 thanh ghi A. XCH A,data (2,1): Trao ®æi gi÷a thanh ghi A vµ mét d÷ liÖu trùc tiÕp. XCH A,@Ri (1,1): Trao ®æi gi÷a thanh ghi A vµ mét d÷ liÖu gi¸n tiÕp. XCHD A,@R (1,1): Trao ®æi gi÷a nibble thÊp (LSN) cña thanh ghi A vµ LSN cña d÷ liÖu gi¸n tiÕp. 4. Nhãm lÖnh chuyÒn ®iÒu khiÓn ACALL addr11 (2,2): Gäi ch­¬ng tr×nh con dïng ®Þa ch× tuyÖt ®èi. LCALL addr16 (3,2): Gäi ch­¬ng tr×nh con dïng ®Þa chØ dµi. RET (1,2): Trë vÒ tõ lÖnh gäi ch­¬ng tr×nh con. RET1 (1,2): Trë vÒ tõ lÖnh gäi ng¾t. AJMP addr11 (2,2): Nh¶y tuyÖt ®èi. LJMP addr16 (3,2): Nh¶y dµi. SJMP rel (2,2):Nh¶y ng¾n. JMP @A+DPTR (1,2): Nh¶y gi¸n tiÕp tõ con trá d÷ liÖu. JZ rel (2,2): Nh¶y nÕu A=0. JNZ rel (2,2): Nh¶y nÕu A kh«ng b»ng 0. JC rel (2,2): Nh¶y nÕu cê nhí ®­îc ®Æt. JNC rel (2,2): Nh¶y nÕu cê nhí kh«ng ®­îc ®Æt. JB bit,rel (3,2): Nh¶y t­¬ng ®èi nÕu bit trùc tiÕp ®­îc ®Æt. JNB bit,rel (3,2):Nh¶y t­¬ng ®èi nÕu bit trùc tiÕp kh«ng ®­îc ®Æt. JBC bit,rel (3,2): Nh¶y t­¬ng ®èi nÕu bit trùc tiÕp ®­îc ®Æt , råi xãa bit. CJNE A,data,rel (3,2): So s¸nh d÷ liÖu trùc tiÕp víi A vµ nh¶y nÕu kh«ng b»ng. CJNE A,#data,rel (3,2): So s¸nh d÷ liÖu tøc thêi víi A vµ nh¶y nÕu kh«ng b»ng. CJNE Rn,#data,rel (3,2): So s¸nh d÷ liÖu tøc thêi víi néi dung thanh ghi Rn vµ nh¶y nÕu kh«ng b»ng. CJNE @Ri,#data,rel (3,2): So s¸nh d÷ liÖu tøc thêi víi d÷ liÖu gi¸n tiÕp vµ nh¶y nÕu kh«ng b»ng. DJNZ Rn,rel (2,2): Gi¶n thanh ghi Rn vµ nh¶y nÕu kh«ng b»ng. DJNZ data,rel (3,2): Gi¶m d÷ liÖu trùc tiÕp vµ nh¶y nÕu kh«ng b»ng. 5. C¸c lÖnh rÏ nh¸nh Cã nhiÒu lÖnh ®Ó ®iÒu khiÓn lªn ch­¬ng tr×nh bao gåm viÖc gäi hoÆc tr¶ l¹i tõ ch­¬ng tr×nh con hoÆc chia nh¸nh cã ®iÒu kiÖn hay kh«ng cã ®iÒu kiÖn. TÊt c¶ c¸c lÖnh rÏ nh¸nh ®Òu kh«ng ¶nh h­ëng ®Õn cê. Ta cã thÓ ®Þnh nh¶n cÇn nh¶y tíi mµ kh«ng cÇn râ ®Þa chØ, tr×nh biªn dÞch sÏ ®Æt ®Þa chØ n¬i cÇn nh¶y tíi vµo ®óng khÈu lÖnh ®· ®­a ra. Ÿ Nh¶y cã ®iÒu kiÖn: Condition Jump If Not Jump If C = 1 JNC rel JC rel Bit = 1 JNB bit, rel JB bit, rel / JBC bit, rel A = 0 JNZ rel JZ rel Rn = 0 DJNZ Rn, rel Direct = 0 DJNZ direct, rel A # direct CJNE A, direct, rel A # #data CJNE A, #data, rel Rn # #data CJNE Rn, #data, rel @Ri # #data CJNE @Ri, #data, rel Ÿ Nh¶y kh«ng ®iÒu kiÖn: ALJMP, LJMP, SJMP CH¦¥NG V: THIÕT KÕ M¹CH §IÖN Tö 5.1. S¬ ®å khèi tæng qu¸t M¹ch ®iÒu khiÓn bao gåm c¸c khèi chÝnh ®­îc liªn kÕt víi nhau nh­ sau: H×nh 5.1. S¬ ®å tæng qu¸t vÒ phÇn cøng 5.2. Khèi ®iÒu khiÓn b»ng tay (MCU) S¬ ®å cÊu tróc cña board ®iÒu khiÓn b»ng tay nh­ sau: H×nh 5.2. S¬ ®å khèi S¬ ®å chi tiÕt : H×nh 5.3. Khèi ®iÒu khiÓn MCU cã thÓ dïng 89C51 cña h·ng ATMEL hoÆc P89V51RD2XX do h·ng philips s¶n xuÊt. khèi nµy tÝch hîp s½n chç n¹p cho MCU P89V51RD2XX. 5.3. Khèi phÝm bÊm H×nh 5.4. Gampark Cã tÊt c¶ 8 phÝm ®iÒu khiÓn cho robot b»ng tay. C¸c phÝm nµy kÝch trùc tiÕp vµo ch©n cña vi ®iÒu khiÓn p89V51RD2. B¶ng m« t¶ chøc n¨ng cña gamepad: Gi¶n ®å xung quy ­íc ®Ó truyÒn d÷ liÖu gi÷a module giao tiÕp vµ Gamepad nh­ sau: 5.4. Khèi Motor Drive H×nh 5.5. S¬ ®å nguyªn lý ®iÒu khiÓn ®éng c¬ TÝn hiÖu ®iÒu khiÓn lµ DK PWM1 ®­îc nèi vµo 1 trong 5 module cña PCA ®Ó xuÊt ra chuçi xung ®iÒu khiÓn ®iÖn ¸p ®i qua ®éng c¬. Opto quang 4N35 dïng ®Ó c¸ch ly gi÷a tÝn hiÖu ®iÒu khiÓn vµ phÇn c«ng suÊt v× phÇn ®iÒu khiÓn dïng nguån 5V cßn phÇn c«ng suÊt dïng nguån 12V vµ 24V. CÆp transistor C2383 vµ A1013 lµm nhiÖm vô ®Èy kÐo t¹o xung kÝch cho MOSFET. Gate/MOSFET khi ®ãng më kh«ng døt kho¸t th× tÜnh ®iÖn tµn d­ trªn mèi nèi sÏ lµm cho MOSFET dÔ bÞ chÕt, cÆp transistor nµy ®¶m b¶o ®ãng më døt kho¸t, an toµn cao cho chuyÓn m¹ch MOSFET. Thªm vµo ®ã lµ l¾p thªm ®iÖn trë c«ng suÊt 220 2W b¶o vÖ FET. Ngoµi ra nh­ em ®· nãi ë trªn, sö dông cÇu H ®Ò ®¶o chiÒu ®éng c¬ qu¸ phøc t¹p. Chóng ta cã thÓ kÕt hîp FET vµ relay ®Ó ®¶o chiÒu ®éng c¬ sÏ ®¬n gi¶n h¬n nhiÒu. TÝn hiÖu ®iÒu khiÓn ®¶o chiÒu lµ DK RELAY 1. Khi DK RELAY 1 ®­îc xuÊt møc 1, ®éng c¬ quay thuËn. Ng­îc l¹i, khi DK RELAY 1 ®­îc xuÊt møc 0, ®éng c¬ quay ng­îc. 5.5. Khèi hiÓn thÞ H×nh 5.6. Khèi hiÓn thÞ §Ó tiÕt kiÓm cæng, em sö dông 2 ch©n TXD vµ RXD, dïng IC 74LS164 ®Ó më réng cæng. IC 74164 cã chøc n¨ng nh­ mét thanh ghi dÞch, RXD ®ãng vai trß nh­ ch©n d÷ liÖu nèi tiÕp cßn TXD lµ ch©n CLK. C¸c LED 7 ®o¹n ®­îc gi¶i m· dïng IC 7447. TÝn hiÖu ®iÒu khiÓn khèi hiÓn th× lµ tõ (word) 1 byte theo thø tù: MSB LSB O0 O1 O2 O3 O4 O5 O6 O7 O0,O1,O2,O3: C¸c gi¸ trÞ ®­a vµo 7447 ®Ó gi¶i m· O4,O5,O6,O7: C¸c bit chän led 5.6. Khèi nguån Khèi nµy cã vai trß rÊt quan träng do chi phèi ho¹t ®éng cña mäi khèi kh¸c. NÕu nguån yÕu sÏ dÉn ®Õn vi ®iÒu khiÓn bÞ reset liªn tôc, ®éng c¬ kh«ng ch¹y ®óng c«ng suÊt. Nguån cho robot sÏ gåm: + Nguån 5V cÊp cho khèi ®iÒu khiÓn, khèi hiÓn thÞ vµ khèi c¶m biÕn. + Nguån 12V vµ 24V cÊp cho ®éng c¬. H×nh 5.7. S¬ ®å m¹ch khèi nguån 5V H×nh 5.8. S¬ ®å m¹ch khèi nguån 12V vµ 24V §iÖn ¸p ®Çu vµo khèi nguån 5V lµ mét acqui 12V, ®­îc n¾n dßng bëi mét diode. Trong s¬ ®å m¹ch nµy em dïng IC æn ¸p LM7085 ®Ó ®­a ra ®iÖn ¸p chuÈn 5V cung cÊp cho khèi ®iÒu khiÓn. Do dßng cña LM 7805 nhá (500mA) nªn em dïng B688 ®Ó n©ng dßng cho LM 7805, s¬ ®å ®­îc m¾c nh­ h×nh vÏ. Ta biÕt B688 më khi ®iÖn ¸p gi÷a cùc E vµ cùc B lµ 0,7V mµ dßng qua LM 7805 lµ 250mA (dïng vËy ®Ó b¶o vÖ 7805) nªn ta dÔ dµng tÝnh ®­îc gi¸ trÞ ®iÖn trë dïng ®Ó ph©n ¸p cho B688. Nguån 24V cung cÊp cho ®éng c¬ ®­îc t¹o ra b»ng c¸ch nèi nèi tiÕp 2 acqui 12V. Ch­¬ng VI: thiÕt kÕ chÕ t¹o m¹ch ®iÖn vµ ch­¬ng tr×nh gi¶i thuËt cho robot Do s¬ ®å m¹ch ®iÖn cho robot kh¸ phøc t¹p, bao gåm phÇn ®iÒu khiÓn vµ phÇn c«ng suÊt. NÕu vÏ hai phÇn cïng trªn mét b¶n m¹ch th× khi thiÕt kÕ m¹ch in sÏ khã kh¨n, do ®ã em t¸ch s¬ ®å m¹ch ra lµm hai phÇn: + PhÇn ®iÒu khiÓn: Gåm khèi hiÓn thÞ, khèi c¶m biÕn, khèi nguån vµ khèi ®iÒu khiÓn. + PhÇn c«ng suÊt: Gåm 5 kªnh ®iÒu khiÓn ®éng c¬ dïng FET vµ relay kÕt hîp. 6.1. S¬ ®å nguyªn lý 6.1.1. S¬ ®å nguyªn lý phÇn ®iÒu khiÓn H×nh 6.1. S¬ ®å nguyªn lý phÇn ®iÒu khiÓn 6.1.2. S¬ ®å nguyªn lý phÇn c«ng suÊt H×nh 6.2. S¬ ®å nguyªn lý phÇn c«ng suÊt 6.2. ThiÕt kÕ m¹ch in 6.2.1. S¬ ®å bè trÝ linh kiÖn board ®iÒu khiÓn H×nh 6.3. S¬ ®å bè trÝ linh kiÖn 6.2.2. S¬ ®å m¹ch in líp TOP cña board ®iÒu khiÓn H×nh 6.4. M¹ch in líp TOP cña board ®iÒu khiÓn 6.2.3. S¬ ®å m¹ch in líp Bottom cña board ®iÒu khiÓn H×nh 6.5. M¹ch in líp Bottom cña board ®iÒu khiÓn 6.2.4. S¬ ®å bè trÝ linh kiÖn board c«ng suÊt H×nh 6.6. S¬ ®å bè trÝ linh kiÖn 6.2.5. S¬ ®å m¹ch in líp TOP cña board c«ng suÊt H×nh 6.7. M¹ch in líp TOP cña board c«ng suÊt 6.2.6. S¬ ®å m¹ch in líp Bottom cña board c«ng suÊt H×nh 6.8. M¹ch in líp Bottom cña board c«ng suÊt 6.3. Thi c«ng m¹ch in H×nh 6.9. B¶n thiÕt kÕ m¹ch in 2 líp board ®iÒu khiÓn H×nh 6.10. B¶n thiÕt kÕ m¹ch in 2 líp board cèng suÊt 6.4. phÝm bÊm Th«ng th­êng khèi phÝm bÊm hay dïng lo¹i Gamepad lo¹i th«ng dông (SONY Playstation Controller). H×nh 6.11. Gamepad 6.5.Gi¶i thuËt vµ ch­¬ng tr×nh cho robot 1. c¸c l­u ®å gi¶ thuËt cho robot Tr­íc khi b¾t ®Çu lËp tr×nh chóng ta ph¶i quy ®Þnh c¸c phÝm bÊm cã C¸c phÝm chøc n¨ng sau: - TiÕn 1, TiÕn 2, TiÕn 3, TiÕn 4 - Lïi 1, Lïi 2 - PhÝm n©ng, PhÝm h¹ H×nh 6.12. L­u ®å gi¶i thuËt ®i th¼ng H×nh 6.13. L­u ®å gi¶i thuËt ®i lïi H×nh 6.14. L­u ®å gi¶i thuËt rÏ ph¶i H×nh 6.15. L­u ®å gi¶i thuËt rÏ tr¸i H×nh 6.14. L­u ®å gi¶i thuËt n©ng h¹ kago 2. ch­¬ng tr×nh gi¶i thuËt cho robot b»ng tay Dùa vµo cÊu tróc phÇn cøng ®· thiÕt kÕ kÕt hîp víi yªu cÇu vÒ chøc n¨ng, ho¹t ®éng cña hÖ thèng chóng ta sÏ ®· tiÕn hµnh lËp tr×nh ch­¬ng tr×nh ®iÒu khiÓn cho vi ®iÒu khiÓn P89V51RD2 b»ng ng«n ng÷ ASSEBLY víi tr×nh biªn dÞch READS51. Ch­¬ng tr×nh ®iÒu khiÓn nµy sÏ ®­îc tr×nh biªn dÞch READS51 chuyÓn thµnh file .HEX vµ ®­îc n¹p vµo bé nhí ch­¬ng tr×nh cña P89V51RD2. ; ***** DINH NGHIA CAC THANH GHI CHUC NANG DAC BIET ***** TCON EQU 88h T2CON EQU c8h PCON EQU 87h TMOD EQU 89h TL0 EQU 8Ah TL1 EQU 8Bh TH0 EQU 8Ch TH1 EQU 8Dh RCAP2L EQU CAh RCAP2H EQU CBh TL2 EQU CCh TH2 EQU CDh SP EQU 81h IE EQU A8h IP EQU B8h P0 EQU 80h P1 EQU 90h P2 EQU A0h P3 EQU B0h ACC EQU E0h B EQU F0h ; *** KHAI BAO THANH GHI DIEU KHIEN DO RONG XUNG *** CCAP0H EQU FAh CCAP1H EQU FBh CCAP2H EQU FCh CCAP3H EQU FDh CCAP4H EQU FEh CCAP0L EQU EAh CCAP1L EQU EBh CCAP2L EQU ECh CCAP3L EQU EDh CCAP4L EQU EEh CCON EQU D8h CR BIT DEh CMOD EQU D9h CCAPM0 EQU DAh CCAPM1 EQU DBh CCAPM2 EQU DCh CCAPM3 EQU DDh CCAPM4 EQU DEh ;================ DEFINE BIT ================= ;-------- MOTOR MOTOR_0 DATA CCAP0H ; P1.3 MOTOR_1 DATA CCAP1H ; P1.4 DK_CHIEU_DC_RIGHT_F MOTOR_2 DATA CCAP2H ; P1.5 MOTOR_3 DATA CCAP3H ; P1.6 DK_CHIEU_DC_RIGHT_R MOTOR_4 DATA CCAP4H ; P1. BIT_ACC7 BIT E7h ; *** DINH NGHIA CAC CHAN CHUC NANG DIEU KHIEN ROLE *** DK_CHIEU_DC_LEFT_F BIT P3.4 DK_CHIEU_DC_RIGHT_F BIT P1.1 DK_CHIEU_DC_LEFT_R BIT P1.2 DK_CHIEU_DC_RIGHT_R BIT P3.2 DK_CHIEU_DC_RAISE BIT P3.3 ; ****** DINH NGHIA CAC PHIM DIEU KHIEN ****** BUTTON EQU P2 BUTTON_GO_RIGHT BIT BUTTON.5 BUTTON_RIGHT_RIGHT BIT BUTTON.3 BUTTON_BACK_RIGHT BIT BUTTON.2 BUTTON_LEFT_RIGHT BIT BUTTON.4 BUTTON_RIGHT_LEFT BIT BUTTON.0 BUTTON_BACK_LEFT BIT BUTTON.1 BUTTON_GO_LEFT BIT BUTTON.7 BUTTON_LEFT_LEFT BIT BUTTON.6 FLAG_BUTTON EQU 20H FLAG_BUTTON_GO_RIGHT BIT FLAG_BUTTON.0 FLAG_BUTTON_RIGHT_RIGHT BIT FLAG_BUTTON.1 FLAG_BUTTON_BACK_RIGHT BIT FLAG_BUTTON.2 FLAG_BUTTON_LEFT_RIGHT BIT FLAG_BUTTON.3 FLAG_BUTTON_RIGHT_LEFT BIT FLAG_BUTTON.4 FLAG_BUTTON_BACK_LEFT BIT FLAG_BUTTON.5 FLAG_BUTTON_GO_LEFT BIT FLAG_BUTTON.6 FLAG_BUTTON_LEFT_LEFT BIT FLAG_BUTTON.7 ENABLE_BUTTON EQU 21H ENABLE_BUTTON_GO_RIGHT BIT ENABLE_BUTTON.0 ENABLE_BUTTON_RIGHT_RIGHT BIT ENABLE_BUTTON.1 ENABLE_BUTTON_BACK_RIGHT BIT ENABLE_BUTTON.2 ENABLE_BUTTON_LEFT_RIGHT BIT ENABLE_BUTTON.3 ENABLE_BUTTON_RIGHT_LEFT BIT ENABLE_BUTTON.4 ENABLE_BUTTON_BACK_LEFT BIT ENABLE_BUTTON.5 ENABLE_BUTTON_GO_LEFT BIT ENABLE_BUTTON.6 ENABLE_BUTTON_LEFT_LEFT BIT ENABLE_BUTTON.7 LAST_ACTION_R EQU 22H LAST_ACTION_GO_RIGHT BIT LAST_ACTION_R.0 LAST_ACTION_RIGHT_RIGHT BIT LAST_ACTION_R.1 LAST_ACTION_BACK_RIGHT BIT LAST_ACTION_R.2 LAST_ACTION_LEFT_RIGHT BIT LAST_ACTION_R.3 LAST_ACTION_STOP_RIGHT BIT LAST_ACTION_R.4 LAST_ACTION_L EQU 23H LAST_ACTION_GO_LEFT BIT LAST_ACTION_L.0 LAST_ACTION_RIGHT_LEFT BIT LAST_ACTION_L.1 LAST_ACTION_BACK_LEFT BIT LAST_ACTION_L.2 LAST_ACTION_LEFT_LEFT BIT LAST_ACTION_L.3 LAST_ACTION_STOP_LEFT BIT LAST_ACTION_L.4 LAST_ACTION_RAISE EQU 24H LAST_ACTION_RAISE_UP BIT LAST_ACTION_RAISE.0 LAST_ACTION_RAISE_DOWN BIT LAST_ACTION_RAISE.1 LAST_ACTION_RAISE_STOP BIT LAST_ACTION_RAISE.2 ; ****** DINH NGHIA CHAN DIEU KHIEN HIEN THI LED ****** DATA_LED BIT P3.0 CLK_LED BIT P3.1 ; **** DINH NGHIA BYTE NHO TOC DO DIEU RONG XUNG **** PWM_MOTO_LEFT_SPEED EQU 30H ; 0-FFh -> co 256 muc toc do PWM_MOTO_RIGHT_SPEED EQU 31H ; 0-FFh -> co 256 muc toc do ; ****** DINH NGHIA CAC BIEN PHUC VU HIEN THI LED COUNTER_BIT_LED EQU 40h ; Ho tro dem quay vong 8 Bit ; khi dich thanh ghi A de xuat du lieu ra INDEX_CURRENT_LED EQU 41h ; INDEX_RAM_DISPLAY EQU 42h ; Chi vi tri dau vung nho LED_1 EQU 43h ; Nho gia tri hien thi LED_1 LED_2 EQU 44h ; Nho gia tri hien thi LED_2, LED_3 EQU 45h ; Nho gia tri hien thi LED_3, LED_4 EQU 46h ; Nho gia tri hien thi LED_4, DRIVER_LED_1 EQU 47h ; Nho gia tri 4 BIT dieu khien vi tri DRIVER_LED_2 EQU 48h ; Nho gia tri 4 BIT dieu khien vi tri DRIVER_LED_3 EQU 49h ; Nho gia tri 4 BIT dieu khien vi tri DRIVER_LED_4 EQU 4Ah ; Nho gia tri 4 BIT dieu khien vi tri COUNTER_BUTTON_GO_RIGHT EQU 60h COUNTER_BUTTON_RIGHT_RIGHT EQU 61h COUNTER_BUTTON_BACK_RIGHT EQU 62h COUNTER_BUTTON_LEFT_RIGHT EQU 63h COUNTER_BUTTON_RIGHT_LEFT EQU 64h COUNTER_BUTTON_BACK_LEFT EQU 65h COUNTER_BUTTON_GO_LEFT EQU 66h COUNTER_BUTTON_LEFT_LEFT EQU 67h INC_MOTO_LEFT_SPEED EQU 71H INC_MOTO_RIGHT_SPEED EQU 72H DEC_MOTO_LEFT_SPEED EQU 73H DEC_MOTO_RIGHT_SPEED EQU 74H ADJ_MOTO_LEFT_SPEED EQU 75H ADJ_MOTO_RIGHT_SPEED EQU 76H ; --*-----*--------MAIN------*--------* ORG 0000H ; dia chi nap rom bat dau cua chuong trinh LJMP BEGIN ORG 000BH ; dia chi nap rom bat dau cua chuong trinh con ;LJMP PWM_MOTO_LEFT ORG 001BH ; dia chi nap rom bat dau cua chuong trinh con phim bam ;LJMP PWM_MOTO_RIGHT ORG 002BH ; dia chi nap rom bat dau cua chuong trinh con hien thi LJMP DISPLAY ORG 0030H ; dia chi nap rom bat dau cua chuong trinh chinh BEGIN: ;****** KHOI TAO CAC BIEN GIA TRI VA PORT IN/OUT ****** MOV P0,#FFh MOV P1,#FFh MOV P2,#FFh MOV P3,#FFh ; ****** INPUT CHO CAC DONG CO ****** MOV CMOD,#00h SETB CR MOV CCAPM0,#01000010B ; P1.3 PCA HOAT DONG THEO CHE DO PWM 8bits MOV CCAPM1,#01000010B ; P1.4 PCA HOAT DONG THEO CHE DO PWM 8bits MOV CCAPM2,#01000010B ; P1.5 PCA HOAT DONG THEO CHE DO PWM 8bits MOV CCAPM3,#01000010B ; P1.6 PCA HOAT DONG THEO CHE DO PWM 8bits MOV CCAPM4,#01000010B ; P1.7 PCA HOAT DONG THEO CHE DO PWM 8bits ; ****** INPUT CHO CAC LED HIEN THI ****** MOV DRIVER_LED_1,#00010000B MOV DRIVER_LED_2,#00100000B MOV DRIVER_LED_3,#01000000B MOV DRIVER_LED_4,#10000000B MOV LED_1,#01h MOV LED_2,#02h MOV LED_3,#03h MOV LED_4,#04h MOV INDEX_CURRENT_LED,#00h MOV INDEX_RAM_DISPLAY,#43h ; ****** INPUT CHO CAC PHIM AN ****** MOV ENABLE_BUTTON,#00h ; KHONG CHO PHEP TAT CA CAC PHIM DUOC AN MOV LAST_ACTION_L,#00H; LAST ACTION TAT CA = 0 MOV LAST_ACTION_R,#00H; LAST ACTION TAT CA = 0 MOV LAST_ACTION_RAISE,#00H; LAST ACTION TAT CA = 0 ; ****** INPUT CAC BO DINH THOI ****** MOV TMOD,#00010001b ; Che do dinh thoi 16bit - bo dinh thoi 0 va 1 MOV TH0,#FFh ; Dat -50000 bo dinh thoi 0 MOV TL0,#FFh ; nhu tren MOV TH1,#FCh ; Dat -20000 bo dinh thoi 1 MOV TL1,#14h ; nhu tren MOV RCAP2H,#FEh ; Dat -1000 bo dinh thoi 2 cho hien thi MOV RCAP2L,#6Fh ; nhu tren MOV T2CON,#00000100b ; che do dinh thoi ;SETB TCON.4 ; Cho phep bo dinh thoi 0 ;SETB TCON.6 ; Cho phep bo dinh thoi 1 MOV IE,#AAh ; Cho phep ngat - bo dinh thoi 0 va 1 MOV IP,#02h ; Dat muc uu tien nhat cho ngat dem thoi gian - cua bo dinh toi 0 MOV MOTOR_4,#00H LCALL DELAY_STOP ***************************************************************************CHUONGTRINHCHINH;*********************************************************************************** MAIN: CONTROL_RIGHT: JNB FLAG_BUTTON_GO_RIGHT,CHECK_BUTTON_RIGHT_RIGHT JB LAST_ACTION_GO_RIGHT,END_CONTROL_RIGHT MOV PWM_MOTO_RIGHT_SPEED,#A0h LCALL UPDATE_SPEED_RIGHT ; CAP NHAT TOC DO DONG CO MOV LAST_ACTION_R,#00h SETB LAST_ACTION_GO_RIGHT LJMP END_CONTROL_RIGHT CHECK_BUTTON_RIGHT_RIGHT: JNB FLAG_BUTTON_RIGHT_RIGHT,CHECK_BUTTON_BACK_RIGHT JB LAST_ACTION_RIGHT_RIGHT,END_CONTROL_RIGHT MOV PWM_MOTO_RIGHT_SPEED,#C0h LCALL UPDATE_SPEED_RIGHT ; CAP NHAT TOC DO DONG CO MOV LAST_ACTION_R,#00h SETB LAST_ACTION_RIGHT_RIGHT LJMP END_CONTROL_RIGHT CHECK_BUTTON_BACK_RIGHT: JNB FLAG_BUTTON_BACK_RIGHT,STOP_SPEED_RIGHT JB LAST_ACTION_BACK_RIGHT,END_CONTROL_RIGHT MOV PWM_MOTO_RIGHT_SPEED,#50h LCALL UPDATE_SPEED_RIGHT ; CAP NHAT TOC DO DONG CO MOV LAST_ACTION_R,#00h SETB LAST_ACTION_BACK_RIGHT LJMP END_CONTROL_RIGHT STOP_SPEED_RIGHT: JB LAST_ACTION_STOP_RIGHT,END_CONTROL_RIGHT MOV PWM_MOTO_RIGHT_SPEED,#80h LCALL UPDATE_STOP_RIGHT MOV LAST_ACTION_R,#00h SETB LAST_ACTION_STOP_RIGHT END_CONTROL_RIGHT: CONTROL_LEFT: JNB FLAG_BUTTON_GO_LEFT,CHECK_BUTTON_LEFT_LEFT JB LAST_ACTION_GO_LEFT,END_CONTROL_LEFT MOV PWM_MOTO_LEFT_SPEED,#A0h LCALL UPDATE_SPEED_LEFT ; CAP NHAT TOC DO DONG CO MOV LAST_ACTION_L,#00h SETB LAST_ACTION_GO_LEFT LJMP END_CONTROL_LEFT CHECK_BUTTON_LEFT_LEFT: JNB FLAG_BUTTON_LEFT_LEFT,CHECK_BUTTON_BACK_LEFT JB LAST_ACTION_LEFT_LEFT,END_CONTROL_LEFT MOV PWM_MOTO_LEFT_SPEED,#C0h LCALL UPDATE_SPEED_LEFT ; CAP NHAT TOC DO DONG CO MOV LAST_ACTION_L,#00h SETB LAST_ACTION_LEFT_LEFT LJMP END_CONTROL_LEFT CHECK_BUTTON_BACK_LEFT: JNB FLAG_BUTTON_BACK_LEFT,STOP_SPEED_LEFT JB LAST_ACTION_BACK_LEFT,END_CONTROL_LEFT MOV PWM_MOTO_LEFT_SPEED,#50h LCALL UPDATE_SPEED_LEFT ; CAP NHAT TOC DO DONG CO MOV LAST_ACTION_L,#00h SETB LAST_ACTION_BACK_LEFT LJMP END_CONTROL_LEFT STOP_SPEED_LEFT: JB LAST_ACTION_STOP_LEFT,END_CONTROL_LEFT MOV PWM_MOTO_LEFT_SPEED,#80h LCALL UPDATE_STOP_LEFT MOV LAST_ACTION_L,#00h SETB LAST_ACTION_STOP_LEFT END_CONTROL_LEFT: CONTROL_RAISE: JNB FLAG_BUTTON_LEFT_RIGHT,CHECK_BUTTON_RIGHT_LEFT JB LAST_ACTION_RAISE_UP,END_CONTROL_RAISE CLR DK_CHIEU_DC_RAISE NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV MOTOR_4,#FFH MOV LAST_ACTION_RAISE,#00H SETB LAST_ACTION_RAISE_UP LJMP END_CONTROL_RAISE CHECK_BUTTON_RIGHT_LEFT: JNB FLAG_BUTTON_RIGHT_LEFT,STOP_CONTROL_RAISE JB LAST_ACTION_RAISE_DOWN,END_CONTROL_RAISE MOV MOTOR_4,#00H SETB DK_CHIEU_DC_RAISE NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV MOTOR_4,#FFH MOV LAST_ACTION_RAISE,#00H SETB LAST_ACTION_RAISE_DOWN LJMP END_CONTROL_RAISE STOP_CONTROL_RAISE: JB LAST_ACTION_RAISE_STOP,END_CONTROL_RAISE MOV MOTOR_4,#00H NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV LAST_ACTION_RAISE,#00H SETB LAST_ACTION_RAISE_STOP END_CONTROL_RAISE LJMP MAIN **************************************************************************************CHUONTRINHCON**************************************************************************** INC_SPEED: CJNE A,#C0h,INC_A SJMP TOP_SPEED INC_A: INC A DJNZ B,INC_SPEED TOP_SPEED: RET DEC_SPEED: CJNE A,#2Fh,DEC_A SJMP ZERO_SPEED DEC_A: DEC A DJNZ B,DEC_SPEED ZERO_SPEED: RET CONVERT_SPEED: JB ACC.7,GO_AHEAD GO_BACK: CPL A RL A CLR C RET GO_AHEAD: RL A SETB C RET UPDATE_SPEED_RIGHT: MOV A,PWM_MOTO_RIGHT_SPEED LCALL CONVERT_SPEED MOV MOTOR_1,#00H MOV MOTOR_3,#00H NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV DK_CHIEU_DC_RIGHT_R,C MOV DK_CHIEU_DC_RIGHT_F,C NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ADD A,#14H MOV MOTOR_1,A MOV MOTOR_3,A RET UPDATE_SPEED_LEFT: MOV A,PWM_MOTO_LEFT_SPEED LCALL CONVERT_SPEED MOV MOTOR_0,#00H MOV MOTOR_2,#00H NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV DK_CHIEU_DC_LEFT_R,C MOV DK_CHIEU_DC_LEFT_F,C NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ADD A,#18H MOV MOTOR_0,A MOV MOTOR_2,A RET UPDATE_STOP_LEFT: MOV A,PWM_MOTO_LEFT_SPEED LCALL CONVERT_SPEED MOV MOTOR_0,#00H MOV MOTOR_2,#00H NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV DK_CHIEU_DC_LEFT_F,C MOV DK_CHIEU_DC_LEFT_R,C NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV MOTOR_0,A MOV MOTOR_2,A RET UPDATE_STOP_RIGHT: MOV A,PWM_MOTO_RIGHT_SPEED LCALL CONVERT_SPEED MOV MOTOR_1,#00H MOV MOTOR_3,#00H NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV DK_CHIEU_DC_RIGHT_F,C MOV DK_CHIEU_DC_RIGHT_R,C NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV MOTOR_1,A MOV MOTOR_3,A RET ; ********************************************************** SEND_BYTE_LED: MOV COUNTER_BIT_LED,#08H ; Set counter for 8-Bits CLR CLK_LED LOOP_SEND_BIT: MOV C,ACC.7 MOV DATA_LED,C SETB CLK_LED CLR CLK_LED RL A DJNZ COUNTER_BIT_LED,LOOP_SEND_BIT RE ; CHUONG TRINH CON HIEN THI DEN LED 7 THANH * 15 DEN ; BANG NGAT CUA BO DINH THOI 2 - T2CON DISPLAY: ; ****** STORE R0 & A ****** PUSH 00h ; CAT THANH GHI R0 MOV R0,A PUSH 00h ; CAT THANH GHI A MOV R0,B PUSH 00h ; CAT THANH GHI B ; TINH TOAN GIA TRI HIEN THI 4 LED MOV A,PWM_MOTO_LEFT_SPEED MOV B,#05h DIV AB MOV B,#0Ah DIV AB MOV LED_1,A MOV LED_2,B MOV A,PWM_MOTO_RIGHT_SPEED MOV B,#05h DIV AB MOV B,#0Ah DIV AB MOV LED_3,A MOV LED_4,B ; Tinh toan vi tri LED hien thoi theo gia tri trong INDEX_CURRENT_LED MOV R0,INDEX_CURRENT_LED ; INC R0 ; Tang chi sang den tiep theo CJNE R0,#04h,Jmp_display ; Neu tang len qua so den -> lap lai cho den MOV R0,#00h Jmp_display: MOV INDEX_CURRENT_LED,R0 ; Thanh ghi chi vi tri MOV A,INDEX_RAM_DISPLAY ; Chuyen gia tri con tro ADD A,R0 ; Cong vi tri con tro vung nho voi gia tri thu tu hien thi ; -> Gia tri dia chi o nho du lieu can hien thi luu trong A MOV R0,A ; Dia chi o nho can hien thi duoc luu trong R0 MOV B,@R0 ; Chuyen gia tri can hien thi BCD vao thanh ghi A ADD A,#04h MOV R0,A MOV A,B ADD A,@R0 LCALL SEND_BYTE_LED ; Goi chuong trinh chuyen ma BCD - 7 THANH -> Gia tri ra luu trong A ;***** Doan chuong trinh nhan phim long vao phan hien thi luon ******** SUB_GO_RIGHT: JB BUTTON_GO_RIGHT,NOT_GO_RIGHT ; bit = 0 -> NHAY ( phim lua chon duoc an, nhay den "lua chon") INC COUNTER_BUTTON_GO_RIGHT MOV A,COUNTER_BUTTON_GO_RIGHT CJNE A,#03h,SUB_RIGHT_RIGHT MOV COUNTER_BUTTON_GO_RIGHT,#00H SETB FLAG_BUTTON_GO_RIGHT LJMP SUB_RIGHT_RIGHT NOT_GO_RIGHT: MOV COUNTER_BUTTON_GO_RIGHT,#00H CLR FLAG_BUTTON_GO_RIGHT SUB_RIGHT_RIGHT: JB BUTTON_RIGHT_RIGHT,NOT_RIGHT_RIGHT ; bit = 0 -> NHAY ( phim lua chon duoc an, nhay den "lua chon") INC COUNTER_BUTTON_RIGHT_RIGHT MOV A,COUNTER_BUTTON_RIGHT_RIGHT CJNE A,#03h,SUB_BACK_RIGHT ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ( Muc dich chong nhieu xung) MOV COUNTER_BUTTON_RIGHT_RIGHT,#00H SETB FLAG_BUTTON_RIGHT_RIGHT ; Bat co bao co phim MENU vua duoc an LJMP SUB_BACK_RIGHT NOT_RIGHT_RIGHT: MOV COUNTER_BUTTON_RIGHT_RIGHT,#00H CLR FLAG_BUTTON_RIGHT_RIGHT ; SUB_BACK_RIGHT: JB BUTTON_BACK_RIGHT,NOT_BACK_RIGHT INC COUNTER_BUTTON_BACK_RIGHT MOV A,COUNTER_BUTTON_BACK_RIGHT CJNE A,#03h,SUB_LEFT_RIGHT ; Kiem tra xem da dem duoc ; 16 lan dem la cho phep nhan phim ; ( Muc dich chong nhieu xung) MOV COUNTER_BUTTON_BACK_RIGHT,#00H SETB FLAG_BUTTON_BACK_RIGHT ; Bat co bao co phim MENU vua duoc an LJMP SUB_LEFT_RIGHT NOT_BACK_RIGHT: MOV COUNTER_BUTTON_BACK_RIGHT,#00H CLR FLAG_BUTTON_BACK_RIGHT ; Bat co bao co phim MENU vua duoc an SUB_LEFT_RIGHT: JB BUTTON_LEFT_RIGHT,NOT_LEFT_RIGHT ; bit = 0 -> NHAY ( phim lua chon duoc an, nhay den "lua chon") INC COUNTER_BUTTON_LEFT_RIGHT MOV A,COUNTER_BUTTON_LEFT_RIGHT CJNE A,#03h,SUB_GO_LEFT ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ( Muc ; dich chong nhieu xung) MOV COUNTER_BUTTON_LEFT_RIGHT,#00H SETB FLAG_BUTTON_LEFT_RIGHT ; Bat co bao co phim MENU vua duoc an LJMP SUB_GO_LEFT NOT_LEFT_RIGHT: MOV COUNTER_BUTTON_LEFT_RIGHT,#00H CLR FLAG_BUTTON_LEFT_RIGHT ; Bat co bao co phim MENU vua duoc an SUB_GO_LEFT: JB BUTTON_GO_LEFT,NOT_GO_LEFT INC COUNTER_BUTTON_GO_LEFT MOV A,COUNTER_BUTTON_GO_LEFT CJNE A,#03h,SUB_RIGHT_LEFT ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ; ( Muc dich chong nhieu xung) MOV COUNTER_BUTTON_GO_LEFT,#00H SETB FLAG_BUTTON_GO_LEFT ; Bat co bao co phim MENU vua duoc an LJMP SUB_RIGHT_LEFT NOT_GO_LEFT: MOV COUNTER_BUTTON_GO_LEFT,#00H CLR FLAG_BUTTON_GO_LEFT ; Bat co bao co phim MENU vua duoc an SUB_RIGHT_LEFT: JB BUTTON_RIGHT_LEFT,NOT_RIGHT_LEFT INC COUNTER_BUTTON_RIGHT_LEFT MOV A,COUNTER_BUTTON_RIGHT_LEFT CJNE A,#03h,SUB_BACK_LEFT ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ; ( Muc dich chong nhieu xung) MOV COUNTER_BUTTON_RIGHT_LEFT,#00H SETB FLAG_BUTTON_RIGHT_LEFT ; Bat co bao co phim MENU vua duoc an LJMP SUB_BACK_LEFT NOT_RIGHT_LEFT: MOV COUNTER_BUTTON_RIGHT_LEFT,#00H CLR FLAG_BUTTON_RIGHT_LEFT ; Bat co bao co phim MENU vua duoc an SUB_BACK_LEFT: JB BUTTON_BACK_LEFT,NOT_BACK_LEFT INC COUNTER_BUTTON_BACK_LEFT MOV A,COUNTER_BUTTON_BACK_LEFT CJNE A,#03h,SUB_LEFT_LEFT ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ; ( Muc dich chong nhieu xung) MOV COUNTER_BUTTON_BACK_LEFT,#00H SETB FLAG_BUTTON_BACK_LEFT ; Bat co bao co phim MENU vua duoc an LJMP SUB_LEFT_LEFT NOT_BACK_LEFT: MOV COUNTER_BUTTON_BACK_LEFT,#00H CLR FLAG_BUTTON_BACK_LEFT ; Bat co bao co phim MENU vua duoc an SUB_LEFT_LEFT: JB BUTTON_LEFT_LEFT,NOT_LEFT_LEFT INC COUNTER_BUTTON_LEFT_LEFT MOV A,COUNTER_BUTTON_LEFT_LEFT CJNE A,#03h,END_GET_KEY ; Kiem tra xem da dem duoc 16 lan dem la cho phep nhan phim ; ( Muc dich chong nhieu xung) MOV COUNTER_BUTTON_LEFT_LEFT,#00H SETB FLAG_BUTTON_LEFT_LEFT ; Bat co bao co phim MENU vua duoc an LJMP END_GET_KEY NOT_LEFT_LEFT: MOV COUNTER_BUTTON_LEFT_LEFT,#00H CLR FLAG_BUTTON_LEFT_LEFT ; Bat co bao co phim MENU vua duoc an END_GET_KEY: POP 00h MOV B,R0 POP 00h MOV A,R0 POP 00h CLR T2CON.7 ; Xoa co khoi tao lai ngat RETI ; Ket thuc chuong trinh ngat quet hien thi Delay1s: Mov R2,#0Fh ; -F -> Delay 2s D1: Mov R3,#FFh D2: Mov R4,#FFh Djnz R4,$ Djnz R3,D2 Djnz R2,D1 ret DELAY_STOP: Mov R2,#06h D3: Mov R3,#64h D4: Mov R4,#64h Djnz R4,$ Djnz R3,D4 Djnz R2,D3 ret END ; Ket thuc hoan toan chuong trinh KÕt luËn Sau mét thêi gian nghiªn cøu, thiÕt kÕ em ®· chÕ t¹o ®­îc mét robot tháa m·n yªu cÇu ®Æt ra. Cïng víi robot tù ®éng vµ robot l÷ hµnh ®Ó tham dù cuéc thi s¸ng t¹o robot ViÖt Nam n¨m 2009. ViÖc chÕ t¹o thµnh c«ng mét chó robot dïng vi ®iÒu khiÓn 8051 sÏ t¹o ®iÒu kiÖn cho viÖc øng dông lËp tr×nh vi ®iÒu khiÓn cho viÖc nghiªn cøu c¸c c«ng nghª vi ®iÒu khiÓn hiÖn ®¹i h¬n vµo chÕ t¹o c¸c s¶n phÈm c«ng nghiÖp vµ d©n dông kh¸c. §¨c biÖt lµ trong c¸c ngµnh tù ®éng hãa vµ c¸c d©y chuyÒn c«ng nghiÖp hiÖn ®¹i. §å ¸n tèt nghiÖp cßn cã nhiÒu h¹n chÕ vµ thiÕu sãt v× vËy em rÊt mong nhËn ®­îc ý kiÕn ®èng gãp cña c¸c thÇy c« gi¸o còng nh­ c¸c b¹n sinh viÖn ®Ó em cã thÓ hoµn thiÖn h¬n vÒ mÆt kiÕn thøc còng nh­ ®å ¸n tèt nghiÖp cña m×nh. Cuèi cïng em xin ch©n thµnh c¶m ¬n sù quan t©m gióp ®ì cña c¸c thÇy c« gi¸o ®· t¹o ®iÒu kiÖn tèt nhÊt ®Ó em cã thÓ hoµn thµnh ®å ¸n. §Æc biÖt em xin göi lêi c¶m ¬n ch©n thµnh vµ s©u s¾c tíi thÇy gi¸o h­íng dÉn PGS.TS NguyÔn Quèc Trung ®· gãp ý, gióp ®ì em trong suèt thêi gian lµm ®å ¸n. Mét lÇn n÷a em xin ch©n thµnh c¶m ¬n! Sinh viªn thùc hiÖn: Lª C«ng Hoµi Tµi LIÖU THAM KH¶O Tèng V¨n On, Hång §øc H¶i, “Hä vi ®iÒu khiÓn 8051”, NXB Lao ®éng - X héi 2005. NguyÔn T¨ng C­êng, Phan Quèc Th¾ng, “CÊu tróc vµ lËp tr×nh hä vi ®iÒu khiÓn 8051”. NXB khoa häc kÜ thuËt, 2004. §ç Xun TiÕn, “Kü thuËt vi xö lý vµ lËp tr×nh Assembly cho hÖ vi xö lý”, NXB Khoa häc kü thuËt, 2001. Ng« §×nh TËp, "LËp tr×nh b»ng hîp ng÷”, Nhµ xuÊt b¶n khoa häc kü thuËt, Hµ Néi 1998. Kenneth J. Ayala, “The 8051 Microcontroller: Architecture, Programming, and Applications”. Myke Predko, “Programming and Customizing the 8051 Microcontroller”. Philips Semiconductors, “I2C Bus Specification”, Version 2.1, 2000. Atmel Corporation, “AT89C51 datasheet”, 2000. Intel Corporation, MCS 51 Microcontroller Family User’s Manual, February 1994. Dallas Semiconductors, “DS1307 64 x 8 Serial Real-Time Clock datasheet” .

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

  • docThiet ke che tao robot dk bang tay_Le Cong Hoai_45.doc