Bài giảng Phần cứng của CPU

doc 40 trang vanle 2650
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phần cứng của CPU", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • docbai_giang_phan_cung_cua_cpu.doc

Nội dung text: Bài giảng Phần cứng của CPU

  1. BÀI GIẢNG Phần Cứng Của CPU
  2. MỤC LỤC 1. GIỚI THIỆU CHUNG 3 2. MÔ TẢ KĨ THUẬT 4 2.1 THIẾT KẾ MẠCH 4 2.2 MÔ TẢ PHẦN CỨNG CPU 13 2.3 MÔ TẢ THIẾT KẾ CÁC PHẦN KHÁC 15 2.4 THIẾT KẾ PHẦN MỀM 16 2.5 CÁC BƯỚC KIỂM TRA 17 3. KẾT QUẢ ĐẠT ĐƯỢC VÀ PHÂN TÍCH LỖI 18 4. KẾT LUẬN 22 5.MỞ RỘNG ĐỀ TÀI 22 6. TÀI LIỆU THAM KHẢO 23 7. PHỤ LỤC 23 7.1 DANH SÁCH THIẾT BỊ 23 7.2 MÃ NGUỒN 24 7.3 CÁC DATASHEET 40
  3. 1. GIỚI THIỆU CHUNG Vi xử lý (viết tắt là µP hay uP), đôi khi còn được gọi là bộ vi xử lý, là một linh kiện điện tử máy tính được chế tạo từ các tranzito thu nhỏ tích hợp lên trên một vi mạch tích hợp đơn. Khối xử lý trung tâm (CPU) là một bộ vi xử lý được nhiều người biết đến và được ví như bộ não của máy tính nhưng ngoài ra nhiều thành phần khác trong máy tính cũng có bộ vi xử lý riêng của nó, ví dụ trên cạc màn hình, ổ đĩa cứng cũng có các bộ bộ vi xử lý. Vi điều khiển có thể được coi là một máy tính được tích hợp trên một chíp, nó thường được sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển, thực chất, là một hệ thống bao gồm một vi xử lý có hiệu suất đủ dùng và giá thành thấp (khác với các bộ vi xử lý đa năng dùng trong máy tính) kết hợp với các khối ngoại vi như bộ nhớ, các module vào ra, ADC, DAC, timer, ngắt Ở máy tính thì các mô đun thường được xây dựng bởi các chíp và mạch ngoài. Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng. Nó xuất hiện khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v. Hầu hết các vi điều khiển ngày nay được xây dựng dựa trên kiến trúc Harvard, kiến trúc này định nghĩa bốn thành phần cần thiết của một hệ thống nhúng. Những thành phần này là lõi CPU, bộ nhớ chương trình (thông thường là ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu ( RAM), một hoặc vài bộ định thời và các cổng vào/ra để giao tiếp với các thiết bị ngoại vi và các môi trường bên ngoài - tất cả các khối này được thiết kế trong một vi mạch tích hợp. Vi điều khiển khác với các bộ vi xử lý đa năng ở chỗ là nó có thể hoạt động chỉ với vài vi mạch hỗ trợ bên ngoài. Đề tài thiết kế xe chạy theo đường vẽ sẵn được chúng em thực hiện dựa trên nền kiến thức về mạch điện tử, vi xử lý nói chung và vi điều khiển họ 8051 nói riêng được thầy giáo hướng dẫn trên lớp. Thực hiện đề tài này là tiền đề để chúng em nắm được những kiến thức cơ bản về vi điều khiển 8051, từ đó tạo cơ sở để tiếp tục nghiên cứu những họ vi điều khiển khác như AVR, PIC, ARM phục vụ trong quá trình học tập và làm việc sau này. Chúng em chân thành cảm ơn thầy Nguyễn Hồng Quang đã hướng dẫn chúng em hoàn thành bài tập này. Nhóm 2 – TĐH 4 – K50
  4. 2. MÔ TẢ KĨ THUẬT 2.1 THIẾT KẾ MẠCH Hai mạch chính sử dụng trong bài tập này là mạch SENSORS để dò đường và mạch VI XỬ LÝ VÀ ĐỘNG CƠ để thu tín hiệu, xử lý và đưa ra tín hiệu điều khiển hai động cơ để dẫn hướng. Ngoài ra, để nạp chương trình cho vi điều khiển, chúng em sử dụng mạch nạp ISP loại đơn giản tự làm theo sơ đồ trên mạng Internet. a) MẠCH SENSORS Đường đi của xe được vẽ bằng vạch đen nằm trên nền trắng. Để xe nhận ra được đường đi, chúng em sử dụng các cặp led thu phát hồng ngoại đặt gần nhau. Các led phát phát ra ánh sáng đỏ, các led thu có điện trở phụ thuộc vào có nhận được ánh sáng phản xạ từ đường đi hay không. Khi cặp thu phát ở vị trí nền trắng, ánh sáng từ led phát phát ra phản xạ trên nền trắng và tới led thu. Led thu thu được ánh sáng này thì điện trở giảm xuống, điện áp ở cực Anot của led thu gần về 0. Ngược lại, ở vị trí vạch đen, ánh sáng từ led phát phát ra không phản xạ lại được do bị vạch đen hấp thụ. Led thu không nhận được ánh sáng này nên điện áp ở cực Anot của nó gần bằng 5 V. Điện áp ra từ led thu được đem so sánh với điện áp chuẩn đã được tinh chỉnh hợp lý qua IC LM324 để cho ra mức logic 0-1, đưa vào vi điều khiển xử lý. Hình ảnh minh họa như sau:
  5. IC LM324 gồm 4 bộ so sánh. Mỗi bộ so sánh được minh họa như hình bên. Trong đó, đầu vào đảo nối với cực Anot của led thu và đầu vào không đảo nối với điện áp so sánh từ chiết áp. Khi led ở ngoài nền trắng, mức điện áp trên led thu đo được là 3.0V, ngược lại, mức điện áp thu đo được khi bắt vào vạch đen là 4.6 V. Điện áp so sánh (Vref) được đặt qua biến trở 10k là 3.8 V. Khi ở ngoài nền trắng: Vled thu Vref nên Output=0 Để bắt đường được tốt, chúng em sử dụng 6 cặp led thu phát được bố trí như sau (LT: Led thu; LP: Led phat): LT3 LP3 LT1 LT2 LT5 LT6 LP1 LP2 LP5 LP6 LT4 LP4
  6. Sơ đồ nguyên lý mạch SENSORS: Sơ đồ mạch in:
  7. b) MẠCH VI ĐIỀU KHIỂN VÀ ĐỘNG CƠ  Khối NGUỒN: Trong khối nguồn chúng ta sử dụng 1 bình ắc quy khô 12V.Mặt khác hệ thốngiều khiển cần phải có nguồn 5V để cung cấp cho khối VI ĐIỀU KHIỂN và khối SENSORS. Để tạo nguồn 5V DC chúng ta sử dụng IC ổn áp 7805, với đầu vào gồm đất chung của toàn hệ thống và nguồn 12 VDC lấy trực tiếp từ nguồn ắc quy. IC ổn áp LM7805 được lắp một tản nhiệt loại nhỏ để tản bớt nhiệt khi hoạt động giúp khối nguồn cũng như toàn bộ mạch hoạt động ổn định. Mạch nguồn như sau: Trong mạch nguồn có sử dụng một cầu chì kí hiệu là SW2 phòng xảy ra sự cố chập mạch, nhằm bảo vệ cho mạch nguồn cũng như các khối liên quan khác.  Khối VI ĐIỀU KHIỂN Khối này gồm có Vi điều khiển AT89S52, mạch RESET, mạch tạo dao động, các led báo vạch về từ mạch SENSORS, Jumpers đầu vào dùng để nạp ISP. + Vi điều khiển AT89S52 được chúng ta sử dụng vì nó có đầy đủ những chức năng của vi điều khiển AT89C51. Ngoài ra còn có thêm một timer (timer2) và có bộ nhớ Flash, công nghệ nạp ISP (In System Programming) tức là nạp mà không cần tháo chip ra khỏi mạch, giúp việc lập trình và test rất thuận tiện. Giá thành thậm chí còn rẻ hơn AT89C51. + Mach RESET có chức năng reset lại hoạt động của vi điều khiển, được nối vào chân số 9 của vi điều khiển là chân tích cực cao. Khi chân số 9 được set lên 1 thì vi điều khiển được reset lại. Để chống rung khi ấn nút, chúng ta dùng một tụ hóa nối song song với nút ấn. + Mạch DAO ĐỘNG sử dụng thạch anh 12Mhz, như vậy một chu kì máy là 1us, rất thuận tiện cho việc tính toán và lập trình. Tuy nhiên có hạn chế là không thể
  8. truyền thông với máy tính qua cổng COM (đòi hỏi thạch anh 11.0592Mhz). Thạch anh này được nối đất với tụ gốm 33p để lọc nhiễu. + Các Jumpers dùng để nạp ISP sử dụng mạch nạp ISP loại đơn giản, chỉ cần dùng 5 chân: GND, MOSI, MISO, SCK, RESET nối với cổng LPT của máy tính thông qua jack DB25. Sử dụng kiểu nạp ISP này rất thuận tiện khi lập trình và test xe vì không phải tháo chip (hạn chế hỏng, gẫy chân chip), tốc độ nạp chấp nhận được, ít khi bị lỗi, chi phí thấp. + Các led báo vạch về dùng để phản ánh tình trạng của các led thu phát ở mạch SENSORS. Khi một cặp thu-phát bắt vào vạch đen thì led báo tương ứng sẽ sáng lên và ngược lại. Nói cách khác, các led báo này phản ánh vị trí lệch của xe so với vạch đen, từ đó giúp debug chương trình thuận tiện hơn rất nhiều.  Khối LCD HIỂN THỊ Trong bài tập này chúng ta sử dụng một LCD để giới thiệu cũng như hiển thị những thông tin cần thiết khác, đồng thời học cách giao tiếp giữa hai vi xử lý. Do LCD tiêu thụ dòng khá lớn đặc biệt là khi bật đèn nền, làm mau hết ắcquy nên chỉ
  9. sử dụng LCD với những trường hợp cụ thể. Để bật tắt đèn nền, chúng ta sử dụng một bóng thuận A1015, được điều khiển bởi chân P0.7 của vi điều khiển. Khi P0.7=0 thì bóng thông, cực A của LCD được nối với nguồn 5V, đèn nền sáng và ngược lại. Ngoài ra trong khối còn sử dụng một biến trở 10k tạo điện áp ra đưa vào chân VEE của LCD để điều chỉnh độ tương phản. Khi điện áp UVEE 0 thì độ tương phản là lớn nhất, UVEE 5 V thì độ tương phản là nhỏ nhất.  Khối ĐỘNG CƠ Để điều khiển động cơ quay thuận ngược nhanh chậm, chúng ta không thể dùng trực tiếp các chân của vi điều khiển được vì dòng ra của chân vi điều khiển nhỏ. Do vậy chúng ta sử dụng IC L293D gồm hai mạch cầu H bên trong, mỗi mạch cầu H dùng điều khiển một động cơ có sơ đồ khối như hình vẽ:
  10. Trong khối này còn sử dụng một công tắc nguồn, có tác dụng bật tắt động cơ khi điều chỉnh vị trí của xe trước khi chạy. Bảng chân lý mô tả hoạt động của L293D trên một kênh như sau Giả sử ta cần điều khiển động cơ bên trái. Ba chân cần điều khiển là IN1, IN2, EN1 và đầu ra OUT1 OUT2 của L293D được nối với hai dây của động cơ một chiều. TRẠNG THÁI IN1 IN2 EN1 DỪNG X X 0 QUAY THUẬN 1 0 1 QUAY NGƯỢC 0 1 1
  11. Mạch in tổng hợp:
  12.  Mạch nạp ISP Mạch nạp sử dụng là loại mạch ISP đơn giản, có sơ đồ như hình dưới: Mạch nạp thực tế:
  13. 2.2 MÔ TẢ PHẦN CỨNG CPU Cấu trúc chung của bộ vi điều khiển 8051: Một số thành phần chính của bộ vi điều khiển 8051: . CPU: bộ não của vi điều khiển, thực hiện các phép toán số học, logic. . Các cổng vào ra để nhận, truyền dữ liệu ra các mạch ngoại vi khác ở bên ngoài hoặc cũng có thể dùng để định địa chỉ khi sử dụng bộ nhớ ngoài . Rom: nơi lưu trữ bộ nhớ chương trình để CPU thực hiện các lệnh, điều khiển hoạt động của vi điều khiển. . Ram: bộ nhớ trong . Các bộ timer, bộ đếm: được sử dụng rất nhiều để tạo trễ, dùng trong hoạt động ngắt . Cổng nối tiếp để truyền thông máy tinh . . Các bus dữ liệu, bus điều khiển, bus địa chỉ để liên kết các khối trong vi điều khiển. Vi điều khiển sử dụng trong bài tập này là AT89S52 của hãng Atmel. Một số đặc điểm chỉnh của vi điều khiển này như sau: o Tương thích với tập lệnh 8051 o 8K bộ nhớ FLASH hỗ trợ nạp ISP o Điện áp hoạt động là 4.0V-5.5V o Tần số dao động cấp là 0-33Mhz
  14. o 256x8b Ram nội o 32 đường xuất nhập o 3 bộ định thời 16 bit o 8 nguồn ngắt o Hỗ trợ truyền thông máy tính cổng nối tiếp Với các đặc điểm trên, vi điều khiển AT89S52 hoàn toàn đủ mạnh để giải quyết yêu cầu đặt ra của đề bài. Sơ đồ chân của vi điều khiển AT89S52 được minh họa như hình dưới: Các chân được sử dụng trong bài tập này gồm: các chân nguồn, chân dao động, chân reset, các chân nạp ISP, cổng P3 để nhận tín hiệu led báo về, cổng P0 để điều khiển động cơ, cổng P2 điều khiển LCD.
  15. Sơ đồ bộ nhớ Ram: Đối với AT89S52 ngoài 128 byte Ram có địa chỉ từ 30h đến 7Fh thì còn có 128 byte Ram có địa chỉ trùng với các thanh ghi chức năng đặc biệt từ 80h đến FFh. Để truy xuất các thanh ghi chức năng đặc biệt ta sử dụng cách định địa chỉ trực tiếp, ngược lại dùng cách định địa chỉ gián tiếp để truy cập 128 byte Ram thêm. 2.3 MÔ TẢ THIẾT KẾ CÁC PHẦN KHÁC  Thân xe Thân xe được làm từ một miếng nhựa tổng hợp, kích thước 15x20 cm, đằng trước có gắn bánh lái có thể quay 360o, do vậy chuyển động của xe phần lớn do hai bánh sau quyết định. Hai bánh đằng sau được lắp vào hai trục của động cơ một chiều để lái chiều chuyển động của xe. Hai động cơ sử dụng là động cơ một chiều loại 15V được gắn chặt vào thân xe. Mạch SENSORS kết nối với mạch vi điều khiển qua sợi cáp 8 sợi trong đó có hai sợi cấp nguồn 5V và 6 sợi truyền tín hiệu của mạch SENSORS về cho vi điều khiển. Hình ảnh xe:
  16. 2.4 THIẾT KẾ PHẦN MỀM Chương trình viết cho vi điều khiển sử dụng ngôn ngữ Assembler với trình dịch là phần mềm Keil C. Ưu điểm của ngôn ngữ Assembler là mã nguồn chạy nhanh và gọn, giúp sinh viên nắm chắc cấu trúc phần cứng của vi điều khiển cũng như các bước lập trình phần mềm. Tuy nhiên nhược điểm của ngôn ngữ này là khó hiểu và rắc rối. Sơ đồ khối điều khiển được tóm tắt như sau: MẠCH MẠCH ĐIỀU KHIỂN SENSORS VI ĐIỀU KHIỂN ĐỘNG CƠ XE CHUYỂN ĐỘNG Lưu đồ thuật toán điều khiển:
  17. KHỞI TẠO GIỚI THIỆU DÒ ĐƯỜNG NO YES LỆCH Đi thẳng Cua trái Or Cua phải NO VẠCH YES Chương trình con khi bắt vạch đích 2.5 CÁC BƯỚC KIỂM TRA  Kiểm tra điện áp đưa ra từ khối nguồn: 4.99V  Kiểm tra điện áp trên cực Anot led thu khi qua và không qua vạch đen: tốt  Kiểm tra hoạt động của tín hiệu gửi về thông qua led báo: tốt  Kiểm tra hoạt động mạch nạp: tốt  Kiểm tra hoạt động của LCD: tốt  Kiểm tra hoạt động của IC L293: tốt
  18. 3. KẾT QUẢ ĐẠT ĐƯỢC VÀ PHÂN TÍCH LỖI Trong quá trình thực hiện bài tập lớn, chúng em gặp một số khó khăn sau và đã từng bước khắc phục.  Tài liệu Đây là lần đầu tiên thực hiện một sản phẩm thực dựa trên nền kiến thức học tập được nên nhiều vấn đề chưa được thông suốt. Trước hết, là cách làm xe về cơ khí, thiết kế mạch, dò đường ra sao, cua xe trái phải thuận ngược, lập trình LCD Khắc phục: học hỏi từ hướng dẫn của thầy giáo, các bạn trong lớp đặc biệt là các bạn đã từng tham dự cuộc thi Robocon, học hỏi từ các anh các khóa trước, tham khảo nguồn tài liệu trên mạng Internet . Kết quả: Học hỏi được nhiều kinh nghiệm làm robot đơn giản từ các nguồn trên, các tutorial về thiết kế mạch, thiết kế cơ khí, băm xung, ngắt  Vật tư Vấn đề: Các linh kiện điện tử khá sẵn (chợ Trời, Hàn Thuyên ). Tuy nhiên một số chi tiết cơ khí khó tìm hơn: các bánh xe, thân xe Nguồn ắcquy cũng rất quan trọng, cung cấp năng lượng cho toàn bộ xe. Khắc phục: Tìm mua trong chợ Trời, các cửa hàng bán đồ cơ khí, cửa hàng bán đồ cũ, cửa hàng sửa chữa xe máy . Kết quả: Tìm mua đủ các vật tư và tiến hành lắp ráp hoàn chỉnh toàn bộ xe gồm mạch điều khiển và kết cấu cơ khí.  Thiết kế mạch Vấn đề: Chưa có kinh nghiệm về thiết kế mạch thực tế, cần giải quyết các vấn đề: vẽ mạch nguyên lý và mạch in sử dụng hai phần mềm Orcad Capture và Orcad Layout trong bộ sản phẩm Orcad v10.0 của hãng Cadense, các kĩ thuật sắp xếp linh kiện, đi dây, kĩ thuật làm mạch thủ công bằng phương pháp là. Khắc phục: Học cách sử dụng các phần mềm nói trên với nhiều tutorial trên các diễn đàn như www.dientuvietnam.net, www.picvietnam.com , trong mạch cũng sử dụng thư viện chân linh kiện download trên hai diễn đàn trên đã được chúng em chỉnh sửa lại. Về cách làm mạch bằng phương pháp là: học trên mạng và kinh nghiệm của các bạn đã từng làm mạch. Tuy nhiên để ra được hai mạch chạy ổn định thì cũng đã hỏng mất vài cái.
  19. Mạch SENSORS Mạch vi VI ĐIỀU KHIỂN VÀ ĐỘNG CƠ  Lập trình Đây có thể coi là vấn đề phức tạp nhất vì là linh hồn của xe tự hành, điều khiển toàn bộ hoạt động của xe và cũng là vấn đề tiêu tốn nhiều thời gian nhất. Vấn đề 1: Đọc và xử lý tín hiệu SENSORS Tính toán, thu thập các trường hợp xe lệch ra khỏi đường, xe gặp khúc cua, xe không bắt được vạch đen, xe bắt vạch đích, xe cua ở góc cua gấp Xử lý các trường hợp trên như thế nào? Trong quá trình test xe, nhiều khi Sensors bắt không chuẩn hoặc không ổn định.
  20. Khắc phục: Để thu thập các trường hợp, dùng tay đẩy xe đi theo đường đặc biệt là các khúc cua và ghi tín hiệu hiển thị trên các led báo về, tính toán các trường hợp lệch trái, lệch phải, lệch ít, lệch nhiều, không lệch, bắt vạch đích Hàn chắc các mối hàn mạch SENSORS, kiểm tra cáp nối với mạch vi điều khiển, điều chỉnh biến trở để lấy điện áp so sánh hoạt động ổn định đưa vào IC LM324 là 3.8V. Kết quả:Mạch hoạt động ổn định, SENSORS bắt rất tốt, tín hiệu báo về trên mạch vi điều khiển chuẩn xác.  Vấn đề 2: Cách điều chế độ rộng xung PWM để đưa vào chân IN1, IN3 điều khiển chiều quay cũng như tốc độ quay của hai động cơ truyền động. Trong quá trình test xe, chúng em gặp các vấn đề: băm xung xe không chạy, cùng băm xung với hai giá trị bằng nhau vào IN1 và IN3 nhưng tốc độ quay của hai động cơ không bằng nhau hoặc trường hợp động cơ quay không đúng với chương trình. Ví dụ cùng một trường hợp Led báo về nhưng có lúc động cơ quay thuận, lúc quay ngược. Khắc phục: Hiệu chỉnh chương trình băm xung cho hợp lý. Mô phỏng chương trình nói riêng cũng như mạch vi điều khiển, động cơ nói chung bằng phần mềm mô phỏng rất mạnh là Proteus bản v7.2 SP6. Phát hiện điện trở treo ở cổng P0 bị hỏng, một chân điện trở có giá trị nhỏ hơn hẳn các thanh khác dẫn đến tín hiệu vào chân IN của L293 bị ảnh hưởng, hai bánh không quay đều nhau.
  21. Một số trường hợp ở về thu thập tín hiệu SENSORS có cùng một kết quả tuy nhiên lại có những các giải quyết khác nhau nên động cơ lúc quay thế này, lúc quay thế khác. Do vậy chúng em đã hiệu chỉnh lại. Kết quả: Động cơ chạy đúng, bám đường tốt, xử lý góc cua khá, xe chạy ổn định, theo đúng chương trình đã lập sẵn. Hạn chế: Xe chuyển động chưa được trơn mà bị giật một chút, tốc độ xe chưa cao, mômen động cơ còn nhỏ khó vượt qua chướng ngại vật nhỏ để đi tiếp.  Vấn đề 3: Hiển thị trên LCD Bài tập này sử dụng LCD để hiển thị, dùng chế độ 8bit qua cổng P2 để điều khiển LCD. Một số hàm điều khiển LCD được hiệu chỉnh từ một số source code trên các diễn đàn, đảm bảo hoạt động tốt, hiển thị chính xác, ổn định. Tuy nhiên khi bật đèn nền của LCD thì dòng tiêu thụ lớn dẫn đến LM7805 phát nóng (mặc dù đã gắn tản nhiệt nhỏ) và ắcquy mau hết điện. Do vậy chúng ta chỉ bật đèn LCD khi cần hiển thị ở những trường hợp cần thiết. Hình ảnh sản phẩm hoàn chỉnh
  22. 4. KẾT LUẬN Qua quá trình làm bài tập lớn vi xử lý với sản phẩm thực tế là chiếc xe chạy theo đường đi này, chúng em đã học hỏi được rất nhiều kiến thức: thiết kế xe, thiết kế mạch, làm mạch in, lập trình, hiệu chỉnh Điều quan trọng là chúng em đã làm được một sản phẩm dựa trên những kiến thức đã học vì từ lý thuyết ra thực tế là cả một quãng đường dài. Bài tập này giúp chúng em hiểu thêm cấu trúc của Vi điều khiển 8051 cũng như tập lệnh của nó, tạo tiền đề để tiếp tục nghiên cứu các vi điều khiển ứng dụng mạnh hơn như AVR, PIC, ARM ., các bộ PLC, các hệ thống SCADA, DSC , phục vụ cho quá trình làm việc, nghiên cứu sau khi tốt nghiệp. Chúng em chân thành cảm ơn thầy giáo Nguyễn Hồng Quang đã hướng dẫn, truyền đạt kiến thức để có thể hoàn thành được bài tập này. 5.MỞ RỘNG ĐỀ TÀI Để có được chiếc xe tự hành có khả năng di chuyển bắt vạch với độ phức tạp cao của đường đi, xe đạt tốc độ lớn thì đề tài có thể nghiên cứu tiếp như sau: Sử dụng hộp số và động cơ có momen lớn hơn, Sử dụng encoder để phản hồi tốc độ, xây dựng vòng điều khiển để động cơ có thể nhanh chóng ổn định ở tốc độ cao. Kết hợp ADC với mạch sensor để xử lý, loại bỏ hoàn toàn các tác động của nhiễu Có thể đưa thêm các nút bấm để lựa chọn chiến thuật trên LCD khi xe chạy trên đường có nhiều ngã tư và nhiều lối đi. Và để dễ dàng trong việc phát triển thuật toán hơn thì việc nghiên cứu sử dụng các vi điều khiển có nhiều tính năng như AVR hay PIC có thể là hướng tiếp theo. Tuy nhiên việc xe tự hành di chuyển bắt vạch không có ứng dụng thực tế lắm, nên để có thể phát triển đề tài thành ứng dụng có tính thực tiễn thì phần sensor cần phát triển để có thể nhận biết vật cản nói chung chứ không chỉ là vạch đen đơn thuần. Công nghệ xử lý ảnh có thể là một hướng phát triển hợp lý cho phần sensor.Từ đó xe tự hành có thể di chuyển trên đường bất kì và ta có thể nghiên cứu phát triển phần cơ khí và các bộ điều khiển để xe có thể thực hiện một số công việc nào đó khi gặp vật cản như nhặt đồ bị rơi, gắp quà (trong cuộc thi robocon), thậm chí có thể là thu dọn rác hay ấn nút mở cửa !
  23. 6. TÀI LIỆU THAM KHẢO 1. Bài giảng trên lớp 2. Cấu trúc và lập trình họ vi điều khiển 8051 – Nguyễn Tăng Cường Phan Quốc Thắng 3. Họ vi điều khiển 8051 - Tống Văn On Hoàng Đức Hải 4. Một số trang web: - www.dientuvietnam.net - www.picvietnam.com - www.8051projects.com - www.dieukhien.net . 7. PHỤ LỤC 7.1 DANH SÁCH THIẾT BỊ Số lượng Nguồn Giá thành Tên thiết bị Động cơ 1 chiều loại nhỏ 2 Chợ Hòa Bình 50k Bánh xe động cơ 2 Chợ Hòa Bình 30k Bánh xe dẫn hướng 1 Chợ Hòa Bình 10k Ắc quy 1 Chợ Hòa Bình 100k Led phát 6 Hàn Thuyên 6k Led thu 6 Hàn Thuyên 6k Led thường 6 Hàn Thuyên 2k LM324+đế 2 Hàn Thuyên 8k Tụ điện các loại: tụ sứ 33p, Vài Hàn Thuyên 4k tụ hóa 10uF, 330uF, 0.1uF Điện trở các loại: 330, 10k, Vài Hàn Thuyên 4k trở băng 4K7(1 cái) Biến trở tinh chỉnh 10k 2 Hàn Thuyên 1k LM7805 1 Hàn Thuyên 2.5k LM293D+đế 1 Hàn Thuyên 36k AT89S52+đế 1 Hàn Thuyên 16k Diode 1 Hàn Thuyên 0.5k Transistor A1815 1 Hàn Thuyên 0.5k
  24. Thạch anh 12Mhz 1 Hàn Thuyên 2k Tản nhiệt loại nhỏ 1 Hàn Thuyên 2k Cầu chì+đế 1 Hàn Thuyên 1k Công tắc nguồn 2 Chợ Hòa Bình 4k Jump các loại Vài Chợ Hòa Bình 4k Cáp nối 8 sợi 1 Chợ Hòa Bình 3k Cổng DB25 1 Hàn Thuyên 3k LCD 16x2 1 Hàn Thuyên 65k Phíp đồng, hóa chất Chợ Hòa Bình 20k Phụ kiện khác 20k Tổng 406.5k 7.2 MÃ NGUỒN ; /* Truong Dai hoc Bach Khoa Ha Noi Khoa Dien-Bo mon Tu dong hoa Bai tap lon vi xu ly: Thiet ke xe do duong Giao vien huong dan : NGUYEN HONG QUANG Sinh vien thuc hien : Nhom 2 - TDH4 - K50 Thanh vien : DANG DINH HOANG NGUYEN DUC NGHIA LE CAO SON LUU BACH TAN Ha Noi, Thang 12 – 2008 */ ; ;=== ;Dinh nghia cac bien ;BIT LCD LCD DATA P2 ;cong 2 la cong du lieu LCD BUSY BIT LCD.7 ;bit bao ban E BIT P1.5 ;chan EN RW BIT P1.6 ;chan RW doc ghi RS BIT P1.7 ;chan RS lenh hay du lieu ;BIT Sensors: trai1 BIT P3.6 ;sensor1 trai0 BIT P3.5 ;sensor2 phai0 BIT P3.2 ;sensor3 phai1 BIT P3.1 ;sensor4 truoc BIT P3.4 ;sensor5 sau BIT P3.3 ;sensor6
  25. ;BIT Dieu khien dong co banh_trai BIT P0.0 ;en1 cho phep dong co trai banh_phai BIT P0.3 ;en2 cho phep dong co phai thuan_trai BIT P0.1 ;IN1 dao_trai BIT P0.2 ;IN2 thuan_phai BIT P0.4 ;IN3 dao_phai BIT P0.5 ;IN4 xung_trai EQU 03h ;do rong xung cap cho dco trai xung_phai EQU 04h ;do rong xung cap cho dco phai ;BIT nho nho_c BIT 00h nho_a EQU 05h ;Bien dem so vong di dem_vong EQU R6 ;dem so vong di duoc ;Bit bat tat den LCD LCD_light EQU P0.7 ;=0 den sang ;=1 den tat ;=== ; ;bat dau chuong trinh ;=== ORG 0000h LJMP main ORG 000Bh ;dia chi ngat Timer0 LJMP ngattimer0 ;=== ; ;Chuong trinh chinh ;=== ORG 30h main: ;Khoi tao MOV P3,#0ffh ;tao cong P3 la cong vao MOV TMOD,#12h ;timer0 mode 2 (8 bit tu nap lai) ;timer1 mode 1 (16 bit) LCALL LCD_INIT ;khoi tao LCD LCALL GIOI_THIEU_TREN_LCD; goi ham gioi thieu MOV TH0,#-10 ;tao ngat sau moi 10us MOV IE,#10000010b ;cho phep ngat timer0 SETB TR0 ;bat timer0 SETB banh_trai ;EN1=1 SETB banh_phai ;EN2=1 MOV dem_vong,#0h ;===
  26. ; ;chuong trinh do duong ;=== /*so do bo tri Sensors: truoc trai1 trai0 phai0 phai1 sau +thu tu cac bit tuong ung: 1 2 3 4 5 6 +neu sensor bat vao vach den thi logic bao ve la 0 va led tuong ung tren mach vi xu ly se sang */ ;=== dithang1: MOV A,P3 ANL A,#01111110b ;chi lay 6 bit tuong ung sensors CJNE A,#01100110b,dithang2 ;led truoc sau bat vach LCALL tien ;banh trai, phai quay thuan MOV xung_trai,#70 ;bam xung 70% MOV xung_phai,#70 ;bam xung 70% LJMP thoatdo dithang2: MOV A,P3 ANL A,#01111110b CJNE A,#01111110b,dithang3 ;khong led nao bat vach LCALL tien MOV xung_trai,#30 MOV xung_phai,#60 LJMP thoatdo dithang3: MOV A,P3 ANL A,#01111110b CJNE A,#01011010b,lechtrai1 ;led trai0,truoc,sau,phai0 bat LCALL tien MOV xung_trai,#70 MOV xung_phai,#70 LJMP thoatdo lechtrai1: MOV A,P3 ANL A,#01111110b CJNE A,#01001110b,lechtrai2 ;led truoc,trai0 LCALL tien MOV xung_trai,#70 ;banh trai quay cham hon MOV xung_phai,#90 ;banh phai LJMP thoatdo
  27. lechtrai2: MOV A,P3 ANL A,#01111110b CJNE A,#01010110b,lechtrai3 ;led trai0,sau bat vach LCALL tien MOV xung_trai,#50 ;banh trai quay cham hon MOV xung_phai,#90 ;banh phai LJMP thoatdo lechtrai3: MOV A,P3 ANL A,#01111110b CJNE A,#01011110b,lechtrai4 ;led trai 0 bat vach LCALL tien MOV xung_trai,#30 ;banh trai quay cham hon MOV xung_phai,#90 ;banh phai LJMP thoatdo lechtrai4: MOV A,P3 ANL A,#01111110b CJNE A,#00011110b,lechtrai5 ;led trai0, trai1 bat vach LCALL tien MOV xung_trai,#10 ;banh trai quay cham hon MOV xung_phai,#90 ;banh phai LJMP thoatdo lechtrai5: MOV A,P3 ANL A,#01111110b CJNE A,#00111110b,lechtrai6 ;led trai1 bat vach LCALL cua_trai_manh ;banh trai quay nguoc, ;banh phai quay thuan LJMP thoatdo lechtrai6: MOV A,P3 ANL A,#01111110b CJNE A,#00010110b,lechphai1 ;led trai0,trai1,sau bat vach LCALL cua_vuong_trai ;ham cua vuong trai LJMP thoatdo ; ;Lech phai - can cua phai lechphai1: MOV A,P3 ANL A,#01111110b CJNE A,#01101010b,lechphai2 ;led truoc,phai0 bat vach LCALL tien MOV xung_trai,#90 ;banh trai quay nhanh hon ;banh phai
  28. MOV xung_phai,#70 LJMP thoatdo lechphai2: MOV A,P3 ANL A,#01111110b CJNE A,#01110010b,lechphai3 ;led sau,phai0 bat vach LCALL tien MOV xung_trai,#90 ;banh trai quay nhanh hon ;banh phai MOV xung_phai,#50 LJMP thoatdo lechphai3: MOV A,P3 ANL A,#01111110b CJNE A,#01111010b,lechphai4 ;led phai0 bat vach LCALL tien MOV xung_trai,#90 ;banh trai quay nhanh hon ;banh phai MOV xung_phai,#30 LJMP thoatdo lechphai4: MOV A,P3 ANL A,#01111110b CJNE A,#01111000b,lechphai5 ;led phai0,phai1 bat vach LCALL tien MOV xung_trai,#90 ;banh trai quay nhanh hon ;banh phai MOV xung_phai,#10 LJMP thoatdo lechphai5: MOV A,P3 ANL A,#01111110b CJNE A,#01111100b,lechphai6 ;led phai1 bat vach LCALL tien LCALL cua_phai_manh ;banh trai quay thuan ;banh phai quay nguoc LJMP thoatdo lechphai6: MOV A,P3 ANL A,#01111110b CJNE A,#01110000b,vach_dich ;led sau,phai0,phai1 bat vach LCALL cua_vuong_phai ;ham cua vuong phai LJMP thoatdo vach_dich: MOV A,P3 ANL A,#01111110b
  29. CJNE A,#00000000b,thoatdo ;vach dich-cac led deu bat vach INC dem_vong ;tang so vong di duoc CJNE dem_vong,#1,v_2;so vong=1 nhay den nhan VONG_1 SJMP VONG_1 v_2: CJNE dem_vong,#2,v_3;so vong=2 nhay den nhan VONG_2 SJMP VONG_2 v_3: CJNE dem_vong,#3,thoatdo SJMP VONG_3 ;so vong=3 nhay den nhan VONG_3 vong_1: LCALL HET_VONG_1 ;goi chuong trinh con HET_VONG_1 SJMP thoatdo vong_2: LCALL HET_VONG_2 ;goi chuong trinh con HET_VONG_2 SJMP thoatdo vong_3: LCALL HET_VONG_3 ;goi chuong trinh con HET_VONG_3 SJMP thoatdo thoatdo: LJMP dithang1 ;do lai tu dau ;=== ; ;Ham chuyen dong ;=== tien: SETB thuan_trai ;IN1=1 CLR dao_trai ;IN2=0 SETB thuan_phai ;IN3=1 CLR dao_phai ;IN4=0 RET lui: CLR thuan_trai ;IN1=0 SETB dao_trai ;IN2=1 CLR thuan_phai ;IN3=0 SETB dao_phai ;IN4=1 MOV xung_trai,#60 MOV xung_phai,#60 RET dung: ;dung tam thoi 20ms CLR banh_trai ;EN1=0 CLR banh_phai ;EN2=0 LCALL delay20ms SETB banh_trai ;EN1=1 SETB banh_phai ;EN2=1 RET dung_han: ;dung han CLR banh_trai ;EN1=0
  30. CLR banh_phai ;EN2=0 RET cua_trai: CLR thuan_trai ;IN1=0 SETB dao_trai ;IN2=1 SETB thuan_phai ;IN3=1 CLR dao_phai ;IN4=0 MOV xung_trai,#100 ;banh trai dung im MOV xung_phai,#100 ;banh phai quay thuan 100% RET cua_phai: SETB thuan_trai ;IN1=1 CLR dao_trai ;IN2=0 CLR thuan_phai ;IN3=0 SETB dao_phai ;IN4=1 MOV xung_trai,#100 ;banh trai quay thuan 100% MOV xung_phai,#100 ;banh phai dung im RET cua_trai_manh: CLR thuan_trai SETB dao_trai SETB thuan_phai CLR dao_phai MOV xung_trai,#30 ;banh trai quay nguoc 70% MOV xung_phai,#100 ;banh phai quay thuan 100% RET cua_phai_manh: SETB thuan_trai CLR dao_trai CLR thuan_phai SETB dao_phai MOV xung_trai,#100 ;banh trai quay thuan 100% MOV xung_phai,#30 ;banh phai quay nguoc 70% RET cua_vuong_trai: LCALL cua_trai_manh loop1: MOV A,P3 ANL A,#00010000b CJNE A,#00000000b,cua_trai_tiep ;neu sensor 4 dang truoc chua bat vach ;thi tiep tuc quay trai JMP thoat_cua_trai cua_trai_tiep: LCALL cua_trai_manh JMP loop1 thoat_cua_trai:
  31. RET cua_vuong_phai: LCALL cua_phai_manh loop2: MOV A,P3 ANL A,#00010000b CJNE A,#00000000b,cua_phai_tiep ;neu sensor 4 dang truoc chua bat vach ;thi tiep tuc quay phai JMP thoat_cua_phai cua_phai_tiep: LCALL cua_phai_manh JMP loop2 thoat_cua_phai: RET quay_xe: ;quay nguoc xe lai LCALL cua_phai_manh loop3: MOV A,P3 ANL A,#00000010b CJNE A,#00000000b,quay_tiep ;neu sensor 6 chua bat vach ;thi tiep tuc quay phai JMP thoat_cua_phai quay_tiep: LCALL cua_phai_manh JMP loop3 RET HET_VONG_1: ;xe di het 1 vong thi goi ham nay LCALL tien MOV xung_trai,#100 ;can tien len mot chut de MOV xung_phai,#100 ;thoat ra khoi truong hop LCALL delay200ms ;tranh lap lai CLR LCD_light ;bat den LCD LCALL dung_han ;dung lai de hien thi MOV DPTR,#STR19 ;hien thi”HET 1 VONG” LCALL HIEN_THI_STRING LCALL delay2s ;tre 2s LCALL XOA_MAN_HINH ;xoa man hinh SETB LCD_light ;tat den LCD SETB banh_trai ;EN1=1 SETB banh_phai ;EN2=1 RET HET_VONG_2: ;xe di het 2 vong thi goi ham nay LCALL tien MOV xung_trai,#100 MOV xung_phai,#100
  32. LCALL delay200ms CLR LCD_light LCALL dung_han MOV DPTR,#STR20 ;hien thi“HET 2 VONG” LCALL HIEN_THI_STRING LCALL delay2s LCALL XOA_MAN_HINH SETB LCD_light SETB banh_trai SETB banh_phai RET HET_VONG_3: ;xe di het 3 vong thi goi ham nay LCALL tien MOV xung_trai,#100 MOV xung_phai,#100 LCALL delay200ms CLR LCD_light LCALL dung_han MOV DPTR,#STR21 ;hien thi “HET 3 VONG” LCALL HIEN_THI_STRING LCALL dung_han LCALL delay2s LCALL XOA_MAN_HINH LCALL NHAP_NHAY_TAT_BAT;den LCD tat roi bat len MOV DPTR,#STR22 ;hien thi “MET QUA !” LCALL HIEN_THI_STRING LCALL delay2s LCALL ve_dau_dong_2 MOV DPTR,#STR23 ;hien thi “NGHI TI DA !” LCALL HIEN_THI_STRING LCALL delay4s LCALL XOA_MAN_HINH LCALL NHAP_NHAY_TAT_BAT MOV DPTR,#STR24 ;hien thi ”QUAY DAU DI TIEP !” LCALL HIEN_THI_STRING LCALL XOA_MAN_HINH SETB LCD_light ;tat den LCD MOV dem_vong,#0 ;reset so vong dem SETB banh_trai ;EN1=1 SETB banh_phai ;EN2=1 LCALL QUAY_XE ;goi ham quay dau xe de di theo ;chieu nguoc lai RET ;===
  33. ; ;Chuong trinh Bam xung - Ngat Timer 0 ;=== ngattimer0: ;thanh ghi A làm bien dem de tao do rong xung ;R0 la bien dem ;bam vao IN1 va IN3 CLR TR0 ;Dung bo dem CLR TF0 ;xoa TF0 MOV nho_a,A CJNE R0,#100,trai MOV R0,#0 SJMP thoat trai: CLR C MOV A,xung_trai ;A=do rong xung trai SUBB A,R0 ;R0 C=0 ;R0>A (da du do rong vao IN1) => C=1 CPL C ;dao C de dua vao IN1 MOV thuan_trai,C phai: CLR C MOV A,xung_phai ;A=do rong xung phai SUBB A,R0 ;R0 C=0 ;R0>A (da du do rong vao IN3) => C=1 CPL C ;dao C de dua vao IN3 MOV thuan_phai,C thoat: INC R0 MOV A,nho_a SETB TR0 RETI ;=== ; ;Hien thi tren LCD ;=== LCD_INIT: MOV A,#38H ;2 line 5x7 ACALL COMMAND MOV A,#0CH ;LCD on cursor on ACALL COMMAND MOV A,#01H ;clear LCD
  34. ACALL COMMAND MOV A,#06H ;shift cursor right ACALL COMMAND CLR LCD_light ;bat den LCD RET GIOI_THIEU_TREN_LCD: MOV DPTR,#str1 ;DH BACH KHOA HN LCALL hien_thi_string LCALL delay1_5s LCALL ve_dau_dong_2 MOV DPTR,#str1b ;BAI TAP LON VDK LCALL hien_thi_string LCALL delay1_5s LCALL XOA_MAN_HINH LCALL NHAP_NHAY_TAT_BAT MOV DPTR,#STR2 ;DE TAI: LCALL HIEN_THI_STRING LCALL delay1_5s LCALL ve_dau_dong_2 MOV DPTR,#str3 ;XE DO DUONG LCALL hien_thi_string LCALL delay1_5s LCALL XOA_MAN_HINH LCALL NHAP_NHAY_TAT_BAT MOV DPTR,#STR4 ;GV HUONG DAN LCALL HIEN_THI_STRING LCALL delay1_5s LCALL ve_dau_dong_2 MOV DPTR,#str5 ;NG HONG QUANG LCALL hien_thi_string LCALL delay1_5s LCALL XOA_MAN_HINH LCALL NHAP_NHAY_TAT_BAT MOV DPTR,#STR6 ;THUC HIEN LCALL HIEN_THI_STRING LCALL delay1_5s LCALL ve_dau_dong_2 MOV DPTR,#str7 ;NHOM 2-TDH4 LCALL hien_thi_string LCALL delay1_5s LCALL XOA_MAN_HINH LCALL NHAP_NHAY_TAT_BAT MOV DPTR,#STR8 ;DANG DINH HOANG
  35. LCALL HIEN_THI_STRING LCALL delay1_5s LCALL ve_dau_dong_2 MOV DPTR,#str9 ;NGUYEN DUC NGHIA LCALL hien_thi_string LCALL delay1_5s LCALL XOA_MAN_HINH LCALL NHAP_NHAY_TAT_BAT MOV DPTR,#STR10 ;LE CAO SON LCALL HIEN_THI_STRING LCALL delay1_5s LCALL ve_dau_dong_2 MOV DPTR,#str11 ;LUU BACH TAN LCALL hien_thi_string LCALL delay2s LCALL XOA_MAN_HINH MOV DPTR,#STR12 ;3 LCALL DICH_CON_TRO LCALL NHAP_NHAY_TAT_BAT LCALL HIEN_THI_STRING LCALL delay1s LCALL XOA_MAN_HINH MOV DPTR,#STR13 ;2 LCALL DICH_CON_TRO LCALL NHAP_NHAY_TAT_BAT LCALL HIEN_THI_STRING LCALL delay1s LCALL XOA_MAN_HINH MOV DPTR,#STR14 ;1 LCALL DICH_CON_TRO LCALL NHAP_NHAY_TAT_BAT LCALL HIEN_THI_STRING LCALL delay1s LCALL XOA_MAN_HINH MOV DPTR,#STR15 ;START LCALL DICH_CON_TRO LCALL NHAP_NHAY_TAT_BAT LCALL HIEN_THI_STRING LCALL delay2s LCALL XOA_MAN_HINH SETB LCD_light ;tat den LCD
  36. RET HIEN_THI_STRING: ;hien thi chuoi ki tu CLR A MOVC A,@A+DPTR JZ HET_STRING ;neu ki tu cuoi la 0 thi thoat LCALL data_display INC DPTR LJMP HIEN_THI_STRING HET_STRING: RET ; ;Thu vien ham LCD XOA_MAN_HINH: MOV A,#01H LCALL command RET TRO_VE_DAU_DONG: MOV A,#02H LCALL command RET DICH_CON_TO_SANG_TRAI: MOV A,#04H LCALL command RET DICH_CON_TO_SANG_PHAI: MOV A,#06H LCALL command RET DICH_HIEN_THI_SANG_PHAI: MOV A,#05H LCALL command RET DICH_HIEN_THI_SANG_TRAI: MOV A,#07H LCALL command RET TAT_CON_TRO_TAT_HIEN_THI: MOV A,#08H LCALL command RET BAT_CON_TRO_TAT_HIEN_THI: MOV A,#0A0H LCALL command RET TAT_CON_TRO_BAT_HIEN_THI: MOV A,#0CH LCALL command
  37. RET NHAP_NHAY_CON_TRO: MOV A,#0EH LCALL command RET DICH_CON_TRO_SANG_TRAI: MOV A,#10H LCALL command RET DICH_CON_TRO_SANG_PHAI: MOV A,#14H LCALL command RET DICH_TOAN_BO_SANG_TRAI: MOV A,#18H LCALL command RET DICH_TOAN_BO_SANG_PHAI: MOV A,#01CH LCALL command RET VE_DAU_DONG_1: MOV A,#80H LCALL command RET VE_DAU_DONG_2: MOV A,#0C0H LCALL command RET COMMAND: ;Ham viet lenh ACALL READY ;cho den khi LCD san sang MOV LCD,A ;dua code lenh ra cong LCD CLR RS ;RS=0 truy cap thanh ghi lenh CLR RW ;R/W=0 viet SETB E ;E=1 H-to-L CLR E ;chot du lieu RET DATA_DISPLAY: ;Hien thi ki tu ACALL READY ;cho den khi LCD san sang MOV LCD,A ;dua code du lieu ra cong LCD SETB RS ;RS=1 truy cap thanh ghi du lieu CLR RW ;R/W=0 viet SETB E ;E=1 xung H-to-L CLR E ;E=0 chot RET READY: ;Ham cho co LCD san sang nhan lenh SETB BUSY ;Bit BUSY lam dau vao
  38. CLR RS ;RS=0 truy cap thanh ghi lenh SETB RW ;R/W=1 doc BACK: CLR E ;L-to-H SETB E ;chot du lieu doc vao JB BUSY,BACK ;cho den khi flag=0 RET NHAP_NHAY: SETB LCD_light LCALL delay1s CLR LCD_light RET DICH_CON_TRO: MOV R5,#6 dich: LCALL DICH_CON_TRO_SANG_PHAI DJNZ R5,dich RET ;=== ; ;Cac ham delay ;=== delay1: ;Ham tre 50ms MOV TH1,#03Ch MOV TL1,#0B0h ;FFFF-3CB0=49999+1 chu ki ;quay vong=50000us=50ms SETB TR1 ;bat timer1 wait: JNB TF1,wait CLR TR1 CLR TF1 DJNZ R7,delay1 RET delay2: ;Ham tre 10ms MOV TH1,#0FFh MOV TL1,#0F5h ;FFFF-FFF5=49999+1 chu ki ;quay vong=50000us=50ms SETB TR1 ;bat timer1 wait1: JNB TF1,wait1 CLR TR1 CLR TF1 DJNZ R7,delay2 RET
  39. delay20ms: MOV R7,#2 LJMP delay2 delay50ms: MOV R7,#1 LJMP delay1 delay100ms: MOV R7,#2 LJMP delay1 delay200ms: MOV R7,#4 LJMP delay1 delay300ms: MOV R7,#6 LJMP delay1 delay500ms: MOV R7,#10 LJMP delay1 delay1s: MOV R7,#20 LJMP delay1 delay1_5s: MOV R7,#30 LJMP delay1 delay2s: MOV R7,#40 LJMP delay1 delay4s: MOV R7,#80 LJMP delay1 ;=== ; ;Khai bao cac xau ki tu ;=== str1: DB "DH BACH KHOA HN",0 STR1B: DB "BAI TAP LON VDK",0 str2: DB "DE TAI:",0 str3: DB "XE DO DUONG",0 STR4: DB "GV HUONG DAN:",0 STR5: DB "NG HONG QUANG",0 STR6: DB "THUC HIEN:",0 STR7: DB "NHOM 2-TDH4",0 STR8: DB "DANG DINH HOANG",0 STR9: DB "NGUYEN DUC NGHIA",0
  40. STR10: DB "LE CAO SON",0 STR11: DB "LUU BACH TAN",0 str12: db "3 ",0 str13: db "2 ",0 str14: db "1 ",0 str15: db "START ",0 str16: db "LECH TRAI",0 str17: db "LECH PHAI",0 str18: db "KHONG LECH",0 str19: db "HET 1 VONG",0 str20: db "HET 2 VONG",0 str21: db "HET 3 VONG",0 str22: db "MET QUA !",0 str23: db "NGHI TI DA !",0 str24: db "QUAY DAU DI TIEP",0 END 7.3 CÁC DATASHEET 1. AT89S52 2. LM324 3. L293D 4. LM7805 5. LCD 16x2 6. A1015