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...
94 trang |
Chia sẻ: hunglv | Lượt xem: 1302 | Lượt tải: 1
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.
4s 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 00H07H
01=Bank 1; address 08H0FH
10=Bank 2; address 10H17H
11=Bank 3; address 18H1FH
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 (2s) để 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,570mm.
Đầ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,5200Hz.
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ị 162 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ụ 202, 404 ….
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 character2 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:
- TRINH BAY.pdf