Với mỗi chân có chức năng riêng thứ hai trong bảng sau: Các chân có chức năng đặc biệt: CHÂN TÊN CHỨC NĂNGP3.0 RxD Ngõ vào nhận dữ liệu nối tiếpP3.1 TxD Ngõ xuất dữ liệu nối tiếpP3.
Trang 1MỤC LỤC
I Giới thiệu về vi điều khiển P89V51RD2 4 1.1 Sơ đồ chân và chức năng các chân P89V51RD2 5
1.3 Kết nối với phần cứng của một số chân cơ bản 15
2.2.1.4.Phơng phát điều chế xung PWM điều khiển tốc độ động cơ DC 31
Trang 2Lời núi đầu
Cụng nghệ số hiện nay cú những bước phỏt triển rất nhanh Nú luụn gắn liền với sự phỏt triển của cỏc cụng nghệ khỏc Cụng nghệ số đó đem đến cho con người những ứng dụng quan trọng trong tất cả cỏc nghành, cỏc lĩnh vực Do vậy cụng nghệ tin học, cụng nghệ số là một trong nhứng ngành phỏt triển hàng đầu trong giai đoạn hiện nay
Là một sinh viờn khoa cụng nghệ nghành Điện tử - Viễn thụng, bản thõn emhiểu rằng vận dụng những kiến thức đó học vào thực tế là vụ cựng quan trọng Với suy
nghĩ trờn, cựng với niềm yờu thớch robot, em đó quyết định chọn đề tài “ứng dụng vi
điều khiển P89V51RD1 để Thiết kế robot tự động” Cụ thể em tỡm hiểu cấu trỳc và kỹ
thuật lập trỡnh cho IC P89V51RD2 Em xin chõn thành cảm ơn cỏc thầy cụ giỏo trong
bộ mụn Điện tử - Viễn thụng Khoa Cụng nghệ đó giảng dạy cho chỳng em những kiếnthức về chuyờn mụn, để chỳng em thực hiện tốt đồ ỏn Kỹ thuật số này Đõy là lần đầu
em được ỏp dụng những kiến thức đó học vào thực tế, do kiến thức cũn hạn chế nờn
đồ ỏn này khụng thể trỏnh được những thiếu sút, Vỡ vậy em rẩt mong được sự chỉ bảocủa cỏc thầy cụ và những ý kiến đúng gúp của cỏc bạn
Trang 3Đặ biệt em xin chân thành cảm ơn thầy giáo Đặng Thái Sơn đã nhiệt tình giúp đỡ em hoàn thành đề tài này!
Em xin chân thành cảm ơn !
Vinh, ngày…Tháng….Năm 2009
CHƯƠNG 1: Tổng quan về vi điều khiển P89V51RD2
I.Giới thiệu về vi điều khiển.
P89V51RD2 là một hệ vi tính 8-bit đơn chip CMOS, có hiệu suất cao, công suất tiêu thụ thấp và có 4k byte bộ nhớ ROM Flash xoá được, lập trình được.Chip này được sản xuất dựa trên công nghệ nhớ không mất nội dung, có độ tích hợp cao của ATmel Và nó cũng tương thích với các chuẩn của công nghệ MCS-51
Sơ đồ khối của P89V51RD2
Trang 4
Hình 1.1 Sơ đồ khối của P89V51RD2
Những đặc điểm của P89V51RD2
64 Kbyte code flash
1 Kbyte ram nội
32 đường xuất nhập (4 Port)
Trang 51.1.1 Sơ đồ các chân
Hình 1.2 sơ đồ chân của P89V51RD2
1.1.2 Chức năng của các chân.
IC P89V51RD2 có tất cả 40 chân, chia làm 4 Port, mỗi Port 8 chân, và
các chân chức năng khác Cụ thể như sau:
Port 0 gồm 8 chân, từ chân 32 đến chân 39, nó có hai chức năng:
Chức năng xuất nhập: Các chân này được dung để nhận tin hiệu từ ngoài
vào vi điều khiển hoặc để xuất tín hiệu từ vi điều khiển ra ngoài
Chức năng là bus dữ liệu và bus địa chỉ(AD7-AD0): Port này còn
Trang 6với bộ nhớ ngoài, đồng thời P0 còn được dùng để định địa chỉ của bộ nhớ ngoài.
Port 1(P1) :
Port 1 là 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, P1.7 có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần
P1.0/T2: Ngõ vào counter cho Timer/counter2 hoặc ngõ ra cho
Counter/Timer2
P1.1/T2EX: Điều khiển hướng và cạnh kích chức năng Capture cho
Timer/counter2
P1.2/ECI: Ngõ vào xung nhịp Tín hiệu này là nguồn xung nhịp ngoài
cho chức năng PCA
P1.3/CEX0: Ngõ vào xung nhịp cho chức năng Capture/Compare
modul 0
P1.4
SS: Chọn cổng phụ vào cho SPI (Serial Peripheral Interface)
CEX1: Ngõ vào xung nhịp cho chức năng Capture/Compar modul1
Trang 7có dung lượng lớn, cần 2 byte để định địa chỉ của bộ nhớ do byte thấp do P0 đảm nhận, bit cao do P2 đảm nhiệm.
Port 3 (P3):
Port 3 gồm 8 chân chân 10-17, có hai chức năng:
Chức năng xuât nhập
Với mỗi chân có chức năng riêng thứ hai trong bảng sau:
Các chân có chức năng đặc biệt:
CHÂN TÊN CHỨC NĂNGP3.0 RxD Ngõ vào nhận dữ liệu nối tiếpP3.1 TxD Ngõ xuất dữ liệu nối tiếpP3.2 INT0 Ngõ ngắt cứng thứ 0P3.3 INT1 Ngõ ngắt cưng thứ 1P3.4 T0 Ngõ vào của timer/Counter thứ 0P3.5 WR Ngõ điều khiển nghi dữ liệu lên bộ nhớ ngoài P3.7 RD Ngõ điều khiển đọc dữ liệu từ bộ nhớ ngoài
Chân RESET (RST)
Ngõ vào RST ở chân 9, là ngõ vao Reset, dung để thiết lập rạng thái ban đầu cho vi điều khiển.Hệ thống sẽ được thiết lập lại các giá trị ban đầu nếu ngõ này ở mức 1 tối thiểu 2 chu kỳ máy
Chân XTAL1 và XTAL2
Hai chân này ở vị trí 18 và 19, được sử dụng để nhận nguồn xung clock từ bên ngoài để hoạt động, thường được ghép nối với thạch anh và các tụ để tạo nguồn xung clock ổn định
Chân PSEN (chân cho phép bộ nhớ chương trình)
PSEN: (program store enable) Là chân thứ 29 Tín hiệu được xuất ra ở
chân này dung để truy xuất bộ nhớ chương trình ngoài Chân này thường đượcnối với chân OE (output enable) của ROM ngoài
Khi vi điều khiển làm việc với chương trình ngoài, chân này sẽ phat ra tìn hiệu hoạt động ở mức thấp và được kích hoạt 2 lần trong một chu kỳ máy
Khi thực thi một chương trình ở ROM nội, chân này được duy trì ở mức
Trang 8 Chân ALE/PROG : (Chân 30, chân cho phép chốt địa chỉ)
Khi vi điều khiển truy xuất bộ nhớ ngoài, P0 vừa có chưc năng là bus địa chỉ, vừa có chức năng là bus dữ liệu, do đó phải tách các đường dữ liệu
và đường địa chỉ Tín hiệu ở chân ALE dung làm tín hiệu điều khiển để giải
đa hợp các đường địa chỉ và các đường dữ liệu khi kết nối chúng với IC chốt
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động đưa vào vi điều khiển, Như vạy có thể dùng tín hiệu ở ngõ ra ALE làm xung clock cung cấp cho các phần khác của hệ thống
Do lý do trên, chíp P89V51RD2 có không gian bộ nhớ riêng cho chươngtrình và dữ liệu Cả bộ nhớ chương trình và bộ nhớ dữ liệu đều nằm trongchip Tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằngcách sử dụng các chip nhớ bên ngoài với dung lượng tối đa là 64kbyte cho bộnhớ chương trình và 64kbyte cho bộ nhớ dữ liệu
1.2.2 Bộ nhớ chương trình (ROM):
Bộ nhớ chơng trình lu giữa chơng trình điều khiển chip P89V51RD2 Có
Trang 92 vùng nhớ nội flash trong MCU, block 0 có 64Kbytes và đợc tổ chức thành
512 sector, mỗi sector chứa 128bytes Block 1 chứa chơng trình ISP/IAP và đợckích hoạt khi chọn kết hợp bit reset mềm (SWR) và bit chọn bank (BSEL)
Sau khi reset, CPU bắt đầu thực hiện chơng trình từ địa chỉ 0000H Khichơng trình lớn quá kích thớc bộ nhớ chơng trình bên trong chip, chơng trìnhnày phải đợc nạp vào bộ nhớ chơng trình ngoài Nếu chơng trình nằm trongROM nội, chân /EA của P89V51RD2 phải đợc treo lên 5V Nếu chơng trình ởROM ngoài, chân /EA phải nối đất Việc truy xuất chơng trình ở bộ nhớ ngoàiphải kết hợp với chân tín hiệu truy xuất bộ nhớ ngoài /PSEN
1.2.3 Bộ nhớ dữ liệu, bộ nhớ RAM
P89V51RD2 có 1 Kbytes ram ở bên trong chip RAM trong P89V51RD2 baogồm nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit,các bank thanh ghi và các thanh ghi chức năng đặc biệt
Hai đặc tính cần chú ý là:
- Các thanh ghi và các port xuất nhập đã được định vị (xác định) trong bộ nhớ và
có thể truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác
- Ngăn xếp bên trong Ram nội nhỏ hơn so với Ram ngoại trong các bộMicrocont r rollekhác
Ram bên trong P89V51RD2 được phân chia nh sau:
• Các bank thanh ghi có địa chỉ từ 00H đến 1FH
• Ram địa chỉ hóa từng bít có địa chỉ từ 20H - 2FH
• Ram đa dụng từ 30H - 7FH
• Các thanh ghi chức năng đặc biệt từ 80H - FFH
Trang 10Hình 1.3 Sơ đồ khối bộ nhớ data trên chip P89V51RD2
1.2.3.1 Cấu trúc RAM trong vi điều khiển.
Trang 11 Các bank thanh ghi
Các bank thanh ghi có địa chỉ byte từ 00H đến 1FH, có 8 thanh ghi trong mỗi bank, các thanh ghi được đặt tên từ R0-R7, các thanh ghi này được đặt mặc định trong bank 1 Có 4 bank thanh ghi và tại mỗi thời điểm chỉ có một bank thanh ghi được truy xuất với các thanh ghi từ R0 đến R7, để thay đổi việc truyxuất các thanh ghi trên các bank thanh ghi, người dùng phải thay đổi giá trị các bit chọn bank trong thanh ghi trạng thái PSW bằng các câu lệnh trong chương trình
Các lệnh dùng các thanh ghi từ R0 đến R7 mất khoảng không gian lưu trữ
ít hơn và thời gian thực hiện nhanh hơn so với các lệnh dùng các ô nhớ RAM
Trang 12khác, ngoài ra các thanh ghi này còn có thêm một số chức năng đặc biệt khác,
vì lí do này các dữ liệu sử dụng thường thường được người viết chương trình đưa vào lưu trong các thanh ghi này
Ngoài ra, có thể truy xuất thanh ghi trên các bank thanh ghi như với các ô nhớbình thường khác Ví dụ: nguời dùng có thể truy xuất đến thanh ghi R7 bằng ônhớ 07H
Vùng RAM truy xuất từng bit
Trên RAM nội có 210 ô nhớ bit được định địa chỉ và có thể truy xuất đến từng bit, các bit nhớ này cũng được định địa chỉ bằng các số thập lục phân- số Hex Trong đó có 128 bit nằm trong các ô nhớ có địa chỉ byte từ 20H đến 2FH, các bit nhớ còn lại chứa trong nhóm thanh ghi có chức năng đặc biệt Mặc dù các bit nhớ và ô nhớ (byte) cùng được định bằng số Hex, tuy nhiên chúng sẽ được nhận dạng là địa chỉ bit hay địa chỉ byte thông qua các câu lệnh tương ứng dành cho các bit nhớ hoặc các ô nhớ này
Các thanh ghi có chức năng đặc biệt
Các thanh ghi này được định địa chỉ byte, một số được định thêm địa chỉ bit, có địa chỉ của các thanh ghi này nằm trong khoảng 80H đến FFH Các thanh ghi đặc biệt này này được dùng để xác lập trạng thái hoạt động cần thiết cho Vi điều khiển
Các thanh ghi có chức năng đặc biệt
Các thanh ghi này được định địa chỉ byte, một s ố được định thêm địa chỉ bit,
có địa chỉ của các thanh ghi này nằm trong khoảng 80H đến FFH Các thanh ghi đặc biệt này này được dùng để xác lập trạng thái hoạt động cần thiết cho
Vi điều khiển
Trang 13 Tìm hiểu một số thanh ghi có chức năng đặc biệt .
• Các thanh ghi có địa chỉ 80H, 90H, A0H, B0H:
Đây là các thanh ghi kiểm tra và điều khiển mức logic của các Port, có thể truy xuất và xác lập các thanh ghi này với địa chỉ byte hoặc tên riêng lần lượt
• Con trỏ ngăn xếp SP ( Địa chỉ 81H )
Con trỏ ngăn xếp SP là một thanh ghi có địa chỉ 81H, giá trị của nó được
tăng,giảm tự động khi thực hiện các lệnh PUSH, CALL,POP con trỏ SP dùngquản lí và xử lí các nhóm dữ liệu liên tục.Giá trị mặc định của SP là 07H
• Con trỏ dữ liệu DPTR
Con trỏ dữ liệu DPTR là thanh ghi 16 bit duy nhất của Vi điều khiển được tạo thành từ hai thanh ghi DPL (byte thấp-địa chỉ byte 82H) và DPH (byte cao-địa chỉ byte 83H) Hai thanh ghi DPL và DPT có thể truy xuất độc lập bởi người sử dụng Con trỏ dữ liệu DPTR thường được sử dụng khi truy xuất dữ liệu từ bộ nhớ ROM hoặc bộ nhớ từ bên ngoài
• Thanh ghi trạng thái chương trình PSW (địa chỉ byte D0H)
BIT
ĐỊA CHỈ BIT KÝ HIỆU CHỨC NĂNG
Trang 14PSW.7 D7H C hoặc Cy Cờ nhớ
PSW.6 D6H AC Cờ nhớ phụ
PSW.4 D4H RS1 Bit lựa chọn dãy thanh ghi
PSW.3 D3H RS0 Bit lựa chọn dãy thanh ghi
PSw.2 D2H 0V Cờ tràn với phép tính liên quan đến số nhi
phân có dấu
PSW.1 D1H - Chưa được thiết kế để sử dụng
• Các thanh ghi Port
Các Port xuất nhập của 8051 bao gồm Port 0 tại địa chỉ 80H, Port 1 tạiđịa chỉ 90H, Port 2 tại A0H và Port 3 tai B0H Các Port 0, 2, 3 không được dung để xuất nhập nếu ta sử dụng thêm bộ nhớ ngoài hoặc nếu có một số đặcntinhs đặc biệt của 8051 được sử dụng (như là ngắt, Port nối tiếp,…) P1.2 đến P1.7 thì ngược lại, luôn là các đường xuất nhập đa mục đích hợp lệ
Tất cả các Port đều được định địa chỉ từng bit nhằm cung cấp khả năng giao tiếpmạnh
• Các thanh ghi định thời
8951 có 2 bộ đếm định thời (Timer/counter) 16 bit để định các khoảng thời gian hoặc để đếm các sự kiện Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH (TH0, byte cao); Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp)
và 8DH (TH1, byte cao)
Hoạt động của bộ đếm định thời được thiết lập bởi thanh ghi chế độ định thời TMOD (Timer mode register) ở địa chỉ 89H và thanh ghi điều khiển định thời TCON (Timer control register) có địa chỉ 88H Chỉ có TCON được định địa chỉ từng bit
• Các thanh ghi của Port nối tiếp
Bên trong 8951 có một Port nối tiếp để truyền thông với các thiết bị đầu cuố
Trang 15hoặc modem, hoặc để giao với các ic khác có mạch giao tiếp nối tiếp (Như cácthanh ghi chăng hạn) Một thanh ghi được gọi là bộ đệm dữ liệu nối tiếp SBUF( Serial data bufer) ở địa chỉ 99H lưu giữ dữ liệu truyền đi hoặc dữ liệu nhận về,việc ghi lên SBUF sẽ nạp dữ liệu để truyền và việc đọc SBUF sẽ lấy dữ liệu đãnhận được Các chế độ hoạt động khác nhau được lập trình thông qua thanh ghiđiều khiển Port nối tiếp SCON (serial Port control register) ở địa chỉ 98H, thanhghi này được định địa chỉ từng bit.
• Các thanh ghi ngắt
8951 có một cấu trúc ngắt với 2 mức ưu tiên và 5 nguyên nhân ngắt Các ngắt sẽ bị vô hiệu hóa khi reset hệ thống và sau đó được cho phép ghi vào thanh ghi cho phép ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP (interrupt prioriry register) ở địa chỉ B8H Cả hai thanh ghi này điều được định địa chỉ từng bit
• Thanh ghi điều khiển nguồn
Thanh ghi điều khiển nguồn PCON (Power control register) có địa chỉ 87H chứa các bit điều khiển
1.2.4 Bộ nhớ ngoài.
Các bộ vi điều khiển cần có khả năng mở rộng các tài nguyên trên chip Cấutrúc của MCS-51 cho ta khả năng mở rộng không gian nhớ chương trình đến 64K và không gian bộ nhớ dữ liệu đến 64 ROM và RAM được thêm vào khi cần thiết (Khi bộ nhớ cần dùng lớn hơn bộ nhớ trên chip)
PSEN Khi có 1 EPROM ngoài được sử dụng, cả 2 Port 0 và Port 2 đều không
1.3 Kết nối Với phần cứng của một số chân cơ bản
1.3.1 Kết nối trên hai chân XTAL1 và XTAL2
Mạch dao động được đưa vào 2 chân nàythông thường được kết nối với dao động thạch anh như sau:
Trang 16
Chú ý: C1, C2 =20pF- 30pF dùng để ổn định dao động cho thạch anh
Hoặc có thể cấp xung tín hiệu xung clock từ một mạch tạo dao động nào đố vào
vi điều khiển theo cách sau:
NC: Để trống
1.3.2 Kết nối chân RESET – Chân 9
Việc kết nối chân RESET đảm bảo hệ thống bắt đầu làm việc khi vi điều khiển được cấp điện, hoặc đang hoạt động mà hệ thống bị lỗi cần tác động cho
Trang 17vi điều khiển hoạt động trở lại, hoặc do người sử dụng muốn quay về trạng thái ban đầu.Vi vậy chân RESET được kết nối như sau:
Chú ý: Với vi điều khiển sử dụng thạch anh có tần số 12MHz thường sử dụng tụ C=10uF và R=10K
II Lập trình cho vi điều khiển P89V51DR2
2.1 Tổng quan về ngôn ngữ lập trình ASSEMBLY.
Assembly là một ngôn ngữ lập trình cấp thấp gần với ngôn ngữ máy, chươngtrình sau khi viết bằng assembly cần được chuyển đổi qua mã lệnh (hay còn gọi là
mã máy) của vi điều khiển, quá trình chuyển đổi được thực hiện bằng chương trìnhdịch Assembler Các mã lệnh sau đó được nạp vào Rom của vi điều khiển để thực hiện chương trình Chương trình dịch Assembler được dùng phổ biến hiện nay là chương trình Macro Assembler sử dụng trên Dos
Để soạn thảo chương trình có thể sử dụng Notepal hoặc bất cứ chương trình soạnthảo có sử dụng bộ kí tự chuẩn ASCII và lưu tên đuôi như sau: "tên.asm" Ngoài ra
có thể sử dụng các phần mềm hỗ trợ soạn thảo dành riêng cho vi điều khiển đã tíchhợp sẵn chương trình dịch Assembler như: Reads51,…
Trang 18Khi giới thiệu các câu lệnh viết bằng hợp ngữ, các câu lệnh cần được bao quát tất
cả các trường hợp do đó có một số qui ước khi thiết lập cú pháp các lệnh như sau:
Tên qui
ước Tên qui ước đại diện cho
Ví dụ Lệnh sửdụng tên quiước
Ví dụ khi sử dụng
Rn
Các thanh ghi ở các Bank thanh ghi Khi sử dụng thay n bằng các số từ 0 đến 7:
Ô nhớ có địa chỉ là direct, direct
được thay bằng địa chỉ từ 00H đến FFH khi viết chương trình Mov A,direct Mov A,30H
@Ri
Ô nhớ có địa chỉ gián tiếp, đây là
địa chỉ của một ô nhớ, địa chỉ này được xác định gián tiếp bằng giá trị của thanh ghi R0 hoặc R1 (chỉ được
sử dụng hai thanh ghi R0 hoặc R1 để lưu giá trị này)
Mov A,@Ri Mov A,@R1
2.2 Tập lệnh trong Vi Điều Khiển.
Tập lệnh trong Vi điều khiển được chia làm 5 nhóm:
1 Nhóm lệnh di chuyển dữ liệu
2 Nhóm lệnh số học
3 Nhóm lệnh logic
4 Nhóm lệnh rẽ nhánh
Trang 19ADD A,#data (2,1):Cộng dữ liệu tức thời vào A.
ADD A,Rn (1,1): Cộng thanh ghi và cờ nhớ vào A
ADD A,data (2,1): Cộng trực tiếp byte dữ liệu và cờ nhớ vào A
ADDC A,@Ri (1,1): Cộng gián tiếp nội dung RAM và cờ nhớ vào A
ADDC A,#data (2,1): Cộng dữ liệu tức thời và cờ nhớ vào A
SUBB A,Rn (1,1):Trừ nội dung thanh ghi A cho nội dung thanh ghi Rn và cờnhớ
SUBB A,data (2,1): Trừ trực tiếp A cho một số và cờ nhớ
SUBB A,@Ri (1,1): Trừ gián tiếp A cho một số và cờ nhớ
SUBB A,#data (2,1): Trừ nội dung A cho một số tức thời và cờ nhớ
INC A (1,1): Tăng nội dung thanh ghi A lên 1
INC Rn (1,1): Tăng nội dung thanh ghi Rn lên 1
INC data (2,1): Tăng dữ liệu trực tiếp lên 1
INC @Ri (1,1): Tăng gián tiếp nội dung vùng RAM lên 1
DEC A (1,1): Giảm nội dung thanh ghi A xuống 1
DEC Rn (1,1): Giảm nội dung thanh ghi Rn xuống 1
DEC data (2,1): Giảm dữ liệu trực tiếp xuống 1
DEC @Ri (1,1): Giảm gián tiếp nội dung vùng RAM xuống 1
INC DPTR (1,2): Tăng nội dng con trỏ dữ liệu lên 1
MUL AB (1,4): Nhân nội dung thanh ghi A với nội dung thanh ghi B
DIV AB (1,4): Chia nội dung thanh ghi A cho nội dung thanh ghi B
Trang 20DA A (1,1): hiệu chỉnh thập phân thanh ghi A.
2.2.2 Nhóm lệnh logic
CPL A (1,1): Bù nội dung thanh ghi A
CPL bit (2,1): Bù một bit trực tiếp
RL A (1,1): Quay trái nội dung thanh ghi A
RLC A (1,1): Quay trái nội dung thanh ghi A qua cờ nhớ
RR A (1,1): Quay phải nội dung thanh ghi A
RRC A (1,1): Quay phải nội dung thanh ghi A qua cờ nhớ
SWAP (1,1): Quay trái nội dung thanh ghi A 1 nibble (1/2byte) ANL A,Rn (1,1): AND nội dung thanh ghi A với nội dung thanh ghi Rn
ANL A,data (2,1): AND nội dung thanh ghi A với dữ liệu trực tiếp
ANL A,@Ri (1,1): AND nội dung thanh ghi A với dữ liệu gián tiếp trongRAM
ANL A,#data (2,1): AND nội dung thanh ghi với dữ liệu tức thời
ANL data,A (2,1): AND một dữ liệu trực tiếp với A
ANL data,#data (3,2): AND một dữ liệu trực tiếp với A một dữ liệu tức thời.ANL C,bit (2,2): AND cờ nhớ với 1 bit trực tiếp
ANL C,/bit (2,2): AND cờ nhớ với bù 1 bit trực tiếp
ORL A,Rn (1,1): OR thanh ghi A với thanh ghi Rn
ORL A,data (2,1): OR thanh ghi A với một dữ liệu trực tiếp
ORL A,@Ri (1,1): OR thanh ghi A với một dữ liệu gián tiếp
ORL A,#data (2,1): OR thanh ghi A với một dữ liệu tức thời
ORL data,A (2,1): OR một dữ liệu trực tiếp với thanh ghi A
ORL data,#data (3,1) :OR một dữ liệu trực tiếp với một dữ liệu tức thời.ORL C,bit (2,2): OR cờ nhớ với một bit trực tiếp
ORL C,/bit (2,2): OR cờ nhớ với bù của một bit trực tiếp
Trang 21XRL A,Rn (1,1): XOR thanh ghi A với thanh ghi Rn.
XRL A,data (2,1): XOR thanh ghi A với mộ dữ liệu trực tiếp
XRL A,@Ri (1,1): XOR thanh ghi A với một dữ liệu gián tiếp
XRL A,#data (2,1): XOR thanh ghi A với mộ dữ liệu tức thời
XRL data,A (2,1): XOR một dữ liệu trực tiếp với thanh ghi A
XRL data,#data (3,1): XOR một dữ liệu trực tiếp với một dữ liệu tức thời.SETB C (1,1): Đặt cờ nhớ
SETB bit (2,1): Đặt một bit trực tiếp
2.2.3 Nhóm lệnh chuyển dữ liệu
MOV A,Rn (1,1):Chuyển nội dung thanh ghi Rn vào thanh ghi A
MOV A,data (2,1): Chuyển dữ liệu trực tiếp vào thanh ghi A
MOV A,@Ri (1,1): Chuyển dữ liệu gián tiếp vào thanh ghi A
MOV A,#data (2,1): Chuyển dữ liệu tức thời vào thanh ghi A
MOV Rn,data (2,2): Chuyển dữ liệu trực tiếp vào thanh ghi Rn
MOV Rn,#data (2,1): Chuyển dữ liệu tức thời vào thanh ghi Rn
MOV data,A (2,1): Chuyển nội dung thanh ghi A vào một dữ liệu trực tiếp.MOV data,Rn (2,2): Chuyển nội dung thanh ghi Rn vào một dữ liệu trựctiếp
MOV data,data (3,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu trực tiếp.MOV data,@Ri (2,2): Chuyển một dữ liệu gián tiếp vào một dữ liệu giántiếp
MOV data,#data (3,2): Chuyển một dữ liệu tức thời vào một dữ liệu trực tiếp.MOV @Ri,A (1,1): Chuyển nội dung thanh ghi A vào một dữ liệu giántiếp
MOV @Ri,data (2,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu giántiếp
Trang 22MOV DPTR,#data (3,2): Chuyển một hằng 16 bit vào thanh ghi con trỏ dữ liệu.MOV C,bit (2,1): Chuyển một bit trực tiếp vào cờ nhớ.
MOV bit,C (2,2): Chuyển cờ nhớ vào một bit trực tiếp
MOV A,@A+DPTR (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là
@A+DPRT vào thanh ghi A
MOVC A,@A+PC(1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là
@A+PC vào thanh ghi A
MOVX A,@Ri (1,2): Chuyển dữ liệu ngoài (8 bit địa chỉ) vào thanh ghi A.MOVX A,@DPTR (1,2): Chuyển dữ liệu ngoài (16 bit địa chỉ) vào thanhghi A
MOVX @Ri,A (1,2): Chuyển nội dung A ra dữ liệu ngoài (8 bit địa chỉ).MOVX @DPTR,A (1,2): Chuyển nội dung A ra dữ liệu bên ngoài (16 bitđịa chỉ)
PUSH data (2,2): Chuyển dữ liệu trực tiếp vào ngăn xếp và tăng SP.POP data (2,2): Chuyển dữ liệu trực tiếp vào ngăn xếp và giảmSP
XCH A,Rn (1,1): Trao đổi dữ liệu giữa thanh ghi Rn v2 thanh ghi A.XCH A,data (2,1): Trao đổi giữa thanh ghi A và một dữ liệu trựctiếp
XCH A,@Ri (1,1): Trao đổi giữa thanh ghi A và một dữ liệu giántiếp
XCHD A,@R (1,1): Trao đổi giữa nibble thấp (LSN) của thanh ghi
A và LSN của dữ liệu gián tiếp
2.2.4 Nhóm lệnh chuyền điều khiển
ACALL addr11 (2,2): Gọi chương trình con dùng địa chì tuyệt đối.LCALL addr16 (3,2): Gọi chương trình con dùng địa chỉ dài
RET (1,2): Trở về từ lệnh gọi chương trình con
Trang 23AJMP addr11 (2,2): Nhảy tuyệt đối.
JMP @A+DPTR (1,2): Nhảy gián tiếp từ con trỏ dữ liệu
JNC rel (2,2): Nhảy nếu cờ nhớ không được đặt
JB bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt
JNB bit,rel (3,2):Nhảy tương đối nếu bit trực tiếp không được đặt
JBC bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt , rồi xóa bit.CJNE A,data,rel (3,2): So sánh dữ liệu trực tiếp với A và nhảy nếu khôngbằng
CJNE A,#data,rel (3,2): So sánh dữ liệu tức thời với A và nhảy nếu khôngbằng
CJNE Rn,#data,rel (3,2): So sánh dữ liệu tức thời với nội dung thanh ghi
Rn và nhảy nếu không bằng
CJNE @Ri,#data,rel (3,2): So sánh dữ liệu tức thời với dữ liệu gián tiếp vànhảy nếu không bằng
DJNZ Rn,rel (2,2): Giản thanh ghi Rn và nhảy nếu không bằng.DJNZ data,rel (3,2): Giảm dữ liệu trực tiếp và nhảy nếu không bằng
2.2.5 Các lệnh rẽ nhánh
Có nhiều lệnh để điều khiển lên chương trình bao gồm việc gọi hoặc trả lại
từ chương trình con hoặc chia nhánh có điều kiện hay không có điều kiện Tất
cả các lệnh rẽ nhánh đều không ảnh hưởng đến cờ Ta có thể định nhản cầnnhả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ớivào đúng khẩu lệnh đã đưa ra
Trang 24Condition Jump If Not <Condition> Jump If <Condition>
Direct = 0 DJNZ direct, rel
A # direct CJNE A, direct, rel
A # #data CJNE A, #data, rel
Rn # #data CJNE Rn, #data, rel
@Ri # #data CJNE @Ri, #data, rel
Nhảy không điều kiện: ALJMP, LJMP, SJMP
Trang 25Chương 2 THIẾT KẾ ROBOT
2.1 Cảm biến nhận biết vạch
Có thể nói đây là phần quan trọng nhất cả robot dò đường, quyết định khảnăng di chuyển của robot Nếu bộ phận này hoạt động không chính xác, robot
sẽ bị lạc đường Như vậy, để có thể hoàn thành mục tiêu là đi đúng đường đi
đã định trước, bộ phận này phải có khả năng nhận biết vạch trắng trên nềnxanh, đồng thời có khả năng nhận biết được các ngã tư để đưa về bộ điềukhiển nhằm cập nhật quãng đường đã đi được, từ đó sẽ có quyết định rẽ trái,phải hay đi thẳng
2.1.1 Nguyên lý chung
Chúng ta đều biết rằng ánh sáng bao gồm 7 màu cơ bản: đỏ, cam, vàng, lục,lam, tím, xám, trắng Và nếu 7 màu kết hợp lại sẽ được ánh sáng trắng Sở dĩchúng ta có thể thấy vật này màu đỏ, vật kia mày vàng là do khi ánh sáng trắngchiếu tới, những ánh sáng màu khác bị hấp thụ, chỉ còn những ánh sáng màu đỏ( hay vàng) là bị phản xạ lại Mắt chúng ta thu nhận được những ánh sáng màu này
và chúng ta nhận biết được màu sắc của vật
Dựa vào nguyên lý trên, người ta đã cho ra đời những cảm biến nhận biết màusắc Những cảm biến này có thể nhận biết được một hoặc nhiều màu sắc khácnhau Tuy nhiên những cảm biến này khá đắt và sử dụng chúng vào bài toán dòđường cho robot năm 2009 có lẽ là một sự lãng phí Rõ ràng với môi trường dichuyển của robot đã nêu ở phần 1, ta sẽ chỉ cần một cảm biến nhận biết được nơinào sáng, nơi nào tối là đủ Với những vạch trắng đó sẽ là nơi sáng, với nền xanh
đó sẽ là nơi tối và nhiệm vụ của robot là sẽ đi theo những vạch sáng đó Chúng ta
có thể làm ra các cảm biến này và chất lượng cũng ở mức chấp nhận được Để có
Trang 26chất lượng tốt hơn như có khả năng chống nhiễu chẳng hạn, có lẽ chỉ còn cáchchọn những cảm biến chuyên dụng nhưng giá thành rất cao
Nếu ta dùng ánh sáng hồng ngoại thì cũng phải dùng bộ phận thu hồng ngoại
Hình 2.1 Nguyên tắc nhận biết vạch màu dùng ánh sáng hồng ngoại.
Cảm biến hồng ngoại gồm một LED phát hồng ngoại (infrared emitter)và mộttransistor thu hồng ngoại (infrared phototransistor)
Hình 2.2 Nguyên lý thu dùng ánh sáng hồng ngoại
Theo trên, chúng ta nhận thấy rằng mạch điện khá đơn giản, tuy nhiên mạchnày rất dễ bị nhiễu với ánh sáng tự nhiên và ánh đèn vì vậy ta phải che chắn