Đề tài Thiết kế và thi công robot tìm báu vật

Tài liệu Đề tài Thiết kế và thi công robot tìm báu vật: THIẾT KẾ VÀ THI CÔNG ROBOT TÌM BÁU VẬT Trang1 CHƯƠNG 1: GIỚI TỔNG QUAN VỀ MỘT SỐ ROBOT TỰ HÀNH HIỆN CÓ TRÊN THẾ GIỚI. Sự phát triển của khoa học kỹ thuật ngày càng nhanh góp phần nâng cao năng suất lao động. Đặc biệt sự ra đời và phát triển của công nghệ chế tạo Robot nhằm tạo ra sự tự động hóa trong quá trình sản xuất giảm đi sức lao động bằng chân tay của người lao động . Đối với các nước ngoài lãnh vực tự động hóa đã xuất hiện rất sớm, tới nay ngành tự động hóa đã đạt được những thành tựu hết sức to lớn, hỗ trợ đắc lực con người trong nhiều lãnh vực như : Trong đời sống: Robot thông minh dùng để giúp việc nhà. Robot AIBO và Robot ASIMO của hãng Honda THIẾT KẾ VÀ THI CÔNG ROBOT TÌM BÁU VẬT Trang2 Cánh tay máy 5 bâc dùng trong công nghiệp của hãng sanyo denki Không gian: Xe tự hành Spirit của NASA đang thám hiểm sao hỏa Tự động hóa đã trở thành một trong những ngành mũi nhọn của nhiều nước trên thế giới, với sự phát triển không ngừng của côn...

