n Thit K Mch S GV Hng Dn: KS.ng Thỏi Sn
MC LC
Trang
LI NểI U
3
Chơng 1. TổNG QUAN Về Vi điều khiển P89V51RD2
4
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.1.1. Sơ đồ chân P89V51RD2 5
1.1.2. Chức năng các chân 5
1.2. Cấu trúc bên trong vi điều khiển P89V51RD2. 8
1.2.1. Tổ chức bộ nhớ. 8
1.2.2. B nhớ ROM
8
1.2.3. B nhớ RAM
9
1.3. Kết nối với phần cứng của một số chân cơ bản 15
1.3.1. Kết nối trên hai chân XTAL1 và XTAL2 15
1.3.1. Kết nối trên chân RESET 16
II. Lập trình cho vi điều khiển p89v51 17
2.1. Tổng quan về ngôn ngữ lập trình ASEMBLY 17
2.1.2. Một số quy ớc trong lập tình ASEMBLY 17
2.1.3. Tập lệnh trong Vi Điều khiển MCS-51 18
Chơng 2. thiết kế robot
25
2.1. Cảm biến nhận biết vạch trắng. 25
2.1.1. Nguyên lý chung. 25
2.1.2 Cảm biến quang. 25
2.2. Mạch cầu H và ứng dụng mạch cầu H trong điều khiển động cơ. 28
2.2.1. Sơ đồ cấu tạo và nguyên lý hoạt động của cầu H. 28
2.2.1.1. Relay H-Bridges. 29
2.2.1.2. Cầu H bán dẫn 30
2.2.1.3. Cầu H dùng Relay kết hợp dùng FET 30
2.2.1.4.Phơng phát điều chế xung PWM điều khiển tốc độ động cơ DC 31
2.4. Thiết kế theo từng khối 32
2.4.1. Khối nguồn. 33
2.4.2. Khối điều khiển. 34
2.4.3.Khối điều xung điều khiển động cơ. 35
2.4.4. Khối cảm biến phát hiện vạch trắng. 36
2.4.5. Khối hiển thị. 37
2.5. Thiết kế, chế tạo mạch điện, giải thuật và chơng trình cho
robot
38
2.5.1. Sơ đồ nguyên lý phần điều khiển. 38
2.5.2. Sơ đồ nguyên lý phần công suất. 39
2.5.3. Giải thuật và chơng trình cho robot. 40
2.5.3.1. Giải thuật. 40
2.5.3.2. Chơng trình điều khiển robot 43
Kết luận
50
Tài liệu tham khảo
51
_____________________________________________________________________________
_
SV Thc hin: Hong Th Mnh 47K - TVT
1
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
Lờ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 em
hiể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ến
thứ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ảo
của các thầy cô và những ý kiến đóng góp của các bạn.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
2
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
Đặ 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
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
3
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
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).
3 bộ Timer/counter 16 bit.
Có khả năng Giao tiếp truyền dữ liệu nôi tiếp.
Tần số hoạt động từ: 0Hz - 40Mhz.
Bộ xử lý bit (thao tác trên từng bit riêng rẽ), co 210 bit có thể truy xuất
đến từng bit.
I.1 Cấu trúc bên ngoài của vi điều khiển P89V51RD2.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
4
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
1.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:
Chân VCC:
Chân số 40 là chân cấp nguồn cho vi điều khiển. Nguồn điện cấp là 5V.
Chân GND :
Chân số 20 là chân nối đất.
Port 0(P0):
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
làm nhiệm vụ lấy dữ liệu từ ROM hoặc RAM ngoại nếu có kết nối
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
5
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
vớ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
modul
P1.5
MOSI: Phục vụ SPI.
CEX2: Ngõ vào xung nhịp cho chức năng Capture/Compare modul
2.
P1.6
MISO: Phục vụ SPI.
CEX3: Ngõ vào xung nhịp cho chức năng Capture/Compare
P1.7
SCK: Phục vụ SPI.
CEX4: Ngõ vào xung nhịp cho chức năng Capture/Compare modul
4.
Port 2(P2):
Port 2 gồm 8 chân, từ chân 21- 28, có hai chức năng:
Chức năng xuất nhập.
Chức năng là bus địa chỉ cao (A8-A15): Khi kết nối vớ bộ nhớ ngoài
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
6
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
có 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ĂNG
P3.0 RxD Ngõ vào nhận dữ liệu nối tiếp
P3.1 TxD Ngõ xuất dữ liệu nối tiếp
P3.2 INT0 Ngõ ngắt cứng thứ 0
P3.3 INT1 Ngõ ngắt cưng thứ 1
P3.4 T0 Ngõ vào của timer/Counter thứ 0
P3.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 được
nố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
không tích cực.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
7
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
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.
Chân EA/VPP:
Chân EA dùng để xác định hướng chương trình thực hiện được lấy từ
ROM nội hay ROM ngoại.
Khi chân EA nối với mức logic 1(+5V) thì vi điều khiển thực hiện
chương trình lấy từ bộ nhớ nội.
Khi chân EA nối với mức logic 0 (0V) thì vi điều khiển thực hiên
chương trình lấy từ bộ nhớ ngoài.
I.2 Cấu trúc bên trong của P89V51RD2
1.2.1 Tổ chức bộ nhớ
Các chip vi điều khiển dùng làm thành phần trung tâm trong các thiết bị
hướng điều khiển. Bộ nhớ thường có dung lượng bé hơn nhiều so với một hệ
vi xử lý. Nó còn không có ổ đĩa và hệ điều hành. Chương trình điều khiển
phải thường trú trong Rom. Do vậy, chương trình vẫn được lưu trữ ngay cả
khi mất điện.
Do lý do trên, chíp P89V51RD2 có không gian bộ nhớ riêng cho chương
trình và dữ liệu. Cả bộ nhớ chương trình và bộ nhớ dữ liệu đều nằm trong
chip. Tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằng
cách sử dụng các chip nhớ bên ngoài với dung lượng tối đa là 64kbyte cho bộ
nhớ chương trình và 64kbyte cho bộ nhớ dữ liệu.
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ó
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
8
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
2 vùng nhớ nội flash trong MCU, block 0 có 64Kbytes và đợc tổ chức thành
512 sector, mỗi sector chứa 128bytes. Block 1 chứa chơng trình ISP/IAP và đợc
kích hoạt khi chọn kết hợp bit reset mềm (SWR) và bit chọn bank (BSEL).
Sau khi reset, CPU bắt đầu thực hiện chơng trình từ địa chỉ 0000H. Khi
chơng trình lớn quá kích thớc bộ nhớ chơng trình bên trong chip, chơng trình
này phải đợc nạp vào bộ nhớ chơng trình ngoài. Nếu chơng trình nằm trong
ROM nội, chân /EA của P89V51RD2 phải đợc treo lên 5V. Nếu chơng trình ở
ROM ngoài, chân /EA phải nối đất. Việc truy xuất chơng trình ở bộ nhớ ngoài
phải kết hợp với chân tín hiệu truy xuất bộ nhớ ngoài /PSEN.
1.2.3. Bộ nhớ dữ liệu, bộ nhớ RAM
P89V51RD2 có 1 Kbytes ram ở bên trong chip. RAM trong P89V51RD2 bao
gồm nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit,
các bank thanh ghi và các thanh ghi chức năng đặc biệt.
Hai đặc tính cần chú ý là:
- Các thanh ghi và các port xuất nhập đã được định vị (xác định) trong bộ nhớ và
có thể truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác.
- Ngăn xếp bên trong Ram nội nhỏ hơn so với Ram ngoại 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.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
9
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
Hì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.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
10
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
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 truy
xuấ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
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
11
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
khá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.
Ví dụ:
mov 05H,#10111111B ; lệnh này thiết lập giá trị cho ô nhớ có địa
chỉ là 05H
JB 05H, nhan01 ; lệnh này liên quan đến trạng thái của bit
nhớ có địa chỉ 05H .
Vùng RAM bình thường
Vùng RAM này có địa chỉ byte từ 30H đến 7FH, dùng để lưu trữ dữ
liệu, được truy xuất theo từng byte
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.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
12
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
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
là P0, P1, P2, P3
tương ứng với các Port xuất. Chẳng hạn để tất cả các chân của Port 0 lên mức
logic 1, cần làm cho các bit của thanh ghi có địa chỉ 80H lên mức 1.
• Thanh ghi A
Thanh ghi A là thanh ghi quan trọng, dùng để lưu trữ các toán hạng và kết quả của
phép tính.
Thanh ghi A có độ dài 8 bits, có địa chỉ là E0H.
• Thanh ghi B
Thanh ghi B ở địa chỉ F0H, được dùng với thanh ghi A để thực hiện các
phép toán số học. Khi thực hiện lệnh chia với thanh ghi A, số dư được lưu
trữ ở thanh ghi B. Ngoài ra thanh ghi B còn được dùng như một thanh ghi
đệm có nhiều chức năng.
• 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ùng
quả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
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
13
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
PSW.7 D7H C hoặc Cy Cờ nhớ
PSW.6 D6H AC Cờ nhớ phụ
PSW.5 D5H FO Cờ 0 hoặc cờ zero
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
PSW.0 D0H P Cờ chẵn lẻ
•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ếp
mạ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ố
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
14
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
hoặc modem, hoặc để giao với các ic khác có mạch giao tiếp nối tiếp (Như các
thanh 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, thanh
ghi 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ấu
trú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:
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
15
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
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
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
16
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
vi đ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ương
trì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ình
dị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ạn
thả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ích
hợp sẵn chương trình dịch Assembler như: Reads51,…
2.1.1. Một số quy ước khi lập trình với ngôn ngữ ASSEMBLER
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
17
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
Khi 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:
R0, R1, R2, R3, R4, R5, R6, R7
Mov A,Rn Mov A,R2
#data
Dữ liệu 8 bit, khi sử dụng data có
thể viết dưới dạng :
số nhị phân (Vd: #00110011b)
số thập lục phân (Vd: #0A6H)
số thập phân (Vd: #21)
Mov A,#data Mov A,#20H
direct
Ô 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.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
18
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
5 Nhóm lệnh xử lí bit .
2.2.1. Nhóm lệnh xử lý số học
ADD A,Rn (1byte, 1 chu kỳ máy): cộng nội dung thanh ghi Rn vào thanh ghi A.
ADD A,data (2,1): Cộng trực tiếp 1 byte vào thanh ghi A.
ADD A,@Ri (1,1): Cộng gián tiếp nội dung RAM chứa tại địa chỉ được
khai báo trong Ri vào thanh ghi A.
ADD A,#data (2,1):Cộng dữ liệu tức thời vào A.
ADD A,Rn (1,1): Cộng thanh ghi và cờ nhớ vào A.
ADD A,data (2,1): Cộng trực tiếp byte dữ liệu và cờ nhớ vào A.
ADDC A,@Ri (1,1): Cộng gián tiếp nội dung RAM và cờ nhớ vào A.
ADDC A,#data (2,1): Cộng dữ liệu tức thời và cờ nhớ vào A.
SUBB A,Rn (1,1):Trừ nội dung thanh ghi A cho nội dung thanh ghi Rn và cờ
nhớ.
SUBB A,data (2,1): Trừ trực tiếp A cho một số và cờ nhớ.
SUBB A,@Ri (1,1): Trừ gián tiếp A cho một số và cờ nhớ.
SUBB A,#data (2,1): Trừ nội dung A cho một số tức thời và cờ nhớ.
INC A (1,1): Tăng nội dung thanh ghi A lên 1.
INC Rn (1,1): Tăng nội dung thanh ghi Rn lên 1.
INC data (2,1): Tăng dữ liệu trực tiếp lên 1.
INC @Ri (1,1): Tăng gián tiếp nội dung vùng RAM lên 1.
DEC A (1,1): Giảm nội dung thanh ghi A xuống 1.
DEC Rn (1,1): Giảm nội dung thanh ghi Rn xuống 1.
DEC data (2,1): Giảm dữ liệu trực tiếp xuống 1
DEC @Ri (1,1): Giảm gián tiếp nội dung vùng RAM xuống 1.
INC DPTR (1,2): Tăng nội dng con trỏ dữ liệu lên 1.
MUL AB (1,4): Nhân nội dung thanh ghi A với nội dung thanh ghi B.
DIV AB (1,4): Chia nội dung thanh ghi A cho nội dung thanh ghi B.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
19
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
DA A (1,1): hiệu chỉnh thập phân thanh ghi A.
2.2.2. Nhóm lệnh logic
CLR C (1,1): Xóa cờ nhớ.
CPL A (1,1): Bù nội dung thanh ghi A.
CPL C (1,1): Bù cờ nhớ.
CPL bit (2,1): Bù một bit trực tiếp.
RL A (1,1): Quay trái nội dung thanh ghi A.
RLC A (1,1): Quay trái nội dung thanh ghi A qua cờ nhớ.
RR A (1,1): Quay phải nội dung thanh ghi A.
RRC A (1,1): Quay phải nội dung thanh ghi A qua cờ nhớ.
SWAP (1,1): Quay trái nội dung thanh ghi A 1 nibble (1/2byte).
ANL A,Rn (1,1): AND nội dung thanh ghi A với nội dung thanh ghi Rn.
ANL A,data (2,1): AND nội dung thanh ghi A với dữ liệu trực tiếp.
ANL A,@Ri (1,1): AND nội dung thanh ghi A với dữ liệu gián tiếp trong
RAM.
ANL A,#data (2,1): AND nội dung thanh ghi với dữ liệu tức thời.
ANL data,A (2,1): AND một dữ liệu trực tiếp với A.
ANL data,#data (3,2): AND một dữ liệu trực tiếp với A một dữ liệu tức thời.
ANL C,bit (2,2): AND cờ nhớ với 1 bit trực tiếp.
ANL C,/bit (2,2): AND cờ nhớ với bù 1 bit trực tiếp.
ORL A,Rn (1,1): OR thanh ghi A với thanh ghi Rn.
ORL A,data (2,1): OR thanh ghi A với một dữ liệu trực tiếp.
ORL A,@Ri (1,1): OR thanh ghi A với một dữ liệu gián tiếp.
ORL A,#data (2,1): OR thanh ghi A với một dữ liệu tức thời.
ORL data,A (2,1): OR một dữ liệu trực tiếp với thanh ghi A.
ORL data,#data (3,1) :OR một dữ liệu trực tiếp với một dữ liệu tức thời.
ORL C,bit (2,2): OR cờ nhớ với một bit trực tiếp.
ORL C,/bit (2,2): OR cờ nhớ với bù của một bit trực tiếp.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
20
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
XRL A,Rn (1,1): XOR thanh ghi A với thanh ghi Rn.
XRL A,data (2,1): XOR thanh ghi A với mộ dữ liệu trực tiếp.
XRL A,@Ri (1,1): XOR thanh ghi A với một dữ liệu gián tiếp.
XRL A,#data (2,1): XOR thanh ghi A với mộ dữ liệu tức thời.
XRL data,A (2,1): XOR một dữ liệu trực tiếp với thanh ghi A.
XRL 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.
CLR A (1,1): Xóa thanh ghi
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ực
tiếp.
MOV data,data (3,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu trực tiếp.
MOV data,@Ri (2,2): Chuyển một dữ liệu gián tiếp vào một dữ liệu gián
tiếp.
MOV data,#data (3,2): Chuyển một dữ liệu tức thời vào một dữ liệu trực tiếp.
MOV @Ri,A (1,1): Chuyển nội dung thanh ghi A vào một dữ liệu gián
tiếp.
MOV @Ri,data (2,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu gián
tiếp.
MOV @Ri,#data (2,1): Chuyển dữ liệu tức thời vào dữ liệu gián tiếp.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
21
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
MOV DPTR,#data (3,2): Chuyển một hằng 16 bit vào thanh ghi con trỏ dữ liệu.
MOV C,bit (2,1): Chuyển một bit trực tiếp vào cờ nhớ.
MOV bit,C (2,2): Chuyển cờ nhớ vào một bit trực tiếp.
MOV A,@A+DPTR (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là
@A+DPRT vào thanh ghi A.
MOVC A,@A+PC(1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là
@A+PC vào thanh ghi A.
MOVX A,@Ri (1,2): Chuyển dữ liệu ngoài (8 bit địa chỉ) vào thanh ghi A.
MOVX A,@DPTR (1,2): Chuyển dữ liệu ngoài (16 bit địa chỉ) vào thanh
ghi A.
MOVX @Ri,A (1,2): Chuyển nội dung A ra dữ liệu ngoài (8 bit địa chỉ).
MOVX @DPTR,A (1,2): Chuyển nội dung A ra dữ liệu bên ngoài (16 bit
địa chỉ).
PUSH data (2,2): Chuyển dữ liệu trực tiếp vào ngăn xếp và tăng SP.
POP data (2,2): Chuyển dữ liệu trực tiếp vào ngăn xếp và giảm
SP.
XCH A,Rn (1,1): Trao đổi dữ liệu giữa thanh ghi Rn v2 thanh ghi A.
XCH A,data (2,1): Trao đổi giữa thanh ghi A và một dữ liệu trực
tiếp.
XCH A,@Ri (1,1): Trao đổi giữa thanh ghi A và một dữ liệu gián
tiếp.
XCHD A,@R (1,1): Trao đổi giữa nibble thấp (LSN) của thanh ghi
A và LSN của dữ liệu gián tiếp.
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.
RET1 (1,2): Trở về từ lệnh gọi ngắt.
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
22
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
AJMP addr11 (2,2): Nhảy tuyệt đối.
LJMP addr16 (3,2): Nhảy dài.
SJMP rel (2,2):Nhảy ngắn.
JMP @A+DPTR (1,2): Nhảy gián tiếp từ con trỏ dữ liệu.
JZ rel (2,2): Nhảy nếu A=0.
JNZ rel (2,2): Nhảy nếu A không bằng 0.
JC rel (2,2): Nhảy nếu cờ nhớ được đặt.
JNC rel (2,2): Nhảy nếu cờ nhớ không được đặt.
JB bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt.
JNB bit,rel (3,2):Nhảy tương đối nếu bit trực tiếp không được đặt.
JBC bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt , rồi xóa bit.
CJNE A,data,rel (3,2): So sánh dữ liệu trực tiếp với A và nhảy nếu không
bằng.
CJNE A,#data,rel (3,2): So sánh dữ liệu tức thời với A và nhảy nếu không
bằng.
CJNE Rn,#data,rel (3,2): So sánh dữ liệu tức thời với nội dung thanh ghi
Rn và nhảy nếu không bằng.
CJNE @Ri,#data,rel (3,2): So sánh dữ liệu tức thời với dữ liệu gián tiếp và
nhảy nếu không bằng.
DJNZ Rn,rel (2,2): Giản thanh ghi Rn và nhảy nếu không bằng.
DJNZ data,rel (3,2): Giảm dữ liệu trực tiếp và nhảy nếu không bằng.
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ần
nhảy tới mà không cần rõ địa chỉ, trình biên dịch sẽ đặt địa chỉ nơi cần nhảy tới
vào đúng khẩu lệnh đã đưa ra.
Nhảy có điều kiện:
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
23
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
Condition Jump If Not <Condition> Jump If <Condition>
C = 1 JNC rel JC rel
Bit = 1 JNB bit, rel JB bit, rel / JBC bit, rel
A = 0 JNZ rel JZ rel
Rn = 0 DJNZ Rn, rel
Direct = 0 DJNZ direct, rel
A # direct CJNE A, direct, rel
A # #data CJNE A, #data, rel
Rn # #data CJNE Rn, #data, rel
@Ri # #data CJNE @Ri, #data, rel
Nhảy không điều kiện: ALJMP, LJMP, SJMP
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
24
Đồ Án Thiết Kế Mạch Số GV Hướng Dẫn: KS.Đặng Thái Sơn
Chươ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ền
xanh, đồng thời có khả năng nhận biết được các ngã tư để đưa về bộ điều
khiể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ắng
chiế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àu
sắ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ác
nhau. 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 di
chuyể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ơi
nà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ó
_____________________________________________________________________________
_
SV Thực hiện: Hoàng Thế Mạnh 47K - ĐTVT
25