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!
92 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2647 | Lượt tải: 1
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 lu 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 lu tr÷ ®a dông, phÇn lu 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Þ lu 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. Lu ý 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 lu ®å 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. Lu ®å gi¶i thuËt ®i th¼ng
H×nh 6.13. Lu ®å gi¶i thuËt ®i lïi
H×nh 6.14. Lu ®å gi¶i thuËt rÏ ph¶i
H×nh 6.15. Lu ®å gi¶i thuËt rÏ tr¸i
H×nh 6.14. Lu ®å 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:
- Thiet ke che tao robot dk bang tay_Le Cong Hoai_45.doc