pdf94 trang | Chia sẻ: hunglv | Lượt xem: 1272 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Thiết kế và thi công robot tìm báu vật, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang1 CHƯƠNG 1: GIỚI TỔNG QUAN VỀ MỘT SỐ ROBOT TỰ HÀNH HIỆN CĨ TRÊN THẾ GIỚI. Sự phát triển của khoa học kỹ thuật ngày càng nhanh gĩp phần nâng cao năng suất lao động. Đặc biệt sự ra đời và phát triển của cơng nghệ chế tạo Robot nhằm tạo ra sự tự động hĩa trong quá trình sản xuất giảm đi sức lao động bằng chân tay của người lao động . Đối với các nước ngồi lãnh vực tự động hĩa đã xuất hiện rất sớm, tới nay ngành tự động hĩa đã đạt được những thành tựu hết sức to lớn, hỗ trợ đắc lực con người trong nhiều lãnh vực như : Trong đời sống: Robot thơng minh dùng để giúp việc nhà. Robot AIBO và Robot ASIMO của hãng Honda THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang2 Cánh tay máy 5 bâc dùng trong cơng nghiệp của hãng sanyo denki Khơng gian: Xe tự hành Spirit của NASA đang thám hiểm sao hỏa Tự động hĩa đã trở thành một trong những ngành mũi nhọn của nhiều nước trên thế giới, với sự phát triển khơng ngừng của cơng nghệ bán dẫn, cơng nghệ thơng tin , trí tụê nhân tạo và cơ khí chính xác,robot khơng cịn là những cổ máy vơ tri,vơ giác chỉ biết lặp đi lặp lại một cơng việc nhất định mà nĩ đã bắt đầu cĩ cảm súc, suy nghĩ và hành động như một sinh vật sự, từ đĩ ngành tự động hĩa đã mở ra nhiều ứng dụng hết sức phong phú, những thế hệ robot gần giống con người lần lượt được các hãng lớn như HONDA, MITSUBITSI, SONY,...cho ra đời chứng tỏ được sự phát triển và tương lai của ngành tự đơng hĩa là rất mạnh mẽ. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang3 CHƯƠNG II : GIỚI THIỆU VỀ VI XỬ LÍ HỌ̣ MCS-51 I/ Giới thiệu cấu trúc phần cứng họ MCS-51 (89C51): Đặc điểm và chức năng hoạt động của các IC họ MCS-51 hồn tồn tương tự như nhau. Ở đây giới thiệu IC 89C51 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất. Chúng cĩ các đặc điểm chung như sau: Các đặc điểm của 89C51 được tĩm tắt như sau:  4 KB EPROM bên trong.  128 Byte RAM nội.  4 Port xuất /nhập I/O 8 bit.  Giao tiếp nối tiếp.  64 KB vùng nhớ mã ngồi  64 KB vùng nhớ dữ liệu ngoại.  Xử lý Boolean (hoạt động trên bit đơn).  210 vị trí nhớ cĩ thể định vị bit.  4s cho hoạt động nhân hoặc chia. II/ Khảo sát sơ đồ chân 8951 và chức năng từng chân: 2.1.Sơ đồ chân của 89C51: AT89C51 9 18 19 20 29 30 31 40 1 2 3 4 5 6 7 8 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 39 38 37 36 35 34 33 32 RST XTAL2 XTAL1 G N D PSEN ALE/PROG EA/VPP V C C P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang4 2.2. Chức năng các chân của 8951: 8951 cĩ tất cả 40 chân cĩ chức năng như các đường xuất nhập. Trong đĩ cĩ 24 chân cĩ tác dụng kép (cĩ nghĩa là 1 chân cĩ 2 chức năng), mỗi đường cĩ thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ. A/ Các Port: Port 0: Port 0 là một port cĩ 2 chức năng trên các chân từ 32 đến 39.Trong các thiết kế cỡ nhỏ (khơng dùng bộ nhớ mở rộng) nĩ cĩ hai chức năng như các đường I/O. Đối với các thiết kế lớn với bộ nhớ mở rộng nĩ vừa là byte thấp bus địa chỉ và là bus dữ liệu 8 bit. Port 1: Port 1 là một port I/O trên các chân 1-8. Các chân được ký hiệu P1.0, P1.1, P1.2 … cĩ thể dùng cho các thiết bị ngồi nếu cần. Port1 khơng cĩ chức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị ngồi. Port 2: Port 2 là một port cơng dụng kép trên các chân 21 – 28 được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết kế dùng bộ nhớ mở rộng. Port 3: Port 3 là một port cơng dụng kép trên các chân 10 – 17. Mỗi chân của port này vừa cĩ chức năng trao đổi dữ liệu vừa cĩ các chức năng đặc biệt như ở bảng sau : Bit Tên Chức năng chuyển đổi P3.0 RXT Ngõ vào dữ liệu nối tiếp. P3.1 TXD Ngõ xuất dữ liệu nối tiếp. P3.2 INT0\ Ngõ vào ngắt cứng thứ 0 P3.3 INT1\ Ngõ vào ngắt cứng thứ 1 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang5 P3.4 T0 Ngõ vào củaTIMER/COUNTER thứ 0. P3.5 T1 Ngõ vào củaTIMER/COUNTER thứ 1. P3.6 WR\ Tín hiệu ghi dữ liệu lên bộ nhớ ngồi P3.7 RD\ Tín hiệu đọc bộ nhớ dữ liệu ngồi. B/ Các ngõ tín hiệu điều khiển: PSEN (Program Store Enable ): PSEN là tín hiệu ra trên chân 29. Nĩ là tín hiệu điều khiển để cho phép bộ nhớ chương trình mở rộng và thường được nối đến chân OE (Output Enable) của một EPROM để cho phép đọc các byte mã lệnh. PSEN sẽ ở mức thấp trong thời gian lấy lệnh. Các mã nhị phân của chương trình được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của MCS51 để giải mã lệnh. Khi thi hành chương trình trong ROM nội PSEN sẽ ở mức thụ động (mức cao). ALE (Address Latch Enable): Tín hiệu ra ALE trên chân 30, MCS51 dùng ALE một cách tương tự cho làm việc giải các kênh các bus địa chỉ và dữ liệu, khi port 0 được dùng trong chế độ chuyển đổi của nĩ : vừa là bus dữ liệu vừa là byte thấp của bus địa chỉ, ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngồi trong nữa đầu của chu kỳ bộ nhớ. Sau đĩ, các đường port 0 dùng để xuất hoặc nhập dữ liệu trong nữa sau chu kỳ của bộ nhớ. Các xung tín hiệu ALE cĩ tốc độ bằng 1/6 lần tần số dao động trên chip và cĩ thể được dùng là nguồn xung nhịp cho các hệ thống. Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong 8951. EA (External Access): Tín hiệu vào EA trên chân 31 thường được mắc lên mức cao (+5V) hoặc mức thấp (GND). Nếu ở mức cao, 8951 thi hành chương trình từ ROM nội trong khoảng địa chỉ thấp (4K). Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang6 rộng. Nếu EA được nối mức thấp bộ nhớ bên trong chương trình 8951 sẽ bị cấm và chương trình thi hành từ EPROM mở rộng. Người ta cịn dùng chân EA làm chân cấp điện áp Vp khi lập trình cho ROM trong . RST (Reset): Ngõ vào RST trên chân 9 là ngõ reset của 8951. Khi tín hiệu này được đưa lên múc cao (trong ít nhất 2 chu kỳ máy ), các thanh ghi trong 8951 được tải những giá trị thích hợp để khởi động hệ thống. MCS51 được reset bằng cách giữ chân RST ở mức cao ít nhất trong 2 chu kỳ máy và trả nĩ về mức thấp. RST cĩ thể được kích bằng tay dùng 1 nút bấm hoặc cĩ thể được kích khi cấp điện dùng 1 mạch R-C Mạch RESET hệ thống bằng tay 0.1K 10uF 5V RST Reset 8K2 Các ngõ vào bộ dao động trên chip: Mạch dao động bên trong chip MCS51 được ghép với thạch anh .Nĩ thường được nối với thạch anh giữa hai chân 18 và 19. Các tụ 30pF giữa cũng cần thiết như đã vẽ. Tần số thạch anh thơng thường là 12MHz. Các chân nguồn: 8951 vận hành với nguồn đơn +5V. Vcc được nối vào chân 40 và Vss(GND) được nối vào chân 20. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang7 III/ Cấu trúc bên trong vi điều khiển: 3.1) Tổ chức bộ nhớ: Bộ nhớ trong 8951 bao gồm EPROM và RAM. RAM trong 8951 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. 8951 cĩ bộ nhớ theo cấu trúc Harvard: cĩ những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu. Chương trình và dữ liệu cĩ thể chứa bên trong 8951 nhưng 8951 vẫn cĩ thể kết nối với 64K byte bộ nhớ chương trình và 64K byte dữ liệu. 3.2) Bản đồ bộ nhớ Data trên Chip 7F FF F0 F7 F6 F5 F4 F3 F2 F1 F0 B RAM đa dụng E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW 30 B8 - - - BC BB BA B9 B8 IP 2F 7F 7E 7D 7C 7B 7A 79 78 2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.3 2D 6F 6E 6D 6C 6B 6A 69 68 2C 67 66 65 64 63 62 61 60 A8 AF AC AB AA A9 A8 IE 2B 5F 5E 5D 5C 5B 5A 59 58 2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2 29 4F 4E 4D 4C 4B 4A 49 48 28 47 46 45 44 43 42 41 40 99 khơng được địa chỉ hố bit SBUF 27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON 26 37 36 35 34 33 32 31 30 25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1 Địa chỉ byte Địa chỉ bit Địa chỉ bit Địa chỉ byte THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang8 24 27 26 25 24 23 22 21 20 23 1F 1E 1D 1C 1B 1A 19 18 8D khơng được địa chỉ hố bit TH1 22 17 16 15 14 13 12 11 10 8C khơng được địa chỉ hố bit TH0 21 0F 0E 0D 0C 0B 0A 09 08 8B khơng được địa chỉ hố bit TL1 20 07 06 05 04 03 02 01 00 8A khơng được địa chỉ hố bit TL0 1F Bank 3 89 khơng được địa chỉ hố bit TMOD 18 88 8F 8E 8D 8C 8B 8A 89 88 TCON 17 Bank 2 87 khơng được địa chỉ hố bit PCON 10 0F Bank 1 83 khơng được địa chỉ hố bit DPH 08 82 khơng được địa chỉ hố bit DPL 07 Bank thanh ghi 0 81 khơng được địa chỉ hố bit SP 00 (mặc định cho R0 -R7) 88 87 86 85 84 83 82 81 80 P0 - 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 8951 đượ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 bit cĩ địa chỉ từ 20H đến 2FH.  RAM đa dụng từ 30H đến 7FH.  Các thanh ghi chức năng đặc biệt từ 80H đến FFH.  RAM đa dụng: Mặc dù trên hình vẽ cho thấy 80 byte đa dụng chiếm các địa chỉ từ 30H đến 7FH, 32 byte dưới từ 00H đến 1FH cũng cĩ thể dùng với mục đích tương tự (mặc dù các địa chỉ này đã cĩ mục đích khác). Mọi địa chỉ trong vùng RAM đa dụng đều cĩ thể truy xuất tự do dùng kiểu địa chỉ trực tiếp hoặc gián tiếp. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang9  RAM cĩ thể truy xuất từng bit: 8951 chứa 210 bit được địa chỉ hĩa, trong đĩ cĩ 128 bit cĩ chứa các byte chứa các địa chỉ từ 20H đến 2FH và các bit cịn lại chứa trong nhĩm thanh ghi cĩ chức năng đặc biệt. Ý tưởng truy xuất từng bit bằng phần mềm là các đăc tính mạnh của microcontroller xử lý chung. Các bit cĩ thể được đặt, xĩa, AND, OR,…, với 1 lệnh đơn. Đa số các microcontroller xử lý địi hỏi một chuỗi lệnh đọc-sửa-ghi để đạt được mục đích tương tự. Ngồi ra các port cũng cĩ thể truy xuất được từng bit. 128 bit cĩ chứa các byte cĩ địa chỉ từ 00H -1FH cũng cĩ thể truy xuất như các byte hoặc các bit phụ thuộc vào lệnh được dùng.  Các bank thanh ghi : 32 byte thấp của bộ nhớ nội được dành cho các bank thanh ghi. Bộ lệnh 8951 hổ trợ 8 thanh ghi cĩ tên là R0 -R7 và theo mặc định sau khi reset hệ thống, các thanh ghi này cĩ các địa chỉ từ 00H - 07H. Các lệnh dùng các thanh ghi RO - R7 sẽ ngắn hơn và nhanh hơn so với các lệnh cĩ chức năng tương ứng dùng kiểu địa chỉ trực tiếp. Các dữ liệu được dùng thường xuyên nên dùng một trong các thanh ghi này. Do cĩ 4 bank thanh ghi nên tại một thời điểm chỉ cĩ một bank thanh ghi được truy xuất bởi các thanh ghi RO - R7 để chuyển đổi việc truy xuất các bank thanh ghi ta phải thay đổi các bit chọn bank trong thanh ghi trạng thái. 3.3) Các thanh ghi cĩ chức năng đặc biệt: Các thanh ghi nội của 8951 được truy xuất ngầm định bởi bộ lệnh. Các thanh ghi trong 8951 được định dạng như một phần của RAM trên chip vì vậy mỗi thanh ghi sẽ cĩ một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp). Cũng như R0 đến R7, 8951 cĩ 21 thanh ghi cĩ chức năng đặc biệt (SFR: Special Function Register) ở vùng trên của RAM nội từ địa chỉ 80H - FFH. Chú ý: tất cả 128 địa chỉ từ 80H đến FFH khơng được định nghĩa, chỉ cĩ 21 thanh ghi cĩ chức năng đặc biệt được định nghĩa sẵn các địa chỉ. Ngoại trừ thanh ghi A cĩ thể được truy xuất ngầm như đã nĩi, đa số các thanh ghi cĩ chức năng điệt biệt SFR cĩ thể địa chỉ hĩa từng bit hoặc byte. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang10 Thanh ghi trạng thái chương trình (PSW: Program Status Word): Từ trạng thái chương trình ở địa chỉ D0H được tĩm tắt như sau: Bit Symbol Address Description PSW.7 CY D7H Cary Flag PSW.6 AC D6H Auxiliary Cary Flag PSW.5 F0 D5H Flag 0 PSW4 RS1 D4H Register Bank Select 1 PSW.3 RS0 D3H Register Bank Select 0 00=Bank 0; address 00H07H 01=Bank 1; address 08H0FH 10=Bank 2; address 10H17H 11=Bank 3; address 18H1FH PSW.2 OV D2H Overlow Flag PSW.1 - D1H Reserved PSW.0 P DOH Even Parity Flag Chức năng từng bit trạng thái chương trình a. Cờ Carry CY (Carry Flag): Cờ nhớ cĩ tác dụng kép. Thơng thường nĩ được dùng cho các lệnh tốn học: C=1 nếu phép tốn cộng cĩ sự tràn hoặc phép trừ cĩ mượn và ngược lại C=0 nếu phép tốn cộng khơng tràn và phép trừ khơng cĩ mượn. b. Cờ Carry phụ AC (Auxiliary Carry Flag): Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set nếu kết quả 4 bit thấp nằm trong phạm vi điều khiển 0AH - 0FH. Ngược lại AC=0. c. Cờ 0 (Flag 0): Cờ 0 (F0) là 1 bit cờ đa dụng dùng cho các ứng dụng của người dùng. Những bit chọn bank thanh ghi truy xuất: RS1 và RS0 quyết định dãy thanh ghi tích cực. Chúng được xĩa sau khi reset hệ thống và được thay đổi bởi phần mềm khi cần thiết. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang11 Tùy theo RS1, RS0 = 00, 01, 10, 11 sẽ được chọn Bank tích cực tương ứng là Bank 0, Bank1, Bank2, Bank3. RS1 RS0 BANK 0 0 0 0 1 1 1 0 2 1 1 3 d. Cờ tràn OV (Over Flag): Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu cĩ sự tràn tốn học. Khi các số cĩ dấu được cộng hoặc trừ với nhau, phần mềm cĩ thể kiểm tra bit này để xác định xem kết quả cĩ nằm trong tầm xác định khơng. Khi các số khơng cĩ thì bit dấu được cộng bit OV được bỏ qua. Các kết quả lớn hơn +127 hoặc nhỏ hơn - 128 OV=1. e. Bit Parity (P) : Bit tự động được set hay Clear ở mỗi chu kỳ máy để lập Parity chẵn với thanh ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit Parity luơn luơn chẵn. Ví dụ A chứa 10101101B thì bit P set lên 1 để tổng số bit 1 trong A và P tạo thành số chẵn. Bit Parity thường được dùng trong sự kết hợp với những thủ tục của Port nối tiếp để tạo ra bit Parity trước khi phát đi hoặc kiểm tra bit Parity sau khi thu. B/ Thanh ghi B: Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi A cho các phép tốn nhân chia. Lệnh MUL AB sẽ nhận những giá trị khơng dấu 8 bit trong hai thanh ghi A và B, rồi trả về kết quả 16 bit trong A (byte cao) và B(byte thấp). Lệnh DIV AB lấy A chia B, kết quả nguyên đặt vào A, số dư đặt vào B. Thanh ghi B cĩ thể được dùng như một thanh ghi đệm trung gian đa mục đích. Nĩ là những bit định vị thơng qua những địa chỉ từ F0H - F7H. C/ Con trỏ Ngăn xếp SP (Stack Pointer): Con trỏ ngăn xếp là một thanh ghi 8 bit ở địa chỉ 81H. Nĩ chứa địa chỉ của của byte dữ liệu hiện hành trên đỉnh ngăn xếp. Các lệnh trên ngăn xếp bao gồm các THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang12 lệnh cất dữ liệu vào ngăn xếp (PUSH) và lấy dữ liệu ra khỏi ngăn xếp (POP). Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh lấy ra khỏi ngăn xếp sẽ làm giảm SP. Ngăn xếp của 8031/8051 được giữ trong RAM nội và giới hạn các địa chỉ cĩ thể truy xuất bằng địa chỉ gián tiếp, chúng là 128 byte đầu của 8951. Để khởi động SP với ngăn xếp bắt đầu tại địa chỉ 60H, các lệnh sau đây được dùng: MOV SP , #5F Với lệnh trên thì ngăn xếp của 8951 chỉ cĩ 32 byte vì địa chỉ cao nhất của RAM trên chip là 7FH. Sở dĩ giá trị 5FH được nạp vào SP vì SP tăng lên 1 là 60H trước khi cất byte dữ liệu. Khi Reset 8951, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu tiên sẽ được cất vào ơ nhớ ngăn xếp cĩ địa chỉ 08H. Nếu phần mềm ứng dụng khơng khởi động SP một giá trị mới thì bank thanh ghi1 cĩ thể cả 2 và 3 sẽ khơng dùng được vì vùng RAM này đã được dùng làm ngăn xếp. Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu, hoặc truy xuất ngầm bằng lệnh gọi chương trình con (ACALL, LCALL) và các lệnh trở về (RET, RETI) để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con ... D/ Con trỏ dữ liệu DPTR (Data Pointer): Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngồi là một thanh ghi 16 bit ở địa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao). Ba lệnh sau sẽ ghi 55H vào RAM ngồi ở địa chỉ 1000H: MOV A , #55H MOV DPTR, #1000H MOV @DPTR, A Lệnh đầu tiên dùng để nạp 55H vào thanh ghi A. Lệnh thứ hai dùng để nạp địa chỉ của ơ nhớ cần lưu giá trị 55H vào con trỏ dữ liệu DPTR. Lệnh thứ ba sẽ di chuyển nội dung thanh ghi A (là 55H) vào ơ nhớ RAM bên ngồi cĩ địa chỉ chứa trong DPTR (là 1000H) E/ Các thanh ghi Port (Port Register): THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang13 Các Port của 8951 bao gồm Port 0 ở địa chỉ 80H, Port1 ở địa chỉ 90H, Port2 ở địa chỉ A0H, và Port3 ở địa chỉ B0H. Tất cả các Port này đều cĩ thể truy xuất từng bit nên rất thuận tiện trong khả năng giao tiếp. F/ Các thanh ghi Timer (Timer Register): 8951 cĩ chứa hai bộ định thời/bộ đếm 16 bit được dùng cho việc định thời được đếm sự kiện. Timer0 ở địa chỉ 8AH (TLO: byte thấp) và 8CH ( THO: byte cao). Timer1 ở địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1 : byte cao). Việc khởi động timer được SET bởi Timer Mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển Timer (TCON) ở địa chỉ 88H. Chỉ cĩ TCON được địa chỉ hĩa từng bit. G/ Các thanh ghi Port nối tiếp (Serial Port Register): 8951 chứa một Port nối tiếp cho việc trao đổi thơng tin với các thiết bị nối tiếp như máy tính, modem hoặc giao tiếp nối tiếp với các IC khác. Một thanh ghi đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả hai dữ liệu truyền và dữ liệu nhập. Khi truyền dữ liệu ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF. Các mode vận khác nhau được lập trình qua thanh ghi điều khiển Port nối tiếp (SCON) được địa chỉ hĩa từng bit ở địa chỉ 98H. H/ Các thanh ghi ngắt (Interrupt Register): 8951 cĩ cấu trúc 5 nguồn ngắt, 2 mức ưu tiên. Các ngắt bị cấm sau khi bị reset hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ A8H. Cả hai được địa chỉ hĩa từng bit. I/ Thanh ghi điều khiển nguồn PCON (Power Control Register): Thanh ghi PCON khơng cĩ bit định vị. Nĩ ở địa chỉ 87H chứa nhiều bit điều khiển. Thanh ghi PCON được tĩm tắt như sau: Bit 7 (SMOD) : Bit cĩ tốc độ Baud ở mode 1, 2, 3 ở Port nối tiếp khi set. Bit 6, 5, 4 : Khơng cĩ địa chỉ. Bit 3 (GF1) : Bit cờ đa năng 1. Bit 2 (GF0) : Bit cờ đa năng 2. Bit 1 * (PD) : Set để khởi động mode Power Down và thốt để reset. Bit 0 * (IDL) : Set để khởi động mode Idle và thốt khi ngắt mạch hoặc reset. Các bit điều khiển Power Down và Idle cĩ tác dụng chính trong tất cả các IC họ MSC-51 nhưng chỉ được thi hành trong sự biên dịch của CMOS. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang14 IV / HOẠT ĐỘNG TIMER CỦA 8951: 1) Giới thiệu : Bộ định thời của Timer là một chuỗi các Flip Flop được chia làm 2, nĩ nhận tín hiệu vào là một nguồn xung clock, xung clock được đưa vào Flip Flop thứ nhất là xung clock của Flip Flop thứ hai mà nĩ cũng chia tần số clock này cho 2 và cứ tiếp tục. Vì mỗi tầng kế tiếp chia cho 2, nên Timer n tầng phải chia tần số clock ngõ vào cho 2n. Ngõ ra của tầng cuối cùng là clock của Flip Flop tràn Timer hoặc cờ mà nĩ kiểm tra bởi phần mềm hoặc sinh ra ngắt. Giá trị nhị phân trong các FF của bộ Timer cĩ thể được nghĩ như đếm xung clock hoặc các sự kiện quan trọng bởi vì Timer được khởi động. Ví dụ Timer 16 bit cĩ thể đếm đến từ FFFFH sang 0000H. Các Timer được ứng dụng thực tế cho các hoạt động định hướng. 8951 cĩ 2 bộ Timer 16 bit, mỗi Timer cĩ 4 mode hoạt động. Các Timer dùng để đếm giờ, đếm các sự kiện cần thiết và sự sinh ra tốc độ của tốc độ Baud bởi sự gắn liền Port nối tiếp. Mỗi sự định thời là một Timer 16 bit, do đĩ tầng cuối cùng là tầng thứ 16 sẽ chia tần số clock vào cho 216 = 65.536. Trong các ứng dụng định thời, 1 Timer được lập trình để tràn ở một khoảng thời gian đều đặn và được set cờ tràn Timer. Cờ được dùng để đồng bộ chương trình để thực hiện một hoạt động như việc đưa tới 1 tầng các ngõ vào hoặc gởi dữ liệu đếm ngõ ra. Các ứng dụng khác cĩ sử dụng việc ghi giờ đều đều của Timer để đo thời gian đã trơi qua hai trạng thái (ví dụ đo độ rộng xung).Việc đếm một sự kiện được dùng để xác định số lần xuất hiện của sự kiện đĩ, tức thời gian trơi qua giữa các sự kiện. 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 : Timer SFR Purpose Address Bit-Addressable TCON Control 88H YES TMOD Mode 89H NO TL0 Timer 0 low-byte 8AH NO THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang15 TL1 Timer 1 low-byte 8BH NO TH0 Timer 0 high-byte 8CH NO TH1 Timer 1 high-byte 8DH NO 2) Các thanh ghi điều khiển timer: a) Thanh ghi điều khiển chế độ timer TMOD (timer mode register) : Thanh ghi mode gồm hai nhĩm 4 bit là: 4 bit thấp đặt mode hoạt động cho Timer 0 và 4 bit cao đặt mode hoạt động cho Timer 1. 8 bit của thanh ghi TMOD được tĩm tắt như sau: Bit Name Timer Description 7 GATE 1 Khi GATE = 1, Timer chỉ làm việc khi INT1=1 6 C/T 1 Bit cho đếm sự kiện hay ghi giờ C/T = 1 : Đếm sự kiện C/T = 0 : Ghi giờ đều đặn 5 M1 1 Bit chọn mode của Timer 1 4 M0 1 Bit chọn mode của Timer 1 3 GATE 0 Bit cổng của Timer 0 2 C/T 0 Bit chọn Counter/Timer của Timer 0 1 M1 0 Bit chọn mode của Timer 0 0 M0 0 Bit chọn mode của Timer 0 M1 M0 MODE DESCRIPTION 0 0 0 Mode Timer 13 bit (mode 8048) 0 1 1 Mode Timer 16 bit 1 0 2 Mode tự động nạp 8 bit THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang16 Hai bit M0 và M1 của TMOD để chọn mode cho Timer 0 hoặc Timer 1. TMOD khơng cĩ bit định vị, nĩ thường được LOAD một lần bởi phần mềm ở đầu chương trình để khởi động mode Timer. Sau đĩ sự định giờ cĩ thể dừng lại, được khởi động lại như thế bởi sự truy xuất các thanh ghi chức năng đặc biệt của Timer khác. b) Thanh ghi điều khiển timer TCON (timer control register): Thanh ghi điều khiển bao gồm các bit trạng thái và các bit điều khiển bởi Timer 0 và Timer 1. Thanh ghi TCON cĩ bit định vị. Hoạt động của từng bit được tĩm tắt như sau: Bit Symbo l Bit Address Description TCON.7 TF1 8FH Cờ tràn Timer 1 được set bởi phần cứng ở sự tràn, được xĩa bởi phần mềm hoặc bởi phần cứng khi các vectơ xử lí đến thủ tục phục vụ ngắt ISR TCON.6 TR1 8EH Bit điều khiển chạy Timer 1 được set hoặc xĩa bởi phần mềm để chạy hoặc ngưng chạy Timer. TCON.5 TF0 8DH Cờ tràn Timer 0(hoạt động tương tự TF1) TCON.4 TR0 8CH Bit điều khiển chạy Timer 0 (giống TR1) TCON.3 IE1 8BH Cờ kiểu ngắt 1 ngồi. Khi cạnh xuống xuất hiện trên INT1 thì IE1 được xĩa bởi phần mềm hoặc phần cứng khi CPU định hướng đến thủ tục phục vụ ngắt ngồi. TCON.2 IT1 8AH Cờ kiểu ngắt 1 ngồi được set hoặc xĩa bằng phấn mềm bởi cạnh kích hoạt bởi sự ngắt ngồi. TCON.1 IE0 89H Cờ cạnh ngắt 0 ngồi 1 1 3 Mode Timer tách ra : Timer 0 : TL0 là Timer 8 bit được điều khiển bởi các bit của Timer 0. TH0 tương tự nhưng được điều khiển bởi các bit của mode Timer 1. Timer 1 : Được ngừng lại. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang17 TCON IT0 88H Cờ kiểu ngắt 0 ngồi. Các nguồn xung nhịp cho timer (clock sources): Cĩ hai nguồn xung clock cĩ thể đếm giờ là sự định giờ bên trong và sự đếm sự kiện bên ngồi. Bit C/T trong TMOD cho phép chọn 1 trong 2 khi Timer được khởi động. c) Sự bấm giờ bên trong (Interval Timing): Nếu bit C/T = 0 thì hoạt động của Timer liên tục được chọn vào bộ Timer được ghi giờ từ dao động trên Chip. Một bộ chia 12 được thêm vào để giảm tần số clock đến 1 giá trị phù hợp với các ứng dụng. Các thanh ghi TLx và THx tăng ở tốc độ 1/12 lần tần số dao động trên Chip. Nếu dùng thạch anh 12MHz thì sẽ đưa đến tốc độ clock 1MHz. Các sự tràn Timer sinh ra sau một con số cố định của những xung clock, nĩ phụ thuộc vào giá trị khởi tạo được LOAD vào các thanh ghi THx và TLx. d) Sự đếm các sự kiện (Event Counting) : Nếu bit C/T = 1 thì bộ Timer được ghi giờ từ nguồn bên ngồi trong nhiều ứng dụng, nguồn bên ngồi này cung cấp 1 sự định giờ với 1 xung trên sự xảy ra của sự kiện. Sự định giờ là sự đếm sự kiện. Con số sự kiện được xác định trong phần mềm bởi việc đọc các thanh ghi Timer. Tlx/THx, bởi vì giá trị 16 bit trong các thanh này tăng lên cho mỗi sự kiện. Nguồn xung clock bên ngồi đưa vào chân P3.4 là ngõ nhập của xung clock bởi Timer 0 (T0) và P3.5 là ngõ nhập của xung clock bởi Timer 1 (T1). Trong các ứng dụng đếm các thanh ghi Timer được tăng trong đáp ứng của sự chuyển trạng thái từ 1 sang 0 ở ngõ nhập Tx. Ngõ nhập bên ngồi được thử trong suốt S5P2 của mọi chu kỳ máy: Do đĩ khi ngõ nhập đưa tới mức cao trong một chu kỳ và mức thấp trong một chu kỳ kế tiếp thì bộ đếm tăng lên một. Giá trị mới xuất hiện trong các thanh ghi Timer trong suốt S5P1 của chu kỳ theo sau một sự chuyển đổi. Bởi vì nĩ chiếm 2 chu kỳ máy (2s) để nhận ra sự chuyển đổi từ 1 sang 0, nên tần số bên ngồi lớn nhất là 500KHz nếu dao động thạch anh 12 MHz. sự bắt đầu, kết thúc và sự điều khiển các timer (starting, stopping and controlling the timer) : THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang18 Bit TRx trong thanh ghi cĩ bit định vị TCON được điều khiển bởi phần mềm để bắt đầu hoặc kết thúc các Timer. Để bắt đầu các Timer ta set bit TRx và để kết thúc Timer ta Clear TRx. Ví dụ Timer 0 được bắt đầu bởi lệnh SETB TR0 và được kết thúc bởi lệnh CLR TR0 (bit Gate= 0). Bit TRx bị xĩa sau sự reset hệ thống, do đĩ các Timer bị cấm bằng sự mặc định. Thêm phương pháp nữa để điều khiển các Timer là dùng bit GATE trong thanh ghi TMOD và ngõ nhập bên ngồi INTx. Điều này được dùng để đo các độ rộng xung. Giả sử xung đưa vào chân INT0 ta khởi động Timer 0 cho mode 1 là mode Timer 16 bit với TL0/TH0 = 0000H, GATE = 1, TR0 = 1. Như vậy khi INT0 = 1 thì Timer “được mở cổng” và ghi giờ với tốc độ của tần số 1MHz. Khi INT0 xuống thấp thì Timer “đĩng cổng” và khoảng thời gian của xung tính bằng s là sự đếm được trong thanh ghi TL0/TH0. Timer Operating Mode 1. e) Sự khởi động và truy xuất các thanh ghi timer: Các Timer được khởi động 1 lần ở đầu chương trình để đặt mode hoạt động cho chúng. Sau đĩ trong chương trình các Timer được bắt đầu, được xĩa, các thanh ghi Timer được đọc và cập nhật … theo yêu cầu của từng ứng dụng cụ thể. Mode Timer TMOD là thanh ghi đầu tiên được khởi gán, bởi vì đặt mode hoạt động cho các Timer. Ví dụ khởi động cho Timer 1 hoạt động ở mode 1 (mode Timer 16bit) và được ghi giờ bằng dao động trên Chip ta dùng lệnh : MOV TMOD, # 00001000B. Trong lệnh này M1 = 0, M0 = 1 để vào mode 1 và C/T = 0, GATE = INTO (P3.2) On Chip Oscillato r  12 TL0 TH0 TF0 C/T TR0 GATE 12 MHz T0 (P3.4) THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang19 0 để cho phép ghi giờ bên trong đồng thời xĩa các bit mode của Timer 0. Sau lệnh trên Timer vẫn chưa đếm giờ, nĩ chỉ bắt đầu đếm giờ khi set bit điều khiển chạy TR1 của nĩ. Nếu ta khơng khởi gán giá trị đầu cho các thanh ghi TLx/THx thì Timer sẽ bắt đầu đếm từ 0000Hlên và khi tràn từ FFFFH sang 0000H nĩ sẽ bắt đầu tràn TFx rồi tiếp tục đếm từ 0000H lên tiếp . . . Nếu ta khởi gán giá trị đầu cho TLx/THx, thì Timer sẽ bắt đầu đếm từ giá trị khởi gán đĩ lên nhưng khi tràn từ FFFFH sang 0000H lại đếm từ 0000H lên. Chú ý rằng cờ tràn TFx tự động được set bởi phần cứng sau mỗi sự tràn và sẽ được xĩa bởi phần mềm. Chính vì vậy ta cĩ thể lập trình chờ sau mỗi lần tràn ta sẽ xĩa cờ TFx và quay vịng lặp khởi gán cho TLx/THx để Timer luơn luơn bắt đầu đếm từ giá trị khởi gán lên theo ý ta mong muốn. Đặc biệt những sự khởi gán nhỏ hơn 256 s, ta sẽ gọi mode Timer tự động nạp 8 bit của mode 2. Sau khi khởi gán giá trị đầu vào THx, khi set bit TRx thì Timer sẽ bắt đầu đếm giá trị khởi gán và khi tràn từ FFH sang 00H trong TLx, cờ TFx tự động được set đồng thời giá trị khởi gán mà ta khởi gán cho Thx được nạp tự động vào TLx và Timer lại được đếm từ giá trị khởi gán này lên. Nĩi cách khác, sau mỗi tràn ta khơng cần khởi gán lại cho các thanh ghi Timer mà chúng vẫn đếm được lại từ giá trị ban đầu. 3) Các chế độ timer và cờ tràn (timer modes and overflow): 8951 cĩ 2̀ Timer là Timer 0 và timer 1. Ta dùng ký hiệu TLx và Thx để chỉ 2 thanh ghi byte thấp và byte cao của Timer 0 hoặc Timer 1. a) Mode Timer 13 bit (MODE 0) : Overflow Mode 0 là mode Timer 13 bit, trong đĩ byte cao của Timer (Thx) được đặt thấp và 5 bit trọng số thấp nhất của byte thấp Timer (TLx) đặt cao để hợp thành Timer 13 bit. 3 bit cao của TLx khơng dùng. b) Mode Timer 16 bit (MODE 1) : TLx (5 bit) THx (8 bit) TFx Timer Clock TLx (8 bit) THx (8 bit) TFx Timer Clock THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang20 Mode 1 là mode Timer 16 bit, tương tự như mode 0 ngoại trừ Timer này hoạt động như một Timer đầy đủ 16 bit, xung clock được dùng với sự kết hợp các thanh ghi cao và thấp (TLx, THx). Khi xung clock được nhận vào, bộ đếm Timer tăng lên 0000H, 0001H, 0002H, …, và một sự tràn sẽ xuất hiện khi cĩ sự chuyển trên bộ đếm Timer từ FFFH sang 0000H và sẽ set cờ tràn Time, sau đĩ Timer đếm tiếp. Cờ tràn là bit TFx trong thanh ghi TCON mà nĩ sẽ được đọc hoặc ghi bởi phần mềm. Bit cĩ trọng số lớn nhất (MSB) của giá trị trong thanh ghi Timer là bit 7 của THx và bit cĩ trọng số thấp nhất (LSB) là bit 0 của TLx. Bit LSB đổi trạng thái ở tần số clock vào được chia 216 = 65.536. Các thanh ghi Timer TLx và Thx cĩ thể được đọc hoặc ghi tại bất kỳ thời điểm nào bởi phần mềm. c) Mode tự động nạp 8 bit (MODE 2) : Overflow Reload Mode 2 là mode tự động nạp 8 bit, byte thấp TLx của Timer hoạt động như một Timer 8 bit trong khi byte cao THx của Timer giữ giá trị Reload. Khi bộ đếm tràn từ FFH sang 00H, khơng chỉ cờ tràn được set mà giá trị trong THx cũng được nạp vào TLx : Bộ đếm được tiếp tục từ giá trị này lên đến sự chuyển trạng thái từ FFH sang 00H kế tiếp và cứ thế tiếp tục. Mode này thì phù hợp bởi vì các sự tràn xuất hiện cụ thể mà mỗi lúc nghỉ thanh ghi TMOD và THx được khởi động. d) Mode Timer tách ra (MODE 3) : Timer Clock TL x (8 bit) TFx TH x (8 bit) THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang21 Mode 3 là mode Timer tách ra và là sự khác biệt cho mỗi Timer. Timer 0 ở mode 3 được chia là 2 timer 8 bit. TL0 và TH0 hoạt động như những Timer riêng lẻ với sự tràn sẽ set các bit TL0 và TF1 tương ứng. Timer 1 bị dừng lại ở mode 3, nhưng cĩ thể được khởi động bởi việc ngắt nĩ vào một trong các mode khác. Chỉ cĩ nhược điểm là cờ tràn TF1 của Timer 1 khơng bị ảnh hưởng bởi các sự tràn của Timer 1 bởi vì TF1 được nối với TH0. Mode 3 cung cấp 1 Timer ngoại 8 bit là Timer thứ ba của 8951. Khi vào Timer 0 ở mode 3, Timer cĩ thể hoạt động hoặc tắt bởi sự ngắt nĩ ra ngồi và vào trong mode của chính nĩ hoặc cĩ thể được dùng bởi Port nối tiếp như là một máy phát tốc độ Baud, hoặc nĩ cĩ thể dùng trong hướng nào đĩ mà khơng sử dụng Interrupt. V/ TỔ CHỨC NGẮT CỦA C8031/8951: A/ GIỚI THIỆU : Thật sự tất cả các nguồn ngắt ở C8031/8951: 2 ngắt ngồi, 2 từ timer và một ngắt Port nối tiếp. Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi Reset hệ thống và được cho phép bằng phần mềm. Khi cĩ 2 hoặc nhiều ngắt đồng thời, 1 ngắt xảy ra trong khi 1 ngắt khác đang được phục vụ, cĩ cả 2 sự tuần tự hỏi vịng và sơ đồ ưu tiên 2 mức dùng để xác định thực hiện ngắt. Việc hỏi vịng tuần tự thì cố định nhưng ưu tiên ngắt thì cĩ thể lập trình được. 1) Cho phép và cấm các ngắt: (Enabling and Daibling Interrupt) : Mỗi nguồn Interrup được cho phép hoặc cấm từng ngắt qua một thanh ghi chức năng đặt biệt cĩ địa chỉ bit IE (Interrupt Enable) ở địa chỉ A8H. Cũng như xác định bit cho phép riêng biệt cho mỗi nguồn ngắt, cĩ một bit cho phép/cấm tồn bộ TL1 (8 bit) TH1 (8 bit) TL1 (8 bit) TH0 (8 bit) TF0 TF1 Timer Clock Timer Clock Timer Clock Overflow THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang22 được xĩa để cấm hồn tồn các ngắt được xét (đặt lên 1) để cho phép tất cả các ngắt. Bảng Tĩm tắt thanh ghi IE Hai bit phải được đặt lên một để cho phép bất kỳ ngắt nào: bit cho phép riêng và bit cho phép tồn bộ.Ví dụ các ngắt từ timer được cho phép như sau: SETB ET1 ; Cho phép ngắt từ timer 1. SETB EA ; Đặt bit cho phép tồn bộ. Hoặc : MOV IE,#10001000B. Mặc dù hai cách này cĩ cùng một hiệu quả sau khi reset hệ thống nhưng hiệu quả sẽ khác nếu IE được ghi giữa chương trình. Cách thứ nhất khơng ảnh hưởng tới 5 bit trong thanh ghi IE, trái lại cách thứ hai sẽ xĩa các bit khác. Nên khởi trị IE theo cách thứ hai ở đầu chương trình (nghĩa là sau khi mở máy hoặc reset hệ thống), nhưng cho phép và cấm các ngắt ngay trong chương trình nên dùng cách thứ nhất để tránh ảnh hưởng đến các bit khác trong thanh ghi IE. 2) Ưu tiên ngắt (IP: Interrupt Priority) : Mỗi nguồn ngắt được lập trình riêng vào một trong hai mức ưu tiên qua thanh ghi chức năng đặc biệt được địa chỉ bit IP ở địa chỉ B8H. Bit Ký hiệu Địa chỉ bit Mơ tả (1 = cho phép, 0=cấm) IE.7 EA AFH Cho phép / cấm tồn bộ IE.6 _ AEH Khơng được định nghĩa IE.5 ET2 ADH Cho phép ngắt từ timer 2(8052) IE.4 ES ACH Cho phép ngắt Port nối tiếp IE.3 ET1 ABH Cho phép ngắt từ timer 1 IE.2 EX1 AAH Cho phép ngắt ngồi IE.1 ET0 A8H Cho phép ngắt từ timer 0 IE.0 EX0 A8H Cho phép ngắt ngồi 0 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang23 Bit Ký hiệu Địa chỉ bit Mơ tả (1= mức cao hơn, 0 = mức thấp hơn) IP.7 BFH Khơng được định nghĩa IP.6 _ BEH Khơng được định nghĩa IP.5 PT2 BDH Ưu tiên cho ngắt từ timer 2 (8052) IP.4 PS BCH Ưu tiên cho ngắt từ port nối tiếp IP.3 PT1 BAH Ưu tiên cho ngắt từ timer1 IP.2 PX1 BAH Ưu tiên cho ngắt ngồi IP.1 PT0 B9H Ưu tiên cho ngắt từ timer 0 IP.0 PX0 B8H Ưu tiên cho ngắt ngồi 0 Bảng Tĩm tắt thanh ghi IP. IP bị xĩa sau khi reset hệ thống để (mặc nhiên) đặt tất cả các ngắt ở mức ưu tiên thấp hơn. Ý tưởng “ưu tiên” cho phép một ISR sẽ bị ngắt bởi một ngắt cĩ độ ưu tiên cao hơn ngắt đang phục vụ. Điều này thì rõ ràng trên C8951/8031, vì chỉ cĩ hai mức ưu tiên. Nếu một ISR cĩ mức ưu tiên thấp đang thực thi khi một ngắt cĩ ưu tiên cao xảy ra thì ISR bị ngắt. ISR cao hơn khơng bị ngắt. Chương trình mức thực thi ở mức nền (Base-Lavel) và khơng liên hệ với bất cứ ngắt nào, cĩ thể luơn luơn bị ngắt quảng bất cứ ưu tiên của ngắt. Nếu hai Interrupt (ngắt) cĩ ưu tiên khác nhau xảy ra đồng thời thì Interrupt (ngắt) cĩ độ ưu tiên cao hơn được phục vụ trước. 3) Hỏi vịng tuần tự (Polling Sequence): Nếu hai ngắt cĩ cùng độ ưu tiên xảy ra đồng thời, sự hỏi vịng tuần tự sẽ xác định cái nào được phục vụ trước tiên. Hỏi vịng tuần tự là bên ngồi 0, timer0, bên ngồi, timer1, port nối tiếp và timer. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang24 Hình trên đây minh họa 5 nguồn ngắt, cơ chế riêng biệt và tồn bộ, hỏi vịng tuần tự và các mức ưu tiên. Trạng thái của tất cả các nguồn ngắt khả dụng qua các bit cờ tương ứng trong các ISR (Special funetyon Registers). Dĩ nhiên nếu cĩ bất kỳ ngắt nào bị cấm ngắt khơng xảy ra, nhưng phần mềm vẫn cĩ thể kiểm tra cờ ngắt. Các thí dụ về timer và port nối tiếp trong các mục trước đã sử dụng các cờ ngắt một cách mở rộng mà khơng dùng ngắt. Ngắt Port nối tiếp cĩ từ Logic OR của ngắt thu (RI) và phát (TI). Các bit cờ tạo các ngắt được tĩm tắc trong bảng sau: cập nhập ngắt IE1 EX0 ET0 EX1 ET1 ES PX0 PT0 PX1 PT1 PS IE0 IE1 IE0 INT0 INT1 IT0 IT1 RI T1 0 1 1 1 0 0 1 0 1 0 0 1 1 0 ca ́c cho phép cho phép tồn bộ tuần tự hỏi vịng ngắt ngắt ưu tiên cao ngắt ưu tiên thấp Tổng thể ngắt 89C51 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang25 Ngắt Cờ Thanh ghi SER và vị trí bit Bên ngồi 0 IE0 TCON.1 Bên ngồi 1 IE1 TCON.3 Timer 0 TF0 TCON.5 Timer 1 TF1 TCON.7 Port nối tiếp TI SCON.1 Port nối tiếp RI SCON.0 4) Xử lý ngắt (processing interrupt): Khi ngắt xảy ra và CPU chấp thuận, chương trình chính ngắt quảng những hoạt động sau đây xảy ra: + Lệnh hiện hành hồn tất việc thực thi. + Cấp PC vào ngăn xếp. + Trạng thái ngắt hiện hành được cất vào bên trong. + Các ngắt bị chặn ở mức ngắt. + Nạp vào PC địa chỉ vectorcủa ISR. + ISR thực thi. ISR thực thi và đáp ứng ngắt. ISR hồn tất bằng lệnh RETI (quay về từ ngắt). Điều này làm lấy lại giá trị cũ PC từ ngăn xếp và lấp lại trạng thái ngắt cũ. Thực thi chương trình chính ở chỗ mà nĩ bị dừng. Các vector ngắt (Interrupt Vectors): Khi chấp nhận ngắt, giá trị được nạp vào PC được gọi là vector ngắt. Nĩ là địa chỉ bắt đầu của ISR cho nguồn tạo ngắt. Các vector ngắt được cho bảng sau: THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang26 Ngắt Cờ Địa chỉ vector Reset hệ thống RST 0000H Bên ngồi 0 IE0 0003H Timer 0 TF 0 000BH Bên ngồi 1 IE 1 0013H Timer 1 TF 1 001BH Port nối tiếp T1 hoặc R1 0023H Bảng: Các vector ngắt Vector Reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vì theo nghĩa này nĩ giống Interrupt: nĩ ngắt chương trình chính và nạp giá trị mới cho PC. Khi “chỉ đến một ngắt”, cờ gây ra ngắt tự động bị xĩa bởi phần cứng. Các ngoại lệ là RI và TI với các ngắt port nối tiếp và TF2, EXF2 với các Interruput Time. Vì cĩ hai nguồn cĩ thể cho mỗi ngắt này, khơng thực tế để CPU xĩa cờ ngắt. Các bit này phải được kiểm tra trong ISR để xác định nguồn ngắt và cờ tạo ngắt sẽ được xĩa bằng phần mềm. Thơng thường một rẽ nhánh xảy ra với một phải ứng thích hợp, phụ thuộc vào nguồn ngắt. Vì các vector ngắt ở phần đầu của bộ nhớ chương trình, nên lệnh thứ nhất của chương trình chính thường là lệnh nhảy qua chương trình chính này. Ví dụ như lệnh LJMP 0030H. B/ THIẾT KẾ CHƯƠNG TRÌNH DÙNG CÁC NGẮT: Các ví dụ trong các mục trước đã khơng sử dụng các ngắt nhưng đã cĩ vịng lặp đợi để kiểm tra các cờ báo tràn (TFO hoặc TF1) hoặc các cờ thu và cờ phát Port nối tiếp (TI và RI). Vấn đề trong phương pháp này là thời gian thực thi cĩ gía trị của CPU hồn tồn khơng bị tiêu tốn trong việc đợi các cờ. Điều này hồn tồn khơng thích hợp với các ứng dụng của vi điều khiển, trong đĩ bộ vi điều khiển phải tương tác với nhiều thiết bị xuất nhập đồng thời. Trong phần này ta sẽ khảo sát cách phát triển chương trình dùng vi điều khiển. Khung đề nghị cho một chương trình phục vụ ngắt như sau: ORG 0000H ; điểm vào Reset. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang27 Ljmp main ; các điểm vào ISR. ORG 0030H ; điểm vào chương trình chính. Main: chương trình chính bắt đầu. Lệnh thứ nhất nhảy tới địa chỉ 0030H, vừa trên các vị trí mà các ISR bắt đầu. Như được vẽ hình sau, chương trình chính bắt đầu ở địa chỉ 0030H. 1) Chương trình phục vụ ngắt cĩ kích thước nhỏ : Các chương trình phục vụ ngắt phải bắt đầu ở gần phần đầu của bộ nhớ chương trình ở các địa chỉ trong bảng các vectơr ngắt. Mặt dù cĩ 8 byte ở các điểm vào ngắt, thường đủ bộ nhớ để thực hiện các hoạt động mong muốn và quay về chương trình chính từ IRS. Nếu chỉ cĩ một nguồn ngắt được sử dụng, ví dụ timer 0, thì cĩ thể sử dụng khung sau: ORG 000H ; Reset LJMP MAIN ORG 000BH ; điểm vào time 0 TOIRS: ; ISR cho time 0 bắt đầu. RETI ; quay về chương trình chính. MAIN: Chương trình chính. Nếu sử dụng nhiều ngắt phải đảm bảo là chúng phải bắt đầu từ vị trí đúng và khơng chạy qua ISR kế. Vì chỉ cĩ một ngắt được sử dụng trong ví dụ trên, chương trình chính cĩ thể bắt ngay sau lệnh RETI. Chương trình chính Các điểm vào Reset và ngắt LJMP main FFFFH 0030H 0029H 0000H Hình : Tổ chức bộ nhớ khi dùng các ngắt THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang28 2) Các chương trình phục vụ ngắt cĩ kích thước lớn: Nếu ISR dài hơn 8 byte, cĩ thể cần chuyển nĩ tới một nơi nào đĩ trong bộ nhớ chương trình hoặc cĩ thể để nĩ đi lố qua điểm vào của ngắt kế. Tiêu biểu là ISR bắt đầu với lệnh nhảy đến vùng nhớ khác ở đĩ cĩ thể mở rộng chiều dài các ISR. Ví dụ lúc này chỉ xét timer 0, cĩ thể sử dụng khung sau: ORS 000H ; Reset LJMP MAIN ORG 000BH ; các vector ngắt tiếp theo. MAIN: TOISR: ; ISR cho time 0. RETI: ; quay về chương trình chính. Để đơn giản chương trình chỉ làm vệc một lúc ban đầu. Chương trình khởi động Timer, Port nối tiếp và các thanh ghi ngắt cho thích hợp và rồi khơng làm gì cả. Cơng vệc được hồn tồn làm trong ISR. Sau các khởi động, chương trình chứa các lệnh sau: HERE: SJMP HERE Hay dạng viết gắn gọn: SJMP $ Khi ngắt xảy ra, chương trình chính bị ngắt quảng tạm thời trong khi ISR thực thi. Lệnh RETI ở cuối ISR trả điều khiển về chương trình chính và nĩ tiếp tục khơng làm gì cả. Trong nhiều ứng dụng điều khiển, nhiều cơng việc thật ra được thực hiện hồn tồn trong ISR. Vì sử dụng ngắt, nên lệnh SJMP (HERE: SJMP HERE) cĩ thể được thay thế bằng các lệnh thực hiện cơng việc khác trong ứng dụng. 3) Các ngắt của 8951: a) Các ngắt Timer: Các ngắt timer cĩ địa chỉ vertor ngắt là 000BH (Timer 0) và 001BH (Timer1). Ngắt Timer xảy ra khi các thanh ghi Timer (TLX/THX) tràn và set các cờ báo tràn (TFX) lên 1. Chú ý rằng các cờ Timer (TFX) khơng bị xĩa bằng phần mềm. Khi cho phép ngắt, tự động bị xĩa bằng phầm cứng khi CPU chuyển đến ngắt. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang29 b) Các ngắt cổng nối tiếp: Ngắt cổng nối tiếp xảy ra khi cờ ngắt phát (TI) hoặc cờ ngắt thu (RI) được đặt lên 1. Ngắt phát xảy ra khi truyền một ký tự vừa được ghi vào SBUF. Ngắt thu xảy ra khi một ký tự đã được nhận xong và đang đợi trong SBUF được đọc. Ngắt cổng nối tiếp hơi khác với các ngắt Timer. Cờ gây ngắt cổng nối tiếp khơng bị xĩa bằng phần cứng khi CPU chuyển tới ngắt. Nguyên do là cĩ hai nguồn cổng ngắt nối tiếp: TI và RI. Nguồn ngắt phải được xác định trong ISR và cờ tạo ngắt sẽ được xĩa bằng phần mềm. c) Các ngắt ngồi: Các ngắt xảy ra khi cĩ một mức thấp hoặc cạnh xuống trên chân INT0 hoặc INT1 của 8951/8031. Đây là chức năng chuyển đổi của các bit Port 3: P3.2 (Chân 12) và P3.3 (chân 13). Các cờ tạo ngắt là các bit IE0 và IE1 trong TCON. Khi quyền điều khiển đã chuyển đến ISR, cờ tạo ngắt chỉ được xĩa nếu ngắt được tích cực ở cạnh xuống. Nếu ngắt được tích cực theo mức, thì nguồn yêu cầu ngắt bên ngồi sẽ điều khiển mức của cờ thay cho phần cứng. Sự lựa chọn ngắt tích cực mức thấp hay tích cực cạnh xuống được lập trình qua các bit IT0 và IT1 trong TCON. Ví dụ, nếu IT1 = 0, ngắt ngồi 1 được kích khởi bằng mức thấp ở chân INT1. Nếu IT1 = 1, ngắt ngồi 1 được kích khởi bằng cạnh. Trong chế độ này, nếu các mẫu liên tiếp trên chân INT1 chỉ mức cao trong một chu kỳ và thấp trong một chu kỳ kế, cờ yêu cầu ngắt IE1 trong TCON được đặt lên một. Rồi bit cờ IE2 yêu cầu ngắt. Vì các chân ngắt ngồi đã được lấy mẫu một lần ở mỗi chu kỳ máy, ngõ vào nên được giữ trong tối thiểu 12 chu kỳ dao động để đảm bảo lấy mẫu đúng. Nếu ngắt ngồi được tác động theo cạnh xuống, nguồn bên ngồi sẽ giử chân yêu càu cao tối thiểu 1 chu kỳ và giữ nĩ ở mức thấp một chu kỳ nữa để phát hiện được cạnh xuống. IE1 và IE0 tự động được xĩa khi CPU chuyển tới ngắt. Nếu ngắt ngồi được tác động theo mức, nguồn bên ngồi phải giữ yêu cầu tác động cho đến khi ngắt được yêu cầu thực sự được tạo ra. Rồi nĩ phải tác động yêu cầu trước khi ISR được hồn tất, nếu khơng một ngắt một ngắt sẽ được lập lại. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang30 Thơng thường khi vào ISR người ta làm nguồn yêu cầu đưa tín hiệu tạo ngắt về trạng thái khơng tác động. VI/ TĨM TẮT TẬP LỆNH CỦA 8951 : Các chương trình được cấu tạo từ nhiều lệnh, chúng được xây dựng logic, sự nối tiếp của các lệnh được nghĩ ra một cách hiệu quả và nhanh chĩng, kết quả của chương trình khả thi. Tập lệnh họ MSC-51 được sự kiểm tra của các mode định vị và các lệnh của chúng cĩ các Opcode 8 bit. Điều này cung cấp khả năng 28 = 256 lệnh được thi hành và một lệnh khơng được định nghĩa. Vài lệnh cĩ 1 hoặc 2 byte bởi dữ liệu hoặc địa chỉ thêm vào Opcode. Trong tồn bộ các lệnh cĩ 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte. A/ Các mode định vị (Addressing Mode) : Các mode định vị là một bộ phận thống nhất của tập lệnh. Chúng cho phép định rõ nguồn hoặc nơi gởi tới của dữ liệu ở các đường khác nhau tùy thuộc vào trạng thái của người lập trình. 8951 cĩ 8 mode định vị được dùng như sau: +Thanh ghi. +Trực tiếp. +Gián tiếp. +Tức thời. +Tương đối. +Tuyệt đối. +Dài. +Định vị. a) Sự định vị thanh ghi (Register Addressing): Cĩ 4 dãy thanh ghi 32 byte đầu tiên của RAM dữ liệu trên Chip địa chỉ 00H - 1FH, nhưng tại một thời điểm chỉ cĩ một dãy hoạt động các bit PSW3, PSW4 của từ trạng thái chương trình sẽ quyết định dãy nào hoạt động. Các lệnh để định vị thanh ghi được ghi mật mã bằng cách dùng bit trọng số thấp nhất của Opcode lệnh để chỉ một thanh ghi trong vùng địa chỉ theo logic này. Như vậy 1 mã chức năng và địa chỉ hoạt động cĩ thể được kết hợp để tạo thành một lệnh ngắn 1 byte như sau: THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang31 Register Addressing. Một vài lệnh dùng cụ thể cho 1 thanh ghi nào đĩ như thanh ghi A, DPTR.... mã Opcode tự nĩ cho biết thanh ghi vì các bit địa chỉ khơng cần biết đến. b) Sự định địa chỉ trực tiếp (Direct Addressing): Sự định địa chỉ trực tiếp cĩ thể truy xuất bất kỳ giá trị nào trên Chip hoặc thanh ghi phần cứng trên Chip. Một byte địa chỉ trực tiếp được đưa vào Opcode để định rõ vị trí được dùng như sau: Direct Addressing Tùy thuộc các bit bậc cao của địa chỉ trực tiếp mà một trong 2 vùng nhớ được chọn. Khi bit 7 = 0, thì địa chỉ trực tiếp ở trong khoảng 0 - 127 (00H - 7FH) và 128 vị trí nhớ thấp của RAM trên Chip được chọn. Tất cả các Port I/O, các thanh ghi chức năng đặc biệt, thanh ghi điều khiển hoặc thanh ghi trạng thái bao giờ cũng được quy định các địa chỉ trong khoảng 128 - 255 (80 - FFH). Khi byte địa chỉ trực tiếp nằm trong giới hạn này (ứng với bit 7 = 1) thì thanh ghi chức năng đặc biệt được truy xuất. Ví dụ Port 0 và Port 1 được quy định địa chỉ trực tiếp là 80H và 90H, P0, P1 là dạng thức rút gọn thuật nhớ của Port, thì sự biến thiên cho phép thay thế và hiểu dạng thức rút gọn thuật nhớ của chúng. Chẳng hạn lệnh: MOV P1, A sự biên dịch sẽ xác định địa chỉ trực tiếp của Port 1 là 90H đặt vào hai byte của lệnh (byte 1 của port 0). Opcode Direct Addressing Opcode n n n THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang32 c) Sự định vị địa chỉ gián tiếp (Indirect Addressing): Sự định địa chỉ gián tiếp được tượng trưng bởi ký hiệu @ được đặt trước R0, R1 hay DPTR. R0 và R1 cĩ thể hoạt động như một thanh ghi con trỏ mà nội dung của nĩ cho biết một địa chỉ trong RAM nội ở nơi mà dữ liệu được ghi hoặc được đọc. Bit cĩ trọng số nhỏ nhất của Opcode lệnh sẽ xác định R0 hay R1 được dùng con trỏ Pointer. d) Sự định địa chỉ tức thời (Immediate Addressing): Sự định địa chỉ tức thời được tượng trưng bởi ký hiệu # được đứng trước một hằng số, 1 biến ký hiệu hoặc một biểu thức số học được sử dụng bởi các hằng, các ký hiệu, các hoạt động do người điều khiển. Trình biên dịch tính tốn giá trị và thay thế dữ liệu tức thời. Byte lệnh thêm vơ chứa trị số dữ liệu tức thời như sau: e) Sự định địa chỉ tương đối: Sự định địa chỉ tương đối chỉ sử dụng với những lệnh nhảy nào đĩ. Một địa chỉ tương đối (hoặc Offset) là một giá trị 8 bit mà nĩ được cộng vào bộ đếm chương trình PC để tạo thành địa chỉ một lệnh tiếp theo được thực thi. Phạm vi của sự nhảy nằm trong khoảng -128 – 127. Offset tương đối được gắn vào lệnh như một byte thêm vào như sau :Những nơi nhảy đến thường được chỉ̉ rõ bởi các nhãn và trình biên dịch xác định Offset Relative cho phù hợp. Sự định vị tương đối đem lại thuận Opcode i Opcode Immediate Data THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang33 lợi cho việc cung cấp mã vị trí độc lập, nhưng bất lợi là chỉ nhảy ngắn trong phạm vi -128 – 127 byte. f) Sự định địa chỉ tuyệt đối (Absolute Addressing): Sự định địa chỉ tuyệt đối được dùng với các lệnh ACALL và AJMP. Các lệnh 2 byte cho phép phân chia trong trang 2K đang lưu hành của bộ nhớ mã của việc cung cấp 11 bit thấp để xác định địa chỉ trong trang 2K (A0…A10 gồm A10…A8 trong Opcode và A7…A0 trong byte) và 5 bit cao để chọn trang 2K (5 bit cao đang lưu hành trong bộ đếm chương trình là 5 bit Opcode).Sự định vị tuyệt đối đem lại thuận lợi cho các lệnh ngắn (2 byte), nhưng bất lợi trong việc giới hạn phạm vi nơi gởi đến và cung cấp mã cĩ vị trí độc lập. g) Sự định vị dài (Long Addressing): Sự định vị dài được dùng với lệnh LCALL và LJMP. Các lệnh 3 byte này bao gồm một địa chỉ nơi gởi tới 16 bit đầy đủ là 2 byte và 3 byte của lệnh. Ưu điểm của sự định vị dài là vùng nhớ mã 64K cĩ thể được dùng hết, nhược điểm là các lệnh đĩ dài 3 byte và vị trí lệ thuộc. Sự phụ thuộc vào vị trí sẽ bất lợi bởi chương trình khơng thể thực thi tại địa chỉ khác. Opcode Relative Offset Addr10 - Addr8 Opcode Addr7 - Addr0 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang34 h) Sự định địa chỉ phụ lục (Index Addressing): Sự định địa chỉ phụ lục dùng một thanh ghi cơ bản (cũng như bộ đếm chương trình hoặc bộ đếm dữ liệu) và Offset (thanh ghi A) trong sự hình thành 1 địa chỉ liên quan bởi lệnh JMP hoặc MOVC. Các bảng của lệnh nhảy hoặc các bảng tra được tạo nên một cách dễ dàng bằng cách dùng địa chỉ phụ lục. B/ Các kiểu lệnh (Instruction Types): 1) 8951 chia ra 5 nhĩm lệnh chính: +Các lệnh số học. +Lệnh logic. +Dịch chuyển dữ liệu. +Lý luận. +Rẽ nhánh chương trình. 2) Từng kiểu lệnh được mơ tả như sau: a) Các lệnh số học (Arithmetic Instrustion): Opcode Addr15 - Addr8 Addr7 - Addr0 PC (or PDTR) ACC Base Register Offset Effective Address THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang35 ADD A, ADD A, Rn : (A) (A) + (Rn) ADD A, direct : (A) (A) + (direct) ADD A, @ Ri : (A) (A) + ((Ri)) ADD A, # data : (A) (A) + # data ADDC A, Rn : (A) (A) + (C) + (Rn) ADDC A, direct : (A) (A) + (C) + (direct) ADDC A, @ Ri : (A) (A) + (C) + ((Ri)) ADDC A, # data : (A) (A) + (C) + # data SUBB A, SUBB A, Rn : (A) (A) - (C) - (Rn) SUBB A, direct : (A) (A) - (C) - (direct) SUBB A, @ Ri : (A) (A) - (C) - ((Ri)) SUBB A, # data : (A) (A) - (C) - # data INC INC A : (A) (A) + 1 INC direct : (direct) (direct) + 1 INC Ri : ((Ri)) ((Ri)) + 1 INC Rn : (Rn) (Rn) + 1 INC DPTR : (DPTR) (DPTR) + 1 DEC DEC A : (A) (A) - 1 DEC direct : (direct) (direct) - 1 DEC @Ri : ((Ri)) ((Ri)) - 1 DEC Rn : (Rn) (Rn) - 1 MULL AB : (A) LOW [(A) x (B)];cĩ ảnh hưởng cờ OV : (B) HIGH [(A) x (B)];cờ Cary được xĩa. DIV AB : (A) Integer Result of [(A)/(B)]; cờ OV : (B) Remainder of [(A)/(B)]; cờ Carry xĩa DA A :Điều chỉnh thanh ghi A thành số BCD đúng trong phép cộng BCD (thường DA A đi kèm với ADD, ADDC) THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang36 Nếu [(A3-A0)>9] và [(AC)=1] (A3A0) (A3A0) + 6. Nếu [(A7-A4)>9] và [(C)=1] (A7A4) (A7A4) + 6. b) Các hoạt động logic (Logic Operation): Tất cả các lệnh logic sử dụng thanh ghi A như là một trong những tốn hạng thực thi một chu kỳ máy, ngồi A ra mất 2 chu kỳ máy. Những hoạt động logic cĩ thể được thực hiện trên bất kỳ byte nào trong vị trí nhớ dữ liệu nội mà khơng qua thanh ghi A. Các hoạt động logic được tĩm tắt như sau: ANL ANL A, Rn : (A) (A) AND (Rn). ANL A, direct : (A) (A) AND (direct). ANL A,@ Ri : (A) (A) AND ((Ri)). ANL A, # data : (A) (A) AND (# data). ANL direct, A : (direct) (direct) AND (A). ANL direct, # data : (direct) (direct) AND # data. ORL ORL A, Rn : (A) (A) OR (Rn). ORL A, direct : (A) (A) OR (direct). ORL A,@ Ri : (A) (A) OR ((Ri)). ORL A, # data : (A) (A) OR # data. ORL direct, A : (direct) (direct) OR (A). ORL direct, # data : (direct) (direct) OR # data. XRL XRL A, Rn : (A) (A) (Rn). XRL A, direct : (A) (A) (direct). XRL A,@ Ri : (A) (A) ((Ri)). XRL A, # data : (A) (A) # data. XRL direct, A : (direct) (direct) (A). XRL direct, # data : (direct) (direct) # data. CLR A : (A) 0 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang37 CLR C : (C) 0 CLR Bit : (Bit) 0 RL A : Quay vịng thanh ghi A qua trái 1 bit (An + 1) (An); n = 06 (A0) (A7) RLC A : Quay vịng thanh ghi A qua trái 1 bit cĩ cờ Carry (An + 1) (An); n = 06 (C) (A7) (A0) (C) RR A : Quay vịng thanh ghi A qua phải 1 bit (An + 1) (An); n = 06 (A0) (A7) RRC A : Quay vịng thanh ghi A qua phải 1 bit cĩ cờ Carry (An + 1) (An); n = 06 (C) (A7) (A0) (C) SWAP A : Đổi chổ 4 bit thấp và 4 bit cao của A cho nhau (A3A0)(A7A4). c) 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. Sau đây là sự tĩm tắt từng hoạt động của lệnh nhảy. JC rel : Nhảy đến “rel” nếu cờ Carry C = 1. JNC rel : Nhảy đến “rel” nếu cờ Carry C = 0. JB bit, rel : Nhảy đến “rel” nếu (bit) = 1. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang38 JNB bit, rel : Nhảy đến “rel” nếu (bit) = 0. JBC bit, rel : Nhảy đến “rel” nếu bit = 1 và xĩa bit. ACALL addr11: Lệnh gọi tuyệt đối trong page 2K. (PC) (PC) + 2 (SP) (SP) + 1 ((SP)) (PC7PC0) (SP) (SP) + 1 ((SP)) (PC15PC8) (PC10PC0) page Address. LCALL addr16: Lệnh gọi dài chương trình con trong 64K. (PC) (PC) + 3 (SP) (SP) + 1 ((SP)) (PC7PC0) (SP) (SP) + 1 ((SP)) (PC15PC8) (PC) Addr15Addr0. RET : Kết thúc chương trình con trở về chương trình chính. (PC15PC8) (SP) (SP) (SP) - 1 (PC7PC0) ((SP)) (SP) (SP) -1. RETI : Kết thúc thủ tục phục vụ ngắt quay về chương trình chính hoạt động tương tự như RET. AJMP Addr11 : Nhảy tuyệt đối khơng điều kiện trong 2K. (PC) (PC) + 2 (PC10PC0) page Address. LJMP Addr16 : Nhảy dài khơng điều kiện trong 64K Hoạt động tương tự lệnh LCALL. SJMP rel :Nhảy ngắn khơng điều kiện trong (-128127) byte (PC) (PC) + 2 (PC) (PC) + byte 2 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang39 JMP @A + DPTR :Nhảy khơng điều kiện đến địa chỉ (A) + (DPTR) (PC) (A) + (DPTR) JZ rel : Nhảy đến A = 0. Thực hành lệnh kế nếu A 0. (PC) (PC) + 2 (A) = 0 (PC) (PC) + byte 2 JNZ rel : Nhảy đến A 0. Thực hành lệnh kế nếu A = 0. (PC) (PC) + 2 (A) 0 (PC) (PC) + byte 2 CJNE A, direct, rel : So sánh và nhảy đến A direct (PC) (PC) + 3 (A) (direct) (PC) (PC) + Relative Address. (A) < (direct) C = 1 (A) > (direct) C = 0 (A) = (direct). Thực hành lệnh kế tiếp CJNE A, # data, rel :Tương tự lệnh CJNE A, direct, rel. CJNE Rn, # data, rel :Tương tự lệnh CJNE A, direct, rel. CJNE @ Ri, # data, rel :Tương tự lệnh CJNE A, direct, rel. DJNE Rn, rel :Giảm Rn và nhảy nếu Rn 0. (PC) (PC) + 2 (Rn) (Rn) -1 (Rn) 0 (PC) (PC) + byte 2. DJNZ direct, rel :Tương tự lệnh DJNZ Rn, rel. d) Các lệnh dịch chuyển dữ liệu: Các lệnh dịch chuyển dữ liệu trong những vùng nhớ nội thực thi 1 hoặc 2 chu kỳ máy. Mẫu lệnh MOV , cho phép di chuyển dữ liệu bất kỳ 2 vùng nhớ nào của RAM nội hoặc các vùng nhớ của các thanh ghi chức năng đặc biệt mà khơng thơng qua thanh ghi A. Vùng Ngăn xếp của 8951 chỉ chứa 128 byte RAM nội, nếu con trỏ Ngăn xếp SP được tăng quá địa chỉ 7FH thì các byte được PUSH vào sẽ mất đi và các byte POP ra thì khơng biết rõ. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang40 Các lệnh dịch chuyển bộ nhớ nội và bộ nhớ ngoại dùng sự định vị gián tiếp. Địa chỉ gián tiếp cĩ thể dùng địa chỉ 1 byte (@ Ri) hoặc địa chỉ 2 byte (@ DPTR). Tất cả các lệnh dịch chuyển hoạt động trên tồn bộ nhớ ngồi thực thi trong 2 chu kỳ máy và dùng thanh ghi A làm tốn hạng DESTINATION. Việc đọc và ghi RAM ngồi (RD và WR) chỉ tích cực trong suốt quá trình thực thi của lệnh MOVX, cịn bình thường RD và WR khơng tích cực (mức 1). Tất cả các lệnh dịch chuyển đều khơng ảnh hưởng đến cờ. Hoạt động của từng lệnh được tĩm tắt như sau: MOV A,Rn : (A) (Rn) MOV A, direct : (A) (direct) MOV A, @ Ri : (A) ((Ri)) MOV A, # data : (A) # data MOV Rn, A : (Rn) (A) MOV Rn, direct : (Rn) (direct) MOV Rn, # data : (Rn) # data MOV direct, A : (direct) (A) MOV direct, Rn : (direct) (Rn) MOV direct, direct : (direct) (direct) MOV direct, @ Ri : (direct) ((Ri)) MOV direct, # data : (direct) data MOV @ Ri, A : ((Ri)) (A) MOV @ Ri, direct : ((Ri)) (direct) MOV @ Ri, # data : ((Ri)) # data MOV DPTR, # data16 : (DPTR) # data16 MOV A, @ A + DPTR : (A) (A) + (DPTR) MOV @ A + PC : (PC) (PC) + 1 (A) (A) + (PC) MOVX A, @ Ri : (A) ((Ri)) MOVX A, @ DPTR : (A) ((DPTR)) MOVX @ Ri, A : ((Ri)) (A) MOVX @ DPTR, A : ((DPTR)) (A) THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang41 PUSH direct : Cất dữ liệu vào Ngăn xếp (SP) (SP) + 1 (SP) (Drirect) POP direct : Lấy từ Ngăn xếp ra direct (direct) ((SP)) (SP) (SP) - 1 XCH A, Rn : Đổi chổ nội dung của A với Rn (A) (Rn) XCH A, direct : (A) (direct) XCH A, @ Ri : (A) ((Ri)) XCHD A, @ Ri : Đổi chổ 4 bit thấp của (A) với ((Ri)) (A3A0) ((Ri3Ri0)) Các lệnh luận lý (Boolean Instruction): 8951 chứa một bộ xử lí luận lý đầy đủ cho các hoạt động bit đơn, đây là một điểm mạnh của họ vi điều khiển MSC-51 mà các họ vi điều khiển khác khơng cĩ. RAM nội chứa 128 bit đơn vị và các vùng nhớ các thanh ghi chức năng đặc biệt cấp lên đến 128 đơn vị khác. Tất cả các đường Port là bit định vị, mỗi đường cĩ thể được xử lí như Port đơn vị riêng biệt. Cách truy xuất các bit này khơng chỉ các lệnh rẽ nhánh khơng, mà là một danh mục đầy đủ các lệnh MOVE, SET, CLEAR, COMPLEMENT, OR, AND. Tồn bộ sự truy xuất của bit dùng sự định vị trực tiếp với những địa chỉ từ 00H - 7FH trong 128 vùng nhớ thấp và 80H - FFH ở các vùng thanh ghi chức năng đặc biệt. Bit Carry C trong thanh ghi PSW của từ trạng thái chương trình và được dùng như một sự tích lũy đơn của bộ xử lí luận lý. Bit Carry cũng là bit định vị và cĩ địa chỉ trực tiếp vì nĩ nằm trong PSW. Hai lệnh CLR C và CLR CY đều cĩ cùng tác dụng là xĩa bit cờ Carry nhưng lệnh này mất 1 byte cịn lệnh sau mất 2 byte. Hoạt động của các lệnh luận lý được tĩm tắt như sau: CLR C : Xĩa cờ Carry xuống 0. Cĩ ảnh hưởng cờ Carry. CLR BIT : Xĩa bit xuống 0. Khơng ảnh hưởng cờ Carry SET C : Set cờ Carry lên 1. Cĩ ảnh hưởng cờ Carry. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang42 SET BIT : Set bit lên 1. Khơng ảnh hưởng cờ Carry. CPL C : Đảo bit cờ Carry. Cĩ ảnh hưởng cờ Carry. CPL BIT : Đảo bit. Khơng ảnh hưởng cờ Carry. ANL C, BIT : (C) (C) AND (BIT) : Cĩ ảnh hưởng cờ Carry. ANL C, /BIT: (C) (C) AND NOT (BIT):Khơng ảnh hưởng cờ Carry. ORL C, BIT : (C) (C) OR (BIT) : Tác động cờ Carry. ORL C, /BIT : (C) (C) OR NOT (BIT) : Tác động cờ Carry. MOV C, BIT : (C) (BIT) : Cờ Carry bị tác động. MOV BIT, C : (BIT) (C) : Khơng ảnh hưởng cờ Carry. Các lệnh xen vào (Miscellamous Intstruction): NOP : Khơng hoạt động gì cả, chỉ tốn 1 byte và 1 chu kỳ máy. Ta dùng để delay những khoảng thời gian nhỏ. CHƯƠNG III : GIỚI THIỆU CÁC LINH KIỆN SỬ DỤNG TRONG LUẬN VĂN I/ MOSFET : Mosfet sử dụng trong mạch này là IRF540 và IRF9540 Mosfet : Được điều khiển đóng ngắt bằng điện áp, thời gian đóng ngắt nhanh, đóng ngắt các dòng lớn. + IRF540: Thuộc loại npn, dịng trung bình định mức 28A, điện áp định mức lớn nhất 100v THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang43 Sơ đồ khối bên trong - Khi VGS >0V , thì IRF540 dẫn . Các thơng số kĩ thuật của IRF540 : VDS đỉnh cĩ thể chịu được là 100V. VDGR đỉnh cĩ thể chịu được là 100V. VGS đỉnh cĩ thể chịu được là V20 . ID đỉnh cĩ thể chịu được là 28A. -Khi điện áp dương đặt lên giữa cổng G và S .tác dụng của điện trường sẽ kéo các electron từ lớp n vào lớp p ,cho phép dòng điện dẫn từ cực D tới cực S. + IRF9540: loại pnp, dòng trung bình định mức 19A,điện áp định mức lớn nhất 100V. Sơ đồ bên trong - Khi VGS <0V , thì IRF9540 dẫn . Các thơng số kĩ thuật của IRF9540 : VDS đỉnh cĩ thể chịu được là -100V. VDGR đỉnh cĩ thể chịu được là -100V. VGS đỉnh cĩ thể chịu được là V20 . ID đỉnh cĩ thể chịu được là -19A. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang44 -Khi điện áp đặt lên giữa cổng G và S .tác dụng của điện trường sẽ kéo các electron từ lớp n vào lớp p ,cho phép dòng điện dẫn từ cực D tới cực S. II/ OPTO PC817 : Opto là loại IC cĩ cấu tạo như 1 tổ hợp Led phát và Phototransistor dùng để cách ly tín hiệu vào và ra . Sơ đồ khối bên trong Chân 1 và 2 được cĩ chức năng như 1 LED phát khi cĩ tín hiệu sẽ dẫn điện áp từ chân 4 sang chân 3. Các thơng số kĩ thuật của OPTO PC817: Ngõ vào : Dịng điện IF để cĩ tín hiệu dẫn là 10 mA. Dịng đỉnh cĩ thể chịu được là 100mA. Điện áp ngõ vào cĩ thể chịu được là 6V. Ngõ ra : Điện áp VCE cĩ thể chịu được là 35V. Dịng điện dẫn IC cĩ thể chịu được là 50mA. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang45 III/ GIỚI THIỆU ENCODER: * Dạng thiết bị mã hố theo số gia: Là loại thiết bị mã hố cĩ dãy xung ra phù hợp với gĩc của trục quay.thiết bị mã hố này khơng cĩ xung ra khi trục khơng làm việc .Cần cĩ một bộ đếm xung ra. Thiết bị mã hố cho biết vị trí của trục quay bằng số xung được đếm .dạng thiết bị này cĩ thể xếp vào loại một chiều (chỉ cĩ đầu ra kênh A) là loại chỉ sinh ra xung khi trục quay và loại hai chiều (cĩ đầu ra kênh A va B)cũng cĩ thể cho biết chiều của trục quay(nghĩa là thuận hay ngược chiều kim đồng hồ ) * Bộ mã hố quay(rotary encoder) Để cảm biến gĩc,hay vị trí người ta hay dùng bộ mã hố quay. Cĩ nhiều loại bộ mã hố (encoder).Tuỳ theo cách chế tạo đĩa mà ta cĩ ngõ ra là mã Gray,BCD,là số xung 500 hay 1000,1500xung/vịng quay ** ứng dụng : Cĩ rất nhiều ứng dụng: định vị sản phẩm trên dây chuyền, định vị vị trí cho xe tự động ( đồ án), … **Encoder của omron: Loại thiết bị mã hố theo số gia kiểu mới + Phạm vi điện áp làm việc rộng từ 5_24 V một chiều(dạng encoder hở) + Độ phân giải 2000 xung/1vịng quay. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang46 + Pha Z cĩ thể được điều chỉnh dễ dàng bằng việc sử dụng chức năng chỉ thị ban đầu. + Cho phép phụ tải lớn 3 kg(29.4 N) theo hướng xuyên tâm và 2 kg(19.4 N) theo hướng đè lên. +cĩ lắp bảo vệ đảm bảo độ tin cậy khi ngắn mạch tải và đảo chiều. IV. CÁC LOẠI CẢM BIẾN QUANG TRONG CƠNG NGHIỆP: Với mơi trường làm việc trong hĩa chất, nhiệt độ cao,… các linh kiện cảm biến quang phải đảm bảo đạt các yếu cầu sau: - Cĩ độ bền cơ khí cao, giảm được chấn động, vận tốc quét cao, chống run cơ học, … - Cĩ độ nhạy cảm cao, giảm tối thiểu được ảnh hưởng của mơi trường làm việc,… -Thích hợp với nhu cầu và đáp ứng được nhu cầu sử dụng. Các hãng sản xuất thiết bị tự động đã đưa ra thị trường các loại cảm biến đạt được các yêu cầu nĩi trên. Đề tài ứng dụng cảm biến quang (Photo Electric Sensors) nên chỉ tập trung tìm hiểu về loại cảm biến này. * Đặc điểm của loại phản hồi a. Nguyên tắc hoạt động: Mỗi vật chất đều cĩ tính chất hấp thụ (vật đen) hay phản xạ (gương) năng lượng từ ngồi tác động vào. Tùy theo mức độ phản xạ của vật thể khi nhận một chùm tia tới chiếu đến mà chùm tia phản xạ cĩ thể là mạnh hay yếu. Cảm biến quang dựa theo nguyên tắc phản hồi chính là dựa trên nguyên tắc phản xạ của chùm tia phản xạ. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang47 b. Các thơng số tiêu chuẩn: Hình dạng: hình trụ hay khối chữ nhật. Tầm cảm nhận : 1,570mm. Đầu vào : 2 đầu dây, 12VDC hay 24VDC. Đầu ra : 1 đầu dây tín hiệu. Tần số chuyển : 1,5200Hz. Theo tài liệu của hãng “PEPPERL+FUCHS” về cường độ phản xạ tia hồng ngoại trên các gam màu và vật chất ta cĩ bảng sau: Hình 06: Sơ đồ nguyên lý hoạt động của bộ thu phát loại phản hồi THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang48 Vật chất Phản xạ Từ nguyên bản Trắng tiêu chuẩn 90% Testcard standard white Xám tiêu chuẩn 18% Testcard standard grey Giấy trắng 80% White paper Chữ in trên báo 55% News print Gỗ thơng sạch 75% Clean pine wood Nút bần 35% Cork Tấm bảng gỗ sạch 20% Wooden pallets clean Bọt bia 70% Beer foam Chai nhựa trong 40% Clear plastic bottes Chai nhựa nâu trong 60% Transparent brown plastic bottles Nhựa trắng đục 87% Opaque white plastic Nhựa đen 14% Black plastic Đen tuyền 04% Black neoprene Gáy xoắn đen 02% Black foam carpet backing Lốp xe hơi 1.5% Automobile tyres Nhơm nguyên chất 140% Aluminium, untreated Thép bĩng láng 400% Polished stainless steel V. GIỚI THIỆU LCD Để cĩ được hiển thị tiết kiệm năng lượng và linh hoạt hơn, người ta sử dụng bộ hiển thị LCD. Cĩ nhiều loại LCD, trong số đĩ thơng dụng là hiển thị 162 và 20 2 ( cĩ nghĩa là 2 hàng với 16 ký tự trên một hàng và 2 hàng với 20 ký tự trên một hàng ). Người ta đã thiết lập chuẩn để cho phép ta cĩ thể giao tiếp với các hãng LCD bất chấp hãng sản xuất với điều kiện là các LCD cĩ sử dụng cùng IC điều khiển HD44780. 2. Hình dáng và kích thước của LCD: THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang49 Các LCD được chế tạo từ các hãng như Densitrn, Epson, Hewlett Packard, Optrex, Sharp,… Với các cấu hình thơng dụng là 16, 20, 24, 32, hay 40 ký tự trên một hàng với màn hình hiển thị 1,2 hay 4 hàng. Thí dụ 202, 404 …. Cĩ loại LCD hiển thị theo ký tự hay đồ hoạ, các mạch lái trong các module LCD là các chip điều khiển, thí dụ Hitachi HD44780. 3. Một vài LCD thơng dụng : Hình 3.16 3. Chiếu sáng trong bộ hiển thị LCD: Người ta sử dụng các kiểu sau : + Backlit ( back lighting ), sử dụng neon chiếu sáng sau bộ hiển thị thay vì dùng ánh sáng phản xạ. + CfL( Cold Cathode Flourescent Lamp = Đèn huỳng quang cathod lạnh). Một loại đèn huỳnh quang đặc biệt để chiếu sáng phía trong các hiển thị LCD hiện đại, đặc biệt trong các mảng đồ hoại lớn như dùng trong các laptop. Chúng cho chiếu sáng rất tốt với dịng điện thấp. Được cấp điện bởi nguồn AC cao áp và cao tần (200-1000V ở tần số 25-75kHz), các yêu cầu về điện của chúng nghiêm ngặt và phải chính xác khớp với inverter thích hợp do nhà sản xuất đề nghị. Thí dụ mức do backlit CFL của Stanley 20 character2 line : 230V, 2,5mA, 65KHz 4. Sơ đồ chân và chức năng : Sơ đồ chân : THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang50 Hình 3.17 : Sơ đồ chân Mơ tả các chân : Thứ tự chân Kí hiệu Mức logic Vào / Ra Chức năng 1 Vss - - GND 2 Vcc - - 5V 3 Vee - - Điều chỉnh độ sáng 4 RS 0/1 Vào 0 = Tín hiệu chỉ dẫn 1=Dữ liệu vào 5 R / W 0/1 Vào 0 = Ghi vào LCD 1 = Đọc từ LCD 6 E 1,1 --- >0 Vào Tín hiệu cho phép 7 DB0 0/1 Vào /Ra Đường dữ liệu 0 8 DB1 0/1 Vào / Ra Đường dữ liệu1 9 DB2 0/1 Vào / Ra Đường dữ liệu 2 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang51 10 DB3 0/1 Vào / Ra Đường dữ liệu 3 11 DB4 0/1 Vào / Ra Đường dữ liệu 4 12 DB5 0/1 Vào / Ra Đường dữ liệu 5 13 DB6 0/1 Vào / Ra Đường dữ liệu 6 14 DB7 0/1 Vào / Ra Đường dữ liệu 7 Mặc dù theo sổ tay kỹ thuật LCD thì cấp nguồn cho nĩ là 5VDC ( chỉ khoảng vài mA ) nhưng cung cấp cho nĩ 6VDC hay 4,5 VDC thì nĩ cũng hoạt động tốt và ngay cả với 3VDC cũng đủ cho một số module. Kết quả là các module LCD tiêu thụ năng lượng ít. Chân 3 là chân điều khiển Vee dùng để thay đổi độ tương phản của màn hình hiển thị. Lý tưởng thì chân này nên nối với nguồn điện áp thay đổi được, người ta thực hiện bằng cách gắn mạch chia áp dùng biến trở cĩ đầu ra thay đổi đưa và chân này, tuy nhiên nên chú ý là một số module cần nguồn điện DC_7 VDC. Đơn giản nhất là người ta nối chân này với nguồn 0V (xuống đất ). Chân 4 là đường RS (register select = chọn thanh ghi ) đây là một trong 3 ngõ vào điều khiển lệnh. Khi chân này để mức thấp thì các dữ liệu được truyền đến LCD được xử lý như các mệnh lệnh và các dữ liệu độc ra chỉ trạng thái của nĩ. Bằng cách đưa đường RS này lên mức cao thì dữ liệu ký tự cĩ thể xuất/ nhập trên module này. Chân 5 là đường R/W (read/write). Chân này được kéo xuống mức thấp để ghi các lệnh hay dữ liệu ký tự vào module hoặc được kéo lên mức cao để đọc dữ liệu ký tự hay thơng tin trạng thái từ các thanh ghi của nĩ. Chân 6 là đường E (enable) ngõ vào này dùng để khởi động việc chuyển các lệnh hay dữ liệu Khi ghi ra màn hình hiển thị LCD, dữ liệu chỉ được chuyển khi cĩ THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang52 tín hiệu xuống ở cạnh E này. Tuy nhiên khi độc ra từ LCD thì dữ liệu khã dụng sau khi cĩ chuyển tiếp từ thấp lên cao và duy trì dữ liệu khã dụng cho đến khi dữ liệu xuống thấp một lần nữa. Các chân 7 đến 14 là 8 đường bus dữ liệu (DO đến D7). Dữ liệu cĩ thể được chuyển đến và lấy ra khỏi bộ hiển thị LCD theo dạng một byte 8 bit hay dạng 2 nữa byte 4 bit (nibble). Trong trường hợp sau cĩ 4 đường dữ liệu trên được sử dụng ( 4 bit cao: D4 đến D7. Chế độ 4 bít này thuận tiện khi xử lý, cần cĩ ít đường xuất/nhập hơn. Tĩm tắt tập lệnh điều khiển LCD: ommand (Lệnh) RS RW NHỊ PHÂN HEX D7 D6 D5 D4 D3 D2 D1 D0 NOP (No operation = khơng làm gì cả) 0 0 0 0 0 0 0 0 0 0 00 Clear display (xố hiển thị ) 0 0 0 0 0 0 0 0 0 1 01 Display&Cursor home (hiển thị và đặt cursor ở vị trí gĩc trái phía trên ). 0 0 0 0 0 0 0 0 1 X 02 hoặc 03 Character Entry mode (chế độ nhập ký tự ). 0 0 0 0 0 0 0 1 I/D S 04 đến 07 Display ON/Off& Cursor (hiển thị tắt mở và cursor ). 0 0 0 0 0 0 1 D U B 08 đến 0F THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang53 Display / Cursor Shift(dịch hiển thị / cursor ). 0 0 0 0 0 1 D/C R/L X X 10 đến 1F Funtion set( đặt chúc năng ). 0 0 0 0 1 8/4 2/1 10/7 X X 20 đến 3F Set CGRAM address ( đặt địa chỉ CGRAM ). 0 0 0 1 A A A A A A 40 đến 7F Set DDRAM address ( đặt địa chỉ DDRAM ). 0 0 1 A A A A A A A 80 đến FF Busy Flag & Addr(cờ bận và bộ đếm địa chỉ ). 0 1 BF Bộ đếm địa chỉ Read Data ( đọc dữ liệu từ CGRAM hoặc DDRAM ). 1 0 Dữ liệu đọc Write Data ( ghi dữ liệu vào CGRAM hoặc DDRAM ) 1 1 Dữ liệu ghi Chú thích : Tên bit Thiết lập I/D 1 = increment 0= decrement S 1 = display shift on 0 = display shift off D 1= display on 0 = display off U 1= cursor underline on 0 = underline off THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang54 B 1 = cursor blink on 0 = cursor blink off D/C 1= display shift 0 = cursor move R/L 1 = right shift 0 = left shift 8/4 1 = 8 bit interface 0 = 4 bit interface 2/1 1= chế độ 2 hàng 0 = chế độ 1 hàng 10/7 1 = 5* 10 dot format 0 = 5*7 dot format CGRAM = character gernerator RAM DDRAM = display data RAM X : don’t care Bảng ký tự chuẩn LCD : Hoạt động : LCD HD 44780 cần 3 đường điều khiển cũng như 4 hay 8 ngõ vào ra cho dữ liệu. Nếu sử dụng giao tiếp 4 bit thì cần 7 đường ( 3 đường điều khiển và 4 đường giao tiếp ), nếu sử dụng giao tiếp 8 bit thì cần 11 đường ( 3 đường điều khiển và 8 đường giao tiếp ). THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang55 Ba đường điều khiển là :  EN : Để gởi data đến LCD thì trước hết phải đưa bước này lên mức cao.Sau đĩ đưa 2 bit điều khiển cịn lại là RS và RW lên mức cao rồi nhận dữ liệu từ data bus. Sau đĩ lại đưa EN về lại mức thấp. Sự chuyển trạng thái từ 0 sang 1 để yêu cầu LCD xem data trên data bus giống như một lệnh yêu cầu .  RS : Khi RS ở mức thấp thì data xem như một lệnh yêu cầu hay một chỉ dẫn đặc biệt ( chẳng hạn như clear display hay cursor position …). Khi RS ở mức cao thì data trên data bus chính là data được hiển thị trên màn hình.  RW : Là đường điều khiển đọc hay ghi data. Khi RW = 0 thì data đang được đọc từ data bus. Khi RS ở mức 1 thì chương trình đang xềp hàng hay đang đọc. Vì vậy chỉ cĩ một trường hợp duy nhất RW = 1 là khi lệnh chỉ dẫn là đọc một lệnh ( cho biết trạng thái của LCD ), cịn lại tất các trường hợp khác thì RS luơn ở mức thấp Cĩ thể hiển thị kí tự tên LCD bằng 1 dịng , 2 dịng hay 4 dịng. Trong phạm vi đồ án này sử dụng LCD hiển thị kí tự trên 2 dịng và mỗi dịng 16 kí tự. VI.GIỚI THIỆU VỀ ĐỘNG CƠ ĐIỆN MỘT CHIỀU. Trong thời đại ngày nay, hầu hết các dây chuyền sản xuất đang dần dần được tự động hĩa bằng cách áp dụng các kỹ thuật tiên tiến của khoa học kỹ thuật. Tuy thế, động cơ điện một chiều vẫn được coi là một loại máy quan trọng. Nĩ cĩ đặc tính điều chỉnh tốc độ rất tốt, vì vậy máy được dùng nhiều trong các nghành cơng nghiệp cĩ yêu cầu cao về điều chỉnh tốc độ như cán thép, hầm mỏ, giao thơng vận tải… 1.Cấu tạo : Động cơ điện một chiều gồm hai phần : Phần tĩnh (stator) và phần quay (rotor). Phần tĩnh là phần đứng yên của máy. Nĩ thường bao gồm các bộ phận sau : THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang56 – Cực từ chính : là bộ phận sinh ra từ trường chính trong vỏ máy, gồm cĩ lõi sắt cực từ và dây quấn kích từ lồng ngồi lõi sắt cực từ. Lõi sắt cực từ làm bằng những lá thép kỹ thuật điện hay thép cacbon dày 0,5  1 mm ép chặt lại với nhau. – Cực từ phụ : được đặt giữa các cực từ chính và dùng để cải thiện đổi chiều giúp cho máy điện làm việc khơng cĩ tia lửa xảy ra giữa chổi điện và vành đổi chiều. Lõi thép cực từ cực từ phụ thường làm bằng thép khối và trên thân cực từ phụ cĩ đặt dây quấn. – Gơng từ : dùng để làm mạch từ nối liền các cực từ, đồng thời làm vỏ máy. – Các bộ phận khác như Nắp máy để bảo vệ, Cơ cấu chổi than. Phần quay gồm cĩ những bộ phận sau : – Lõi sắt phần ứng : dùng để dẫn từ, thường dùng những tấm thép kỹ thuật điện dày 0,5 mm được phủ lớp cách điện và ghép chặt lại với nhau. – Dây quấn phần ứng : là phần sinh ra sức điện động và cĩ dịng điện chạy qua. Dây quấn được cách điện cẩn thận với rãnh của lõi thép. – Các bộ phận khác như cánh quạt dùng để quạt giĩ làm nguội máy, trục máy để đặt lõi sắt phần ứng, cổ gĩp, cánh quạt và ổ bi. 2.Nguyên lý làm việc của động cơ điện một chiều : Động cơ điện một chiều là một thiết bị biến đổi năng lượng của dịng một chiều thành cơ năng. Trong quá trình biến đổi đĩ, một phần năng lượng của dịng xoay chiều bị tiêu tán do các tổn thất trong mạch phần ứng và trong mạch kích thích. Phần cịn lại là năng lượng được biến đổi thành cơ năng trên trục động cơ. Khi cho dịng điện một chiều chạy vào dây quấn kích thích và dây quấn phần ứng sẽ sinh ra từ trường ở phần tĩnh. Từ trường này tác dụng tương hỗ lên dịng điện trong dây quấn phần ứng tạo ra momen tác dụng lên rotor và làm rotor quay. Nhờ cĩ vành đổi chiều nên dịng điện một chiều được chỉnh lưu thành dịng xoay chiều đưa vào dây quấn phần ứng. Điều này làm lực từ tác dụng lên thanh dẫn dây quấn phần ứng khơng bị đổi chiều và làm động cơ quay theo một hướng. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang57 Cơng suất ứng với momen điện từ đưa ra đối với động cơ gọi là cơng suất điện từ và bằng : Pđt = M = EưIư Trong đĩ : M : momen điện từ. 60 2 n   : tốc độ gĩc phần ứng. Iư : dịng điện phần ứng. Eư : suất điện động phần ứng. 3.Đặc điểm: -Nguồn điện áp cung cấp cho động cơ DC từ 5  24V (tuỳ theo loại động cơ) -Tốc độ thay đổi vơ cấp (v/p). -Cĩkhả năng mang tải ngay khi cấp nguồn điện. * Phương pháp điều khiển động cơ. - Dùng điện áp DC 5 24V. - Cấp nguồn đúng chiều theo yêu cầu. - Thay đổi chiều quay bằng cách hốn vị các cực . - + + - + - - + Hình 3.5 : Phương pháp đảo chiều quay động cơ Để làm được cơng việc trên , ở mạch điều khiển ta trang bị các cầu dao đảo hoặc rơle điện từ . Dựa theo nguyên lý trên khi ứng dụng lắp ráp ROBOT thì những chuyển động đảo chiều đĩ sẽ đảo chiều được hành trình chuyển động của các khâu. * Nguyên lý hãm ngược + Đối với động cơ một chiều thì cơng việc hãm ngược đơn giản hơn, giả sử động cơ chạy theo chiều nào đĩ, cĩ thể cùng chiều hoặc ngược chiều kim đồng hồ. + Khi ngưng cấp nguồn đồng thời đưa nguồn điện khác ngược chiều với nguồn đang hoạt động lập tức động cơ sẽ bị hãm cưỡng bức, lúc ấy lực từ sẽ cĩ M M THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang58 chiều ngược lại và ta điều chỉnh thời gian sao cho động cơ dừng hẳn thì thơi cấp nguồn. CHƯƠNG 4: THIẾT KẾ VÀ THI CƠNG MƠ HÌNH. Mơ hình thiết kế của xe ROBOT gắp vật. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang59 Mơ hình thực của xe ROBOT gắp vật. I.Giới thiệu phần cơ khí: + Thân ROBOT được làm từ các thanh nhơm, liên kết với nhau qua một tấm đế bằng Meca dày và được kết chặt bởi các ốc vít. Kích thước của thân xe là 2.2x3.2 cm. + Trên xe được trang 4 động cơ DC, mỗi động cơ đều cĩ lắp kèm theo hộp số nhằm tăng moment và giảm tốc độ quay. + Tất cả 4 động cơ đều được cấp nguồn 12V + Hai động cơ DC chính được vặn chặt với khung nhơm và liên kết chặt với hai bánh lái. - Phía trước đầu xe là cánh tay làm bằng các thanh nhơm liên kết lại dùng để gắp vật, cánh được sử dụng 2 động cơ; một động cơ là dùng gắp và một động cơ là dùng để nâng tay lên và hạ tay xuống khi gắp vật. THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang60 - Tất cả các các động cơ này đều được điều khiễn bởi mạch cơng suất ( mạch cầu sử dụng MOSFET), mạch này cĩ thể thay đổi chiều quay của động cơ một cách dễ dàng thơng qua mạch Vi Xử Lý. + Phía trước khung xe đặt một bánh nhỏ cĩ thể quay tự do. + Tỷ lệ truyền động giữa motor và bánh xe là: 3:1. + Khoảng cách bánh trái và phải là 24cm. + Đường kính bánh:10cm + Chu vi bánh: 31cm - Xe chạy thẳng: hai bánh lái cùng quay . - Xe quay trái: bánh lái phải quay tới đồng thời bánh lái trái quay lui với số vịng tương ứng. - Xe quay phải: bánh lái trái quay tới, bánh lái phải quay lùi với số vịng tương ứng - Xe dừng: cả hai bánh lái cùng dừng. - Phía sau đuơi cĩ gắn thêm 2 encoder dùng để đếm số xung khi cần xác định chính sát quảng đường bánh xe dịch chuyển. - Cảm biến quang được bố trí như mơ hình thực dùng để đọc các tín hiệu phản hồi khi cĩ vật cản. + Cảm biến phía trước cĩ tác dụng phát hiện khi cĩ chướng ngại vật phía trước đồng phát hiện khi gặp báu vật. + Hai cảm biến bên hơng là trái và phải dùng để quan sát chướng ngại vật hai bên trước khi xe quay một gĩc 900 vì cĩ vật cản phía trước. *Quan hệ giữa động cơ bánh xe và động cơ trên cánh tay gắp với Vi Xử Lý: + Bánh trái quay tới: P0.0 = 0 P0.1 = 1 + Bánh trái quay lùi: P0.0 = 1 P0.1 = 0 + Bánh phải quay tới: P0.2 = 1 P0.3 = 0 + Bánh phải quay lùi: P0.2 = 0 P0.3 = 1 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang61 + Cánh tay nâng lên: P0.4 = 0 P0.5 = 1 + Cánh tay hạ xuống: P0.4 = 1 P0.5 = 0 + Cánh tay đĩng lại: P0.6 = 0 P0.7 = 1 + Cánh tay mở ra: P0.6 =1 P0.7 = 0  Từ mơ hình xe và mạch. ta cĩ thể cho xe chay tới, lùi, quay trái, phải. Muốn cho xe tới hay lùi bao nhiêu ,ta chỉ cần tính số xung . + N =  C S số vịng bánh xe :S = chiều dài đoạn đường,C = chu vi bánh xe. + n = N* 3 10 = số vịng quay của motor. + Số xung = n * 360 . * Ví Dụ: Xe quay phải 90 độ: lúc này bánh trái quay, bánh phải dừng .  Bánh trái sẽ quay đoạn đường bằng ¼ vịng trịn cĩ bán kính là khoảng cách giửa 2 bánh xe. S = 2*24*3.14*1/4 38cm - Số vịng quay của bánh trái : 38/31 = 1.2 - Số vịng quay của motor: 1.2*10/3 - Số xung = 360*1.2*10/3 =1440 xung. II.Giới thiệu sơ đồ nguyên lý của mạch điện: 1.Mạch xử lý chính: THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang62 D7 control 7 J9 UP_SENSOR 1 2 3 GND C1 33p + C5 100uF DOWN control 8 C R17 10K*8 1 2 3 4 5 6 7 8 9 Y1 12Mhz control 3 SENSOR 4 SENSOR 6 START/STOP RW_16X2 RST GND C2 33p D3 control 2 control 7 control 8 JP2 HEADER 8 1 2 3 4 5 6 7 8 D0 control 3 SENSOR 6 OK MENU GND control 6 R19 8.2K J7 ENCODER 2 1 2 3 SW HT 1 J10 LEFT_SENSOR 1 2 3 GND OK VEE VCC control 6 VCC J5 DOWN_SENSOR 1 2 3 RW_16X2 START/STOP E_16X2 C6 104 SW HT 1 GND control 1 D1 VEE SW4 UP 1 2 GND J6 RIGHT_SENSOR 1 2 3 D7 control 4 J12 FONT_SENSOR 1 2 3 C9 104 control 4 MENU SENSOR 3 VCC +C3 10uF VCC SENSOR 3 UP GND D1 D5 SENSOR 4 control 3 control 4 SW HT 2 SENSOR 5 D5 GND GND RST D6 D4 RS_16X2 U12 LM7805 / TO220 1 3 2 IN OUT G N D D2 VCC control 5 D0 C11 104 VCC + C4 4700uF SW1 START/STOP 1 2 - + D1 1A 2 1 3 4 control 5 control 8 D2 control 5 GNDGND C7 104 U6 LCD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Gnd Vcc Vee RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 SENSOR 5 E_16X2 SW HT 2 GND control 1 J11 ENCODER1 1 2 3 SENSOR 1 R18 10K 1 3 2 UP VCC SENSOR 1 SW5 DOWN 1 2 VCC D3 GND control 7 D6 control 2 SW2 MENU 1 2 VCC control 6 J8 SENSOR 1 1 2 3 C10 104 U1 AT89C51 31 19 18 9 12 13 14 15 1 2 3 4 5 6 7 8 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 17 16 29 30 11 10 EA/VP X1 X2 RESET INT0 INT1 T0 T1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/P TXD RXD SENSOR 2 GND SW3 OK 1 2 DOWN VCC GND D4 VCC SENSOR 2 control 2 JP1 12VAC 1 2 VCC RS_16X2 control 1 C8 104 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang63 2.Khối mạch cơng suất điều khiễn 4 động cơ: 12V K4 R3 220 R16 1k VCC K2 K3 GND U2 Q P621 1 2 3 4 Q5540 1 2 3 Q8 540 1 2 3 A -+ MG1 DC TRAI 1 2 K5 Q16 540 1 2 3 R5 220 Q2 9540 1 2 3 12V VCC 12V GND DONG CO PHAI GND Q6 540 1 2 3 12V control 4 R9 220 U7 Q P621 1 2 3 4 R13 220 R7 220 GND 12V A -+ MG4 DC GAP 1 2 Q13 540 1 2 3 control 2 U10 Q P621 1 23 4 DONG CO KEO k7 Q1 9540 1 2 3 GND 12V 12V R12 1k Q7 5401 2 3 VCC R11 220 R10 1k Q10 9540 1 2 3 R15 220 control 8 GNDcontrol 1 Q3 9540 1 2 3 U9 Q P621 1 2 3 4 control 3 K4 12V Q11 9540 1 2 3 U8 Q P621 1 23 4 DONG CO GAP R2 1k Q4 9540 1 2 3 A -+ MG3 DC NANG 1 2 k5 12V DONG CO TRAI VCC12V K2K1 R14 1k R8 1k Q12 9540 1 2 3 Q15 5401 2 3 control 6 U3 Q P621 1 23 4 K8 GND VCC 12V A -+ MG2 DC PHAI 1 2 GND R4 1k R1 220 Q14 540 1 2 3 U4 Q P621 1 2 3 4 K6 R6 1k K3 U5 Q P621 1 23 4 Q9 9540 1 2 3 12V VCC K7K6 K1 VCC VCC control 5 control 7 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang64 3.Khối mạch cách ly dùng cho cảm biến quang: OUT 2 OUT 4 R? 1k R? 10k J? HEADER 3 1 2 3 12V 5V U? Q P621 1 2 3 4 5V OUT 1 A 0 1Friday , June 09, 2006 Title Size Document Number Rev Date: Sheet of OUT 1 R? 1k J? HEADER 6 1 2 3 4 5 6 12V 12V R? 10k J? 12V 1 2 12V OUT 2 J? HEADER 3 1 2 3 5V12V J? HEADER 3 1 2 3 5V OUT 3 J? HEADER 3 1 2 3 R? 1k R? 10k U? Q P621 1 2 3 4 R? 1k U? Q P621 1 2 3 4 5V C? 104 OUT 4 R? 10k U? Q P621 1 2 3 4 OUT 3 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang65 Chương 5: Thuật tốn điều khiễn và tĩm lược chương trình Bắt đầu Xố Ram Thiết lập Timer Thiết lập LCD Hiển thi chuổi “RoBot dị đường gắp vật” Delay 1S Gọi chương trình nhập đích tới Cho mặc định hướng ban đầu RoBot là “N” Chờ phím Start Gọi chương trình dị đường 1 N Nhập đích tới địa chỉ 1x1 Gọi chương trình tìm đường Nhập đích tới 0,0 Ret 1 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang66 2 Cảm biến trái=1 1 Cảm biến trước=1 Ghi lên LCD chữ F Ghi lên LCD chữ L Cảm biến phải=1 Ghi lên LCD chữ R Cảm biến trước=1 cảm biến trái=1 3 4 N Y N Y Y y N Y Y Y N N THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang67 Cảm biến phải=1 4 2 Robot chạy lùi 1 ơ 1 Y 3 1 Cảm biến trái=1 Cảm biến phải=1 Cảm biến trước=1 Cảm biến trước=1 Robot xoay phải Robot xoay trái Robot chạy tới 1 1 5 Y N Y N N N Robot chạy tới Đích tới x =giá trị định vị x 5 6 7 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang68 7 Hướng W Hướng E Gọi chương trình tính tốn cho y Gọi chương trình tính tốn cho x Đích tới y = giá trị định vị y Bit _finish_x = 1 6 Bit _finish_y = 1 Ret Chương trình tính tốn cho x,y 8 9 Y N Y N THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang69 Tham chiếu y = S Robot quay phải Tham chiếu x= S Robot quay trái Ret Robot quay trái Robot quay phải Ret 8 9 Y N Y N THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang70 II.CHƯƠNG TRÌNH HOẠT ĐỘNG DATABUS EQU P1 count_lcd equ 30h bit_motor1 bit p0.0 bit_motor2 bit p0.1 bit_motor3 bit p0.3 bit_motor4 bit p0.2 bit_motor5 bit p0.4 bit_motor6 bit p0.5 bit_motor7 bit p0.6 bit_motor8 bit p0.7 EN BIT P2.1 RW BIT P2.0 RS BIT P2.2 save_dh equ 31h save_dl equ 32h count_encoder equ 33h encoder_1 equ 34h encoder_2 equ 35h encoder_3 equ 36h encoder_4 equ 37h save_encoder equ 38h save_encoder_1 equ 39h save_encoder_2 equ 3Ah save_encoder_3 equ 3Bh save_encoder_4 equ 3Ch temp_EWNS equ 3Dh Process_run equ 3Eh matrix_x equ 3Fh matrix_y equ 40h local_x equ 41h local_y equ 42h prefer_x equ 43h prefer_y equ 44h THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang71 tagret_x equ 45h tagret_y equ 46h compass equ 47h font_sensor bit p3.7 left_sensor bit p3.6 right_sensor bit p3.4 down_sensor bit p3.1 up_sensor bit p3.3 key_menu bit p2.4 key_up bit p2.7 key_down bit p2.6 key_ok bit p2.5 key_start bit p2.3 mode_set equ 48h temp_a equ 49h bit_finish_x bit 11 bit_finish_y bit 12 sensor_line bit 13 bit_run bit 14 bit_keypress bit 15 ORG 0000H ljmp main org 0003h ; ngat ngoai 0 tac dong encoder ljmp up_encoder org 0013h org 001Bh org 0030h main: lcall reset_ram setb EX0 ; cho phep ngat ngoai 0 setb IT0 ; cho phep ngat canh xuong Mov Tmod,#01h Lcall INIT_LCD mov count_lcd,#00h THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang72 mov dptr,#sample_text lcall write_string_lcd lcall delay1s Lcall CLEAR_LCD setb bit_keypress point_display_encoder: lcall sub_set_tagret mov save_encoder,#0FFh setb EA lcall display_encoder mov compass,#'N' jb key_start,$ lcall delay_key ;lcall process_intelligent_y_finish_x lcall Thinking_run_find_object rot_display_information: lcall drag_object mov tagret_x,#00 mov tagret_y,#00 lcall Thinking_run_find_object lcall drag_object ljmp point_display_encoder Thinking_run_find_object: lcall display_information jb font_sensor,check_left_sensor mov a,#'F' lcall write_text check_left_sensor: jb left_sensor,check_right_sensor mov a,#'L' lcall write_text check_right_sensor: jb right_sensor,process_sensor_font mov a,#'R' lcall write_text process_sensor_font: jb font_sensor,process_left_sensor jb left_sensor,perfer_process_font jb right_sensor,perfer_process_font lcall robot_backward ljmp Thinking_run_find_object perfer_process_font: jnb left_sensor,process_left_sensor jnb right_sensor,process_left_sensor THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang73 mov a,#'1' lcall write_text lcall delay1s lcall robot_rotate_left ;lcall process_intelligent_y_finish_x ljmp Thinking_run_find_object process_left_sensor: jb left_sensor,process_right_sensor process_left_sensor_1: jb font_sensor,process_left_sensor_2 lcall robot_rotate_right ljmp Thinking_run_find_object process_left_sensor_2: mov a,#'2' lcall write_text lcall delay1s lcall robot_forward ljmp Thinking_run_find_object process_right_sensor: jb right_sensor,not_signal_sensor process_right_sensor_1: jb font_sensor,process_right_sensor_2 lcall robot_rotate_left ljmp Thinking_run_find_object process_right_sensor_2: mov a,#'3' lcall write_text lcall delay1s lcall robot_forward ljmp Thinking_run_find_object not_signal_sensor: mov a,#'4' lcall write_text lcall robot_forward ;lcall delay1s ;lcall delay1s ;lcall delay1s ;lcall robot_rotate_left mov a,local_x cjne a,tagret_x,not_finish_tagret_x setb bit_finish_x mov a,local_y THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang74 cjne a,tagret_y,not_finish_tagret_y setb bit_finish_y lcall display_information ret not_finish_tagret_y: lcall process_intelligent_y_finish_x ljmp Thinking_run_find_object not_finish_tagret_x: clr bit_finish_x lcall process_intelligent_y_finish_x ljmp Thinking_run_find_object process_intelligent_y_finish_x: mov a,compass process_x: cjne a,#'W',process_intelligent_y_point_E_finish_x jnb bit_finish_x,temp_exit_process_intelligent_y_finish_x lcall calculate_prefer_y mov a,prefer_y cjne a,#'S',process_intelligent_y_point_WN lcall robot_rotate_right ljmp exit_process_intelligent_y_finish_x process_intelligent_y_point_WN: lcall robot_rotate_left ljmp exit_process_intelligent_y_finish_x process_intelligent_y_point_E_finish_x: cjne a,#'E',againts_wrong_x jnb bit_finish_x,temp_exit_process_intelligent_y_finish_x lcall calculate_prefer_y mov a,prefer_y cjne a,#'S',process_intelligent_y_point_WN_point_E lcall robot_rotate_left ljmp exit_process_intelligent_y_finish_x process_intelligent_y_point_WN_point_E: lcall robot_rotate_right ljmp exit_process_intelligent_y_finish_x againts_wrong_x: mov a,compass cjne a,#'W',againts_wrong_x_2 lcall calculate_prefer_x mov a,prefer_x THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang75 cjne a,#'E',temp_exit_process_intelligent_y_finish_x lcall robot_rotate_right lcall robot_rotate_right ljmp temp_exit_process_intelligent_y_finish_x againts_wrong_x_2: cjne a,#'E',process_Y lcall calculate_prefer_x mov a,prefer_x cjne a,#'W',exit_process_intelligent_y_finish_x lcall robot_rotate_left lcall robot_rotate_left ljmp temp_exit_process_intelligent_y_finish_x temp_exit_process_intelligent_y_finish_x: ret process_Y: cjne a,#'N',process_intelligent_y jb bit_finish_x,exit_process_intelligent_y_finish_x lcall calculate_prefer_x mov a,prefer_x cjne a,#'E',process_intelligent_y_1 lcall robot_rotate_right ljmp exit_process_intelligent_y_finish_x process_intelligent_y_1: lcall robot_rotate_left ljmp exit_process_intelligent_y_finish_x process_intelligent_y: cjne a,#'S',againts_wrong_y jb bit_finish_x,exit_process_intelligent_y_finish_x lcall calculate_prefer_x mov a,prefer_x cjne a,#'E',process_intelligent_y_2 lcall robot_rotate_left ljmp exit_process_intelligent_y_finish_x process_intelligent_y_2: lcall robot_rotate_right ljmp exit_process_intelligent_y_finish_x againts_wrong_y: mov a,compass THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang76 cjne a,#'S',againts_wrong_y_2 lcall calculate_prefer_y mov a,prefer_y cjne a,#'N',exit_process_intelligent_y_finish_x lcall robot_rotate_right lcall robot_rotate_right ljmp exit_process_intelligent_y_finish_x againts_wrong_y_2: cjne a,#'N',exit_process_intelligent_y_finish_x lcall calculate_prefer_y mov a,prefer_y cjne a,#'S',exit_process_intelligent_y_finish_x lcall robot_rotate_left lcall robot_rotate_left ljmp exit_process_intelligent_y_finish_x exit_process_intelligent_y_finish_x: ret display_information: lcall CLEAR_LCD mov dptr,#string_tagret_run lcall write_string_lcd mov count_lcd,#07 lcall command_pos_lcd mov a,#'X' lcall write_text mov a,#':' lcall write_text mov a,tagret_x mov b,#10 div ab orl a,#30h lcall write_text mov a,b orl a,#30h lcall write_text mov count_lcd,#12 lcall command_pos_lcd mov a,#'Y' lcall write_text mov a,#':' lcall write_text mov a,tagret_y THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang77 mov b,#10 div ab orl a,#30h lcall write_text mov a,b orl a,#30h lcall write_text mov count_lcd,#16 lcall command_pos_lcd mov a,#'X' lcall write_text mov a,#':' lcall write_text mov a,local_x mov b,#10 div ab orl a,#30h lcall write_text mov a,b orl a,#30h lcall write_text mov count_lcd,#21 lcall command_pos_lcd mov a,#'Y' lcall write_text mov a,#':' lcall write_text mov a,local_y mov b,#10 div ab orl a,#30h lcall write_text mov a,b orl a,#30h lcall write_text mov count_lcd,#26 lcall command_pos_lcd mov a,compass lcall write_text mov a,#' ' lcall write_text ret THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang78 drag_object: lcall motor_lift_down jb down_sensor,drag_object lcall stop_motor_lift lcall hand_open lcall delay1s lcall stop_hand lcall hand_close lcall delay1s lcall stop_hand lift_up_object: lcall motor_lift_up jb up_sensor,lift_up_object lcall stop_motor_lift ret motor_lift_up: clr bit_motor5 setb bit_motor6 ret motor_lift_down: setb bit_motor5 clr bit_motor6 ret stop_motor_lift: setb bit_motor5 setb bit_motor6 ret hand_close: clr bit_motor7 setb bit_motor8 ret hand_open: setb bit_motor7 clr bit_motor8 ret stop_hand: setb bit_motor7 setb bit_motor8 ret THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang79 ;******************************************************************* ***** ; Process function display and set tagret ;******************************************************************* ***** sub_set_tagret: mov a,mode_set cjne a,#02,process_and_display_tagret mov mode_set,#00h lcall clear_lcd ret process_and_display_tagret: lcall process_key_tagret lcall display_data_tagret ljmp sub_set_tagret display_data_tagret: jnb bit_keypress,exit_display_data_tagret clr bit_keypress lcall CLEAR_LCD mov dptr,#string_tagret lcall write_string_lcd mov count_lcd,#19 lcall command_pos_lcd mov a,#'X' lcall write_text mov a,#':' lcall write_text mov a,tagret_x mov b,#10 div ab orl a,#30h lcall write_text mov a,b orl a,#30h lcall write_text mov count_lcd,#25 lcall command_pos_lcd mov a,#'Y' lcall write_text mov a,#':' lcall write_text mov a,tagret_y mov b,#10 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang80 div ab orl a,#30h lcall write_text mov a,b orl a,#30h lcall write_text exit_display_data_tagret: ret process_key_tagret: check_key_up_set_tagret: jb key_up,check_key_down_set_tagret setb bit_keypress lcall delay_key mov a,mode_set cjne a,#00,mode_set_tagret_y inc tagret_x mov a,tagret_x cjne a,#100,exit_process_key_tagret mov tagret_x,#00h ljmp exit_process_key_tagret mode_set_tagret_y: cjne a,#01,exit_process_key_tagret inc tagret_y mov a,tagret_y cjne a,#100,exit_process_key_tagret mov tagret_y,#00h ljmp exit_process_key_tagret check_key_down_set_tagret: jb key_down,check_key_ok_set_tagret setb bit_keypress lcall delay_key mov a,mode_set cjne a,#00,mode_set_down_tagret_y dec tagret_x mov a,tagret_x cjne a,#0FFh,exit_process_key_tagret mov tagret_x,#99 ljmp exit_process_key_tagret mode_set_down_tagret_y: cjne a,#01,exit_process_key_tagret dec tagret_y mov a,tagret_y cjne a,#0FFh,exit_process_key_tagret mov tagret_y,#99 THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang81 ljmp exit_process_key_tagret check_key_ok_set_tagret: jb key_ok,exit_process_key_tagret setb bit_keypress lcall delay_key inc mode_set exit_process_key_tagret: ret ;******************************************************************* ******* ; process ;******************************************************************* ******* calculate_prefer_x: mov a,tagret_x clr c subb a,local_x jnc set_prefer_x mov prefer_x,#'E' ret set_prefer_x: mov prefer_x,#'W' ret calculate_prefer_y: mov a,tagret_y clr c subb a,local_y jnc set_prefer_y mov prefer_y,#'N' ret set_prefer_y: mov prefer_y,#'S' ret robot_rotate_right: setb EA setb bit_motor1 clr bit_motor2 clr bit_motor3 setb bit_motor4 ;setb bit_run ;jb bit_run,$ THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang82 clr EA lcall delay1s lcall delay1s lcall robot_stop lcall delay1s mov a,compass rotate_right_1: cjne a,#'W',rotate_right_2 mov compass,#'N' ljmp exit_robot_rotate_right rotate_right_2: cjne a,#'N',rotate_right_3 mov compass,#'E' ljmp exit_robot_rotate_right rotate_right_3: cjne a,#'E',rotate_right_4 mov compass,#'S' ljmp exit_robot_rotate_right rotate_right_4: cjne a,#'S',exit_robot_rotate_right mov compass,#'W' ljmp exit_robot_rotate_right exit_robot_rotate_right: ret robot_rotate_left: ;setb EA clr bit_motor1 setb bit_motor2 setb bit_motor3 clr bit_motor4 ;setb bit_run ;jb bit_run,$ lcall delay1s lcall delay1s ;clr EA lcall robot_stop lcall delay1s mov a,compass rotate_left_1: cjne a,#'W',rotate_left_2 mov compass,#'S' THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang83 ljmp exit_robot_rotate_left rotate_left_2: cjne a,#'S',rotate_left_3 mov compass,#'E' ljmp exit_robot_rotate_left rotate_left_3: cjne a,#'E',rotate_left_4 mov compass,#'N' ljmp exit_robot_rotate_left rotate_left_4: cjne a,#'N',exit_robot_rotate_left mov compass,#'W' ljmp exit_robot_rotate_left exit_robot_rotate_left: ret robot_forward: ; setb EA setb bit_motor1 clr bit_motor2 setb bit_motor3 clr bit_motor4 setb bit_run ; jb bit_run,$ ; clr EA lcall delay1s lcall robot_stop mov a,compass forward_1: cjne a,#'W',forward_2 inc local_x ljmp exit_robot_forward forward_2: cjne a,#'S',forward_3 dec local_y ljmp exit_robot_forward forward_3: cjne a,#'E',forward_4 dec local_x ljmp exit_robot_forward forward_4: cjne a,#'N',exit_robot_forward inc local_y ljmp exit_robot_forward exit_robot_forward: ret THIẾT KẾ VÀ THI CƠNG ROBOT TÌM BÁU VẬT Trang84 robot_backward: ; setb EA clr bit_motor1 setb bit_motor2 clr bit_motor3 setb bit_motor4 setb bit_run lcall delay1s ; jb bit_run,$ ; clr EA lcall robot_stop mov a,compass backward_1: cjne a,#'W',backward_2 inc local_x ljmp exit_robot_backward backward_2: cjne a,#'S',backward_3 inc local_y ljmp exit_robot_backward backward_3: cjne a,#'E',backward_4 dec local_x ljmp exit_robot_backward backward_4: cjne a,#'N',exit_robot_backward dec local_y ljmp exit_robot_backward exit_robot_backward: ret robot_stop: clr bit_motor1 clr bit_motor2 clr bit_motor3 clr bit_motor4 mov encoder_1,#00h mov encoder_2,#00h mov encoder_3,#00h mov encoder_4,#00h ret display_encode

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

  • pdfTRINH BAY.pdf
Tài liệu liên quan